title: Budujesz system komputerowy z JS?

text: Niedawno skończyłem tę książkę zatytułowaną The Elements of Computing Systems, w której budujesz działający system komputerowy od podstaw, zaczynając od podstawowych bramek logicznych, poprzez tworzenie własnego kodu maszynowego i języka asemblera, do kodu pośredniego i wreszcie prostego zorientowanego obiektowo język programowania, który kompiluje się do kodu maszyny wirtualnej. Bardzo mi się to podobało i chciałbym stworzyć coś podobnego w JavaScript, ale z większą ilością funkcji. Napisałem już emulator maszyny hakerskiej w JS: // Tworzy nowy obiekt CPU odpowiedzialny za przetwarzanie instrukcji var CPU = function() { var D = 0; // D Zarejestruj var A = 0; // Rejestr var PC = 0; // Licznik programu // Zwraca czy instrukcja jest prawidłowa czy nie var isValidInstruction = function(instrukcja) { if (instrukcja.length != 32) return false; instrukcja = instrukcja.split(""); for (var c = 0; c < instrukcja.length; c++) { if (instrukcja[c] != "0" && instrukcja[c] != "1") return false; } zwróć prawdę; }; // Biorąc pod uwagę dane wejściowe X i Y oraz 6 bitów kontrolnych, zwraca wyjście ALU var computeALU = function(x, y, c) { if (c.length != 6) throw new Error("Może być tylko 6 kontroli ALU bity"); switch (c.join(")) { case "000000": return 0; przypadek "000001": powrót 1; przypadek "000010": powrót -1; przypadek "000011": powrót x; przypadek "000100": powrót y; przypadek "000101": powrót ~x; przypadek "000110": zwróć ~y; przypadek "000111": return -x; przypadek "001000": powrót -y; przypadek "001001": powrót x+1; przypadek "001010": powrót y+1; przypadek "001011": powrót x-1; przypadek "001100": powrót y-1; przypadek "001101": powrót x+y; przypadek "001110": powrót x-y; przypadek "001111": zwróć y-x; przypadek "010000": zwróć x*y; przypadek "010001": powrót x/r; przypadek "010010": powrót y/x; przypadek "010011": zwróć x%y; przypadek "010100": zwróć y%x; case "010101": zwróć x&y; przypadek "010110": zwróć x|y; przypadek "010111": zwróć x^y; przypadek "011000": powrót x>>y; przypadek "011001": zwróć y>>x; przypadek "011010": zwróć x<<y; przypadek "011011": zwróć y<<x; domyślnie: throw new Error("polecenie ALU " + c.join("") + " nierozpoznane"); } }; // Biorąc pod uwagę instrukcję i wartość Memory[A], zwróć wynik var processInstruction = function(instrukcja, M) { if (!isValidInstruction(instrukcja)) wyrzuć new Error("Instrukcja " + instrukcja + " jest nieprawidłowa") ; // Jeśli jest to instrukcja A, ustaw wartość rejestru A na ostatnie 31 bitów if (instruction[0] == "0") { A = parseInt(instruction.substring(1, instrukcja.length), 2); PC++; return { outM: null, adresM: A, writeM: false, pc: PC }; } // W przeciwnym razie mogą to być różne instrukcje else { var typ instrukcji = instrukcja.substr(0, 3); var instrukcjaBody = instrukcja.substr(3); var outputWrite = fałsz; // Instrukcja C - 100 c1, c2, c3, c4, c5, c6 d1, d2, d3 j1, j2, j3 (000..000 x16) if (instructionType == "100") { var parts = [ "a ", "c1", "c2", "c3", "c4", "c5", "c6", "d1", "d2", "d3", "j1", "j2", "j3" ] ; flagi var = {}; for (var c = 0; c < części.długość; c++) flags[części[c]] = instrukcjaBody[c]; // Oblicz wyjście ALU var x = D; var y = (flagi["a"] == "1") ? M:A; var output = computeALU(x, y, [flagi["c1"], flags["c2"], flags["c3"], flags["c4"], flags["c5"], flags["c6" ]]); // Przechowuj wynik if (flags["d1"] == "1") A = output; if (flagi["d2"] == "1") D = wyjście; if (flagi["d3"] == "1") outputWrite = true; // Skocz w razie potrzeby, jeśli ((flags["j1"] == "1" && wyjście < 0) || (flags["j2"] == "1" && wyjście == 0) || (flags[" j3"] == "1" && wyjście > 0)) PC = A; jeszcze PC++; // Zwróć wyjście return { outM: output, addressM: A, writeM: outputWrite, pc: PC }; } else throw new Error("Podpis typu instrukcji " + typ instrukcji + " nierozpoznany"); } }; // Zresetuj procesor, ustawiając wszystkie rejestry z powrotem na zero this.reset = function() { D = 0; A = 0; PC = 0; }; // Ustaw rejestr D na określoną wartość this.setD = function(value) { D = value; }; // Ustaw rejestr A na określoną wartość this.setA = function(value) { A = value; }; // Ustaw PC na określoną wartość this.setPC = function(value) { PC = value; }; // Przetwarza instrukcję i zwraca wynik this.process = function(instrukcja, M) { return processInstruction(instrukcja, M); }; }; Myślałem o dodaniu takich rzeczy jak system plików, dźwięk, łączność z Internetem i wyjście ekranu RGBA (obecnie jest tylko czarno-białe). Ale czy naprawdę byłoby to możliwe? Bo to, o czym myślę, to zaczynam _całkowicie_ od zera. Rozumiem przez to tworzenie własnego kodu maszynowego, a następnie pracowanie aż do języka podobnego do C i tworzenie działających programów i tak dalej.


title: C++ vs Objective-C zasady projektowania seterów i getterów

text: W C++ powiedziano mi, że moje klasy nie powinny mieć getterów i seterów: Robię to źle... wpis na blogu. Z drugiej strony w Objective-C odradza się bezpośrednie użycie ivar, ponieważ gettery pozwalają na leniwe tworzenie instancji, a settery ułatwiają KVO. Dlaczego ta różnica?


title: W jaki sposób można dostarczać wiadomości do witryn (i wysyłać z nich zapytania) z prawdopodobnie złą łącznością, mając wiele usług WCF Soap i Web API?

text: Moja firma prowadzi dochodzenie za pomocą autobusu usługowego. Obecnie mamy uruchomione prototypy NServiceBus i Microsoft Service Bus (on premise). Jestem całkiem zadowolony z możliwości przesyłania wiadomości typu pub-sub i tematów, jakie zapewnia magistrala, ale gubię się w jednym z wymagań, do których się odnoszą. Na przykład: chcą wysyłać zapytania do magistrali usług i "GetAccountInformation()" i oczekiwać wyniku z powrotem w stylu usługi ala WCF i oczekiwać, że magistrala odpowie im wystarczająco, aby wyświetlić wynik w interfejsie użytkownika. Teraz, mając na uwadze powyższe, wspomniałem o następujących rzeczach: 1. Szyna nie może być używana do zapytań, ponieważ wzorzec dziedziczenia wiąże się z „dużym opóźnieniem”, ponieważ nie możemy zagwarantować, że jakikolwiek subskrybent będzie nasłuchiwał w tym momencie. 2. Wygląda na to, że chcą używać autobusu jako „węzła” dla całej komunikacji. Dla mnie to brzmi, jakby potrzebowali przekaźników WCF. Aby skomplikować sprawę, powód, dla którego się tym zajmują, musimy być w stanie dostarczać wiadomości do (i wysyłać zapytania) do stron rozproszonych geograficznie, z których niektóre mają absolutnie okropne problemy z łącznością. Tak więc w tym przypadku pasuje wiadomości. Ponadto wszystkie różne witryny mają wiele usług WCF Soap i Web API. Jak to osiągnąć?


title: Czy XHTML5 jest martwy, czy jest tylko synonimem HTML5?

text: Więc co się stało z XHTML5? http://www.w3.org/TR/html5/ Ta strona jest szkicem zarówno dla xhtml5, jak i html5? Więc nie ma różnicy między tymi doctypem?


title: Dopiero zaczynam w Spring i preferuję konfigurację XML nad adnotacjami. Poprawne czy nie?

text: Po przeczytaniu niektórych dokumentów Springa skłaniam się ku używaniu pliku konfiguracyjnego XML zamiast adnotacji na samych klasach. Moje rozumowanie jest takie, że w ten sposób unikasz wiązania swoich POJO z konkretnym frameworkiem. Na podstawie Twojego doświadczenia ze Springiem, czy istnieją jakieś zalety konfiguracji XML w porównaniu z konfiguracją opartą na adnotacjach, a jeśli nie, jakie są wady?


title: Przechodzenie od najnowocześniejszych do utrzymywania starszych projektów

text: Mam program Access 03 z dużą ilością kodu VBA, który jest w użyciu, a użytkownik końcowy chce nowych funkcji. Bardzo trudno jest mi dodawać nowe funkcje, ponieważ mój mózg chce korzystać z najnowszych technologii .NET, a VBA wcale nie jest nowe. Jak mam zająć się „wycofywaniem” technologii w mojej głowie, aby ograniczyć poziom frustracji do minimum? Również mój szef powiedział, że nie było w budżecie na przepisanie projektu z access i vba na jakąś formę i kombinację SQL (które prawdopodobnie mógłbym wywalić w ciągu kilku dni, czyli tyle samo czasu, ile czuję zajmie mi to wyszukanie i zaimplementowanie w starym systemie).


title: Jakie są kompromisy związane z używaniem „modeli widoku częściowego”?

text: Uświadomiłem sobie swędzenie z powodu jakiegoś nie-DRY kodu związanego z wyświetlaniem klas modelu w aplikacji internetowej (ASP.NET) MVC i myślę o zarysowaniu mojego swędzenia, organizując kod w różnych klasach „częściowego modelu widoku” . Przez model widoku częściowego mam na myśli klasę taką jak klasa modelu widoku w sposób analogiczny do tego, jak widoki częściowe są jak widoki, tj. sposób na enkapsulację typowych informacji i zachowań. Aby wzmocnić „analogię” i pomóc w wizualnej organizacji kodu w moim IDE, myślałem o nazwaniu klas modelu częściowego widoku z prefiksem „_”, np. `_ParentItemViewModel`. Jako nieco bardziej konkretny przykład tego, dlaczego myślę w ten sposób, wyobraź sobie, że mam klasę encji modelu domeny `ParentItem`, a przyjazny dla użytkownika tekst opisowy, który identyfikuje te elementy dla użytkowników, jest na tyle złożony, że chciałbym zawrzeć ten kod w metodzie w klasie `_ParentItemViewModel`, dla której mogę następnie dołączyć obiekt lub kolekcję obiektów tej klasy do wszystkich klas modeli widoków dla wszystkich widoków, które muszą zawierać odniesienie do rodzica przedmiot, np. `ChildItemViewModel` może mieć właściwość `ParentItem` typu klasy `_ParentItemViewModel`, dzięki czemu w moim widoku `ChildItemView` mogę używać `@Model.ParentItem.UserFriendlyDescription` zgodnie z potrzebami, takich jak bułka tarta, linki itp. * * * Jako drugi przykład wyobraź sobie, że mam klasy encji `SomeKindOfBatch`, `SomeKindOfBatchDetail` i `SomeKindOfBatchDetailEvent` oraz klasę modelu widoku i przynajmniej jeden widok dla każdej z tych encji. Ponadto przykładowa aplikacja obejmuje znacznie więcej niż tylko _jakiś-rodzaj-partii_ , więc nie byłoby przydatne ani sensowne dołączanie informacji o określonej partii we _wszystkich_ modelu widoku projektu zajęcia. Ale, tak jak w powyższym przykładzie, mam trochę kodu, powiedzmy do generowania ciągu do identyfikacji jakiejś partii w sposób przyjazny dla użytkownika, i chciałbym móc użyć tego w kilku widokach, powiedzmy jako tekst nawigacyjny lub tekst linku. Jako trzeci przykład opiszę inny wzorzec, którego obecnie używam. Mam klasę encji `Contact`, ale jest to klasa _fat_, z dziesiątkami właściwości i co najmniej tuzinem odwołań do innych klas _fat_. Jednak _wiele_ klas modeli widoku wymaga właściwości do odwoływania się do konkretnego kontaktu, a większość z nich wymaga innych właściwości dla kolekcji kontaktów, np. możliwe kontakty, do których można się odnieść w przypadku jakiegoś związku. Większość z tych klas modeli widoku potrzebuje tylko _małego_ ułamka wszystkich dostępnych informacji kontaktowych, w zasadzie tylko identyfikatora i pewnego rodzaju przyjaznego dla użytkownika opisu (tj. przyjaznej nazwy). Wydaje się, że bardzo przydatne jest posiadanie klasy "częściowego modelu widoku" dla kontaktów, z której mogą korzystać wszystkie inne klasy modeli widoku. Może po prostu źle rozumiem 'klasę modelu widoku' – rozumiem klasę modelu widoku jako zawsze odpowiadającą widokowi. Ale może za dużo zakładam.


title: Projekt niestandardowej tablicy wyników zapytania z leniwym ładowaniem

text: Mam bazę danych, która generuje tablicę wyników zapytania, przy czym każda pozycja tablicy jest obiektem typu hash. Ponieważ każdy element tablicy musi być odwzorowany na dobrze zdefiniowaną klasę, zdecydowałem się zaimplementować adapter tablicy, który rzutuje każdy element na oczekiwaną klasę obiektu. Ten odlew jest wykonywany tylko na życzenie, a nie z góry. Zapytanie natywne zwraca tylko **ids**. Adapter używa ich do ciągnięcia obiektu, który ma być dostosowany. Takie podejście wprowadza opóźnienie czasowe między zapytaniem (natywnym wynikiem zapytania) a dostarczonym elementem końcowym. W tym czasie dowolny element mógł zostać zmodyfikowany w tle przez inny proces. Istnieje również brzydki efekt, w którym różne sekcje tablicy mają różną ostateczną spójność. > Czy to oznacza, że każde zapytanie do bazy danych musi być wyczerpujące (bez leniwego pobierania > wyników)? Jeśli zapytanie powinno być zawsze wyczerpujące, rozważam stworzenie mojego adaptera _smarter_ , zdolnego do wykonywania ograniczonego zapytania dla moich widoków. Jeśli widok zażąda punktu poza początkowym limitem, załaduje więcej wyników, jednak wydaje się, że ma to taką samą spójność problemów z częściami jak wcześniej. > Jak są problemy z leniwym ładowaniem spójności wyników zapytań w przeszłości > problemy rozwiązane?


title: Starszy programista do roli architekta

text: Czasami myślę, że rola architekta to tylko tytuł nadawany komuś, kto przez wiele lat był starszym programistą. Skąd wiesz, że starszy programista jest gotowy do objęcia roli architekta? Czy zgodnie ze standardami rynkowymi starszy programista często przeskakuje do roli architekta, czy też musi być kierownikiem zespołu, a potem architektem? Potrzebuję trochę oświecenia na ten temat.


title: Opensource, licencja niekomercyjna?

text: chcę opublikować moje oprogramowanie na licencji open source z następującymi warunkami: wolno ci: * udostępniać — kopiować, rozpowszechniać i przesyłać pracę * używać zmodyfikowanej wersji kodu w swojej aplikacji nie wolno ci: * publikować zmodyfikowane wersje kodu * używaj kodu w celach komercyjnych Czy istnieje licencja na oprogramowanie, która odpowiada moim potrzebom? (crosspost: http://stackoverflow.com/questions/4558546/opensource-noncommercial-license)


title: Poznaj pliki wykonywalne uruchamiane/ładowane przez plik wykonywalny

text: Chciałbym wiedzieć, jakie pliki wykonywalne są uruchamiane lub ładowane przez plik wykonywalny (jeśli to możliwe bez uruchamiania, jeśli nie jest to możliwe, nie chcę żadnych zmian w systemie). Na przykład mam ten kod źródłowy skompilowany w pliku wykonywalnym: CreateProcess("C:\\Windows\\explorer.exe", NULL, NULL,NULL,FALSE,0,NULL,NULL,&SI,&PI); hKernel32 = LoadLibrary("kernel32.dll"); // Mogę się o tym dowiedzieć, patrząc w tabeli importu g_LoadLibrary = (pLoadLibrary)GetProcAddress(hKernel32, "LoadLibrary"); g_LoadLibrary("nieznam.dll"); ShellExecute(NULL,"open", "script.py", "", "", SW_SHOWDEFAULT ); Tutaj chcę wiedzieć, że odradza się explorer.exe, załaduje kernel32.dll, unknow.dll i uruchomi script.py. Jak mogę to zrobić? Dziękuję Ci!


title: Zaciemniacz kodu dla C++

text: Podejrzewam, że zaciemnianie kodu w C++ utrudni inżynierię wsteczną: bez znaczących nazw symboli nie będzie podpowiedzi o funkcjach i interakcjach modułów. Czy ktoś może polecić dobry, sprawdzony obfuscator dla C++? Ich ceny wynoszą około 150 USD, ale jeśli kupię 3 różne produkty, będzie to 450 USD.


title: Jak szybko dostosować się do projektu?

text: Załóżmy, że moja ulubiona aplikacja open source ma błąd. Teraz chcę przyczynić się do rozwoju aplikacji poprzez naprawienie jej błędu i przesłanie łatki do zespołu programistów. Jaki jest najskuteczniejszy sposób, aby to zrobić? Czy faktycznie czytasz cały kod źródłowy projektu (lub większość), aby zrozumieć logikę, zanim zaczniesz go naprawiać?


title: Urządzenie Belkin działa pod kontrolą systemu Linux, jak mogę stworzyć dla niego własne, niestandardowe oprogramowanie układowe?

text: Oprogramowanie układowe Belkin N300 F9K1002 znajduje się tutaj. Wygląda na to, że nie jest zaszyfrowany. Jak mogę wgrać własne niestandardowe oprogramowanie układowe dla systemu Linux na to urządzenie. Jak mam to zrobić?


title: Czy programowanie na Androida powinno odbywać się w systemie Windows czy OSX? Czy jest jakaś różnica?

text: Mam możliwość zainstalowania Android SDK na Windows lub OSX. Która platforma zapewnia lepsze (łatwiejsze) środowisko programistyczne? Aby zachować to konstruktywnie, szukam wszelkich różnic, które eliminują problemy ze zgodnością, łatwość debugowania lub zgodność z narzędziami innych firm.


title: Oprogramowanie C# Open Source przydatne do nauki wzorców projektowych

text: Na studiach uczęszczałem na zajęcia z systemów eksperckich. Język, którego uczyła książka (CLIPS) był ezoteryczny - Expert Systems: Principles and Programming, Fourth Edition. Pamiętam, że miałem z tym ciężki okres. Tak więc, po prawie oblaniu zajęć, musiałem stworzyć najbardziej niesamowity system ekspercki do mojej końcowej prezentacji. Zdecydowałem się stworzyć system ekspercki, który obliczałby analizę ryzyka dla portfela emerytalnego danej osoby. Krótko mówiąc, system zapewniałby usługi normalnie wykonywane przez doradcę finansowego. Innymi słowy, czy portfel powinien być konserwatywny, umiarkowany czy agresywny, biorąc pod uwagę osobowość, wiek, stan makroekonomii i inne czynniki? W dodatku do książki (lub na płycie CD-ROM) był ten pogłębiony przykładowy program czegoś niezwiązanego z moją prezentacją. Podczas przerwy czytałem i ponownie czytałem każdą linijkę tego programu, aż zrozumiałem co do joty. Chociaż nie było to powiązane, nauczyłem się więcej niż kiedykolwiek mogłem, czytając wszystkie rozdziały. Moja prezentacja okazała się cholernie dobra i otrzymałam pochwały od mojego profesora i kolegów z klasy. Tak więc morał tej historii jest taki… dzięki zrozumieniu kodu innych ludzi możesz uzyskać większy wgląd w język/paradygmat niż czytając przykłady kanoniczne. Mimo to do dziś mam problem z codziennymi wzorami projektowymi, takimi jak Factory Pattern. Chciałbym wiedzieć, czy ktoś mógłby polecić oprogramowanie open source, które pomogłoby mi przynajmniej zrozumieć wzorce projektowe Gang of Four. Przeczytałem książki, ale mam problemy z pisaniem kodu dla koncepcji w prawdziwym świecie. Być może, studiując kod używany w dzisiejszych rzeczywistych aplikacjach, może po prostu „kliknąć”. Zdaję sobie sprawę, że oprogramowanie może implementować tylko jeden rodzaj wzorca projektowego. Ale jeśli wzorzec jest implementacją, którą uważasz za dobrą do nauki i wiesz, jakiego wzorca szukać w źródle, mam nadzieję, że możesz mi o tym powiedzieć. Na przykład przestrzeń nazw System.Linq.Expressions ma dobry przykład wzorca użytkownika. Klient wywołuje Expression.Accept(new ExpressionVisitor()), który wywołuje ExpressionVisitor (VisitExtension), który odwołuje się do Expression (VisitChildren), który następnie ponownie wywołuje Expression (Accept) - wooah, trochę zawiłe. Należy tutaj zauważyć, że VisitChildren jest metodą wirtualną. Zarówno Expression, jak i te klasy pochodne od Expression mogą implementować metodę VisitChildren w dowolny sposób. Oznacza to, że jeden typ Expression może uruchamiać kod, który jest całkowicie inny niż inny typ pochodnego Expression, mimo że Klasa ExpressionVisitor jest taka sama w metodzie Accept. (Na marginesie Expression.Accept jest również wirtualny). W końcu kod dostarcza przykładu z prawdziwego świata, którego nie znajdziesz w żadnej książce, ponieważ jest trochę mylący. Podsumowując, jeśli znasz jakieś oprogramowanie typu open source, które wykorzystuje implementację wzorca projektowego, na którym byłeś pod wrażeniem, wymień je tutaj. Jestem pewien, że pomoże wielu innym oprócz mnie. public class VisitorPatternTest { public void Main() { Expression normalExpr = new Expression(); normalneExpr.Accept(nowy ExpressionVisitor()); Wyrażenie binExpr = new BinaryExpression(); binExpr.Accept(nowy ExpressionVisitor()); } } public class Wyrażenie { chronione wewnętrzne wirtualne Wyrażenie Accept(ExpressionVisitor gość) { return visitor.VisitExtension(this); } chroniony wewnętrzny wirtualny Expression VisitChildren(ExpressionVisitor gość) { if (!this.CanReduce) { throw Error.MustBeReducible(); } return visitor.Visit(this.ReduceAndCheck()); } publiczne wirtualne wyrażenie Wizyta(węzeł wyrażenia) { if (węzeł != null) { return node.Accept(this); } zwraca null; } public Expression ReduceAndCheck() { if (!this.CanReduce) { throw Error.MustBeReducible(); } Wyrażenie wyrażenie = this.Reduce(); if ((wyrażenie == null) || (wyrażenie == to)) { throw Error.MustReduceToDifferent(); } if (!TypeUtils.AreReferenceAssignable(this.Type, expression.Type)) { throw Error.ReducedNotCompatible(); } wyrażenie zwrotne; } } public class BinaryExpression : Expression { chronione przesłonięcie wewnętrzne Expression Accept(ExpressionVisitor gość) { return visitor.VisitBinary(this); } chronione przesłonięcie wewnętrzne Expression VisitChildren(ExpressionVisitor gość) { return CreateDummyExpression(); } protected internal Expression CreateDummyExpression() { Wyrażenie dummy = new Expression(); powrót manekina; } } public class ExpressionVisitor { public virtual Expression Visit(Expression node) { if (węzeł != null) { return node.Accept(this); } zwraca null; } chronione wewnętrzne wirtualne wyrażenie VisitExtension(węzeł wyrażenia) { return node.VisitChildren(this); } chronione wewnętrzne wirtualne wyrażenie VisitBinary(BinaryExpression node) { return ValidateBinary(node, node.Update(this.Visit(node.Left), this.VisitAndConvert<LambdaExpression>(node.Conversion, "VisitBinary"), this.Visit(node .Prawidłowy))); } }


title: Sparametryzowane modele Django

text: W zasadzie pojedyncza aplikacja Django może być ponownie wykorzystana w dwóch lub więcej projektach, zapewniając funkcjonalność odpowiednią dla obu. Oznacza to, że ta sama struktura bazy danych (tabele i relacje) zostanie odtworzona identycznie w różnych bazach i w większości przypadków nie stanowi to problemu (zakładając, że projekty/bazy danych nie są ze sobą powiązane - na przykład gdy ktoś pobierze kompletną aplikację do użycia w własne projekty). Czasami jednak modele trzeba nieco „podrasować”, aby lepiej pasowały do potrzeb problemu. Można to osiągnąć przez rozwidlenie aplikacji, ale zastanawiałem się, czy nie byłoby lepszej opcji w przypadkach, w których projektant aplikacji może przewidzieć najczęstsze dostosowania. Na przykład, jeśli mam model, który mógłby odnosić się do innego jako jeden do jednego lub jeden do wielu, mógłbym określić właściwość `unique` jako parametr, który można określić w ustawieniach projektu: class This( models.Model): other = models.ForeignKey(Other, unique=settings.OTHER_TO_THIS) Lub jeśli model może odnosić się do wielu innych, mógłbym utworzyć tabelę pośrednią dla każdego z nich (tym samym wymuszając integralność referencyjną) zamiast używać ogólnych fks : dla powiązanych w ustawieniach.MODELS_RELATED_TO_OTHER: model_name = '%s_Other' % related globals()[model_name] = type(model_name, (models.Model,) { me:models.ForeignKey(find_model_class(related)), other:models. ForeignKey(Other), # Niektóre inne właściwości, które wszystkie tabele przecięcia muszą mieć }) Itd. Zaznaczę, że **nie** proponuję zmiany modeli w czasie wykonywania ani niczego w tym rodzaju; po zdefiniowaniu parametrów i wywołaniu `syncdb` po raz pierwszy, te parametry nie będą ponownie zmieniane (chyba że przeprowadzasz migrację schematu). Czy to dobry projekt? Czy istnieją lepsze sposoby na osiągnięcie tego samego, czy może wady, których nie mogłem przewidzieć? Ta technika ma być używana oszczędnie (tylko w aplikacjach, które mają być ponownie wykorzystywane w szalenie różnych kontekstach i tylko wtedy, gdy można wykryć konkretną potrzebę dostosowania podczas projektowania modelu aplikacji).


title: Jak zarządzać dokumentacją projektu open source?

text: Jestem twórcą rozwijającego się projektu open source. Obecnie denerwuję się, próbując znaleźć najlepszy sposób zarządzania dokumentacją. Oto opcje, które rozważyłem: * Witryna HTML * Wiki Github * Pliki Markdown hostowane na Github * Umieszczanie wszystkich dokumentów w pliku README.md na Github Dokumentacja jest już napisana w Markdown, po prostu nie wiem, jak mam to zrobić jest dostępny. Naprawdę pociąga mnie Git, ponieważ mogę rozgałęziać i oznaczać dokumentację, tak jak mogę rozgałęziać i oznaczać źródło. Mógłbym użyć biblioteki Markdown, aby przetłumaczyć Markdown na HTML i wyświetlić go na stylizowanej stronie internetowej. Musiałbym przesyłać zmiany do witryny za każdym razem, gdy nastąpiła zmiana, a zarządzanie wszystkimi różnymi „tagami” dokumentacji byłoby trudne. Github Wiki (o ile mi wiadomo) nie zmienia się w zależności od gałęzi, na której się znajdujesz. Tak więc w dowolnym momencie mogłem mieć tylko „główną” wersję dokumentacji w formie Github Wiki. Umieszczenie tego wszystkiego w Github README jest całkiem fajne. Dostaję rozgałęzienia i tagowanie, ale jest to trochę męczące w użyciu i nie nadaje się do łatwej nawigacji. Czy brakuje mi jakiegoś niesamowitego rozwiązania? Jakie mam inne opcje?


title: Dlaczego programowanie imperatywne jest preferowane nad programowaniem funkcjonalnym?

text: **Tło:** Jestem zwolennikiem programowania funkcjonalnego, który pracuje w sklepie VB.NET, gdzie dominującym modelem mentalnym jest programowanie imperatywne. Ponieważ podstawą naszego systemu są WinForms, rozumiem, że nie zamierzamy całkowicie odejść od programowania imperatywnego, ale nadal staram się używać FP (głównie przez Linq) tam, gdzie to możliwe, ponieważ wierzę w jego zalety. **Argumenty i kontrargumenty przeciwko FP** 1. Można zauważyć, że płynny Linq jest mniej wydajny niż jego imperatywny odpowiednik, ponieważ ten styl przetwarza sekwencję do innej sekwencji i ją powtarza. Ogólnie rzecz biorąc, zajmie to kilka przejść więcej niż podejście imperatywne, które można lepiej zoptymalizować, aby uniknąć powtarzania przejść w sekwencji. Z tego powodu prowadzący nie mógł zrozumieć, dlaczego miałbym wybrać podejście funkcjonalne, które jest wyraźnie „mniej wydajne”. * _Kontr-argument_ : Twierdziłem, że chociaż czasami jest mniej wydajny pod względem cykli procesora, czułem, że jest bardziej zrozumiały dla człowieka i łatwiejszy do naśladowania, ponieważ każda linia wykonuje tylko jedną rzecz podczas przechodzenia przez sekwencję. Wydaje mi się, że jest to jak posiadanie linii montażowej, na której każda osoba na swoim stanowisku ma tylko jedną pracę do wykonania. Uważam, że znikomy kompromis wydajności jest rekompensowany przez kod, którego obawy są starannie oddzielone. 2. Kolejnym argumentem przeciwko FP, który słyszę w moim sklepie, jest to, że trudniej jest debugować - co jest prawdą. Nie jest łatwo przejść przez kod Linq. Czasami muszę rozwikłać łańcuch metod, aby lepiej śledzić i analizować problemy, których nie mogę od razu zauważyć. * _Kontrargument: W większości przypadków nie mam z tym problemu, ponieważ uważam, że styl funkcjonalny jest bardziej deklaratywny w sposobie, w jaki odczytuje, a gdy w łańcuchu funkcjonalnym pojawia się błąd, zwykle mogę natychmiast wykryć problem. **Moje pytanie** Staram się promować styl funkcjonalny w naszym sklepie i nie wydaje mi się, żebym robił postępy. Zajmowałem się obydwoma stylami programowania i dopiero niedawno parałem się w Haskell. Pomimo lat niezbędnego doświadczenia, teraz, kiedy rutynowo używam FP w JavaScript, wyrosło na mnie. Porównując to z tym, co mógłbym zrobić, gdybym trzymał się stylu imperatywnego, w moim rdzeniu pojawia się nuta słuszności. Przeszkoliłem swój mózg w kierunku myślenia funkcjonalnego, w kierunku kompozycji funkcjonalnej. _Nie mogę zrozumieć, jak trudno było przekonać innych o zaletach FP._ Na przykład programiści w moim sklepie używają Linq, ale myślę, że generalnie używają go w kontekście radzenia sobie z danymi domeny. Używam go w bardziej ogólnym sensie i wolę go za każdym razem, gdy mam do czynienia z sekwencjami/listami lub trwałymi strukturami danych. Nie udało mi się przekonać moich kolegów z drużyny, by rozszerzyli korzystanie z Linq. _Próbuję zrozumieć, co powoduje, że programista nie lubi FP._ Chciałbym zobaczyć odpowiedź od kogoś, kto ma spore doświadczenie z FP, ale zdecydował się na imperatywny styl. Co skłoniło do podjęcia decyzji o pozostaniu z imperatywem zamiast korzystania z funkcjonalności? * * * Oto dodatkowy przykład ilustrujący różnice między programowaniem imperatywnym a funkcjonalnym. Napisałem metodę `SelectedRows` naszej siatki w Linq jako taką: Właściwość publiczna SelectedRows() As DataRow() Implementuje IDataSourceControl.SelectedRows Get Return Me.ugrBase.Selected.Rows. OfType(Of Infragistics.Win.UltraWinGrid.UltraGridRow)(). Wybierz(Funkcja(ugr) ugr.ListObject). OfType(O DataRowView)(). Wybierz(Funkcja(drv) drv.Row). ToArray End Get Jednak ten styl kodu sprawia, że niektórzy z naszych programistów czują się niekomfortowo, więc nasz kierownik przepisał go na bardziej znany: Właściwość publiczna SelectedRows() As DataRow() implementuje IDataSourceControl.SelectedRows Get Dim plstRows As New List(Of DataRow) For Każdy bugrLoop As Infragistics.Win.UltraWinGrid.UltraGridRow In Me.ugrBase.Selected.Rows Jeśli bugrLoop.ListObject nie jest niczym Następnie plstRows.Add(CType(bugrLoop.ListObject, DataRowView).Row) End If Next Zwróć plstRows. Dostać


title: Zwracać zadania lub ujawniać zdarzenia?

text: Co jest lepsze podczas programowania interfejsu API? I muszę dodać, że w moim przypadku mimo wszystko ujawnią się dwa zdarzenia.


title: Najlepszy sposób na wdrożenie aplikacji zależnej od bazy danych

text: Zawsze posiadam oprogramowanie "na zamówienie" dla klientów. Oznacza to: * Rozwijanie oprogramowania * Zainstaluj SQL Express na stronie klienta * Importuj bazę danych, utwórz użytkownika bazy danych, ustaw uprawnienia bazy danych itp. * Zainstaluj oprogramowanie na stronie klienta (wiele komputerów) * Voila! Teraz zamierzam wdrożyć twoją podstawową aplikację „użytkownika końcowego” dla masy nieznanych odbiorców. Tj. Twoja podstawowa aplikacja, którą ktoś pobierze. Jakie są najczęstsze metody wdrażania aplikacji z bazą danych? Szukam klasycznego (jedna aplikacja konfiguracyjna, wdrażanie zarówno aplikacji, jak i bazy danych) bez konieczności wykonywania przez użytkownika pewnych technicznych konfiguracji. Byłbym wdzięczny za kilka pomysłów...


title: Jak obsługiwać reguły biznesowe za pomocą REST API?

text: Mam interfejs API REST do zarządzania systemem rezerwacji. Szukam, jak zarządzać tą sytuacją: Klient może zarezerwować przedział czasowy: Zasób TimeSlot jest tworzony i połączony z zasobem Person. Aby utworzyć łącze między lotem a osobą, klient REST wysyła żądanie POST do zasobu TimeSlot Ale jeśli zbyt wiele osób zarezerwowało ten sam slot (powiedzmy, że limit wynosi 5 linków), musi być niemożliwe utworzenie więcej skojarzeń. Jak mogę poradzić sobie z tym ograniczeniem biznesowym? Czy mogę zwrócić kod stanu 404 z odpowiedzią JSON z wyszczególnieniem błędu z kodem stanu? Czy to podejście RESTFul ? **EDYTUJ :** Jak zasugerowano poniżej, użyłem statusu 409 Conflict oprócz odpowiedzi JSON opisującej błąd


title: Jakie są opcje, jeśli repozytorium SVN stanie się niedostępne?

text: Projekt, nad którym pracuję, był hostowany w repozytorium svn na stronie bettercodes.org. To było pod nazwą innego użytkownika i **to repozytorium jest teraz niedostępne**. Osoba odpowiedzialna za projekt dostała eksport z Eclipse, a ja miałem na swoim komputerze mniej lub bardziej aktualny projekt. Nie widziałem innej opcji niż zatwierdzenie mojej kopii projektu do innego repozytorium. **Teraz możliwe jest, że brakuje niektórych najnowszych zmian wprowadzonych przez innego programistę**. Teraz, jakie mam opcje, aby połączyć ten projekt? Czy niektóre niezbędne metadane są zapisane w środowisku Eclipse, czy też wszystkie zmiany znajdują się w oryginalnym repozytorium? Jakich narzędzi mogę użyć, aby sprawdzić, czego brakuje w zakresie klas, plików konfiguracyjnych i kodu?


title: Programowanie bez platformy docelowej?

text: Mam pomysł na program i zacząłem układać koncepcję projektowania oprogramowania w tradycyjnym modelu SDLC zawierającym wykresy i instrukcje dotyczące tego, co chcę osiągnąć we wszystkich częściach. Krótkim wyjaśnieniem mojego pomysłu jest to, że chcę zbudować IDE dla tabletu, który ma działać na platformach mobilnych, ale może być również uruchamiany na Windows, Mac itp. Ta platforma będzie miała kilka bardzo unikalnych koncepcji dla graficzny interfejs programowania i zdalne wykorzystanie serwera aplikacji do kompilacji i zarządzania projektami jak GIT. Chciałbym to osiągnąć bez konieczności przerabiania kodu dla każdego systemu i wierzę, że C pozwoli mi pozostać blisko mojego celu, jakim jest brak programowania konkretnej platformy. **Pytanie** Zakładam, że chcę do minimum uniknąć wywołań specyficznych dla systemu operacyjnego i (lub) bibliotek zewnętrznych (należy trzymać się standardowej biblioteki tak bardzo, jak to możliwe). Jaka byłaby najlepsza praktyka, aby to zrobić, jednocześnie kończąc prawie ukończony program (dopóki nie wprowadzę ukierunkowanych dostosowań platformy)? Czy C byłoby moją najlepszą opcją, aby to osiągnąć? **Dlaczego pytam.** Bardzo interesuje mnie używanie języka C ze względu na jego przenośność, możliwość wykorzystania pamięci, mniejsze i wydajniejsze rozmiary programów oraz integrację z prawie wszystkimi platformami mobilnymi. Odrobiłem sporo pracy domowej nad C i jestem w połowie „Przewodnika programowania w C, wydanie drugie” Kernighana i Ritchiego. Zamówiłem nawet kilka książek na temat budowania kompilatorów i projektowania systemów operacyjnych, aby pomóc w pewnych podstawowych koncepcjach, które moim zdaniem są istotne dla mojego pomysłu.


title: Jaki jest algorytm kopiowania regionu jednej bitmapy do regionu w innej?

text: W moim projekcie (i jestem pewien, że wiele innych) muszę skopiować podzbiór (R2) jednego obrazu bitmapowego (R1) do regionu (R3) w innym, gdzie region docelowy może mieć dowolny rozmiar (rozciąganie i skalowanie gdzie jest to konieczne). ![tutaj podaj opis obrazka](http://i.stack.imgur.com/fuZqL.png) Jestem pewien, że to rozwiązany problem, ale nie mogę znaleźć żadnych przykładów; **jaki jest najprostszy algorytm do wykonania tej operacji?** (interpolacja liniowa wystarczyłaby do wypełnienia pikseli, gdy źródło jest przeskalowane w górę, jeśli jest to najszybsza (obliczeniowo) metoda)


title: Python 3, zamień w ciągach

text: Muszę przetłumaczyć tekst hebrajski. Napisał więc mały skrypt w Pythonie, który wczytuje hebrajski tekst z pliku tekstowego, globalnie zastępuje litery hebrajskie literami łacińskimi. Teraz muszę trochę dostroić (zamienić pewne rzeczy w jednej pozycji, ale nie w innej, więc globalne zastąpienie nie wystarczy). Kłopot polega na tym, że wczytany tekst jest ciągiem, więc nie mogę zastąpić poszczególnych elementów ciągu. Jaki byłby najlepszy sposób na zrobienie tego?


title: Jak poradzić sobie z rozwojem projektu open source?

text: Od roku lub dwóch brałem udział w udzielaniu wsparcia dla projektu open source, a odkąd zacząłem, projekt zyskał dużą popularność. Program widzi ponad 100 000 pobrań tygodniowo i jest używany przez ponad 60% ludzi w swojej podstawowej dziedzinie, więc oczywiście jesteśmy zachwyceni, że ludzie tak bardzo lubią z niego korzystać. Problem polega jednak na tym, że baza rozwoju i wsparcia nie rosła tak szybko i zaczynamy odczuwać bóle wzrostu. Mała garstka programistów (w szczególności główny programista) staje się dość słaba, a wolontariusze wsparcia technicznego zaczynają się wypalać. Do tej pory była to po prostu grupa kolesiów spędzających czas na IRC, piszących ten program i pomagających użytkownikom. Nie ma organizacji 501(c)(3), LLC ani niczego w tym rodzaju. W tej chwili nie mamy bardzo formalnego narzędzia do śledzenia błędów ani bazy danych problemów (mamy forum z kategorią dedykowaną raportom o błędach), co, przyznaję, jest czymś, co moglibyśmy ulepszyć, aby zaangażować więcej programistów. Ale przypuszczam, że moje prawdziwe pytanie brzmi, jak dokonać przejścia od małego osobistego projektu do prawdziwego... _rzeczy?_ Jak duzi chłopcy, tacy jak GIMP, FFmpeg, Blender itp., poradzili sobie z tym przejściem? A na dodatek, czy istnieje sposób na zaoferowanie rekompensaty w ramach projektu FOSS? Przypuszczam, że darowizny pomagają, ale to tylko tak daleko… wydaje się dziwne, aby zarabiać na życie z wolnego oprogramowania, ale jeśli program ma nadal być lepszy, nie widzę, jak możemy kontynuować bez rekompensaty dla ludzi do pracy w pełnym wymiarze godzin. Zasadniczo odczuwamy bóle wzrostu i czujemy się „za duży dla naszych spodni”. Co możemy zrobić, aby poradzić sobie z tą zmianą i nie wypalić się robiąc zbyt wiele rzeczy na raz?


title: Czy w Delphi jest jakaś edycja ekspresowa?

text: Odwiedziłem stronę Embarcadero i przeczytałem o Delphi. Chociaż nowa wersja nosi nazwę Delphi XE, nie jest to jednak Express Edition. Chcę nauczyć się programowania w Delphi. Czy istnieje wersja Express Edition lub wersja próbna bez limitu czasowego?


title: Najlepsze praktyki dotyczące zwracania odpowiedzi z serwisu

text: Piszę usługi sieci Web ASP.NET oparte na protokole SOAP, posiadające szereg metod radzenia sobie z obiektami klienta. np.: * int AddClient(Client c) => zwraca ID klienta po pomyślnym zakończeniu * List GetClients() * Client GetClientInfo(int clientId) W powyższych metodach zwracana wartość/obiekt dla każdej metody odpowiada scenariuszowi "wszystkie dobre", tj. Identyfikator klienta zostanie zwrócony, jeśli AddClient zakończył się pomyślnie lub lista<> obiektów Client zostanie zwrócona przez GetClients. Ale co, jeśli wystąpi błąd, jak przekazać komunikat o błędzie dzwoniącemu? Myślałem o posiadaniu klasy Response: Response { StatusCode, StatusMessage, Details } gdzie Details będą zawierały rzeczywistą odpowiedź, ale w takim przypadku osoba wywołująca będzie musiała za każdym razem rzutować odpowiedź. Jakie są Twoje poglądy na powyższe? Czy jest lepsze rozwiązanie? ---------- ZAKTUALIZOWANE ----------- Czy w programie WCF jest coś nowego? Jaka będzie różnica, jeśli zmienię usługę sieci Web ASP.NET na usługę WCF?


title: Czy projektant stron internetowych powinien znać kodowanie po stronie serwera?

text: Wdrażamy CMS oparty na ASP.NET MVC. Teraz każdy projektant powinien być w stanie dostarczyć motywy dla tego CMS. Ale aby napisać motyw, muszą umieć modyfikować wygenerowany kod HTML, a więc koncepcję Widoku. Innymi słowy, powinni być w stanie albo modyfikować bieżące widoki, albo tworzyć nowe widoki od podstaw, aby dopasować je do swoich wymagań. Jednak teraz nie jesteśmy pewni, czy idziemy właściwą ścieżką. Czy projektant stron internetowych (HTML, CSS, JavaScript + Photoshop) powinien naprawdę wiedzieć o platformach serwerowych, takich jak Razor, PHP, klasyczny ASP lub cokolwiek innego?


title: Jak oceniasz swoją kompatybilność z Agile?

text: Po przyjęciu Agile przez jakiś czas, zaczęliśmy myśleć, że możemy ulepszyć sposób, w jaki robimy Agile. Ale na początek musimy wiedzieć, jak dobrze sobie radzimy teraz i zidentyfikować problemy w naszych bieżących procesach, zanim będziemy mogli je ulepszyć. Jedną rzeczą, którą zauważamy, jest to, że każdy zespół robi Agile trochę inaczej niż każdy. Rytuał może działać dobrze dla jednej drużyny, ale nie dla innej. Dlatego chcemy zidentyfikować te niezgodności w naszym zespole. Jakich typowych narzędzi/metod używa Twoja organizacja do identyfikacji tych problemów?


title: Czy istnieje coś takiego jak „teoria integracji systemów”?

text: W dzisiejszych organizacjach używa się wielu różnych programów, serwerów i ogólnie technologii. My, programiści, mamy do dyspozycji wiele różnych narzędzi, które pomagają rozwiązywać różne wyzwania związane z danymi i komunikacją w organizacji. Czy ktoś wie, czy ktoś poważnie zastanowił się nad integracją systemów? Podam przykład: hipotetycznie załóżmy, że jestem właścicielem firmy produkującej specjalistyczne garnitury a'la Iron Man. W obszarze produkcji mam narzędzia CAD, narzędzia do obróbki skrawaniem, listy płac, zarządzanie projektami i narzędzia do zarządzania aktywami, żeby wymienić tylko kilka. Mam też fajną przestrzeń projektową, gdzie projektanci prezentują swoje projekty na dużych wyświetlaczach, niektóre dotykają, niektóre tradycyjne. Aha, mam też jeden z tych nowych, modnych budynków LEED Platinum, który ma wiele różnych systemów sterowanych komputerowo, takich jak inteligentne okiennice, które zamykają się, gdy ludzie są w pokoju, system HVAC, który dostosowuje się w zależności od liczby osób w pomieszczeniu. budynku itp. Chcę wiedzieć, czy ktoś wykonał jakąkolwiek pracę naukową, próbując dowiedzieć się, jak połączyć wszystkie te elementy, aby powiedzieć, że mój system kontroli dostępu jest podłączony do mojego systemu płac, a mój system telefoniczny pozwala mi nigdy nie przesuwać karty drogowej, a mój telefon śledzi mnie w całym budynku. Ten problem to także coś więcej niż wyzwanie technologiczne. Każde wdrożenie technologii umożliwia określone zachowania ludzkie, dlatego też człowieka należy również traktować jako część systemu. Czy ktoś wykonał jakąś pracę nad tym, jak skutecznie splatać te elementy razem? FYI: Nie próbuję budować systemu. Chcę wiedzieć, czy ktoś dokładnie przestudiował proces realizacji dużego projektu integracyjnego, jak rozwija swoje wymagania, jak badał ludzkie zachowania itp.


title: Jakie kody stanu HTTP należy sprawdzić, aby to zadanie sieciowe przebiegało sprawnie?

text: Dział mojego biura loguje się do serwera ISP za pośrednictwem strony logowania w przeglądarce. To, dla lepszej wydajności, jest zawarte w małym skrypcie Pythona. To właśnie robi (Pseudo kod) 1.CheckForActiveInternet 2.jeśli nie jest aktywny Logowanie KeepAlive 3.else raport W kroku 1, host taki jak "www.google.com" jest sprawdzany pod kątem aktywnego połączenia. Zwracany jest kod statusu i dokładnie to mam wątpliwości; jaki byłby ten kod? **200** czy **202**? Jeśli Google przekierowuje na adresy URL .co.**, kod stanu będzie miał postać **302**, co jeszcze bardziej komplikuje sprawę, ponieważ nasz dostawca usług internetowych również przekierowuje, gdy nie ma aktywnego połączenia internetowego. Widać, że jeśli sprawdzimy **302** pod kątem decydowania o pogodzie lub nie, będziemy potrzebować loginu, może to być przekierowanie google lub sam nasz dostawca usług internetowych. Więc co można tutaj zrobić? Obecny skrypt sprawdza: jeśli status w (200, 202, ""): Połączenie jest aktywne To jest dość niejasne, prawda? Kiedy jako kod stanu zwracany jest pusty ciąg? Witryna bez przekierowań, taka jak wikipedia.org, może załatwić sprawę, o której myślałem, ale nie wiem, jak wykonalna byłaby ta metoda.


title: Najlepsze źródło do tworzenia programu nauczania JavaScript?

text: Ryzykując, że zostanę zdyskredytowany, naprawdę potrzebuję wkładu społeczności – pomagam stworzyć wysokiej jakości program nauczania (szkoła zawodowa, nie uniwersytet) wokół języków open-source, w szczególności JavaScript i może trochę Ruby lub PHP. Istnieje kilka świetnych książek o handlu, ale sprawy stają się nieco bardziej ograniczone, gdy potrzebujesz na przykład podręcznika z quizami i kluczem odpowiedzi. Wierzę, że ten materiał gdzieś istnieje - czy istnieje zasób online lub jakikolwiek organ akredytacyjny dotyczący JavaScript? Zdaję sobie sprawę, że można to uznać za zbyt „subiektywne”, ale trudno mi przedzierać się przez góry internetowych samouczków JavaScript i książek handlowych.


title: Jak radzisz sobie ze stale zmieniającymi się wymiarami bazy danych?

text: Od około dwóch miesięcy szukam rozwiązań lub praktyk do zarządzania wydaniami w bazach danych. Szukam sposobu, który ludzie uważają za najlepszy sposób radzenia sobie z tym problemem. Mamy 3 środowiska dla naszych baz danych: * Programowanie * Testowanie akceptacji użytkownika (UAT) * Produkcja Problem polega na tym, że czasami wprowadzamy zmiany w kilku rzeczach w naszej rozwojowej bazie danych i przychodzi czas na wdrożenie, niektóre funkcje mogą nie być gotowe do wdrożenia zwolniony do UAT. Niedawno zaczęliśmy używać kontroli źródła SQL Red Gate do przechowywania wszystkich naszych encji (z regularnymi zatwierdzeniami). Myślałem o bazowaniu na zestawach zmian (tj. powiedzmy, że wszystko od zestawu zmian X i wstecz jest teraz wypychane do UAT), jednak oznacza to, że ludzie sprawdzają swój kod tylko w kontroli źródła tuż przed wdrożeniem, co może być mylące ( zwłaszcza, że ludzie są zapominalscy). Innym problemem związanym z podejściem do zestawu zmian jest to, że jeśli istnieje błąd w procedurze składowanej, który należy naprawić, numer zestawu zmian byłby poza zakresem naszego maksymalnego zestawu zmian dla wersji, co czyni go tak, że jeśli zajdzie taka potrzeba odtworzyć bazę danych z maksymalnego zestawu zmian, ponownie wypchnęlibyśmy błąd. Jakieś sugestie dotyczące procesu? Dziękuję


title: Czego mogę użyć do śledzenia stanu 60 projektów oprogramowania, z których niektóre są przestarzałe?

text: Pracowałem jako programista w firmie inżynieryjnej (całe opracowane oprogramowanie jest przeznaczone wyłącznie do użytku wewnętrznego). Firma posiada około 60 indywidualnych projektów od poprzednich deweloperów. Problem polega na tym, że wszyscy dawni programiści odeszli i nikt nie wie, dlaczego zbudowano około połowy oprogramowania, kto go używa, a nawet co robi niektóre z nich. Używamy SVN, ale żaden wcześniejszy programista nie pisał komentarzy ani nie robił żadnej dokumentacji. Zakładając, że wszystko to rozwiążę, czy istnieje jakiś program/system/metoda, które można wykorzystać do śledzenia wszystkich tych informacji? Firma skłania się ku Excelowi, zakładam, że jest coś lepszego. Czy po prostu lepiej byłoby napisać dokumentację w dokumencie Word i przekazać ją do svn, aby znajdowała się tuż obok kodu?


title: Dlaczego powinienem używać Iesi.Collections zamiast tradycyjnego System.Collection?

text: Czy badania nad tym, jak (dla konwekcji) zdefiniować tabelę Many Many, w której oba pola są kluczem podstawowym, i znaleźć ten post. Więc zdecyduj się zainstalować Iesi.Collections w mojej domenie bibliotecznej. Ale pojawiła się wątpliwość. W "Iesi.Collections" przewyższa "System.Collections" Iesi.Collections? Dlaczego powinienem używać? Czy jest lepszy pod względem wydajności?


title: Minimax w grze bayesowskiej z wieloma graczami, którzy nie grają w kolejności

text: Założenie: wiem, że taką grę lepiej rozwiązałby MCTS, jednak z teoretycznego punktu widzenia, czy dałoby się zastosować minimaks do bayesowskiej gry wieloosobowej, w której kolejność rozgrywania zależy od wyniku poprzedniej tury? Opis gry: * Gracze: {A,B,C,D} (A i C to zespół maksymalizujący, a B i D to zespół minimalizujący) * Bayesian do ustawiania np. kart graczy. * Tura 1: A->B->C->D * Tura 2 (kolejność zależy od aktualnego epilogu Tury 1): C->D->A->B * Tura 3: B->C-> D->A * ... * Tura N: gra się kończy. Mam wrażenie, że nie byłoby to możliwe, ponieważ po zakończeniu pierwszej tury, w standardowej definicji minimax, muszę być w stanie rozpocząć następną turę od znanego gracza, podczas gdy szansa powinna dotyczyć tylko wypłat gry. Każda opinia byłaby pomocna.


title: Jakiego rodzaju uwierzytelnienia użytkownika potrzebuję do spokojnego internetowego interfejsu API?

text: Robię spokojne web api z asp.net Web API 2 Nie chcę używać żadnej formy plików cookie ani podstawowego uwierzytelniania (wysyłaj użytkownika/przepustkę w postaci zwykłego tekstu, więc potrzebny jest SSL) Nie używam/potrzebuję rzeczy związanych z roszczeniami. Nie zdecydowałem się jeszcze na hosting własny asp.net lub IIS. Chcę tylko wysłać zaszyfrowany token między serwerem klienta przez SSL. Używam Entity framework 6, .NET 4.5.1 i chcę po prostu wykonać akcje CRUD na mojej tabeli użytkownika. Nie więcej. Jaki jest szablon/biblioteka/podejście do projektu, od którego powinienem zacząć, aby wykonać powyższe?


title: Jak uniknąć rozwidlenia w niepamięć przez silniejszego współtwórcę?

text: Jak ostatnio informowaliśmy tutaj: > Xamarin rozwidlał Cocos2D-XNA, platformę do tworzenia gier 2D/3D, tworząc > wieloplatformową bibliotekę, którą można włączyć do projektów PCL. Jednak założyciel projektu, który został rozwidlony, mówi: > Celem licencji MIT jest odciążenie twojego dozwolonego użytku. Nie zachęcać cię do przyjęcia oprogramowania, zmiany jego nazwy na własne, a następnie „wprowadzenia go w > nowy kierunek”, jak mówisz. >> Chociaż nie jest to nielegalne, jest nieetyczne. Wygląda na to, że strona GitHub nowego projektu nawet nie wskazuje, że jest to widelec w typowy sposób GitHub, wybierając zamiast tego łatwo usuwalną sekcję Historia (patrz na dole). Więc moje pytania brzmią: 1. Czy działanie Xamarina i sposób, w jaki zostało wykonane, było etyczne, czy nie? 2. Czy można uniknąć takiej sytuacji, jeśli jesteś pojedynczym deweloperem lub małą niefinansowaną grupą deweloperów? Mam nadzieję, że może to być pytanie wiki lub pojawią się obiektywne odpowiedzi oparte na współczesnej etyce/filozofii OSS.


title: Jak rozpocząć karierę na 3-letnim dyplomie?

text: Uzyskałem tytuł licencjata z Com S (drugi kierunek z matematyki) w grudniu 2011. Nie miałem najlepszego GPA (byłem doskonały w projektach programistycznych i miałem głębokie zrozumienie koncepcji CS, ale szkoła generalnie nie jest najlepszym formatem za pokazanie moich mocnych stron), a mój jedyny staż odbył się w nieistniejącym już startupie. Po ukończeniu studiów starałem się o kilka prac, miałem sporo rozmów kwalifikacyjnych, ale nigdy nie zostałem zatrudniony. Po pewnym czasie trochę się zniechęciłem i chociaż wciąż mówiłem, że szukam i od czasu do czasu o coś prosiłem, moje tempo znacznie zwolniło. Jestem przekonany, że rozwój oprogramowania jest dla mnie właściwa i że mógłbym wnieść prawdziwy wkład w czyjąś siłę roboczą, ale nie wiem, jak mogę kogoś o tym przekonać. Moje główne problemy są następujące. 1. Brak doświadczenia zawodowego – problem każdego początkującego programisty, jak sądzę, ale każdy wydaje się chcieć kogoś, kto ma kilka lat na pasie. 2. Zardzewiałość-- Tak naprawdę nie robiłem żadnego programowania od około roku, a od szkoły jedyne, co robiłem, to różne konkursy programistyczne i łamigłówki. (kodeks kucharz, hakerrank itp.) Potrzebuję sposobu na wyostrzenie swoich umiejętności. 3. Długotrwałe bezrobocie – podczas gdy po ukończeniu studiów miałem podstawową pracę w fast foodach, jestem naprawdę bezrobotny od około roku. Co więcej, nikt nigdy nie zatrudniał mnie jako programisty, a każdy potencjalny pracodawca może się zastanawiać, dlaczego. 4. Stare referencje – moje referencje to wszyscy profesorowie college'u i jeden promotor z mojego stażu, z którym nie miałem żadnego kontaktu od czasu ukończenia studiów. 5. Pewność siebie — nie mam wątpliwości, że mógłbym być dobrym profesjonalnym programistą i uszczęśliwić prawie każdego pracodawcę, że mnie zatrudnił, ale zdaję sobie sprawę z moich czerwonych flag jako kandydata i trudno mi pewnie podążać na rozmowę kwalifikacyjną. Jak mogę przezwyciężyć te problemy i nie dopuścić do końca mojej kariery przed jej rozpoczęciem?


title: Sterowanie sprzętowe na jednym komputerze. Ale co powiesz na kilka?

text: Przez jakiś czas zastanawiałem się nad pytaniem, czy istnieje sposób na umożliwienie wielu programom kontrolowania wielu urządzeń sprzętowych w sieci, biorąc pod uwagę standardową specyfikację interfejsu. Program z którym pracuję to standardowa implementacja standardu ASCOM. Krótko mówiąc, zasada jest taka, że każdy program może wywołać inny znany program lub sterownik i oczekiwać, że (z punktu widzenia komputera) zaimplementuje pewne standardowe interfejsy, umożliwiając programowi wywołującemu sterowanie sprzętem. Obecnie używamy do tego tylko COM i .NET. Dzięki temu wielu różnych producentów sprzętu i oprogramowania może tworzyć oprogramowanie i sterowniki, które współpracują ze sobą. Do tej pory staje się to dość standardowe, wliczając w to standardowe firmy dostarczające sterowniki do teleskopów. W grupie ASCOM _rozmawialiśmy_ o tym, jak to zrobić w sieci, ale ponieważ jesteśmy bardziej grupą użytkowników z kilkoma podstawowymi programistami, nigdy nie byliśmy w stanie naprawdę zdecydować, jaki jest dobry sposób, aby to zrobić. Aby lepiej zrozumieć sytuację, ponieważ stworzyłem już system weryfikacji koncepcji, który działa, oto kilka pytań. 1. Jakie transporty/potoki/interopy są dostępne w większości lub we wszystkich językach w różnych systemach operacyjnych? A może transportowy system operacyjny jest specyficzny? Mam na myśli, na przykład, interop COM jest w systemie Windows. Czy istnieje odpowiednik na przykład w Linuksie, który działałby tak samo, a język mógłby być używany zamiennie? Większość języków obsługuje IO sieci. Czy musimy to wykorzystać do komunikacji międzyprocesowej, czy są inne opcje? 2. Aby stworzyć coś naprawdę niezależnego od platformy i języka, musiałoby to prawie mieć do czynienia z ciągami tekstowymi, a nie obiektami binarnymi. Jakie są standardowe formaty i jakie są zalety i wady każdego z nich. 3. Co myślisz o współpracy wielu języków na jednym komputerze? Czy to może działać dobrze? Międzyprocesowe czy też wewnątrzprocesowe? 4. Czy coś takiego jak ASCOM robi się w jakiejkolwiek innej dziedzinie informatyki? A może astronomowie są jedynymi ludźmi, którzy łączą ze sobą różne programy i urządzenia sprzętowe, aby uzyskać jeden działający system? Jeśli potrzebujesz więcej informacji, nie wahaj się zapytać. Strona główna standardów ASCOM jest krótka i miejmy nadzieję, że może pomóc nieco zilustrować sytuację, ale nie oczekuję, że będziesz czołgać się po całej witrynie, zanim będziesz mógł odpowiedzieć. :D


title: Jaki jest termin na ponowne zaimplementowanie starego API pod kątem nowszego API?

text: Powodem tego jest rozwiązanie sytuacji, w której nowsze API nie jest już kompatybilne wstecz ze starszym API. Aby wyjaśnić, po prostu powiedz, że istnieje stare API v1.0. Twórca tego API decyduje, że jest zepsuty i pracuje nad nowym API v1.1, które celowo łamie kompatybilność ze starym API v1.0. Teraz żadne programy napisane na starym API nie mogą być rekompilowane tak, jak są, z nowym API. Następnie powiedzmy, że istnieje duża aplikacja napisana na starym API, a programista nie ma dostępu do kodu źródłowego. Rozwiązaniem byłoby ponowne zaimplementowanie „niestandardowego” starego API v1.0 pod kątem nowych wywołań API v1.1. Tak więc "niestandardowe" API v1.0 w rzeczywistości zachowuje ten sam interfejs/metody co API v1.0, ale wewnątrz swojej implementacji faktycznie wywołuje nowe metody API v1.1. Dzięki temu dużą aplikację można następnie skompilować i połączyć z „niestandardowym” interfejsem API v1.0 i nowym interfejsem API v1.1 bez większych zmian w kodzie źródłowym. Czy istnieje określenie na tę praktykę? _Jest niedawny przykład tego w przeniesieniu XScreenSaver na iPhone'a przez Jamiego Zawińskiego — ponownie zaimplementował OpenGL 1.3 API pod kątem OpenGL ES 1.1 API. W tym przypadku OpenGL 1.3 reprezentuje „stary” interfejs API, a OpenGL ES 1.1 reprezentuje „nowy” interfejs API._


title: Czy umieszczenie doświadczenia w programowaniu z samoukiem w uniwersyteckim CV (informatyka) to dobry pomysł?

text: Chciałabym wiedzieć, czy umieszczenie moich prób programowania w uniwersyteckim CV to dobry pomysł. Z jednej strony może to pokazać, że jestem chętny i chętny do nauki, ale z drugiej może wydawać się tandetny i trochę zawyżony. Czy mogę również powiedzieć, że mam doświadczenie w języku programowania X, nie będąc w tym w pełni pewnym?


title: Jakie tematy/umiejętności są kluczowe w nauce języka programowania?

text: Jakie tematy/umiejętności są ogólnie akceptowane jako niezbędne do poznania dowolnego języka programowania? (Można jednak odpowiedzieć za pomocą sugestii specyficznych dla języka lub niespecyficznych) Na przykład założę się, że „Struktury danych” będą jednym z nich. Lub jeśli chodziło o naukę języka obcego (nie związanego z programowaniem), „koniugacja czasowników” może być jednym z nich. Znalazłem to, co jest pomocnym początkiem: http://www.indiageek.net/wp-content/uploads/Programmer%20competency%20matrix.htm


title: Pytanie dotyczące projektowania w języku Java

text: Rozważam opcje projektowania systemu w java, który akceptuje pliki danych z różnych systemów, stosuje pewne przekształcenia danych, łączy dane z wielu plików w celu wytworzenia niektórych plików danych wyjściowych dla systemów podrzędnych. Przekształcenia danych nie są przekształceniami na rekord, np. Muszę przeczytać rekord, a następnie przeszukać plik w poszukiwaniu innego rekordu pasującego do wzorca danego pola z pierwszego rekordu, o którym myślałem o partii wiosennej, ale zostałem poproszony o rozważenie innych opcji. Uprzejmie pomóż we wszelkich wskazówkach, rzeczach do rozważenia podczas projektowania i oceny opcji.


title: Czy są jakieś statystyki dotyczące częstotliwości odczytywania kodu?

text: Często spotykam się z twierdzeniami, że kod źródłowy jest czytany o wiele częściej niż jest napisany i chciałem tylko trochę policzyć, jak: > Jeśli napiszesz linię, której przeczytanie zajmuje mi 5 minut dłużej, ponieważ byłeś > zbyt leniwy, aby napisać komentarz przez 5 minut będzie nas kosztował n*X, jeśli 5 minut > czasu programisty kosztowało X. Wtedy zdałem sobie sprawę, że nie tylko brakuje mi n do obliczeń, ale nigdy nie widziałem żadnych dowodów na to, że kod jest czytany o wiele więcej niż jest napisane. Czy to tylko podejrzany argument „no cóż, jest napisany tylko raz, więc trzeba go dużo więcej czytać”, czy są jakieś badania na ten temat, o których wiesz?


title: Ocena pełnej wersji oprogramowania innych osób

text: Mam pewne trudności z oceną wersji oprogramowania: oprogramowanie zostało zapłacone przez klienta lata temu, nigdy nie było używane, a teraz klient zauważył, że nie działa zgodnie z oczekiwaniami. Teraz ten klient poprosił mnie o ocenę projektu (mam źródła) i powinienem podać oszacowanie czasu na naprawę i prawdopodobnie umowę serwisową. Jednak po całodziennej analizie kodu zauważam, że baza kodu źródłowego jest bardzo zła. Oto kluczowe cechy: * Dużo linii źródłowych (140K+) * C++ bez klas, wszystkie statycznie alokowane, wszystkie zewnętrzne, wszystkie publiczne * Słabe komentarze, słaba dokumentacja * Kilka ostrzeżeń, liczonych ponad 7K+ razy. Ostrzeżenia rozciągają się od _niezgodności ze znakiem/niezgodnością_ do _zmiennych z aliasami_ , aż do _zmiennych niezainicjowanych_. * Narzędzia do analizy statycznej sygnalizowały przepełnienia bufora, nieprzypisane zmienne, podejrzane operacje na ciągach. * Dużo wielowątkowości i w ogóle brak sekcji krytycznej. Kod się skompiluje, ale tylko wersja "debugowa" będzie w stanie działać przez krótki czas. Podejrzewam, że przepełnienia bufora działają wystarczająco. Taki kod już spotkałem, nie dziwię się, że nie działa on zgodnie z oczekiwaniami. Teraz zastanawiam się, jak podołać temu zadaniu w najwygodniejszy sposób i oto co pomyślałem: * Napraw wszystkie ostrzeżenia kompilatora. * Napraw wszystkie ostrzeżenia analizy statycznej * Zapewnij wyłączny dostęp do danych współdzielonych przez wiele wątków * Włącz `_HAS_ITERATOR_DEBUGGING` do debugowania dostępów `std::vector` (wektor jest często używany). Oznacza to przynajmniej aktualizację do VS 2005. * Używa debugowania sterty CRT tak często, jak to możliwe, nawet jeśli oznacza to przeniesienie większości zmiennych globalnych do alokacji na stercie. * Rozległe użycie asercji (wraz z tworzeniem minizrzutu do analizy pośmiertnej) * Wyczerpujące przypadki testowe w celu sprawdzenia/testowania odporności oprogramowania. Chciałbym przygotować testy jednostkowe, ale powinienem dokonać refaktoryzacji metod z ponad 2500 liniami, a dodałoby to wystarczająco dużo bólu, aby się poddać. Myślę, że mam dobry plan, a może jestem tylko we właściwym kierunku. Myślę, że brakuje mi pomiaru, aby ocenić pracę, z którą mógłbym się zmierzyć. jakieś pomysły?


title: Uzasadnienie fałszywych wartości

text: Zastanawiam się, jakie są argumenty za/przeciwko wartościom Falsy. Na jakich zasadach zdecydowalibyście się dodać lub wykluczyć je z języka? Czy są jakieś problemy, które mogą powodować od ręki? Dla użytkowników języków, które obsługują wartości Falsy: * Gdzie konkretnie wykorzystałeś je na swoją korzyść? * Gdzie miałeś z nimi nieprzyjemne wpadki? * Czy w Twoim języku/projekcie/zespole istnieją jakieś zasady lub szczegóły dotyczące tego, gdzie ich używanie jest właściwe lub niewłaściwe? Dla użytkowników innych języków: * Czy kiedykolwiek zdarzyło Ci się, że pomyślałeś „Chciałbym użyć tutaj wartości Falsy”? Oznaczam pytanie `haskell` i `python`, ponieważ AFAIK te dwa reprezentują przeciwne końce spektrum (Haskell wymaga `Bool`s, gdy używasz `if`, a Python traktuje `None` i niektóre „puste” wartości jako Fałszywe), ale możesz porozmawiać o swoich doświadczeniach z innych języków. Wystarczy wspomnieć, gdzie w spektrum się znajdują.


title: Czy zakład Javascript to przegrany czy zwycięski?

text: Ostatnio miałem wrażenie, że świat próbuje przeportować _każdą_ istniejącą aplikację w HTML5. Namacalnym dowodem jest rozpowszechnianie się JavaScript API, które ma zaspokoić niemal wszystkie potrzeby programistów. API na każdy gust: grafika (2D/3D), audio, wideo, komunikacja w czasie rzeczywistym, dostęp do systemu plików, pamięć stała, baza danych, łączność i wiele innych. Wszystko wydaje się naprawdę fajne, ale szkoda, że u podstaw mamy Javascript. Teraz nie mogę powiedzieć, że jestem prawdziwym programistą JavaScript na co dzień, a nikogo takiego nie znam, dlatego moje doświadczenie nie jest tak znaczące, ale ostatnim razem pisałem kilka prototypów, aby zobaczyć, które może być ograniczeniem HTML5. Wynik był dla mnie zniechęcający. Uważam, że sam język, kiedy piszę coś bardziej skomplikowanego niż zajmowanie się manipulacją DOM i obsługą zdarzeń, nie jest _poręczny_ (czytaj: konserwowalny, czytelny, udostępniany, ..). Ale prawdziwym problemem nie jest składnia, która może być kwestią gustu, ale fakt, że widzę upór ludzi, którzy próbują zrobić _uniwersalny_ język z Javascript, z przeglądarką działającą jak swego rodzaju Maszyna wirtualna, którego w rzeczywistości nie ma i nigdy(?) nie będzie. Dostępność nowych interfejsów API z pewnością stwarza wiele możliwości, a programiści próbują z nich korzystać, ale w końcu mogą w końcu walczyć z nieuniknioną i nieodłączną powolnością języka. Powolny język, nawet z każdą możliwą błyszczącą cechą, pozostaje językiem powolnym, aw niektórych przypadkach jest to prawdziwa granica. W ciągu ostatnich 5/6 lat widzieliśmy naprawdę ogromne ulepszenia w inżynierii JavaScript, ale dzisiaj JavaScript jest nadal powolnym językiem i mam wrażenie, że nie ma już miejsca na wielkie ulepszenia. Co teraz? Z GWT (który, jak sądzę, osiągnął już szczyt), Google chciał uprościć życie programistów, odbierając im Javascript i oferując wszelkiego rodzaju optymalizacje, aby wycisnąć Javascript do granic możliwości. Następnie Google stworzył nowy język, dart, z własną maszyną wirtualną działającą w przeglądarce ([Dartium]), która dąży do całkowitego zastąpienia JavaScript w każdej przeglądarce; w międzyczasie zawsze możesz skompilować go do JavaScript (tak jak robi to GWT). Mozilla stworzyła asm.js, gdzie (jeśli dobrze rozumiem), można pisać aplikacje w C/C++, kompilować kod z clangiem uzyskując kod bitowy LLVM, który można ponownie skompilować w (małym podzbiorze) Javascript, który, jeśli wykonywany w specjalnej wersji Firefoksa, może osiągnąć doskonałą wydajność. Teraz, jako programista, piszę prawdziwy program HTML5, w którym muszę walczyć ze słabą wydajnością Javascript, i widzę, że świat zastanawia się, próbując znaleźć egzotyczne sposoby na przezwyciężenie tego problemu, i zadaję sobie pytanie: czy czy utrzymywanie Flasha (lub równoważnych technologii) przy życiu jest tak złą rzeczą? Czy ten _hype_ Javascript (przesadzam tutaj..) nie jest po prostu próbą sprawienia, aby zachowywał się inaczej niż w rzeczywistości? Czy tylko ja widzę ten trend?


title: Mieszanie skryptu transakcji Fowlera i modelu domeny

text: Zajmuję się tworzeniem dużej aplikacji, w której poprzedni deweloper wykorzystał wzorzec Martina Fowlera Transaction Script. Wymagania stają się coraz bardziej złożone i staje się to trochę koszmarem konserwacji. Dlatego zacząłem używać Fowler Domain Model i Table Data Gateway w celu oddzielenia obaw i ponownego wykorzystania kodu. Staje się procesem refaktoryzacji. Moje pytanie brzmi: czy mieszanie i dopasowywanie wzorców to zła praktyka? np. używanie skryptu transakcji i modelu domeny w tej samej aplikacji, czy jest to stosunkowo powszechna praktyka?


title: Właściwy model UML systemu dla szefa nietechnicznego

text: Podjąłem się pracy pobocznej dla tej organizacji non-profit, a ostatni tydzień był moim pierwszym w pracy. Mają dwie bazy danych SQL Server, każda z wieloma tabelami, które reprezentują ponad 20 różnych aplikacji, takich jak * **Rejestracja na kursy** — Trenerzy mogą zarejestrować się, aby uczyć różnych dostępnych zajęć * **Formularz zatwierdzania kursów** — trenerzy wypełniają ten formularz, aby uzyskać akceptację nowych kursów do dodania do listy dostępnych zajęć. * **Harmonogram** - harmonogram ważnych dat semestru (wakacje, data rozpoczęcia zajęć itp.) * **Trener** - lista wszystkich trenerów i inne informacje o trenerze (dane kontaktowe, wykształcenie, itp.) ) * **Kalendarz szkoleń** – lista, na którą uczniowie mogą przejrzeć, aby zobaczyć, co jest dostępne w bieżącym semestrze * **Plan szkolenia** – raport, który jest drukowany dla ucznia ze wszystkimi zajęciami, na które się zapisali * **Certyfikat** - Wydrukuj certyfikat dla ucznia po ukończeniu szkolenia Istnieje około 15 innych aplikacji, ale wszystko dotyczy trenerów, szkoleń, kursów, studentów itp. Te dane są wszędzie, tak jak są nie trzeba wykonywać żadnych relacji między tabelami i bardzo żmudnymi procesami, aby wykonać proste zadanie. Na przykład dla każdego nowego terminu musisz skopiować dane ze „starej” tabeli, utworzyć nową tabelę, wkleić stare dane do nowej tabeli i dołączyć nowe dane dla bieżącego terminu do nowej tabeli. Mamy więc tabelę dla każdego semestru (3 semestry w roku) z ostatnich 10 lat, a to dopiero początek. Jest dużo kopiowania i wklejania z Excela do SQL Server, aby uzyskać dane do bazy danych i ich frontonu do manipulowania danymi isMS Access, które chciałbym zastąpić ASP.NET (mają IIS 7). Aby poprawnie to zaprojektować i mieć dobrą dokumentację, zainstalowałem Visio 2013 i uczę się UML. Żeby szef mógł dokładnie wiedzieć, jak ten system zostanie przebudowany i jak wszystkie elementy będą do siebie pasować, jaki diagram UML powinienem dla niego stworzyć? Czy to byłby schemat komponentów? Muszę dać mu widok 10 000 stóp, więc coś w rodzaju przypadków użycia, sekwencji lub diagramów bazy danych jest dla niego sposobem na niski poziom.


title: C++ dlaczego i jak funkcje wirtualne są wolniejsze?

text: Czy ktoś może szczegółowo wyjaśnić, jak dokładnie działa wirtualna tabela i jakie wskaźniki są powiązane, gdy wywoływane są funkcje wirtualne. Jeśli faktycznie są wolniejsze, czy możesz pokazać, że czas potrzebny na wykonanie funkcji wirtualnej jest dłuższy niż normalne metody klasowe? Łatwo stracić orientację, jak/co się dzieje, nie widząc kodu.


title: Czy istnieje wzorzec projektowy do zarządzania zależnościami?

text: Buduję składnik, który zarządza dostępnymi zasobami (pliki JavaScript i CSS) dla strony sieci web. Gdy kontrolki są dodawane do strony, rejestrują i wyrejestrowują swoje wymagania u tego menedżera. Następnie w czasie renderowania menedżer renderuje tylko znaczniki `<script>` i `<link>` dla wymaganych zasobów. Podstawową implementacją byłoby posiadanie słownika z adresem URL zasobu jako kluczem i listą zależnych kontrolek jako wartością. Następnie w czasie renderowania, jeśli lista jest pusta, nie renderuj zasobu. Zastanawiam się, czy istnieje na to ustalony wzór? Używam ASP.NET i C#, jeśli to bares jakiekolwiek znaczenie. **AKTUALIZACJA** Myślałem o tym i podczas gdy menedżer kontroluje zależności kontrolek strony, fakt, że są one zależnościami, jest prawie zbędny dla mojego pytania. Myślę, że to, czego szukam, to coś w rodzaju wzorca obserwatora, ale obserwatorzy nie wymagają powiadamiania, menedżer po prostu musi prowadzić listę subskrybentów.


title: Silverlight 5 i MVVM. Czy naprawdę potrzebuję innych frameworków? Jaki jest najlepszy sposób na szybki rozwój?

text: Czytałem i oglądałem filmy na MVVM i Silverlight.. Jestem całkiem nowy w Silverlight, ale nie nowy w .NET. Ciekawe, że użyłem MVVM w moich aplikacjach WPF, nie wiedząc, że jest to MVVM. Tworzyłem klasy, które można łatwo powiązać, aby służyły jako warstwa między danymi a XAML :) Projekt, który uruchomimy, będzie wykonywany z Silverlight 5 i WCF na zapleczu. Projekt będzie dość duży z kilkoma modułami po 50 lub ekranów każdy, najlepiej chciałbym je załadować na żądanie. MOST (nie wszystkie) UI będzie prostym wprowadzaniem danych. Staram się zobaczyć, jaka powinna być nasza architektura i jakie przyniesie ona korzyści w przyszłości. Myślę, że mam TO, jeśli chodzi o to, co MVVM i DLACZEGO. Sprawdziłem też Caliburn Micro (i zrozumiałem, co robi). Widzę ReactiveUI i MVVMLight. Szczerze mówiąc nie lubię zewnętrznych bibliotek/zależności. Poza tym naprawdę nie dbam o używanie konwencji nazewnictwa, aby zadowolić zewnętrzne ramy i doskonale współpracować z wiązaniem w XAML. Ponieważ mamy dobrą obsługę poleceń i debugowanie XAML w SL5 - nie sądzę, że potrzebuję zewnętrznego frameworka. Tak więc myślę, że posiadanie ViewModels i wiązanie za pośrednictwem XAML z minimalnym kodem związanym z widokiem w kodzie będzie dla mnie doskonale w porządku. Oto mój dylemat: 1. Czy korzystam z usług RIA. 80% mojego interfejsu użytkownika będzie się doskonale łączyć z materiałami generowanymi przez RIA z niektórymi konwerterami. Czy złą architekturą będzie posiadanie bezpośredniego wiązania wszystkiego i tylko bardziej złożonych widoków do korzystania z ModelView? 2. Czy powinienem korzystać z usług RIA?! Myślę, że tak. Jestem całkowicie za wygenerowanym kodem, zwłaszcza gdy jest to zwykłe wprowadzanie danych. Czy zachowa synchronizację kodu klienta z serwerem? 3. Z tego co widzę - ModelView muszą być ręcznie zakodowane. Mam rację? Ponownie, dla 80% projektu prawdopodobnie będzie to strata wysiłku. 4. Jeśli chcę mieć wiele plików xap, które ładują się na żądanie, czy powinienem użyć jakiegoś frameworka? Myślę, że trzymanie go w jednym pliku może być zbyt duże. Dziękuję!


title: Najmniejszy zestaw obiektów, które sumują się do określonej wartości

text: Staram się napisać algorytm, który przy określonej liczbie kredytów i zbiorze obiektów o różnych wartościach oblicza: 1) Najmniejszy zbiór obiektów, których wartości sumują się do liczby kredytów. 2) jeśli 1 jest niemożliwe (żadna kombinacja nie sumuje się do liczby kredytów) znajduje zbiór obiektów, który jest najbliższy ilości kredytów (suma musi być ściśle mniejsza niż liczba kredytów). Jeśli więcej niż jeden zestaw sumuje się do tej samej liczby kredytów, należy zwrócić najmniejszy zestaw. Przez najmniejszy zestaw rozumiem zestaw z najmniejszą liczbą obiektów. W języku angielskim: staram się zapłacić cenę jak najmniejszą możliwą ilością przedmiotów. Jeśli nie można tego osiągnąć, chcę zapłacić jak najbliżej takiej kwoty (mniej niż) przy jak najmniejszej liczbie przedmiotów. proste przykłady: kredyty: 6 obiektów: 10 5 2 2 2 Wynik: 2 2 2 kredyty: 10 obiektów: 5 2 11 2 1 5 Wynik: 5 5 kredyty: 9 obiektów: 5 2 10 Wynik: 5 2 Zastanawiałem się, czy istnieje to jakikolwiek algorytm już opracowany do przeprowadzenia takiego wyszukiwania.


title: Jak możemy skrócić czas przestoju pod koniec iteracji?

text: Tam, gdzie pracuję, ćwiczymy agile oparte na scrumie z 3-tygodniowymi iteracjami. Tak, byłoby fajnie, gdyby iteracje były krótsze, ale zmiana tego nie jest obecnie możliwa. Pod koniec iteracji zwykle stwierdzam, że ostatni dzień mija bardzo wolno. Faktyczna praca została już ukończona i zaakceptowana. Jest kilka spotkań (retrospektywa i planowanie kolejnej iteracji), ale poza tym niewiele się dzieje. Jakich technik możemy jako zespół użyć, aby utrzymać tempo przez ostatni dzień? Czy powinniśmy zająć się wadami? Czy mimo wszystko wcześnie rozpocząć pracę w następnej iteracji? Coś innego?


title: Czy niektóre języki ułatwiają tworzenie graficznych interfejsów użytkownika?

text: Zrobiłem algorytm, który ma dobre potencjalne zastosowanie w aplikacji komercyjnej. Zastanawiam się nad stworzeniem GUI, a ponieważ jest to obliczeniowo drogie, myślę o umieszczeniu go „w chmurze”, aby zaoferować część numeryczną jako usługę. To, co myślę, to tworzenie GUI, a następnie użytkownicy przesyłają pracę na serwer. Ten GUI mógłby być otwartym oprogramowaniem (w rzeczywistości najprawdopodobniej będzie). GUI ma dużo grafiki. Wyobraź sobie coś w rodzaju robienia kilofów na wykresach powierzchniowych, przyglądania się tym wyborom za pomocą różnych narzędzi i używania matematyki numerycznej na tych kilofach. Czy istnieją języki, które ułatwiają tę pracę? Co konkretnie w ich przypadku pomaga w tworzeniu takich GUI?


title: Jak nauczyć brata programowania?

text: Mój brat ma 12 lat i kilka razy prosił mnie, żebym nauczył go programować. Jestem przekonany, że nie jestem kiepskim programistą, ale nie uważam się za skutecznego nauczyciela. Nauczyłem się większości tego, co wiem, korzystając z książek i sieci. Pożyczyłem mu książkę „Head First iPhone Development”, która najwyraźniej przewyższała go, ponieważ on – tak jak ja w tym wieku – uwielbia czytać fikcję, ale nienawidzi książek technicznych i nie ma wcześniejszego doświadczenia. Poprosiłem go również o pomysł na aplikację, a on wymyślił coś, co obejmowało modelowanie 3D i tym podobne. To wspaniale, że aspiruje wysoko, ale wątpię, żeby miał wystarczająco dużo cierpliwości, by nauczyć się na tyle, by zdobyć cierpliwość, by nauczyć się reszty. Jest zdecydowanie bystry i udało mi się mu wyjaśnić pojęcie zmiennych. Uczęszczam na kurs C++ na studiach i prawdopodobnie mogę mu to przekazać. Czy to głupi pomysł? Co sugerujesz? Czy powinienem nadal go zachęcać? Jeśli tak, jakie materiały powinienem zaproponować?


title: TTS w App Engine

text: Napisałem mały frontend do systemu Festival TTS przy użyciu Pythona/Django. Chcę go wdrożyć w chmurze Google App Engine. Kilka pytań: 1. Moja aplikacja korzysta z aplikacji festiwalowej 'text2wave'. Czy będzie praca w chmurze? 2. Użyłem prymitywów Pythona, takich jak subprocess.call(), aby wywołać wyżej wymieniony program. Czy to będzie działało? 3. Jeśli Twoja odpowiedź na którekolwiek z punktów (1) i (2) brzmi nie, czy w sieci jest darmowe API, z którego mogę korzystać (z appengine)? Czytałem gdzieś o nawiązywaniu połączeń z Phono do zaplecza Voxeo, ale nie jestem pewien, co to znaczy. Wiem o rozszerzeniu Google Translate, które umożliwia tłumaczenie za pomocą żądania HTTP GET (REST), ale tutaj tekst jest ograniczony do 100 znaków. Zły. Dodatkowo mogą go usunąć w dowolnym momencie.


title: czy możemy skalować rzucając kamieniem rubinowym?

text: 1. Słyszałem, jak programiści w moim biurze dyskutowali, że język Ruby może być używany do następujących celów: aplikacje komputerowe, aplikacje internetowe i mogą być urządzeniami przenośnymi. Właściwie jesteśmy w fazie wyboru technologii, która będzie mieć skalowalność w następujący sposób: 2. Mam - Ruby stworzył aplikacje desktopowe dla każdej jednostki magazynowej dużej firmy. I chcesz zsynchronizować wszystkie istotne dane z tych aplikacji komputerowych z aplikacją internetową DWarehouse, taką jak Dropbox, w celu wykonania niektórych prac ontologicznych i górniczych. I chcesz mieć jakąś bezprzewodową aplikację do czatu również na telefonach, takich jak WhatsApp, aby pomóc w szybszej komunikacji między kierownikami jednostek magazynowych. 3. Czy możemy więc uzyskać szybszą, dobrą kompilację aplikacji komputerowych, aplikacji internetowych i aplikacji do czatu na telefonie przy użyciu technologii ruby. 4. I wiem, że ruby nie może być skalowany w przypadku dużego obciążenia pracą, to co możemy zrobić później, powinniśmy uzyskać wsparcie dla javy lub php, aby skalować bazę aplikacji lub jest jakaś opcja chmury dla ruby.


title: Jakie funkcje IDE sprawią, że będzie bardziej przydatne niż edytor ogólnego przeznaczenia?

text: Jestem autorem IDE dla języka Lua. Uważam, że wielu programistów nie lubi używać IDE i woli VIM (który jest obecnie w modzie), SCiTE lub . Próbując zdobyć trochę dzielenia się umysłami, interesuje mnie, jakie funkcje może zapewnić IDE, które uczyniłyby z niego atrakcyjną alternatywę dla edytora ogólnego przeznaczenia. Czy istnieje „zabójcza aplikacja”, że tak powiem, dla IDE, które uczyniłoby ją „must-have”? Można to traktować jako odwrotność Najbardziej przydatnych funkcji VIM, które nie są standardowe w IDE. Nie połączę się z moim IDE, chyba że ktoś o to poprosi – ale możesz po prostu wygooglować moje imię i je znaleźć. EDYCJA: Moje IDE jest w rzeczywistości wtyczką językową dla istniejącego IDE, więc dziedziczę wiele funkcji z IDE hosta - na pewnym poziomie, chociaż moja obsługa języka jest samo w sobie IDE - przynajmniej w zakresie aspektów specyficznych dla języka zainteresowany.


title: Jestem w dość trudnej sytuacji zawodowej. Powinienem zostać czy iść?

text: Po wielu lekturach na tych forach wydaje mi się, że mój obecny pracodawca nie jest naprawdę świetnym miejscem do pracy i zastanawiam się, czy powinienem iść dalej, czy zostać trochę dłużej, a potem odejść, aby wyglądało lepiej w moim CV ( Byłem tu dopiero 3 miesiące). Rzeczy, o które martwię się w tej firmie * Całkowicie nietechniczny menedżer z niewielkim doświadczeniem w zarządzaniu, kierujący tym zespołem. W porządku w większej firmie, ale jesteśmy małym zespołem (< 10 pracowników) * W porządku sprzęt, ale nie ma wyboru systemu operacyjnego i nie możemy kupić żadnego przyzwoitego oprogramowania * Straszna pensja i brak nadgodzin, a nie wielkie korzyści * Obowiązkowe z biegiem czasu. Gdybym nie pracował mnóstwo nadgodzin, nic nie byłoby zrobione na czas i miałbym kłopoty * Utknąłem naprawiając stary kod, który jest okropnie napisany, niestabilny, nieudokumentowany i pełen błędów. Nie używamy go już, ale wielu klientów do utrzymania * Musimy śledzić cały nasz czas, rozliczany, nierozliczany i wewnętrzny * Brak bazy danych błędów (próbuję wdrożyć jedną, ciężko, ponieważ nie mam czasu odkąd Pracuję szalenie w nadgodzinach i chcę mieć trochę czasu dla siebie, kiedy to dostanę * Jestem jedynym programistą, więc pracuję dla firmy zajmującej się tworzeniem stron internetowych, która pracuje trochę z Joomla, a jestem facetem od PHP/Pythona z Javą /C++ doświadczenie i chęć nauki wielu innych języków.Mam również doświadczenie w dziedzinach technicznych, ale niezwiązanych z programowaniem, takich jak Administracja systemu.Zastanawiam się, czy powinienem nazwać to zakończeniem, poczekaj chwilę dłużej, abym mógł użyć pracę w moim CV lub spróbuj rozwiązać problemy, które mamy?


title: Szybki algorytm mnożenia oparty na transformacji Fouriera

text: Czy ktoś może wyjaśnić, jak wyraźniej wykonać algorytm mnożenia oparty na szybkiej transformacji Fouriera w bardzo dużych liczbach? Dużo tego szukałem i jest mi bardzo ciężko, ponieważ wszystkie wyjaśnienia, które otrzymuję, mają notację matematyczną reprezentowaną w postaci cyfr lub obrazów, a mój czytnik ekranu nie może ich odczytać. Czy ktoś może to wyjaśnić jaśniej? I z przykładami, jeśli to możliwe. Preferowany w Javie.


title: Implementacja deque w C++ z tablicą

text: W jaki sposób funkcja `end()` jest zaimplementowana w deque-STL C++ z tablicą? Zgodnie z moją wiedzą zwraca element przeszłości. Ale kiedy pętla jest uruchamiana jak `for(i=deq.begin();i!=deq.end();i++)` i cała tablica jest pełna (załóżmy size=4), wtedy myślę `end( )` wskaże pozycję, na którą wskazuje `begin()`, w ten sposób nie przejdzie do pętli for. Jak rozwiązać ten problem?


title: Pomoc w projektowaniu hierarchii dziedziczenia

text: Mam problem z zaprojektowaniem hierarchii dziedziczenia. Na rysunku: **Klasa bazowa:** * Używa metody szablonu. * Zawiera podstawową logikę/algorytm, który wywołuje metody wirtualne/abstrakcyjne **Typy pochodne:** * Te klasy zapewniają konkretną implementację metod wirtualnych/abstrakcyjnych oczekiwanych przez Base. **Warunki:** 1. Mam wirtualną metodę (Uruchom). 2. Domyślna metoda Run wykorzystuje inną metodę wirtualną (Proc). 3. Jeśli klasa pochodna używa domyślnego zachowania Run, musi zaimplementować Proc. 4. Jeśli klasa pochodna nadpisuje zachowanie Run, to nie powinna przejmować się istnieniem Proc, nie mówiąc już o jego nadpisywaniu. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/fPlc6.png) Rozważałem uczynienie Run() abstrakcyjnym i umożliwienie każdej klasie pochodnej samodzielnej obsługi. Ale wtedy skończę z duplikatem kodu. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/kJ5Gp.png) Używam tutaj uproszczonego przykładu. W moim rzeczywistym projekcie mam kilka wirtualnych metod typu „Run”, z których każda wywołuje kilka metod typu „Proc”. Z tego powodu mam całą masę wirtualnych metod "Proc" z "throw new NotImplementedException()" Tworzenie nowego typu pochodnego jest również mylące, ponieważ koder może nie wiedzieć, które metody wirtualne muszą zostać zaimplementowane/może być zignorowane/itd . Rozważałem użycie wzorca strategii, ale ponieważ mam kilka metod „uruchamiania”, każda z nich musiałaby być strategią, co wydaje się przesadą/przesadną inżynierią. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/IWsqE.png) Czy jest jakiś sposób na uproszczenie tego? * * * **[Aktualizacja 1]** Oto przykład, który jest bliższy metodom, z którymi pracuję ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/rsuoV.png) I wyobraź sobie jeszcze inną metodę: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/QXu3b.png)


title: Jaki jest pożytek z przedrostka "for(;;);" w odpowiedzi Ajax

text: Po użyciu debuggera chrome do sprawdzenia żądań ajax Facebooka (dla ciekawości), zauważyłem, że odpowiedź jest w formacie JSON, jednak zawsze jest poprzedzona for(;;); Na przykład, jeśli JSON byłby `{hello:"world"}`, wtedy Facebook odpowiedziałby na(;;); {hello:"world"} Czy to ma jakiś pożytek? Wyobrażam sobie, że musi mieć jakiś cel...


title: Czy w C++ jest to odzwierciedleniem złego projektowania oprogramowania, jeśli obiekty są usuwane ręcznie?

text: Czy wraz z pojawieniem się inteligentnych wskaźników to oznaka złego projektu, jeśli widzę, że obiekty są usuwane? Widzę niektóre składniki oprogramowania w naszym produkcie, które ludzie nadal to robią. Ta praktyka wydaje mi się nieidiomatyczna, ale muszę mieć pewność, że jest to konsensus branżowy. Nie zaczynam krucjaty, ale fajnie byłoby być przygotowanym teoretycznie. **Edytuj** : legalne zastosowania usuwania, Klaim wspomniał o przypadku użycia puli obiektów. Zgadzam się. Złe przykłady użycia usuwania, widzę wiele nowych w konstruktorze lub start() i odpowiadające im usuwanie w destruktorze lub stop(), dlaczego nie użyć scoped_ptr? Sprawia, że kod jest czystszy.


title: Czy mogę zostać pozwany za powielanie interfejsu użytkownika innego programu?

text: Jeśli zobaczę coś, co mi się podoba w innej aplikacji i stworzę coś podobnego od podstaw w produkcie komercyjnym, czy mogę zostać o to pozwany? Oczywiście byłby on stylizowany tak, aby wyglądał inaczej, jednak większość funkcjonalności byłaby taka sama, ponieważ funkcjonalność jest tym, co mi się w nim podobało. Nie byłby to też cały system, tylko część jednego. Mieszkam w US.


title: Przydział zasobów/wątków i zakleszczenie

text: Oto pytanie, z którym mam problem: > Podaj wykres zasobów i określ, czy nastąpiło zakleszczenie. Załóżmy, że gdy wątek żąda dostępnego lub nieprzydzielonego zasobu, system operacyjny natychmiast przydziela ten zasób do wątku. * Istnieją trzy wątki: T1, T2, T3 * Istnieją trzy zasoby: R1, R2, R3 Oto sekwencja zdarzeń: 1. Żądania T1 R1 2. Żądania T1 R3 3. Żądania T2 R2 4. Żądania T2 R3 5 . T3 żąda R1” Teraz napisałem wykres dla problemu. ![Pytanie dotyczące alokacji](http://i.stack.imgur.com/DeSE0.jpg) Czy odpowiednio narysowałem wykres? Na tej podstawie wykres, zakładam, że nie ma impasu, ponieważ nie ma cykli.Nie jestem pewien, czy moje rozwiązanie jest poprawne.Czy ktoś może pomóc to wyjaśnić?Dziękuję!


title: Pisanie zabójczego przypadku użycia dla zadania crona

text: Jestem początkujący, jeśli chodzi o pisanie przypadków użycia, ale dużo szukałem i większość materiałów, które znalazłem, wspominało, że podczas pisania przypadku użycia powinienem skoncentrować się na wartości biznesowej dla klienta. Przykład: Przypadek użycia dla strony wyszukiwania 1- Użytkownik otwiera stronę wyszukiwania 2- Użytkownik podaje wyszukiwane słowo 3- System prezentuje wyniki wyszukiwania Oczywiście łatwo było napisać przypadek użycia, ponieważ system miał jakiś rodzaj interfejsu użytkownika, który ten użytkownik wchodzić w interakcję. Co jednak, jeśli piszę przypadek użycia dla zadania crona? Rozwijałem moduł, który zasadniczo łączy się z kilkoma serwerami ftp w celu pobrania niektórych plików, a następnie pobrane pliki są analizowane w celu wygenerowania raportów, a na koniec te raporty są przesyłane na serwer ftp mojej firmy. Problem polega na tym, że jedyną wartością biznesową całego modułu jest generowanie raportów (tj. zespół, który zamówił ten moduł, dba tylko o raporty, a nie o nic innego). Oto przypadek użycia, który wymyśliłem: 1- System pobiera pliki z serwerów ftp. 2- System generuje raporty z plików. 3- System przesyła raporty na firmowy serwer ftp. Jednak gdy czytałem Applying UML and Patterns, 3. wydaną edycję, autor wprowadził przypadek użycia gry monopolowej w następujący sposób: ![przypadek użycia](http://i.stack.imgur.com/Ey1NZ.png) Cała gra w tylko 3 kroki!!! Pomyślałem, że skoro cały cel gry jest tylko symulacją, to może dlatego nie wspomniał o żadnych szczegółach, a może ja też powinienem zrobić to samo. * * * Teraz mam dokładnie 3 mieszane pytania: 1- Czy przypadki użycia powinny skupiać się wyłącznie na wartości biznesowej dla klienta i ignorować operacje wewnętrzne? 2- W przypadku wywołania zadania cron, jak określić wartość biznesową, jeśli klient nie ma żadnej interakcji z systemem? 3- Mój kolega całkowicie zaprzeczył mojemu podejściu i nalegał, abym napisał jak najwięcej szczegółów w przypadku użycia (ponieważ zamiast `System pobiera pliki z serwerów ftp` należy je rozłożyć na mniejsze funkcje, które tworzą tę funkcję, takie jak `pobierz listę serwerów z bazy danych`,`połącz się z serwerem ftp`, `sprawdź, czy są jakieś pliki`, `pobierz plik`,`usuń plik z serwera ftp`,`zamknij połączenie`) . Czy to prawda, czy lepiej?


title: Komunikacja między zasobem a serwerem autoryzacji/menedżerem tożsamości?

text: ## Krótkie Podczas projektowania / dla tworzonego przez nas interfejsu API zauważyliśmy, że niewiele można znaleźć na temat tego, jak serwer zasobów może zweryfikować token przekazany przez klienta za pomocą serwera autoryzacji/menedżera tożsamości. ## Dłużej Tak więc w naszym systemie serwer zasobów i menedżer tożsamości są oddzielnymi systemami (nazywamy to menedżerem tożsamości, ponieważ implementujemy tam również warstwę uwierzytelniania). Uważam, że całkiem dobrze rozumiemy, czym jest/definiuje oAuth, ale w wielu przykładach i zasadniczo w tym, jak zawsze wdrażaliśmy go w przeszłości (głównie eksperymentując), serwer autoryzacji i serwer zasobów były takie same. Ale w tej konfiguracji chcemy to podzielić. Ma to na celu oddzielenie uwierzytelniania/autoryzacji od rzeczywistego interfejsu API. Stwarza to problem, ponieważ oAuth 2.0 nie mówi nic o tym, jak następnie zweryfikować token na serwerze uwierzytelniania, o ile wiemy. Zrobiłem diagram ilustrujący sytuację. ![oAuth oddzielne systemy/komunikacja, uproszczono, dużo brakuje](http://i.stack.imgur.com/UbqRs.png) Mówię o komunikacji między **Menedżerem tożsamości** a **Zasobem server**, aby zweryfikować token. Mamy 2 proponowane rozwiązania problemu, ale nie jesteśmy pewni, co jest do zaakceptowania. 1. Możemy wykonać wywołanie (https) do Identity Manager z Serwera Zasobów, aby zweryfikować token i uzyskać zakres autoryzacji, buforować go przez dany okres życia. 2. Moglibyśmy również stworzyć współdzieloną (Redis?) pamięć podręczną (tylko dla tokenów), do której Resource Server uzyskuje dostęp tylko do odczytu. Zmniejszyłoby to obciążenie i bylibyśmy w stanie unieważnić tokeny z Identity Manager, po prostu usuwając je z pamięci podręcznej bez konieczności powiadamiania serwera zasobów. Ograniczylibyśmy dostęp do tej pamięci podręcznej, aby móc uzyskać dostęp tylko za pomocą kombinacji klient/token, więc nie ma opcji „pobierz wszystko”, jeśli nie jest ustawiona, zakładamy, że klient nie jest autoryzowany. Powodem, dla którego chcemy to zrobić, jest oddzielenie obowiązków i z czasem możliwość dodawania różnych serwerów zasobów (API), przy jednoczesnym utrzymaniu zarządzania użytkownikami w centrum naszej organizacji, chociaż obecnie byłoby to tylko jedno API. **Jaki byłby dobry sposób na rozwiązanie tego problemu?** Jedna z naszych sugestii czy coś zupełnie innego? Czy oAuth 2.0 mówi coś o tym, co przegapiłem? **P.S.** Znalazłem ten post dotyczący tego samego problemu, ale to nie odpowiada, co może być właściwym rozwiązaniem tego problemu w danej sytuacji. Będę szukał, aż znajdę coś, czego nie jestem pewien i opublikuję kierunek, w którym podążamy, jeśli nie otrzymam odpowiedzi :)


title: Opisowe nazewnictwo a 80 linijek znaków

text: Często słyszę te dwie wartościowe praktyki programistyczne: (1) wiersze kodu powinny mieć 80 znaków lub mniej oraz (2) używać opisowych nazw zmiennych, metod, klas itp. Rozumiem jednak uzasadnienie obu tych rad. , często wydają się być kompromisem między sobą. Jeśli trzymam kod poniżej 80 znaków na linię, używam mniej opisowych nazw (zwłaszcza w Pythonie, w którym każde wcięcie liczy się jako 4 znaki), ale jeśli używam bardziej opisowych nazw, kończę z liniami powyżej 80 znaków. Więc moje pytanie brzmi, która z tych dwóch rad jest ważniejsza do przestrzegania, jeśli trzeba dokonać wyboru? Zastanawiam się nad tym jako niezależny (hobbysta) programista, ale co ważniejsze z perspektywy inżyniera oprogramowania pracującego dla większej firmy.


title: Czy powinienem wydać kod źródłowy, aby naprawić błąd?

text: Mam błąd w aplikacji, którą tworzę. Zadałem pytanie na S.O. a jeden z użytkowników poprosił mnie o opublikowanie lub przesłanie mu całego kodu, aby mógł go obejrzeć. Całkowicie rozumiem prośbę. Jest słuszny i zrozumiały. Mam jednak wątpliwości, czy powinienem. Oczywiście daję mu/jej klucze do królestwa i nie będę miał żadnego odwrotu, jeśli zrobi coś złośliwego. **Chcę również dodać, że mam na myśli brak szacunku dla użytkownika na SO, który zaoferował swoją pomoc. Po prostu zgłaszam problem.** Chcę naprawić mój błąd, ale nie ma gwarancji, że ta osoba będzie w stanie go naprawić. Czy powinienem wydać cały kod źródłowy i mieć nadzieję na najlepsze? Czy zatrzymać go i spróbować sam to rozgryźć? Co byś zrobił?


title: Dlaczego pliki nagłówkowe są źle zaprojektowane?

text: to mówi, że pliki nagłówkowe są złym projektem, ale nie wiem dlaczego. Podane tam odpowiedzi dotyczą nieefektywności pliku nagłówkowego podczas budowania. Dlaczego jest to _zły projekt_, tak naprawdę nie zostało poruszone. Z tego co wiem: - nagłówki pozwalają rozbić plik źródłowy, dzięki czemu można szybciej kompilować mniejsze rzeczy - nagłówki pozwalają oddzielić interfejs od implementacji - nagłówki pozwalają określić funkcjonalność tylko w jednym miejscu. tj. bez powtarzania Jednak używanie dołączeń, dołączania osłon, nagłówków itp. jest uważane za zły projekt. Jak to? Jakie są alternatywy? -- EDYCJA: odp. Problemy z DRY Częstym argumentem jest to, że narusza DRY, ponieważ powtarzasz zmiany w podpisach zarówno w plikach .cpp, jak i .h. Jeśli jednak kod jest zaprojektowany do ponownego wykorzystania funkcjonalności określonych w plikach zewnętrznych, czy nie jest nieuniknione, że trzeba użyć plików nagłówkowych? Pytanie brzmi, dlaczego pliki nagłówkowe są złym projektem, ale bez nagłówków, czy modułowość nie jest stracona? Jeśli utracona zostanie modułowość, czy nie jest to samo w sobie problemem projektowym? W ten sposób użycie plików nagłówkowych pozwala uniknąć oddzielnego problemu projektowego. Ogólnie rzecz biorąc, powtarzanie jest złym pomysłem, rozumiem, ale wydaje się nieuniknione, jeśli potrzebujesz wspólnej funkcjonalności. W takim przypadku nagłówki są złe, jeśli chodzi o powtarzanie podpisów. Jeśli chodzi o sposób projektowania oprogramowania, jestem skłonny powiedzieć, że dzielenie kodu w górę/modularyzacja i ponowne użycie kodu oznacza, że kod jest dobrze zaprojektowany.


title: Uruchamianie Java Web Services i poczucie zagubienia

text: Po zbudowaniu głównie aplikacji Java na komputery i kilku małych usług GWT, próbuję nauczyć się budować usługi sieciowe w Javie, ale czuję się przytłoczony ilością modnych słów, terminów, specyfikacji i technologii. Poza tym nie jestem w stanie znaleźć wyczerpującego, ale poprawnego źródła do nauki. Czy to normalne, kiedy zaczynam WS i jakie są dobre książki/zasoby?


title: Algorytm optymalizacji, jak rozwinąć ten problem

text: Mam sytuację, w której chciałbym, aby Twój wkład i przemyślenie / rozwiązanie algorytmu. Specyfikacje > Istnieją zapasy o określonej pojemności. > 'X (szerokość) i Y (czas)' tworzą razem całkowitą przestrzeń. „60 * 100 = 6000”. > W rzeczywistości „szerokość” jest jednostką wartości biznesowej, ale tutaj możemy mówić o szerokości. >> Teraz są też pudełka, które zajmują część przestrzeni. > Każde pudełko ma szerokość (X) i czas (Y). Dwa pudełka po 80*20 każda, wypełnią ekwipunek 1600+1600. Spowoduje to, że po dodaniu pudełek w ekwipunku pozostanie współczynnik wypełnienia, 2800 spacji >. Każde pudełko zawsze należy > do jego ekwipunku. > > Istnieją nieograniczone, zależne od serii, zapasy z dodanymi pudełkami > indywidualnie. Poprzednia inwentaryzacja musi być wykonana przed wykonaniem następnych >. > > Same pudełka mają atrybut, taki jak kolor, który tworzy własność w > wyższym kontekście. Jak kontekst "daj mi wszystkie pola koloru -żółtego-". Tj. > aby dowiedzieć się, które zapasy zawierają ten kolor. Pudełko w tym samym kolorze może > istnieć kilka razy, nawet w tym samym ekwipunku. Ale jeśli znajdują się w tym samym ekwipunku, > mają unikalne identyfikatory pudełka. Problem > Trzeba dodać strategię optymalizacji, która sprawia, że szerokość (X) > można regulować. Czas (Y) jest nadal ustalony i nie może się zmienić. Zasadą optymalizacji > jest to, że dostępne miejsce w poprzednim inwentarzu należy wypełnić > częścią/plasterkiem z drugiego inwentarza. >> Czas musi pasować. Tj. 2x15 lub 1x25 zmieści się do 1x30. 1x35 nie pasuje. Również szerokość > dodana do pierwszego musi zostać zmniejszona z drugiego. Pamiętaj, że pudełko > nie może zostać usunięte z jego ekwipunku (ale szerokość może wynosić 1 jako > minimum). Chociaż, po dostosowaniu, nowe skrzynki muszą zostać utworzone w poprzednim > ekwipunku. > To teoria matematyczna, ale głównie chcę przekształcić algorytm tego rodzaju w kod. Lub daj pytanie, jakich teorii szukać. Może to powszechny problem? lub zbyt skomplikowane uważane za „wymyślenie koła na nowo” i polecam zakup modułu innej firmy. [Edytuj] „długość” zmieniono na „szerokość” Dodano grafikę, aby lepiej zilustrować, w jaki sposób będzie stosowana reguła optymalizacji. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/QMmSL.gif) Po optymalizacji po prawej stronie pozostał mały zielony kawałek, ponieważ „musi pozostać co najmniej 1 szerokość” . Czerwony i niebieski nie do końca pasowały.


title: Różnica między inżynierią oprogramowania a IT?

text: Widzę, że większość osób rozróżnia między byciem inżynierem oprogramowania a pracą w IT w sekcjach pracy na swojej stronie. Jaka jest różnica?


title: Co mam wynieść z terminu Zdarzenia kierowane?

text: Cały czas korzystam ze zdarzeń, oszukuję i używam autouzupełniania w Visual Studio. Object.closing += Przycisk [tab]. Umieść coś w funkcji generowanej automatycznie. Niektórzy lubią podkreślać „zrujnowaną” naturę tego, co prowadzi mnie do przekonania, że czegoś mi brakuje. Czy jest w tym coś więcej? Co powinienem wiedzieć o zdarzeniach kierowanych?


title: Różnica między tworzeniem oprogramowania a produkcją?

text: **W typowym SDLC** nie ma zbyt wiele wzmianki o produkcji lub rozwoju ani o rozróżnieniu między nimi. Wydaje się, że są to koncepcje oparte na przemyśle i czasie rzeczywistym . Zetknąłem się z tymi terminami przy opisie firm. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/BCwJy.jpg) Jak rozumiem, produkcja w oprogramowaniu niekoniecznie oznacza rozwój produktu. Zainspirowane pytaniem Dlaczego nazywamy to „produkcją”? Zacząłem kwestionować podstawowe rozróżnienie między tymi dwoma tj. **rozwój i produkcja w odniesieniu do oprogramowania**. Kiedyś miałem wrażenie, że to tylko sposób na opisanie procesu rozwoju w firmie zajmującej się rozwojem produktu. * **Pytanie 1: Jaka jest różnica między tymi dwoma?** * **Pytanie 2: Jak często używane są te terminy? i czy są właściwie rozumiane i wyróżniane?**


title: Zbieranie i przeglądanie przesłanych materiałów zależnych od sesji

text: Tworzę aplikację internetową w języku Java z funkcją przesyłania. Przesyłanie jest podzielone na dwie części: * Podczas sesji użytkownika użytkownik może przesyłać pliki w dowolnym momencie, poruszając się po całej witrynie. * Wszystkie przesłane przez jednego użytkownika podczas sesji będą gromadzone na serwerze. Ponadto pliki każdego użytkownika są przechowywane w różnych katalogach, z których każdy jest nazwany identyfikatorem sesji użytkownika. * Tylko wtedy, gdy użytkownik zatwierdzi to przesłanie, wszystkie przesłane pliki z jego katalogu zostaną przeniesione do celu. (Wyraźne zatwierdzenie jest potrzebne, ponieważ jest to długotrwała akcja w wątku w przestarzałym systemie). * Jeśli użytkownik nie zatwierdzi przesłanych plików, katalog tymczasowy użytkownika zostanie usunięty przy wylogowaniu. Teraz zasadnicza część mojego pytania: jeśli użytkownik zamknie przeglądarkę, pliki nie zostaną usunięte, ponieważ nie otrzymam zdarzenia. Aby obejść tę sytuację, czyszczę wszystkie katalogi tymczasowe za pomocą zaplanowanego zadania w następujący sposób: * Pobierz wszystkie nazwy katalogów (identyfikator sesji) * Wyszukaj każdą nazwę katalogu lub identyfikator sesji w kolekcji aktywnych sesji. * Jeśli sesja zostanie znaleziona, zachowaj katalog, w przeciwnym razie usuń katalog. Teraz mam wątpliwości, czy używanie identyfikatora sesji do nazywania katalogu stanowi zagrożenie dla bezpieczeństwa. Jasne, że wyszukiwanie i czyszczenie jest łatwe, ale nie znalazłem innego sposobu na połączenie katalogu z konkretną sesją. Czy masz sprytne i łatwe rozwiązanie do obsługi przesyłania do katalogu określonego użytkownika, a zwłaszcza usuwania katalogów utraconych użytkowników? A może istnieje inny sposób, aby powiedzieć zadaniu czyszczenia, które katalogi są przestarzałe?


title: Jaki jest techniczny sposób opisania usuniętych funkcji w aplikacji lub strukturze oprogramowania?

text: Nie jestem wyszkolonym programistą, więc bądź delikatny z moją ignorancją. Próbuję przeszukać pliki dziennika zmian, w których projekt open source upuścił potrzebną funkcję. Zastanawiałem się tylko, czy istnieje dobry zestaw terminów, aby to opisać. Bugzilla posiada szczegółowe formularze zgłaszania błędów. Czy zmiany w projekcie są również rejestrowane przy użyciu rygorystycznego języka? To coś, co widzę, że opowiadam się za moim własnym małym wkładem. (^_^)


title: Jak wygenerować jednorazowy dla żądań internetowych Ajax

text: Jak wielu z was wie, WordPress używa "tajnego klucza" dla każdego żądania AJAX. Każde żądanie jest unikatowe, a także „w pewnym stopniu” bezpieczne (tylko krok do przodu niż nic). Jak zaimplementowałbym to samo za pomocą PageMethods (metody webservice wewnątrz strony aspx) w aplikacji asp.net. Niektóre rzeczy, o które już się zatroszczyłem, to uwierzytelnianie i autoryzacja dostępu do strony. Chciałbym wiedzieć, jak wygenerować ten sam klucz nonce/secret cokolwiek w C# dla aplikacji asp.net? Czy nie wpływa to również na wydajność aplikacji, ponieważ korzysta z niej 100 tysięcy użytkowników i za każdym razem metoda musi przejść przez szyfrowanie, generowanie liczb losowych itp.? Czy mogę w jakiś sposób sprawdzić, czy opublikowane dane są tym, co faktycznie zostało opublikowane. Sprawdzasz integralność publikowanych danych? Czy musisz przestrzegać wzorców projektowych, aby zabezpieczyć logikę aplikacji? Czy istnieje coś takiego, aby Twoja aplikacja była przynajmniej trochę bezpieczna?