title: Czy schematy XML są złe dla stale zmieniających się formatów plików?

text: Zmagam się z projektem klient-serwer, w którym mam aplikacje Java w Internecie, które przechowują dane na serwerze zaplecza. Format tych danych jest dobrze zdefiniowany, ale projekt ciągle ewoluuje, więc definicja ciągle się zmienia! Aby poradzić sobie ze zmianą, zdefiniowałem prosty interfejs REST na serwerze, który oferuje tylko przechowywanie wartości klucza. Klienci mogą przechowywać lub pobierać porcję danych, odwołując się do unikatowego klucza. Jest to miłe, ponieważ nie muszę modyfikować interfejsu serwera (lub bazy danych zaplecza), gdy zmienia się format danych. Dla serwera to tylko kilka nieprzezroczystych plamek. Oczywiście pojawia się wtedy pytanie: „Co znajduje się w plamie?” W tym celu napisałem schemat XML, który definiuje zawartość obiektu blob. Na początku było świetnie, ponieważ schemat oferuje kilka fajnych rzeczy „za darmo”: formalną, ale czytelną dla człowieka specyfikację formatu pliku, automatyczną walidację jego zawartości, kierowanie/odprowadzanie do strumienia i automatycznie generowaną Javę klasy do programowego dostępu do danych. Ale potem nastąpiła zmiana! Schemat musiał zostać zmieniony i oczywiście natknąłem się na problemy ze zgodnością w przód iw tył. Aby poradzić sobie ze stale zmieniającym się schematem, wymyśliłem rozwiązanie, które osadza numer wersji w przestrzeni nazw XML i stosuję serię arkuszy stylów XSL, aby „uaktualnić” dowolny obiekt blob do najnowszej wersji. Na przykład, jestem teraz w wersji 1.3 mojego schematu, więc kiedy rozmieszczam obiekt blob, uruchamiam go przez XSLT od 1.0 do 1.1, następnie XSLT od 1.1 do 1.2, a na końcu od 1.2 do 1.3 XSLT. To działa, ale nie jest trwałe, ponieważ łańcuch się wydłuża, co obniża wydajność i wysysa pamięć, a ponadto muszę ciągle pisać nowe arkusze stylów, co zajmuje trochę czasu i nie jest zabawne. A teraz zabawna rzecz… Oprócz klientów Java, projekt ma również aplikacje na iOS jako klientów, a iOS nie ma żadnych fajnych funkcji korporacyjnych związanych ze schematami XML. Nie ma walidacji strumienia, automatycznego generowania klas Objective-C itp., Po prostu parser XML oparty na zdarzeniach niskiego poziomu. Ale jak na ironię uważam, że jest to o wiele łatwiejsze! Na przykład, jeśli XML otrzyma nowy element, po prostu dodaję nową klauzulę `if`. Jeśli element zniknie, usuwam jego klauzulę. Zasadniczo robię "najlepszy wysiłek" w interpretacji strumienia XML, po cichu ignorując wszelkie nierozpoznane elementy. Nie muszę zastanawiać się, jaka jest wersja formatu pliku ani czy jest poprawny. Dodatkowo jest to znacznie szybsze, ponieważ nie ma łańcuchów XSLT i oszczędza mi dużo czasu, ponieważ nie muszę pisać żadnego kodu XSLT. Jak dotąd to podejście działało świetnie i nie przegapiłem posiadania schematu XML po stronie iOS. Zastanawiam się teraz, czy schemat, pomimo ładnego zestawu funkcji, jest całkowicie niewłaściwą technologią dla formatu pliku, który często się zmienia. Zastanawiam się nad całkowitym porzuceniem mojego schematu XML i użyciem tego samego „najlepszego wysiłku” podejścia niskiego poziomu w Javie, które robię w iOS. Czy moja negatywna ocena schematów XML jest prawidłowa? A może jest coś, co przegapiłem? Może muszę przemyśleć interfejs serwera? A może w ogóle nie powinienem używać XML? Jestem otwarta na wszelkie propozycje. Dziękuje za przeczytanie!


title: Jak przetwarzać płatności za oprogramowanie (kod aktywacyjny)?

text: Chcę sprzedawać oprogramowanie online i potrzebuję łatwego do wdrożenia systemu przetwarzania płatności. W rzeczywistości zamierzam sprzedawać kod aktywacyjny (jeden na zakup), który aktywuje wersję próbną produktu. Miałem zamiar użyć tego, ale właśnie dowiedziałem się, że osoby bez płatnego konta e-mail (nie hotmail lub yahoo) nie mogą przetwarzać swoich zamówień, co z pewnością zniechęciłoby wielu, jeśli nie większość potencjalnych kupujących.


title: Strona z testowymi plikami danych dla określonych algorytmów/struktur danych?

text: Czy istnieje jakaś strona internetowa, taka jak SPOJ i Project Euler, z plikami danych testowych dostępnymi dla określonych algorytmów/struktur danych? Wiem, że samodzielne rozwiązywanie tych problemów to zabawne wyzwanie, ale szukam plików danych testowych, w których wyraźnie wymieniono algorytm/strukturę danych, której należy użyć. "Zaimplementuj połączoną listę i zrób to i tamto z danymi do potwierdzenia!", "Zaimplementuj drzewo hash i zrób to i tamto z danymi do potwierdzenia!" itp.


title: Czy test i poprawkę powinny pisać różne osoby?

text: W TDD powszechną praktyką jest napisanie testu przed naprawą, aby uniknąć regresji i uprościć naprawianie. Zastanawiam się tylko co jeśli test i poprawka będą pisane przez różne osoby, łączny spędzony czas będzie prawie taki sam, ale ponieważ teraz trzy osoby będą myśleć o możliwych awariach (+tester) zwiększamy prawdopodobieństwo, że poprawka obejmie wszystkie możliwe scenariusze awarii. Czy ta praktyka ma sens, czy po prostu zmarnuje dodatkowy czas potrzebny jeszcze jednej osobie na zapoznanie się z błędem?


title: Czy jest to kiepska forma używania funkcji C, takich jak typ size_t zamiast ich c++, takich jak std::size_t?

text: Ostatnio powiedziano mi, że używanie `size_t` jak zadeklarowano w globalnej przestrzeni nazw jest niepoprawne w C++, rzekomo dlatego, że `size_t` jest cechą C. Sprawdziłem to i natknąłem się na to pytanie na Stack Overflow: http://stackoverflow.com/questions/5813700/difference-between-size-t-and-stdsize-t Górna odpowiedź wyjaśnia, że nie ma jakakolwiek _rzeczywista_ różnica między `size_t` i `std::size_t`, ale to pozostawia otwartą kwestię stylu i poprawności. Ponieważ programuję w C++, czy używanie funkcji C, takiej jak `size_t` w miejsce nieco dłuższego, ale nie lepszego, specyficznego dla C++ `std::size_t` jest "błędem"?


title: Zapisujesz nieustrukturyzowane sugestie i opinie w narzędziu do śledzenia problemów?

text: Chciałbym opowiedzieć się za używaniem oprogramowania do śledzenia problemów w organizacji, która obecnie go nie używa. Ale jest jeden aspekt ich sytuacji, co do którego nie jestem pewien, co sugerować: ich projekty często otrzymują nieformalną ustną informację zwrotną lub przypadkowe komentarze na spotkaniach lub przelotnie od szerokiej grupy zainteresowanych stron, a wszystkie te informacje muszą być rejestrowane. Większość z tych wiadomości to szum, ale są one niezbędne do nagrywania i udostępniania programistom z dwóch powodów: 1. W wyniku tego procesu często pojawiają się dobre sugestie. 2. Może być konieczne posiadanie dowodów na komentarze klientów, gdy zapominają o poprzednich instrukcjach lub zmieniają zdanie. Czy tego rodzaju informacje powinny być przechowywane w systemie śledzenia problemów, czy też przechowywane oddzielnie w osobnym rozwiązaniu? Czy system śledzenia problemów może mieć dobre wsparcie dla tego rodzaju nieustrukturyzowanych informacji?


title: Zmieszany z inną terminologią związaną z .NET

text: Jaka jest różnica między .net a asp.net? Jaką rolę pełni PHP? Gdyby ktoś tworzył stronę internetową w asp.net i C#, w jaki sposób zakomunikowałbyś ten pomysł koledze, tj. jakiego języka byś użył?


title: Czy mogę dołączyć zmodyfikowaną czcionkę na licencji GPL/Apache do mojego projektu LGPL?

text: Chcę włączyć czcionkę na licencji pojedynków GPL i Apache do mojego projektu LGPL, ale tak naprawdę nie znalazłem wskazówki, czy to możliwe. Pojawiają się tutaj dwa problemy: 1. Nie znalazłem żadnych wskazówek na temat „Zgodności LGPL” na licencji Apache. Wiem, że obie licencje, o których tu mowa, są kompatybilne z GPL, ale nadal wolę wydać pracę na licencji LGPL. 2. To trochę trudne, ponieważ jest to czcionka. To było na licencji pojedynków GPL i Apache, ale warunki LGPL pytają o „Bibliotekę”, jej „Publiczne API”, „Łączenie” czy coś takiego. Nie jestem do końca pewien, do czego należy ta operacja, jeśli po prostu edytuję plik .ttf ręcznie, nawet nie jestem pewien, czy jest on liczony jako „źródło”. Każda pomoc byłaby naprawdę mile widziana!


title: Czy obiekt domeny powinien zawijać/zawierać interfejs DTO?

text: Korzystanie z .NET - mam interfejs IPerson. Interfejs ten jest implementowany przez klasy w wielu osobnych repozytoriach, m.in. EF6 (EfPerson), niestandardowy SQL (SqlPerson), a nawet niestandardowy zestaw łączący się z usługą internetową (WebPerson). Zakładając bogaty model domeny, moim pomysłem jest to, że mój piękny bogaty obiekt domeny „Osoba” może mieć prywatną zmienną składową _PersonDto typu IPerson, dostarczoną przez konstruktor. Członkowie Person byliby jedynym sposobem uzyskania dostępu do danych z _PersonDto. P. Czy jest coś z natury złego w tym podejściu? (Załóżmy, że nie ładuję się leniwie i że prawdopodobnie będę miał warstwę usług do wycinania rzeczy). Proszę zauważyć, że używam tutaj DTO, aby po prostu mieć na myśli anemiczne obiekty, które otrzymuję z moich repozytoriów.


title: Jak radzić sobie z wieloma trybami wyjściowymi wielu typów?

text: _Uwaga: domena biznesowa jest nieco skomplikowana do wyjaśnienia, zastąpiłem nazwy rzeczywistych klas bardziej obrazowymi przykładami._ Piszę aplikację, w której warstwa biznesowa zwraca zestaw `Zwierzaków`: albo `Cat` lub `Pies`: class Pet(metaclass=ABCMeta): # Zwierzak jest abstrakcyjny. ... getName(self): ... class Dog(Pet): ... class Cat(Pet): ... Chcę wyświetlić te zwierzęta w określonym przez użytkownika formacie. Na przykład użytkownik może poprosić o pokazanie tylko imienia każdego zwierzaka, uzyskanie reprezentacji JSON lub posiadanie bogatej reprezentacji, która jest stronnicza w stosunku do kotów, tj. _wyświetla znacznie więcej informacji o kotach niż o psach_. W warstwie prezentacji mam abstrakcyjną klasę `Output` z abstrakcyjną metodą, która wyprowadza zwierzęta, a następnie mam konkretne implementacje każdego typu wyjścia: `class NameOutput(Output)`, `class JsonOutput(Output) ` lub `klasa RichOutput(Output)`. Pierwsze dwa są proste: po prostu używają abstrakcyjnej klasy `Pet` i nie przejmują się tym, czy jest to pies czy kot. Problemem jest ostatnia klasa, ponieważ logika jest inna dla psa niż dla kota. class Output(metaclass=ABCMeta): # Dane wyjściowe są abstrakcyjne. generateOutput(self): dla zwierzaka w self.pets: yield self.processPet(pet) @abstractmethod processPet(self, pet): pass class NameOutput(Output): ... class JsonOutput(Output): ... class RichOutput( Wyjście): ... processCat(): ... processDog(): ... Określanie typu zwierzaka podczas wykonywania i wywoływanie różnych metod dla każdego zwierzaka jest brzydkie. Ponadto, gdy opiekun będzie musiał dodać `class Hamster(Pet)`, na własnej skórze przekona się, że powinien również utworzyć dodatkową metodę w `RichOutput(Output)`. Z drugiej strony przeniesienie logiki wyjściowej do samych zwierząt również nie wygląda dobrze: co, jeśli muszę utworzyć dodatkowy format wyświetlania? Jakie mam opcje? Jak zwykle rozwiązywany jest ten problem?


title: Czy powinienem zgrupować wszystkie moje pliki .js w jeden duży pakiet?

text: Jedną z trudności, jakie napotykam w moim obecnym projekcie, jest to, że poprzedni programista spaghetti umieścił kod javascript w wielu różnych plikach. Mamy modalne okna dialogowe, które są ponownie używane w różnych miejscach i uważam, że ten sam plik .js jest często ładowany dwukrotnie. Myślę, że chciałbym po prostu załadować wszystkie pliki .js w _Layout.cshtml iw ten sposób wiem, że jest ładowany raz i tylko raz. Ponadto klient powinien pobrać ten plik tylko raz. Powinna być buforowana, a zatem nie powinna tak naprawdę wpływać na wydajność, z wyjątkiem pierwszego załadowania strony. Powinienem prawdopodobnie zauważyć, że używam również łączenia ASP.Net i ładuję większość jQuery/bootstrap/etc z CDN. Czy jest coś jeszcze, o czym nie myślę, co mogłoby tutaj spowodować problemy? Czy powinienem wszystko spakować w jeden plik?


title: Jak policzyli liczbę linii kodu wykonanego w czasie wykonywania?

text: W 2001 roku ukazała się gra na PC o nazwie Black & White autorstwa studia Lionhead, w której znajdowała się długa strona ze statystykami aktualizowana w czasie rzeczywistym. Były statystyki, takie jak liczba osób zabitych, ile zarobiłeś pieniędzy itp., ale naprawdę zagadkową była liczba wykonanych wierszy kodu, która była liczona w miliardach. Skąd mieliby to wiedzieć, jak obliczyliby to w czasie wykonywania? Czy oni to wymyślili?


title: Śledzenie godzin w projekcie

text: Poza poniższymi, czy istnieją jakieś pomocne (dla programistów) powody, aby śledzić godziny/czas w projekcie do poziomu „dokładnej liczby godzin tygodniowo”? Powody: * Korzystne, aby zobaczyć, jak wypadły szacunki w porównaniu z rzeczywistymi (aby poprawić oszacowanie) * Kierownictwo tak powiedziało (ze względów umownych lub biznesowych) To trochę przymrużeniem oka, ale moim osobistym upodobaniem zawsze było śledzenie na abstrakcyjnym poziomie . Na przykład: dana osoba jest „pełen etat” (definiowana jako 40 godzin tygodniowo lub mniej intensywna 32 godziny tygodniowo) lub w niepełnym wymiarze godzin lub spędza kilka godzin tu i tam nad projektem. Wydaje się (jako kierownik), że szukanie jakiejkolwiek dokładnej liczby dla rzeczywistych godzin jest podobne do mierzenia długości linii brzegowej. Im dokładniej się starasz, tym bardziej jest to mylące. To powiedziawszy, byłbym wdzięczny za wszelkie spostrzeżenia na temat korzyści dla programistów. Dziękuję!


title: Jaka jest korzyść z poznania i zrozumienia budowy kompilatora?

text: Jestem studentem trzeciego roku studiów inżynierskich. Od tego roku moja uczelnia wprowadziła nowy kurs „Konstrukcje kompilatorów”, który uczy podstaw teorii budowania kompilatora. Jaka byłaby w świecie rzeczywista korzyść dla inżyniera oprogramowania z nauki budowy kompilatora?


title: Jaki jest odpowiednik funkcji i metod w SQL?

text: W językach takich jak C czy Java są takie rzeczy jak funkcje/metody modularyzacji i abstrakcyjne rzeczy. Co jest w SQL, konkretnie dla Oracle? Widziałem ludzi mówiących o wykorzystaniu widoków w celu zmniejszenia złożoności na różnych blogach, ale tylko tyle można zrobić z widokiem. (Na przykład zmienna wiązania nie może być przekazana jako parametr wykonawczy do widoku). W narzędziach takich jak Oracle Reports zapytanie czasami staje się bardzo niewygodne, wykonując kilkaset wierszy. Zastanawiałem się, jakich technik ludzie używają do zarządzania złożonością swojego SQL? Jakie są odpowiedniki funkcji i metod w SQL, aby SQL nie stał się ekstremalnie złożony?


title: Jak określić limity WIP w Kanbanie?

text: Rozważ typową tablicę Kanban: Input, Analysis, Dev Ready, Development, Build Ready, Test, Release Ready Jak określić limity WIP dla każdej kolumny? jakaś formuła?


title: Czy istnieje wspólny mianownik wszystkich implementacji Smalltalk?

text: W większości języków istnieją standardowe biblioteki. I to jest ich podstawa, wspólny mianownik. Wnioski można pisać z gwarancją mianownika. Jaki jest rdzeń Smalltalka?


title: Czy są dostępne systemy operacyjne FOSS zgodne ze standardami kodowania JPL NASA?

text: Podobnie jak wielu innych, byłem całkowicie zachwycony niedawnym udanym lądowaniem łazika Mars Curiosity. Po przeczytaniu kilku artykułów i podążaniu za kilkoma linkami, znalazłem kilka standardów kodowania opartych na C, których NASA JPL używa do sformalizowania kodu i ochrony go przed błędami. (Zobacz tutaj i tutaj.) To mnie zaciekawiło. Czy są dostępne systemy operacyjne typu open source, które są zgodne z tymi standardami kodowania, które są dostępne dla wspólnej architektury, takiej jak x86, x64 lub ewentualnie ARM?


title: Zapewnij wiele wywołań zwrotnych SendCompleted do SmtpClient

text: Mam klasę `Email`, która ma metodę `Send`, która opcjonalnie przyjmuje `SmtpClient` i wysyła wiadomość e-mail asynchronicznie przy użyciu `SendAsync`. Jeśli nie podano `SmtpClient` do tej metody, tworzy ona domyślny `SmtpClient` i używa go do wysłania wiadomości e-mail. Wewnątrz funkcji `Send` udostępniam wywołanie zwrotne `SendCompleted`, które usuwa `MailMessage` i domyślny `SmtpClient`, jeśli nie został on dostarczony do metody. **Więc kiedy dostarczam `SmtpClient`, jak mam go usunąć?** Nie mogę go usunąć w `Send`, ponieważ może on być używany do wysyłania innych wiadomości e-mail, plus myślę, że jest to odpowiedzialność rzecz, która utworzyła instancję przekazanego w `SmtpClient`, aby ponownie go usunąć. Czy można dodać wiele wywołań zwrotnych `SendCompleted` do `SmtpClient`, które są uruchamiane jeden po drugim?


title: Oprócz garbage collectora, co jeszcze sprawia, że Java nie jest językiem programowania czasu rzeczywistego?

text: Jakie są inne funkcje w Javie, oprócz garbage collectora, które sprawiają, że nie nadaje się do programowania w czasie rzeczywistym? W sieci, ilekroć omawiana jest Java vs C++ w odniesieniu do programowania w czasie rzeczywistym, zawsze wspominany jest odśmiecacz. Czy jest coś jeszcze?


title: Dowód wpłaty PayPal - czy istnieje potrzeba przechowywania go na naszym serwerze?

text: Tworzę aplikację na iPhone'a, którą integruję z PayPal. Zrobiłem to z powodzeniem korzystając z biblioteki PayPal. Testuję to w trybie piaskownicy. Kiedy przelewam pieniądze z jednego konta na drugie, wyświetla się komunikat „wyślij na serwer w celu weryfikacji”. Czy istnieje realna potrzeba przechowywania tego identyfikatora transakcji PayPal i innych szczegółów na naszym serwerze?


title: Myślisz o typach aliasów/synonimów?

text: Postaram się jak najlepiej sformułować to pytanie w sposób, który nie spowoduje wojny językowej ani listy, ponieważ myślę, że może istnieć dobra, techniczna odpowiedź na to pytanie. Różne języki obsługują aliasy typów w różnym stopniu. C# umożliwia deklarowanie aliasów typów na początku każdego pliku kodu i są one prawidłowe tylko w całym tym pliku. Języki takie jak ML/Haskell używają aliasów typów prawdopodobnie tak samo, jak używają definicji typów. C/C++ to coś w rodzaju Dzikiego Zachodu, gdzie `typedef` i `#define` są często używane zamiennie z typami aliasów. Zalety aliasingu typów nie budzą zbytniego sporu: * Ułatwia definiowanie typów złożonych, które są opisane w sposób naturalny przez język, np. `type Coordinate = float * float` lub `type String = [Char]`. * Długie nazwy można skrócić: ` using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute`. * W językach takich jak ML czy Haskell, gdzie parametry funkcji często nie mają nazw, aliasy typów zapewniają pozory samodokumentacji. Wada jest nieco bardziej niepewna: aliasy mogą się rozprzestrzeniać, utrudniając czytanie i zrozumienie kodu lub naukę platformy. Win32 API jest dobrym przykładem, z jego `DWORD = int` i `WSKAZÓWKA = HANDLE = void*` oraz `LPHANDLE = HANDLE FAR*` i tym podobne. We wszystkich tych przypadkach nie ma sensu rozróżnianie między UCHWYTEM a pustym wskaźnikiem, DWORDem a liczbą całkowitą itp. Odkładając na bok filozoficzną debatę, czy król powinien dać całkowitą wolność swoim poddanym i pozwolić im być odpowiedzialnym za sami, czy też powinni interweniować we wszystkie swoje wątpliwe działania, czy może istnieć szczęśliwe medium, które pozwoliłoby na korzyści płynące z aliasingu typów, jednocześnie zmniejszając ryzyko jego nadużycia? Na przykład problem długich nazw można rozwiązać za pomocą dobrych funkcji autouzupełniania. Na przykład Visual Studio 2010 pozwoli na wpisanie DSBA w celu odwołania Intellisense do System.Diagnostics.DebuggerStepBoundaryAttribute. Czy mogą istnieć inne funkcje, które zapewniłyby bezpieczniejsze korzyści płynące z aliasingu typów?


title: Jak skupić się na nauce języka przy tak wielu innych możliwościach?

text: Co robisz, aby pozostać skupionym podczas nauki nowego języka z tak wieloma innymi interesującymi językami?


title: Najlepszy system kontroli źródeł dla zapracowanego zespołu programistów internetowych

text: Mając kilka przypadków problemów z łączeniem i innych trudności z dużym repozytorium Subversion i zespołem ponad 10 programistów, zastanawiam się, czy SVN jest właściwym narzędziem i co jeszcze wziąć pod uwagę? Podstawowym zarządzanym systemem jest duża aplikacja internetowa PHP z cyklami wydawniczymi średnio 2-3 tygodnie i 4+ równoczesnymi projektami w aktywnym rozwoju w dowolnym momencie. Czy subversion to właściwy system, czy powinniśmy przyjąć Git, Mercurial czy coś innego?


title: MVC wysyła informacje z widoku do kontrolera

text: Używam wzorca MVC. Powiedzmy, że chcę utworzyć nowy obiekt i dodać go do mojej bazy danych. Gdzie lepiej utworzyć nowy obiekt: Widok: Boo boo = new Boo("niesamowitość"); Kontroler.AddDB(boo); Kontroler: public void AddDB(string name) { Boo boo = new Boo(name); addtodb(boo); }


title: Kontroler JSP - bez widoku

text: Większość ludzi mówi, że nie używa stron JSP. Ale co jeśli mam stronę JSP, która nic nie pokazuje, działa tylko jako kontroler? Dlaczego miałbym to zrobić? Ponieważ nie musimy ponownie wdrażać kompletnej aplikacji internetowej, aby dokonać małej, ale znaczącej zmiany w serwlecie -> zamiast tego możemy po prostu umieścić mój nowy JSP w folderze JBoss _tmp_, dopóki nie wykonamy pełnego wdrożenia. Ten kontroler JSP będzie oczywiście zawierał / przekierowywał do innych widoków JSP w celu ostatecznego renderowania. Pytanie, jakie są wady takiego postępowania? Jeśli mamy go już w naszej aplikacji (działa przez ostatnie 8 lat, zanim dołączyłem); czy powinniśmy zachować to tak, jak działa, czy są jakieś ważne powody, aby zmienić go na zwykły serwlet? Uwaga: wspomniani dostawcy JSP nie są jedynymi administratorami, raczej wykonują część przetwarzania w określonych przypadkach użycia


title: Jak i dlaczego wybierać między nazywaniem metod z przedrostkiem „get” i „find”?

text: Zawsze mam problem z ustaleniem, czy powinienem nazwać określoną metodę zaczynając od `getSomething` czy `findSomething`. Problem tkwi w tworzeniu _pomocników_ dla źle zaprojektowanych interfejsów API. Zwykle ma to miejsce podczas pobierania danych z obiektu, który wymaga obiektu jako parametru. Oto prosty przykład: public String getRevision( Item item ) { service.load( item, "revision" ); // zwykle jest więcej pracy do wykonania przed pobraniem danych. try { return item.get_revision(); } catch( NotLoadedException wyjątek ) { log.error( "Właściwość o nazwie 'nazwa_właściwości' nie została załadowana", wyjątek ); } zwraca null; } Jak i dlaczego zdecydować się na nazwanie tej metody `getRevision()` lub `findRevision()`?


title: Integralność referencyjna w bazie danych, w której krotki nie są fizycznie usuwane

text: Wiele nowoczesnych systemów zarządzania relacyjnymi bazami danych automatycznie obsługuje integralność referencyjną, tj. gdy próbujesz usunąć krotkę, która ma odniesienie (na przykład w postaci klucza obcego), DBMS nie kończy operacji i przynosi błąd. Rozważmy bazę danych, w której każda tabela ma atrybut, który wskazuje, czy krotka została usunięta, czy nie. Tak więc żadne dane nie są faktycznie usuwane z bazy danych, ale zamiast tego są oznaczane jako usunięte. Jeśli krotka jest oznaczona jako usunięta, wszystkie jej odwołania również muszą być oznaczone jako usunięte, w przeciwnym razie powinien wystąpić błąd. Jak można to wesprzeć? Czy wykonanie dodatkowych sprawdzeń (programowo lub za pomocą wyzwalaczy) przed usunięciem krotki to jedyny sposób na uzyskanie integralności referencyjnej? Czy są jakieś przyjęte praktyki lub algorytmy? Edycja: Ta flaga jest używana głównie do statystyk, a częściowo do odzyskiwania danych po długim okresie czasu. Jest to filtr o specjalnym znaczeniu, a teraz, gdy wykonywane są zapytania, integralność referencyjna jest sprawdzana bezpośrednio w zapytaniu, co jest bardzo podatne na błędy i nie jest w ogóle niezawodne.


title: Dlaczego wyszukiwanie binarne, które wymaga posortowanych danych, jest uważane za lepsze niż wyszukiwanie liniowe?

text: Zawsze słyszałem, że wyszukiwanie liniowe jest podejściem naiwnym, a wyszukiwanie binarne jest lepsze niż to pod względem wydajności ze względu na lepszą asymptotyczną złożoność. Ale nigdy nie zrozumiałem, dlaczego jest to lepsze niż wyszukiwanie liniowe, gdy przed wyszukiwaniem binarnym wymagane jest sortowanie? Wyszukiwanie liniowe to „O(n)”, a wyszukiwanie binarne to „O(log n)”. To wydaje się być podstawą do stwierdzenia, że wyszukiwanie binarne jest lepsze. Ale wyszukiwanie binarne wymaga sortowania, które jest „O(n log n)” dla najlepszych algorytmów. Tak więc wyszukiwanie binarne nie powinno być szybsze **ponieważ** wymaga sortowania. Czytam CLRS, w którym autor sugeruje, że w sortowaniu przez wstawianie zamiast naiwnego podejścia do wyszukiwania liniowego lepiej jest użyć wyszukiwania binarnego do znalezienia miejsca, w którym należy wstawić element. W tym przypadku wydaje się to uzasadnione, ponieważ przy każdej iteracji pętli znajduje się posortowana lista, na której można zastosować wyszukiwanie binarne. Ale czy w ogólnym przypadku, w którym nie ma gwarancji co do zestawu danych, w którym musimy przeszukiwać, użycie wyszukiwania binarnego nie jest w rzeczywistości gorsze niż wyszukiwanie liniowe ze względu na wymagania dotyczące sortowania? Czy są jakieś praktyczne względy, które przeoczam, które sprawiają, że wyszukiwanie binarne jest lepsze niż wyszukiwanie liniowe? A może wyszukiwanie binarne jest uważane za lepsze niż wyszukiwanie liniowe bez uwzględnienia czasu obliczeń wymaganego do sortowania?


title: Czy niekompatybilność wsteczna Pythona 3.0 wpłynie na adopcję?

text: Odwiedziłem Slashdot dziś rano, aby dowiedzieć się, że Python 3.0 został wydany. Znam C# i Perla, ale od jakiegoś czasu chciałem nauczyć się Pythona, zwłaszcza po tym, jak zobaczyłem, że jest łatwy w użyciu do tworzenia przydatnych narzędzi, nie wspominając o jego wykorzystaniu w skryptach gier. Moje pytanie brzmi, w jaki sposób celowo niekompatybilne wstecz wydanie Pythona 3.0 wpływa na adopcję i czy powinienem nauczyć się Pythona 2? A może powinienem najpierw zanurkować i nauczyć się Pythona 3.0 i poczekać na przeniesienie bibliotek?


title: Ile adresu bitowego jest wymagane dla komputera z n bajtów pamięci?

text: Ile bitów adresu jest wymaganych (na przykład dla licznika programu) w komputerze adresowanym bajtami z 512 MB pamięci RAM? Jak wygląda formuła? Jak to się ma do tego, że 32 bity mogą adresować nie więcej niż 4 GB RAM?


title: Radzenie sobie z podobnymi obiektami z różnymi sygnaturami metod

text: Jestem dość nowy w projektowaniu OO i mam problemy z zaprojektowaniem jakiegoś oprogramowania i szukam wzorca lub kombinacji wzorców, które mogłyby mi pomóc w rozwiązaniu mojego problemu. Mam typ, który ma kolekcję różnych kształtów geometrycznych (np. linie, prostokąty i kostki). Właściwie mam nawet kompozyty tych kształtów. Każdy kształt ma jedną lub więcej wartości. Wartość jest współrzędną (pomiędzy jednowymiarową dla linii i trójwymiarową dla sześcianów). Wszystkie rodzaje kształtów mają dwie metody, które są niezbędne. Metoda dodawania wartości i metoda uzyskiwania wszystkich wartości kształtu. Np. `Cube.AddValue(new Value3D{X=4,Y=7,Z=11})` lub `Line.AddValue(new Value1D{X=42})` odpowiednio `Cube.GetValues()` zwróci kolekcję `Value3D` i `Line.GetValues()` zwracają kolekcję `Value1D`. Ponieważ te metody mają zasadniczo różne sygnatury, nie mogę po prostu wywodzić się z jednego interfejsu, aby przechowywać wszystkie te różne obiekty w jednej kolekcji. Podział kolekcji na wiele oddzielnych kolekcji, po jednej dla każdego typu, byłby możliwy, ale nie jest pożądany, ponieważ należą one do siebie (pod względem domeny). Rozważałem użycie wartości trójwymiarowych dla wszystkich kształtów i po prostu zignorowanie Y/Z dla linii/prostokątów, ale to nie jest naprawdę miłe i faktycznie naruszyłoby O i L w SOLID (w przyszłości prawdopodobnie potrzebny jest czwarty wymiar ). Inną możliwością byłoby prawdopodobnie użycie ogólnego interfejsu, takiego jak `IShape<T>`, gdzie `T` to wartość*D. Ten interfejs wyglądałby następująco: public interface IShape<T> { public IEnumerable<T> GetValues(); public void AddValue(wartość T); } Wymagałoby to jednak innego, nieogólnego `interfejsu INonGenericShape {}`, ponieważ nie mogę użyć ogólnego interfejsu bez określenia typu. Skończyłoby się na czymś takim: public class SomeShape{ private IList<INonGenericShape> _shapes = new List<INonGenericShape>(); } Ale wtedy równie dobrze mógłbym użyć `System.Object`, ponieważ IShape nie dostarcza żadnych wartościowych informacji. Więc oto jestem, nie wiem, jak to rozwiązać (przechowywanie obiektów w jednej kolekcji dla konsumentów tej klasy). Czy ktoś może przedstawić jakiś pomysł lub wgląd?


title: Jak nauczyć się projektować ładnie wyglądające strony internetowe?

text: Jestem średnio zdolnym programistą internetowym. Mogę umieścić rzeczy tam, gdzie chcę, i umieścić tam trochę rzeczy JQuery, jeśli potrzebuję. Jeśli jednak tworzę własną stronę internetową (co zaczynam robić) to nie mam pojęcia jak ją zaprojektować. Jeśli ktoś miałby usiąść obok mnie punkt do ekranu i powiedzieć „postaw tam to zdjęcie, tam tekst” mogę to zrobić całkiem łatwo. Ale zaprojektowanie własnej strony z moim wyborem kolorów i tekstu będzie wyglądało tak, jakby wymyślił ją maluch. Czy ktoś zna jakieś strony internetowe/książki, na które mogę zajrzeć, lub czy ktoś ma jakieś wskazówki dotyczące podstaw projektowania stron internetowych dla dzieci?


title: Czy istnieje różnica między komponentem a modułem?

text: Mam mały problem z modułem terminów i komponentem. Moim zdaniem moduły są klasami w pakiecie, które są dostępne tylko przez dobrze zdefiniowany interfejs. Ukrywają wszystkie szczegóły implementacji i są wielokrotnego użytku. Moduły definiują moduły, od których zależą. Jaka jest różnica w stosunku do komponentów? Sprawdziłem to w niektórych książkach, ale opis komponentów jest bardzo podobny.


title: Projekt w C unikający konfliktów nazw

text: Walczę o znalezienie praktycznych porad dotyczących konwencji nazewnictwa funkcji dla średniej wielkości projektu biblioteki C. Mój projekt biblioteki jest podzielony na kilka modułów i podmodułów z własnymi nagłówkami i luźno podąża za stylem OO (wszystkie funkcje przyjmują określoną strukturę jako pierwszy argument, bez globalnych itp.). Jest ułożone nasze coś takiego: MyLib - Foo - foo.h - foo_internal.h - some_foo_action.c - other_foo_action.c - Baz - baz.h - some_baz_action.c - Bar - bar.h - bar_internal.h - some_bar_action.c Generalnie funkcje są zbyt duże, aby (na przykład) umieścić `jakąś_działanie_foo` i `inne_działanie_foo` w jednym pliku implementacyjnym `foo.c`, uczynić większość funkcji statyczną i wywoływać to w ciągu dnia. Mogę poradzić sobie z usuwaniem moich wewnętrznych ("prywatnych modułów") symboli podczas budowania biblioteki, aby uniknąć konfliktów dla moich użytkowników z ich programami klienckimi, ale pytanie brzmi, jak nazywać symbole w mojej bibliotece? Do tej pory robiłem: struct MyLibFoo; void MyLibFooSomeAction(MyLibFoo *foo, ...); struct MyLibBar; void MyLibBarAnAction(MyLibBar *bar, ...); // Podmoduł struct MyLibFooBaz; nieważne MyLibFooBazAnotherAction(MyLibFooBaz *baz, ...); Ale kończę z szalenie długimi nazwami symboli (znacznie dłuższymi niż przykłady). Jeśli nie poprzestanę nazw „fałszywą przestrzenią nazw”, wewnętrzne nazwy symboli modułów będą kolidować. Uwaga: nie obchodzi mnie przypadek camelcase/pascal itp., tylko same imiona.


title: Testowanie białej skrzynki z Google Test

text: Próbowałem używać GoogleTest do mojego projektu hobby C++ i muszę przetestować wewnętrzne komponenty (stąd testowanie w białej skrzynce). W mojej poprzedniej pracy po prostu zaprzyjaźniliśmy klasy testowe z testowaną klasą. Jednak w przypadku Google Test to nie działa, ponieważ każdy test otrzymuje własną unikalną klasę, pochodną klasy urządzeń, jeśli jest ona określona, a przyjazność nie jest przenoszona do klas pochodnych. Początkowo stworzyłem testową klasę proxy, która jest zaprzyjaźniona z testowaną klasą. Zawiera wskaźnik do instancji testowanej klasy i udostępnia metody dla wymaganych, ale ukrytych elementów. To zadziałało dla prostej klasy, ale teraz muszę przetestować klasę drzewa z wewnętrzną klasą węzła prywatnego, do której muszę mieć dostęp i bawić się. Zastanawiam się tylko, czy ktoś korzystający z biblioteki GoogleTest wykonał jakiekolwiek testy białej skrzynki i czy ma jakieś wskazówki lub pomocne konstrukcje, które ułatwiłyby to. * * * Ok, znalazłem makro FRIEND_TEST zdefiniowane w dokumentacji, a także wskazówki jak testować prywatny kod w poradniku zaawansowanym. Ale poza posiadaniem ogromnej ilości deklaracji znajomych (tj. jednego FRIEND_TEST na każdy test), czy jest łatwiejszy w użyciu idion, czy też powinienem zrezygnować z używania GoogleTest i przejść do innego frameworka testowego?


title: Czy istnieją dwa rodzaje skojarzeń między obiektami, czy są po prostu różne reprezentacje?

text: Spędziłem trochę czasu na „dostrajaniu” części mojego rozumienia OOP i natknąłem się na koncepcję, która mnie dezorientuje. Powiedzmy, że mam dwa obiekty. Obiekt „użytkownik” i obiekt „konto”. Wróćmy tutaj do podstaw, ale każdy obiekt ma **stan, zachowanie i tożsamość** (często określany jako obiekt encji). Obiekt `user` zarządza zachowaniem czysto związanym z użytkownikiem, na przykład możemy mieć metodę `login(credentials)`, która zwraca, jeśli użytkownik jest pomyślnie zalogowany, lub zgłasza wyjątek, jeśli nie. Obiekt `account` zarządza zachowaniem związanym wyłącznie z kontem użytkownika. Na przykład możemy mieć metodę checkActive(), która sprawdza, czy konto jest aktywne. Obiekt konta sprawdza, czy konto ma aktualną subskrypcję, sprawdza, czy nie zostały dodane flagi administratora, które powodowałyby jego nieaktywność. Zwraca, jeśli sprawdzanie się powiedzie, lub zgłasza wyjątek, jeśli nie. Tu leży mój problem. Istnieje wyraźny związek między „użytkownikiem” a „kontem”, ale wydaje mi się, że w rzeczywistości istnieją dwa TYPY powiązań, które należy wziąć pod uwagę. Jeden, który jest oparty na danych (istnieje tylko w danych/stanie obiektów i bazy danych) i taki, który jest oparty na zachowaniu (reprezentuje wywołanie obiektu do metod skojarzonego obiektu). ## Powiązanie oparte na danych W przedstawionym przeze mnie przykładzie wyraźnie widać powiązanie danych między `użytkownikiem` a `kontem`. W schemacie bazy danych możemy mieć następującą tabelę: ----------------- USER_ACCOUNTS ----------------- id user_id -- -------------- Kiedy tworzymy instancję `konta` i ładujemy do niego dane z bazy danych, pojawi się zmienna klasy zawierająca `user_id`. W istocie obiekt `account` zawiera całkowitą reprezentację `user` poprzez `user_id` ## Asocjacje oparte na zachowaniu Asocjacje zależne od zachowania są w rzeczywistości zależnościami obiektu. Jeśli obiekt A wywołuje metody na obiekcie B, następuje asocjacja przechodząca od A do B. A przechowuje reprezentację obiektu B. W moim przykładzie ani obiekt `user`, ani obiekt `account` nie zależą od siebie, aby wykonać swoje zadania, tj. żaden obiekt nie wywołuje metod na drugim obiekcie. W związku z tym nie ma między nimi związku opartego na zachowaniu i żaden obiekt nie ma odniesienia do drugiego obiektu. ## Pytanie Czy przedstawiony przeze mnie przypadek dotyczy wyłącznie reprezentacji podmiotu? Powiązanie między „użytkownikiem” a „kontem” jest zawsze obecne, ale jest reprezentowane na różne sposoby? tj. jednostka `user` ma tożsamość, która może być reprezentowana w różnych formach. Może być reprezentowana jako obiekt (skonkretyzowany obiekt `user`) lub jako unikalna liczba całkowita z tabeli users w bazach danych. Czy jest to sformalizowany sposób rozpoznawania różnych implementacji skojarzeń, czy całkowicie straciłem rozum? Jedną rzeczą, która mnie denerwuje, jest to, jak opisałbym różnice w UML lub podobnym? A może to tylko szczegół wdrożenia?


title: Znajdź błędy w programach Java, zwłaszcza korzystając z wtyczki eclipse

text: Czy to jest dobre ? http://findbugs.sourceforge.net/ Miałem wypróbować wersję webstart/demo i rzeczywiście wyglądała na użyteczną. Czy ktoś miał z tym jakieś doświadczenie, czy jest to wartościowe narzędzie?


title: Parametry adresu URL w usługach internetowych RESTful

text: Zastanawiam się nad stosownością parametrów URL w tworzeniu zasobów RESTful. Po pierwsze, oto kontekst. Pracuję nad interfejsem API, który będzie zdalnie aktualizował oprogramowanie na urządzeniach osadzonych podłączonych do chmury urządzeń online. Podstawowy przepływ pracy to: 1. Wykrywanie dostępnych aktualizacji 2. Stosowanie żądanych aktualizacji 3. Monitorowanie postępu aktualizacji Zasób wykrywania aktualizacji pozwoli użytkownikom POST nowego wykrywania aktualizacji. POST /updateDiscovery?apikey=a1b2c3 Powyższy adres URL wyzwoli wykrywanie aktualizacji dla wszystkich urządzeń. Przydatne jest również ograniczenie, które urządzenia są przeznaczone do aktualizacji. Istnieją dwa identyfikatory używane do ograniczania urządzeń docelowych: 1. identyfikator urządzenia 2. identyfikator grupy (który może odnosić się do wielu urządzeń) To ograniczenie może być przekazywane za pomocą parametrów adresu URL lub treści żądania. Używając parametrów URL: POST /updateDiscovery?deviceIds=1,2,3&groupIds=2,3 Używając treści żądania: POST /updateDiscovery Content-Type: application/json { target: { deviceIds: [1, 2, 3], groupIds: [3, 4] } } Tak czy inaczej, nowy zasób zostanie utworzony z następującą reprezentacją: { id: 1, target: { deviceIds: [1, 2, 3], groupIds: [3, 4] }, status: 'oczekujące', ... } Która z powyższych metod najlepiej jest zgodna z wzorcem projektowym RESTful i dlaczego?


title: Dyskowe operacje we/wy poniesione przez readLine() w Javie

text: Czy funkcja Java `readLine()` używana z `BufferedReader` powoduje jedno dyskowe wejście/wyjście na wywołanie? Jeśli tak, czy jest jakiś sposób na odczytanie określonej liczby wierszy, powiedzmy n, z pliku tekstowego powodującego tylko jedno wejście/wyjście dysku? Oto kod: Plik string; BufferedReader br = nowy BufferedReader (nowy FileReader (plik)); int n = 10; for (int i = 0; i < n; i++) { String line = br.readLine (); /* Zrób coś */     }


title: Kod źródłowy „wydrukowuje” w momencie wydania

text: Czy istnieje najlepsza praktyka dotycząca dokumentowania udostępnianego kodu źródłowego? Obecnie mamy tabelę wersji oprogramowania, jaki tag SVN jest oznaczony, w jakiej wersji SVN ten tag został utworzony oraz URL SVN. Następnie nasz dział CM chce, abyśmy dołączyli listę wszystkich plików źródłowych, które dołączamy do dostarczonego przez nas pliku .zip, który jest tylko plikiem zip udostępnianego tagu. Bardziej szukam pomysłów na aktualizację naszego szablonu wydruku, mam nadzieję, że z dobrymi argumentami, aby usunąć listę plików.


title: Dlaczego atrybut podpowiedzi jest oznaczony jako „title=”?

text: > HTML 4 obsługuje atrybut „title”, który można wstawić do dowolnego tagu > HTML. Wstawienie tego atrybutu skutecznie daje elementowi podpowiedź, która > pojawia się, gdy przesuwa się nad nim mysz. Po prostu wydaje się, że to zły dobór słów.. czy czegoś mi brakuje?


title: Jak szybki powinien być skrypt faktoringowy w Pythonie?

text: Jak wydajny jest „wystarczająco dobry” do wszystkich celów i celów? Napisałem skrypt, aby po prostu wypisać wszystkie liczby, które dzielą się na dane wejściowe, x, jako pary (i, n//i) i byłem po prostu ciekawy, jak wydajny powinienem być? w jakim akceptowalnym tempie skrypt zaczyna tracić wydajność? To jest mój kod (chociaż porady są mile widziane, chcę tylko dać pomysł, jak to działa). import time print('''Ten program określa wszystkie podstawowe czynniki podanej liczby, x, jako uporządkowane pary, (a, b) gdzie ab=x. Wpisz "quit", aby wyjść.''') timer = input(' (y/n) ') while 1: try: x =(input('x = ')) T0 = time.time() b = [] n = int(x)**0.5 ran = list(range(1, int(n)+1)) if int(x) % 2 == 1: ran = ran[::2] for i in ran: if int(x) % i == 0: m = (i, int(x)//i) b.append(m) else: pass z wyjątkiem ValueError jako error_1: if x == 'quit': break else: print(error_1) z wyjątkiem EOFError jako error_2: print(error_2 ) z wyjątkiem OverflowError jako error_3: print(error_3) z wyjątkiem MemoryError jako error_4: print(error_4) T1 = time.time() total = T1-T0 print(b) print(str(len(b)) + ' pairs.') if timer == 'y': print( "%.5f" % suma + ' sekundy.') niektóre z wyników to: x = 9 [(1, 9), (3, 3)] 2 pary. 0,00000 sekundy. x = 8234324543 [(1, 8234324543)] 1 para. 0,07404 sekundy. x = 438756349875 [(1, 438756349875), (3, 146252116625), (5, 87751269975), (15, 29250423325), (25, 17550253995), (75, 5850084665), (125, 3510050799), (375, 1170016933 ), (557, 787713375), (1671, 262571125), (2785, 157542675), (8355, 52514225), (13925, 31508535), (41775, 10502845), (69625, 6301707), (208875, 2100569)] 16 par. 0,88859 sekundy. Więc ten program może być dość szybki, ale wtedy prędkość spada dość szybko, gdy osiągniesz wyższe liczby. W każdym razie, tak, właśnie zastanawiałem się, co jest uważane za dopuszczalne według dzisiejszych standardów?


title: Szacowanie zadań w Scrum

text: Nasz zespół korzysta ze Scrum w trzech iteracjach. Z powodzeniem szacujemy PBI w storypointach, korzystając z planowania pokera. Ale dalej nie możemy nic zrobić, bo nie wiemy 1. Kto tworzy zadania? PBI jest tworzone przez wszystkich i zatwierdzane przez właściciela produktu, ale co z zadaniem 2. Kto szacuje zadanie? 3. Jakiej techniki należy używać do szacowania zadań? Planowanie pokera jest dobre dla szacowania PBI


title: Alternatywy dla adnotacji JDT — problemy z licencją

text: Użyłem biblioteki JDT Annotation w moim projekcie Java, ponieważ bardzo lubię to, co oferuje. Mówiąc dokładniej, użyłem adnotacji `@Nullable` i `@NonNullByDefault`, ponieważ mogę wykorzystać synergię z Eclipse do automatycznej analizy możliwych wartości `null` i tego, co może prowadzić do błędów `NullPointerException`. Niestety, JDT Adnotation jest licencjonowane na licencji EPL1, co, o ile mi wiadomo, jest niezgodne z GPL2 ze względu na słabą licencję typu copyleft i wybór niektórych klauzul. Ponieważ projekt powinien zostać opublikowany na licencji GPL2, badam różne opcje, ale nie mam jeszcze żadnych, które oferowałyby taką samą lub prawie taką samą funkcjonalność. Nie jestem chętny do dodawania kontroli zerowych, ponieważ zaśmiecają one kod tym, co może również rozwiązać adnotacja. Ale niestety wydaje się, że to jedyna realna opcja? Szukam ekspertyzy w tej sprawie. To, co proponuję, to użycie „Warunków wstępnych” Google do sformułowania warunków wstępnych, takich jak: Preconditions.checkArgument(providedArgument != null, "Podany argument nie może być null!"); odpowiednio: Preconditions.checkState(invariantField != null, "Pole nie może być puste!"); Rozwiążą one oczywiście problem i będą moim zdaniem bardziej jednoznaczne, jeśli chodzi o dokumentowanie moich kontraktów za pomocą kodu. Zwykle zgłaszam je również za pomocą niestandardowych tagów w mojej dokumentacji Javadoc, na przykład `@pre providedArgument != null` lub `@inv invariantField != null`. Byłbym wdzięczny za wszystko


title: Problem z procesem uwierzytelniania OAuth2 i trwałością sesji

text: Używamy node-oauth2-provider jako biblioteki uwierzytelniania dla naszej usługi. Bieżący proces logowania użytkownika to: POST /oauth2/access_token Który tworzy i zapisuje access_token w bazie danych. Przy kolejnych żądaniach wysyłamy `access_token`, który jest pobierany z bazy danych w celu sprawdzenia, czy istnieje. Stamtąd użytkownik jest przez nas ręcznie dodawany do sesji w podobny sposób jak jego przykłady. Po tym wydarzeniu, jeśli żądanie przyjdzie bez tokena dostępu, sesja nadal wydaje się być ustawiona. Jakby trwało w wielu żądaniach. Może źle rozumiem, jak to ma działać… ale czy token dostępu nie powinien być wskazówką, że żądania użytkownika są nadal ważne? Jeśli tak, czy muszę ręcznie wyczyścić sesję? Jeśli nie i przechowuje go w pamięci... prawdopodobnie wskazane przez: express.session({store: new MemoryStore({reapInterval: 5 * 60 * 1000}), secret: 'abrakadabra'}) To skąd serwer o tym wie kolejne wnioski są ważne?


title: Używasz słów zamiast liczb do wersjonowania?

text: Czy uznano by za dopuszczalne używanie złożonych słów zamiast liczb w iteracjach wersji? Na przykład we wzorcu: „[Przymiotnik] [Rzeczownik]” Pierwsza wersja może wyglądać tak: „Auspicious Armadillo” Tak więc przy każdym kolejnym wydaniu rzeczownik zmieniałby się na następną literę alfabetu, a wersja mogłaby być zgodna z: "Auspicious Bear" Gdy skończy się alfabet rzeczowników, przymiotnik zostanie zmieniony i rzeczowniki mogą zacząć się od nowa, np.: "Oszołomiony pancernik" itp. Dałoby mi to około 676 możliwych różnych wersji do przerobienia. Zakładając, że projekt jest wystarczająco mały i krótki, aby mieścił się w tych 676 wydaniach przed całkowitym przerobieniem/przeróbką, czy taki wzorzec wersjonowania byłby uważany za akceptowalny do użycia? A może wywołałoby to niepotrzebne zamieszanie i chaos? Rozumiem, że może to być w pewnym stopniu związane z opiniami, ale miałem nadzieję na jakiś ogólny konsensus co do tego, czy jest to akceptowalny lub okropny pomysł.


title: Czy funkcja rekurencyjna może mieć iteracje/pętle?

text: Studiowałem o funkcjach rekurencyjnych i najwyraźniej są to funkcje, które wywołują siebie i nie używają iteracji/pętli (w przeciwnym razie nie byłaby to funkcja rekurencyjna). Jednak podczas przeglądania sieci w poszukiwaniu przykładów (problem 8-królowych-rekurencyjnych), znalazłem tę funkcję: private boolean placeQueen(int rows, int queens, int n) { boolean result = false; if (rząd < n) { while ((królowe[rząd] < n - 1) && !wynik) { królowe[rząd]++; if (weryfikuj(rzad,królowe,n)) { ok = placeQueen(rzad + 1,królowe,n); } } if (!wynik) { królowe[rząd] = -1; } }else{ wynik = prawda; } zwraca wynik; } W grę wchodzi pętla `while`. ... więc jestem teraz trochę zagubiony. Czy mogę używać pętli, czy nie?


title: Jaki jest najlepszy sposób zaprojektowania bazy danych do śledzenia wszystkich prób użytkowników w kwestionariuszu online?

text: Mamy aplikację internetową, w której użytkownicy mogą zdawać egzaminy online. Administrator egzaminu utworzy kwestionariusz. Ankieta może zawierać wiele pytań. Każde pytanie jest pytaniem wielokrotnego wyboru (MCQ). Załóżmy, że administrator tworzy kwestionariusz z 10 pytaniami. Użytkownicy próbują odpowiedzieć na te pytania. Teraz, w przeciwieństwie do prawdziwych egzaminów, użytkownicy mogą wielokrotnie wypełniać jeden kwestionariusz. I musimy śledzić wszystkie jego próby. np. +-------+-----------------+-------------+-------+-- ----------+----------+ |Identyfikator_użytkownika|Identyfikator_kwestionariusza |Id_pytania |Odpowiedź |data_próby|brak_próby| +-------+-----------------+-------------+-------+-- ----------+----------+ |1 |1 |1 |a |1 czerwca 2013 |1 | |1 |1 |2 |b |1 czerwca 2013 |1 | |1 |1 |1 |c |2 czerwca 2013 |2 | |1 |1 |2 |d |2 czerwca 2013 |2 | +-------+-----------------+-------------+-------+-- ----------+----------+ Teraz może się również zdarzyć, że po dwukrotnym spróbowaniu tego samego kwestionariusza przez użytkownika, administrator może usunąć pytanie z tego samego kwestionariusza, ale z historii prób użytkownika powinien nadal mieć odniesienie do tego, aby użytkownik mógł zobaczyć to pytanie w swojej historii prób, pomimo usunięcia tego pytania przez administratora. Jeśli użytkownik spróbuje teraz zmienić ten kwestionariusz, powinien zobaczyć tylko 1 pytanie. +-------+-----------------+-------------+-------+-- ----------+----------+ |Identyfikator_użytkownika|Identyfikator_kwestionariusza |Id_pytania |Odpowiedź |data_próby|brak_próby| +-------+-----------------+-------------+-------+-- ----------+----------+ |1 |1 |1 |a |3 czerwca 2013 |3 | +-------+-----------------+-------------+-------+-- ----------+----------+ Ponadto, po zmodyfikowaniu przez tego użytkownika pewnej części pytania, historia prób użytkowników powinna pokazywać pytanie przed modyfikacją, podczas gdy każda nowa próba powinna pokazywać zmodyfikowane pytanie . Jak zarządzamy tym na poziomie bazy danych? Moim pierwszym przeczuciem było to, że w przypadku usuwania nie usuwaj fizycznie, po prostu spraw, aby pytanie było nieaktywne, aby historia mogła nadal śledzić próby użytkowników. W przypadku modyfikacji utwórz wersje pytań, a każda nowa próba odnosi się do najnowszej wersji każdego pytania i historii, zachowując odniesienie do wersji pytania w momencie próby.


title: mercurial czy tfs dla codeplex?

text: Od jakiegoś czasu pracuję nad osobistym projektem platformy .NET i jest on prawie gotowy do uruchomienia open source. Zdecydowałem się (arbitralnie) hostować go na codeplex. Codeplex oferuje TFS lub mercurial. Zastanawiam się, który wybrać. Zastanów się: * Zawsze używałem tylko subversion. * Jako IDE używam VS 2010 express. * Narzędzia muszą być bezpłatne (więc klient mercurial, jeśli pójdę tą drogą). * Z tego, co słyszałem, mercurial brzmi interesująco, ale wiem o nim _bardzo_ mało, więc jeśli istnieje krzywa uczenia się, to nie chcę dodawać do projektu zbyt wielu celów szkoleniowych. * Nie oczekuję żadnych współtwórców. Sądzę więc, że pytanie brzmi, czy Mercurial jest wystarczająco łatwy w użyciu z codeplexem i czy dodaje coś, czego nie ma opcja TFS?


title: zaprojektować model dla układu zmiennych zależnych

text: Mam do czynienia z systemem modelowania (finansowym), który posiada dziesiątki zmiennych. Niektóre zmienne są niezależne i działają jako dane wejściowe do systemu; większość z nich jest wyliczana z innych zmiennych (niezależnych i wyliczanych) w systemie. To, czego szukam, to czysty, elegancki sposób na: 1. zdefiniowanie funkcji każdej zmiennej zależnej w systemie 2. wywołanie ponownego obliczenia zmiennych od niej zależnych, gdy tylko zmienna się zmieni Naiwny sposób zrobienie tego byłoby napisanie pojedynczej klasy, która implementuje `INotifyPropertyChanged` i używa obszernej instrukcji case, która wypisuje wszystkie nazwy zmiennych x1, x2, ... xn, od których zależą inne, oraz za każdym razem, gdy zmieni się zmienna `xi` , uruchamia ponowne obliczenie każdej z zależności tej zmiennej. Uważam, że to naiwne podejście jest wadliwe i że musi istnieć czystszy sposób. Rozpocząłem ścieżkę definiowania klasy `CalculationManager<TModel>`, której użyto (w prostym przykładzie) coś takiego: public class Model : INotifyPropertyChanged { private CalculationManager<Model> _calculationManager = new CalculationManager<Model>( ); // każdy ustawiający wyzwala publiczne dublet zdarzenia "PropertyChanged"? Wzrost { dostać; ustawić; } publiczne podwójne? Waga { zdobądź; ustawić; } publiczne podwójne? BMI { zdobądź; ustawić; } public Model() { _calculationManager.DefineDependency<double?>( forProperty: model => model.BMI, usingCalculation: (wzrost, waga) => waga / Math.Pow(wzrost, 2), withInputs: model => model. Wzrost, model.Waga); } // Implementacja INotifyPropertyChanged tutaj } Nie powiem tutaj `CalculationManager<TModel>`, ale podstawową ideą jest to, że ustawia mapę zależności, nasłuchuje zdarzeń `PropertyChanged` i aktualizuje zależne właściwości według potrzeb. Nadal czuję, że brakuje mi tutaj czegoś ważnego i że nie jest to właściwe podejście: 1. (niewłaściwe) użycie `INotifyPropertyChanged` wydaje mi się zapachem kodu 2. parametr `withInputs` jest zdefiniowany jako `params Expression<Func<TModel, T>>[] args`, co oznacza, że lista argumentów `usingCalculation` nie jest sprawdzana w czasie kompilacji 3. lista argumentów (waga, wysokość) jest zdefiniowana nadmiarowo w obu `usingCalculation` i `withInputs` Jestem pewien, że ten rodzaj systemu zmiennych zależnych musi być powszechny w matematyce obliczeniowej, fizyce, finansach i innych dziedzinach. Czy ktoś wie o ustalonym zestawie pomysłów, które dotyczą tego, do czego się tutaj pojmuję? Czy byłaby to odpowiednia aplikacja dla języka funkcjonalnego, takiego jak F#? * * * **Edytuj** Więcej kontekstu: Model istnieje obecnie w arkuszu kalkulacyjnym Excel i jest migrowany do aplikacji C#. Jest uruchamiany na żądanie, a zmienne mogą być modyfikowane przez użytkownika z poziomu interfejsu użytkownika aplikacji. Jego celem jest pobranie zmiennych, którymi interesuje się biznes, biorąc pod uwagę bieżące dane wejściowe z rynków i parametry modelu ustawione przez biznes.


title: Jak kontrolować pracę programistów (outsourcerów)

text: Jakiś czas temu zdecydowałem się na outsourcing projektów tworzenia stron internetowych (kodowanie i projektowanie php). Otworzyłem małe biuro za granicą z menedżerem oraz kilkoma programistami i projektantem. Dopiero zacząłem, ale już mam problem z kontrolowaniem ich pracy. Niektórzy programiści są szybcy, inni pracują znacznie wolniej. Płacę im stałą pensję, więc ma dla mnie znaczenie, czy wykonują swoją pracę na czas. Kiedy pracują w biurze, mam przynajmniej osobę odpowiedzialną za projekt, która powie, czy naprawdę pracowali. Ale czasami pracują z domu iw takim przypadku nie mam możliwości dowiedzieć się, czy naprawdę spędzili ten czas pracując nad jakimś problemem. Niektóre z moich pomysłów to: kontrolowanie ilości kodu wykonanego za pomocą svn, ścisłe terminy, codzienne raportowanie... Ale nic nie wydaje mi się idealne. Tworzy jeszcze więcej pracy z mojej strony. Czy ktoś może zasugerować sposób sprawiedliwego osądu, ile tak naprawdę czasu poświęcono na rzeczywistą pracę? Jak pobudzić ludzi do pracy? Może stworzyć jakiś system bonusowy, jeśli praca zostanie wykonana szybko? Każdy pomysł/doświadczenie na ten temat byłoby bardzo mile widziane.


title: Czy (/może) istnieje licencja oparta na LGPL bez klauzuli 4d?

text: Zacząłem pisać framework w C (może o tym słyszeliście: Raphters). Ktoś skontaktował się ze mną, aby zapytać, czy mógłbym ponownie ją licencjonować, ponieważ byłaby przydatna w produktach osadzonych, ale klauzula 4d (klauzula, która mówi, parafrazując, musisz zezwolić na ponowne powiązanie zmodyfikowanych wersji biblioteki z plik wykonywalny) to utrudni. Lubię LGPL, ponieważ uniemożliwia ludziom dokonywanie modyfikacji i utrzymywanie ich w tajemnicy, ale nie chcę, aby ludzie używali Raphterów w swoich wbudowanych produktach. Co sugerujesz?


title: Co uważasz za główną przyczynę defektów oprogramowania (i jak je zminimalizować)

text: Definiuję **wadę** jako: > „coś w projekcie aplikacji lub w kodzie, co uniemożliwia jej > funkcjonowanie zgodnie z wymaganiami”. Szukam pomysłów na przyczyny defektów, np. czynnik ludzki, brak testów, brak prototypowania i możliwych pomysłów na ich złagodzenie.


title: Czy wymagany jest stopień naukowy w przypadku prac programistycznych niskiego poziomu/wbudowanych?

text: Wiem, że można zająć się tworzeniem oprogramowania bez dyplomu z informatyki, ale czy jest możliwe (a raczej powszechne) uzyskanie pracy w zakresie programowania wbudowanego bez dyplomu z informatyki (lub jakiegokolwiek dyplomu inżyniera) ?


title: Kolega programista stosował najgorsze praktyki programistyczne

text: Wiem, że to wydaje się dziwne, ale kolega programista celowo użył kilku złych praktyk programistycznych! Wytłumaczę. Najpierw powiem, że jest inteligentnym facetem iw większości pisze zrozumiały kod. Został poproszony o wdrożenie licencji na projekt aplikacji internetowej napisanej w Javie. Skoro jest to Java, gdyby ktoś naprawdę chciał, to można by pewnie włamać się do słoików i przeczytać nazwy klas i metod zapisanych w środku. Jego rozwiązaniem tego problemu było dość dosłownie niezręczne nazywanie zmiennych i metod mniej niż oczywistymi nazwami i umieszczanie ich w już przeciążonych klasach, zamiast generowania nowych klas. Jego uzasadnieniem było to, że gdyby haker chciał zmienić pewne klasy, aby ominąć kontrole licencji (a tym samym uzyskać bezpłatną kopię produktu), miałby z tym znacznie trudniejsze chwile, gdyby nie było oczywiste, które metody wykonywać te konkretne zadania. Dopiero po tym, jak to zrobił, skonfrontowałem się z nim, sugerując, że być może moglibyśmy kupić jakąś bibliotekę zaciemniającą, aby zrobić to za nas, zachowując dobre praktyki programistyczne. Twierdzi, że nie miał czasu ani środków na szukanie takiego rozwiązania. ..Co stawia mnie przed dylematem. Czy szukam biblioteki zaciemniającej w Javie i naprawiam jego stary kod (co może być trochę drażliwe w przypadku przebudowy jego kodu), czy też zostawiam to tak, jak bardzo mnie to irytuje?


title: Program zakodowany w .Net

text: Co to ogólnie oznacza, gdy programista mówi, że jego program/aplikacja została „zakodowana w .Net”? Kiedy myślę o .Net, myślę o C# i Visual Basic. Zwykle nie myślę o żadnym innym języku z tej listy: http://en.wikipedia.org/wiki/List_of_CLI_languages


title: jak oddzielić pytanie projektowe od pytań programistycznych?

text: Gdy próbuję zaprogramować rozwiązanie, pojawia się żądanie. Nie potrafię odróżnić problemów wdrożeniowych od problemów projektowych. Jak konkretnie wyrażasz problem projektowy?


title: Unikanie opakowujących obiektów w kolekcjach

text: Trochę denerwuje mnie to, że muszę owijać typy prymitywne w obiektach opakowujących, aby przechowywać je w strukturach danych kolekcji (zestawy, mapy, listy itp.) W językach takich jak Java i Objective C. Naprawdę chciałbym mieć, powiedzmy , struktura danych Map, która działa w ten sam sposób, niezależnie od tego, czy mapuję NSNumbers na ciągi, czy liczby całkowite na podwajania lub liczby całkowite do MyBigCustomObject*. Rozumiem, że powodem, dla którego struktury danych kolekcji w tych językach wymagają zawijania w obiekcie, jest to, że zawsze można założyć, że podana liczba jest wskaźnikiem - faktycznie _mogę_ utworzyć NSDictionary z [NSDictionary dictionaryWithObject: MyCustomObject forKey: 1], ale potraktuje 1 jako wskaźnik zamiast liczby całkowitej, spróbuje uzyskać dostęp do adresu pamięci 1 i segfault. Ale nie widzę powodu, dla którego nie można utworzyć struktury danych kolekcji, która śledzi _typ_ kluczy i wartości, które nie miałyby tego problemu. Nawet stosunkowo nieelastyczna struktura danych, taka jak Mapa konkretnie-int do konkretnie-wskazników-do-obiektów, byłaby przyzwoicie powszechnym przypadkiem użycia (z pewnością mógłbym użyć jednego, ostatnio robię dużo pracy, która polega na indeksowaniu obiektów przez identyfikator całkowity). Czy istnieje powód, dla którego nie jest to powszechny paradygmat w językach, które mają rozróżnienie typu obiekt/typ pierwotny?


title: Najlepsze zasoby do nauki idiomatycznego PHP

text: Moje doświadczenie związane jest przede wszystkim z Javą, ale pracuję nad projektem PHP i mam świadomość braku znajomości idiomatycznego PHP. Jakie zasoby (online lub drukowane) pomogą mi uniknąć błędów, które zwykle popełniają ludzie z goglami Java? Pierwszą nagrodą byłoby coś, co dałoby mi krótką, dogłębną analizę ważnych pomysłów na PHP, a la Joshua Bloch's Effective Java.


title: Preferencje stylu LINQ

text: Często używam LINQ w moim codziennym programowaniu. W rzeczywistości rzadko, jeśli w ogóle, używam wyraźnej pętli. Odkryłem jednak, że nie używam już składni podobnej do SQL. Po prostu korzystam z funkcji rozszerzeń. Więc zamiast mówić: od x w y wybierz datatransform gdzie używam filtra: x.Where(c => filter).Select(c => datatransform) Który styl LINQ preferujesz i z jakimi innymi osobami w Twoim zespole są zadowoleni ?


title: Specyfikacja techniczna i projektowa oprogramowania: Jak?

text: Mamy w mojej firmie projekt opracowania nowego CRM. Zasadniczo jest to duży CRUD, z sub-CRUDS, z różnymi szczegółami, takimi jak niektórzy użytkownicy mogą to zrobić, inni nie. Z Symfony będziemy rozwijać system w PHP. Rozwijanie jest łatwe, ale mamy pewne trudności z analizą części pracy. Musimy przedstawić specyfikację projektu, a także specyfikację techniczną projektu. Musimy narysować i wyjaśnić, jak system będzie działał. I nie jesteśmy pewni, jak to zrobić. Zawsze po prostu... robiliśmy system. Nie planujemy za pomocą grafiki lub tekstu, ani nie wyjaśniamy, co robiliśmy. Zapytaliśmy już wszystkich i otrzymaliśmy sugestie, a także wymagania. Najwyraźniej musimy to wziąć i wyjaśnić system. Jakieś wskazówki, chłopaki? :)


title: Cytując pożyczony kod

text: Jeśli pożyczasz kod z jakiegoś źródła, prawdopodobnie najlepiej go zacytować (np. „zaadaptowane z [źródło]”). Jeśli jednak weźmiesz, powiedzmy, że pożyczyłeś tę funkcję (przykład w C++): void doWork() { cout << "Wykonuję pracę!\n" << endl; } a teraz wyedytowałeś to tak: void doWork() { string name = ""; cout << "Rozpoczęcie pracy...\n" << endl; cout << "Witaj użytkowniku. Jak się nazywasz?" << endl; cin >> nazwa; ... } Czy nadal musiałbyś powiedzieć "zaadaptowane z [źródło]" lub coś takiego? A może jesteś w bezpiecznej strefie? **Uwaga** : Zastanawiam się konkretnie, jak to się ma do kodu chronionego prawem autorskim (i open source)


title: Jaka jest wartość ukrywania szczegółów za pomocą abstrakcji? Czy przejrzystość nie ma wartości?

text: ## Tło Nie jestem wielkim fanem abstrakcji. Przyznam, że można czerpać korzyści z adaptacji, przenośności i ponownego wykorzystania interfejsów itp. Jest to realna korzyść i nie chcę tego kwestionować, więc zignorujmy to. Istnieje inna główna „korzyść” abstrakcji, która polega na ukryciu logiki implementacji i szczegółów przed użytkownikami tej abstrakcji. Argumentem jest to, że nie musisz znać szczegółów i że w tym momencie należy skoncentrować się na własnej logice. W teorii ma sens. Jednak za każdym razem, gdy opiekuję się dużymi aplikacjami korporacyjnymi, zawsze potrzebuję poznać więcej szczegółów. Staje się ogromnym kłopotem zagłębianie się coraz głębiej w abstrakcję na każdym kroku tylko po to, aby dowiedzieć się dokładnie, co coś robi; tj. konieczność wykonania „otwartej deklaracji” około 12 razy przed znalezieniem używanej procedury składowanej. Wydaje się, że ta mentalność „ukrywania szczegółów” po prostu przeszkadza. Zawsze życzę sobie bardziej przejrzystych interfejsów i mniejszej abstrakcji. Potrafię czytać kod źródłowy wysokiego poziomu i wiem, co robi, ale nigdy nie dowiem się, jak to robi, kiedy to robi, to jest to, co naprawdę muszę wiedzieć. Co tu się dzieje? Czy każdy system, nad którym pracowałem, został po prostu źle zaprojektowany (przynajmniej z tej perspektywy)? # Moja filozofia Kiedy tworzę oprogramowanie, czuję, że staram się podążać za filozofią, która moim zdaniem jest ściśle powiązana z filozofią ArchLinux: > Arch Linux zachowuje nieodłączną złożoność systemu GNU/Linux, jednocześnie > utrzymuje je dobrze zorganizowane i przejrzyste. Deweloperzy i użytkownicy Arch Linux > uważają, że próba ukrycia złożoności systemu w rzeczywistości skutkuje > > jeszcze bardziej złożonym systemem i dlatego należy tego unikać. Dlatego nigdy nie próbuję ukrywać złożoności mojego oprogramowania za warstwami abstrakcji. Staram się nadużywać abstrakcji, a nie stać się jej niewolnikiem. # Pytanie w sercu 1. Czy ukrywanie szczegółów ma prawdziwą wartość? 2. Czy nie poświęcamy przejrzystości? 3. Czy ta przejrzystość nie jest cenna?


title: Czy w mojej komercyjnej aplikacji mogę używać biblioteki na licencji LGPL?

text: Chcę używać biblioteki na licencji LGPL w mojej aplikacji na potrzeby rynku aplikacji firmy Microsoft. Czy to w porządku?


title: Czy można zintegrować transfer plików UDP z aplikacją sieci Web .NET?

text: # Tło Ostatnio otrzymałem zadanie zaprojektowania przebudowy istniejącej aplikacji internetowej .NET, która _obecnie_ korzysta z usług firmy zewnętrznej do obsługi dużych transferów plików (nawet 50 GB). Obecnie aplikacja .NET zależy od .JAR (Apletu Java) dostarczonego przez tę firmę zewnętrzną, który jest wywoływany w ramce iFrame i udostępnia odpowiednią interakcję z systemem plików w celu wybrania całych katalogów do przesłania i tak dalej. Zdaję sobie sprawę, że jak dotąd wszystko to jest możliwe przy użyciu kombinacji klas sieciowych .NET (ftp) i Flash lub Silverlight dla dostępu klienta. Powiedziano mi, że powodem, dla którego wtyczka innej firmy jest tak wyjątkowa, jest to, że używa protokołu UDP, więc jeśli przesyłanie lub pobieranie zostanie przerwane, można je wznowić później w miejscu, w którym zostało przerwane. Powiedziano mi również, że pakiet narzędzi innych firm pozwala informatykom ograniczać przepustowość (nawet nie wiem, co to znaczy) i robić kilka innych fajnych rzeczy. # Pytanie Zakładając, że będziemy korzystać z najnowszej wersji C# i platformy .NET (4.0), czy możliwe jest zreplikowanie tego zachowania opartego na protokole UDP? Mówiąc rozsądnie, mam na myśli to, czy można to zrobić w mniej niż, powiedzmy, 240 godzin programistycznych. **Pamiętaj**, że przebudowana aplikacja będzie idealnie wykorzystywać wszystkie technologie firmy Microsoft (w tym Silverlight do dostępu klienta) i będzie działać na platformie Azure.


title: Grafika pokazująca nacisk na front end w aplikacjach webowych

text: Pamiętam, że rok temu natknąłem się na zabawną grafikę, która demonstrowała poziomy tworzenia stron internetowych. Back-end został pokazany jako małe pudełko, ale front end został pokazany jako ogromne pudełko wypełnione mnóstwem technologii front-endowych, takich jak AJAX, DHTML. To wszystko jest mglistym wspomnieniem. Czy ktoś wie, gdzie w intrawebie może być ta grafika? Prawdopodobnie znajdował się na stronie z kreskówkami, ale oglądam regularnie tylko XKCD i nie mogłem go tam znaleźć. Chociaż oznaczono je jako zabawne, moja prośba ma w sobie coś z produktywnej przewagi – byłoby to całkiem przydatne, gdybyśmy mogli przekonać moich kolegów do domu, w jaki sposób stało się tworzenie aplikacji internetowych z zaawansowanymi interfejsami użytkownika.


title: Czy można stworzyć aplikację IOS bez komputera Mac?

text: Jestem studentem studiów podyplomowych i wpadłem na pomysł zbudowania aplikacji dla dzieci ze szkoły podstawowej. Moje pytanie po wielu dniach poszukiwań brzmi, czy ktoś tutaj kiedykolwiek próbował i jakie było ich doświadczenie w tworzeniu aplikacji na iOS na innych platformach niż Xcode, takich jak Phonegap, Monotouch, flex lub inne?


title: Czy zbiory danych podlegają patentowaniu?

text: Pracuję nad projektem, który używa zestawu danych wyprodukowanego z oprogramowania nieformalnie licencjonowanego jako "tylko do użytku niekomercyjnego". Zajmuję się tworzeniem aplikacji, która używa tego zestawu danych jako danych wejściowych do innego algorytmu. Nasze własne oprogramowanie ma liberalną licencję wolnego oprogramowania, w której nie ograniczamy komercyjnego wykorzystania. Czy istnieją prawne konsekwencje używania tego zbioru danych w naszym własnym oprogramowaniu w tym sensie, że naruszamy prawa autorskie? **Edytuj** : Dzięki ludzie, pytanie prawnika jest dobrym rozwiązaniem, ale pomocne jest dla mnie wysłuchanie opinii.


title: Jak powinienem napisać nowy kod, gdy stara baza kodu i środowisko używają wielu globalnych elementów w PHP?

text: Pracuję w środowisku Wordpress, które samo w sobie mocno opiera się na globalach, a obsługiwany przeze mnie kod wprowadza trochę więcej. Chcę, żeby to się zmieniło, więc zastanawiam się, jak sobie z tym poradzić. Myślę, że dla globalnych wprowadzonych przez nasz kod ustawię je jako zależności w konstruktorze lub w pobieraniu/ustawianiu, aby nie polegać na tym, że są globalami, a następnie stopniowo refaktoryzuj starą bazę kodu, aby nie było globalnych. W przypadku Wordpress globals myślałem o zawinięciu wszystkich globalnych WP wewnątrz klasy Wrapper i ukryciu ich tam. Jak ta klasa WpGlobals { public static funkcja getDb () { global $ wpdb; zwróć $wpdb; } } Czy to by pomogło? Chodzi o to, żebym centralizowała wszystkie globaly w jednej klasie i nie rozrzucałam ich po kodzie, więc jeśli Wordpress zabije któryś z nich, muszę zmodyfikować kod tylko w jednym miejscu. Co byś zrobił?


title: Czy przeglądarka może korzystać z przeglądania peer-to-peer?

text: Niedawno zapytał mnie o to mój przyjaciel po wyjaśnieniu, jak działa µTorrent, a następnie zapytał mnie: „Czy można to wykorzystać do przeglądania sieci?” (nie jest to bezpośredni cytat), ale przez chwilę zastanawiałem się nad tym odtąd. * Czy ktoś może być uznany za stworzenie pierwszej przeglądarki Peer-2-Peer? * Jak może wysłać poprawne dane bez ich modyfikacji? * Czy byłby szybszy niż zwykłe przeglądarki? (Odnosząc się do sposobu działania µTorrent, stwierdzam, że gdy używam torrenta, jest to szybsze niż pobieranie z sieci.) * Czy może zaoszczędzić na obciążeniu serwera, zapobiec DDoS, więcej?


title: Jak mogę odtworzyć kod skrótu?

text: Buduję aplikację w języku C#, która współpracuje z bazą danych Progress. Hasła przechowywane w tej bazie danych są przechowywane przy użyciu algorytmu skrótu, którego Progress nie upublicznił. Chciałbym jednak uwierzytelnić się za pomocą tych skrótów. Czy możliwe jest wykonanie inżynierii wstecznej takiego algorytmu mieszającego i jak mam to zrobić? Żeby było jasne: nie szukam sposobu na uzyskanie niezaszyfrowanych haseł z hashów. Szukam algorytmu do uzyskania skrótu z hasła.


title: Dlaczego wywołanie konstruktora do superkonstruktora musi być pierwszym wywołaniem?

text: Błędem jest zrobienie czegokolwiek w konstruktorze przed wywołaniem superkonstruktora. Pamiętam, że miałem z tego powodu problemy. Jednak nie widzę, jak to uchroni nas przed błędami. Może to uchronić Cię przed używaniem niezainicjowanych pól. Ale robi to kompilator Javy, który sprawdza, czy używa niezainicjowanych zmiennych, a ta głupia reguła niczego tu nie poprawia. Jedynym poważnym argumentem, jaki pamiętam, było to, że potrzebujemy go do OOP, ponieważ obiekty w prawdziwym życiu są konstruowane w ten sposób: tworzysz ogórka, najpierw tworząc warzywo, a następnie dodaj atrybuty ogórka. IMO jest odwrotnie. Najpierw tworzysz ogórek, a kaczka jest zasadą kaczki, staje się warzywem. Kolejnym argumentem było to, że poprawia bezpieczeństwo. Nie napisanie kodu znacznie poprawia niezawodność, więc nie uważam tego za argument. Tworzenie bardziej złożonego kodu, gdy trzeba obejść głupie ograniczenie, sprawia, że program jest bardziej podatny na błędy. Ta zasada powoduje poważny ból (przynajmniej dla mnie). Tak więc chcę usłyszeć poważny argument i poważny przykład, w którym może się to przydać.


title: Jak rozwiązać cykliczne zależności we wzorcu odwiedzających

text: Podczas programowania w pracy od czasu do czasu mamy do czynienia z problemem odwiedzających oraz zależnościami między modułami i projektami. Powiedzmy, że masz klasę A w module X. A w module Y są podklasy B i C. Oznacza to, że moduł Y jest zależny od modułu X. Jeśli chcemy zaimplementować wzorzec odwiedzających do hierarchii klas, wprowadzając w ten sposób interfejs z uchwytem Operations i abstrakcyjną metodą accept w A, otrzymujemy zależność z modułu Y do modułu X, na co nie możemy pozwolić ze względów architektonicznych. To, co robimy, to bezpośrednie porównanie typów (np. `instanceof`, ponieważ programujemy w Javie), co nie jest satysfakcjonujące. Moje pytanie (pytania) brzmiałyby: Czy napotykasz tego rodzaju problem w swojej codziennej pracy (czy też dokonujemy kiepskich wyborów architektonicznych), a jeśli tak, jakie jest Twoje podejście do rozwiązania tego problemu? Oto minimalny przykład w Javie, aby zilustrować mój punkt widzenia. Pakiet a ma klasę A i interfejs użytkownika w hierarchii klasy A: pakiet pkg.a; public abstract ClassA rozszerza ClassA { public abstract void accept(ClassAVisitor gość); /* inne metody ... */ } pakiet pkg.a; importuj pakiet.b.ClassB; importuj pakiet.b.ClassC; interfejs publiczny ClassAVisitor { public abstract void handle(ClassB visitee); publiczny abstrakcyjny pusty uchwyt (odwiedzający klasy C); } Pakiet b ma konkretne klasy, które wywodzą się z klasy A: pakiet pkg.b; importuj pakiet.a.ClassAvistor; public ClassB rozszerza klasę A { public void accept(ClassAVisitor gość) { visitor.handle(this); } } pakiet pkg.b; importuj pakiet.a.ClassAvistor; public ClassC { public void zaakceptuj(ClassAVisitor gość) { visitor.handle(this); } } Pakiety aib mają zależność cykliczną.


title: AngularJS: budowanie aplikacji internetowej z wieloma aplikacjami ng

text: Blogosfera zawiera wiele artykułów na temat wytycznych dotyczących struktury aplikacji AngularJS, takich jak te (i inne): * http://www.johnpapa.net/angular-app-structuring-guidelines/ * http://codingsmackdown.tv /blog/2013/04/19/angularjs-modules-for-great-justice/ * http://danorlando.com/angularjs-architecture-understanding-modules/ * http://henriquat.re/modularizing-angularjs/modularizing -angular-applications/modularizing-angular-applications.html Jednak jeden ze scenariuszy, z którymi jeszcze nie spotkałem się w celu uzyskania wskazówek i najlepszych praktyk, to przypadek, w którym masz dużą aplikację internetową zawierającą wiele aplikacji „mini-spa”, a mini-spa wszystkie aplikacje spa współdzielą pewną ilość kodu. Nie odnoszę się do przypadku próby posiadania wielu deklaracji `ng-app` na tej samej stronie; raczej mam na myśli różne sekcje dużej witryny, które mają własną, unikalną deklarację `ng-app`. Jak pisze Scott Allen w swoim blogu OdeToCode: > Jednym ze scenariuszy, który nie został rozwiązany zbyt dobrze, jest scenariusz, w którym > wiele aplikacji istnieje w tej samej większej aplikacji internetowej i wymaga > pewnego współdzielonego kodu na kliencie. Czy istnieją jakieś zalecane podejścia, pułapki, których należy unikać, lub dobre przykładowe struktury tego scenariusza, na które można wskazać?


title: Jak używać Subversion w połączeniu z DTAP z kilkoma zespołami Scrumowymi?

text: Przeczytałem _Jak wyciągnąć coś z wydania?_ , ale to nie rozwiązuje naszych problemów, ponieważ nasza sprawa jest bardziej złożona. Nasza sytuacja wygląda następująco. Tworzymy aplikację dla klienta wewnętrznego. Scrum robimy z czterema mniej lub bardziej wyrównanymi zespołami (tj. sprinty kończą się tego samego dnia), z których jeden jest poza miejscem pracy. Mamy podstawową ulicę DTAP i używamy Subversion do kontroli źródeł. Chcemy wdrożyć system na końcu ulicy TAP z kontroli źródła, jako przygotowanie do późniejszego użycia ciągłej integracji. Aby móc wdrażać z kontrolą źródła, utrzymujemy gałęzie, które są zsynchronizowane z każdym ze środowisk T, A i P. Nasza obecna konfiguracja to czysty trunk, który jest zsynchronizowany z produkcją, gałąź acpt, która została rozgałęziona z pnia w pewnym momencie w przeszłości i jest zsynchronizowana z akceptacją, oraz gałąź dla każdego sprintu, który rozgałęzia się z gałęzi acpt w początek każdego sprintu i wraca do niego na końcu. Ta gałąź sprintu jest zsynchronizowana ze środowiskiem testowym przez cały czas trwania sprintu. Pod koniec każdego sprintu problemy, które zostały wykonane, są łączone w apt. Powstaje nowa gałąź sprintu i rozpoczyna się nowy sprint. W międzyczasie gałąź apt jest wdrażana do Acceptance i tam testowana. Oczywiście w idealnym świecie wszystkie historyjki użytkownika uzupełnilibyśmy podczas sprintu, a podczas UAT nie znalezionoby żadnych defektów. Niestety, ten świat nie jest doskonały i podczas UAT pojawiają się problemy. _Oczywiście nie bugi_ , ale mogliśmy nieprawidłowo zinterpretować żądanie. Lub może istnieć inny powód, dla którego historyjka użytkownika nie została opublikowana (jeszcze). Więc teraz musimy wyciągnąć kilka historii z tej gałęzi. Ponieważ zmiany zostały połączone z gałęzi sprint do gałęzi acpt za jednym razem, nie jest to trywialne zadanie. **Jak możemy dostosować naszą metodę, aby umożliwić pobieranie historyjek użytkownika z gałęzi acpt?** * * * Przeczytałem też _Zwinną kontrolę wersji z wieloma zespołami_ autorstwa Henrika Kniberga. Wygląda to na model lepiej dopasowany do naszych potrzeb, ale nawet wtedy mam kilka pytań na ten temat. Jeśli przyjmiemy jego model, czy powinniśmy zsynchronizować bagażnik z Acceptance? Dałoby nam to możliwość przeprowadzenia testów UAT _podczas_ sprintu i skutecznie oddzieliłoby harmonogram sprintu od harmonogramu wydania. Ale Kniberg promuje ściślejsze przestrzeganie Scruma niż obecnie obserwujemy, w którym historyjki użytkowników są tworzone w dużej kolejności. **Jak możemy dostosować metodę Kniberga do naszych potrzeb?**


title: Jak prezentować wyjątki modelu domeny zgłoszone podczas walidacji?

text: W modelu domeny mojej aplikacji internetowej mam encję Foo, która może być stworzona tylko przez pojo FooBean: `Foo.newInstance(FooBean fooBean)` (Mógł być lepszy wzorzec Builder.) W metodzie fabrycznej `newInstance( )` pojo FooBean jest sprawdzany i w razie potrzeby zgłasza NullPointerExceptions i IllegalArgumentExceptions. Pola pojo wypełnia formularz na warstwie prezentacji. Ten formularz przeprowadza pewną walidację danych wejściowych użytkownika i w razie potrzeby wyświetla przyjazne komunikaty. Komunikat o wyjątku wyjątków NullPointerExceptions i IllegalArgumentExceptions zgłoszony w metodzie `newInstance()` ma raczej charakter techniczny i nie powinien być wyświetlany użytkownikowi końcowemu. Jaki jest właściwy sposób wyświetlania przyjaznych dla użytkownika komunikatów o błędach, które pochodzą z wyjątku NullPointerException lub IllegalArgumentException?


title: Bitbucket i mały dom deweloperski

text: Jestem w trakcie wprowadzania Mercurial jako naszego systemu kontroli wersji w pracy. To wielka sprawa dla wszystkich, ponieważ, co szokujące, nigdy nie korzystali z VCS. Po miesiącach umieszczania błędu w uszach kierownictwa w końcu ujrzeli światło dzienne i teraz zdają sobie sprawę, o ile jest to lepsze niż praca z siecią współdzielonych folderów! W trakcie wdrażania tego projektu zastanawiam się nad różnymi strategiami zarządzania naszymi materiałami i skłaniam się ku używaniu Bitbucket jako naszego „centralnego” repozytorium. Projekty w Bitbucket będą wyłącznie projektami prywatnymi i wszyscy będą stamtąd pchać i wyciągać. Jestem otwarty na różne propozycje, ale czy ktoś ma podobną konfigurację? Jeśli tak, z jakimi zastrzeżeniami się spotkałeś?


title: Projekt interfejsu użytkownika do zmiany wielu rekordów jednocześnie

text: Mam aplikację komputerową, w której użytkownik ma widoki tabelaryczne na niektóre rekordy danych. Teraz otrzymaliśmy wymaganie, aby użytkownik mógł wybrać wiele z tych rekordów w tym samym czasie i pozwolić mu edytować niektóre właściwości wybranych rekordów jednocześnie w osobnym oknie edycji. Chodzi o to, aby * zmienić tylko te właściwości, które użytkownik naprawdę chce zmienić * zachować wszystkie inne właściwości niezmienione Ponadto, gdy użytkownik wybierze rekordy i otworzy okno dialogowe edycji, właściwości o równych wartościach we wszystkich wybranych rekordach są pokazane w odpowiednie pola interfejsu użytkownika, inne właściwości powinny być wyświetlane jako „nieokreślone”, o ile użytkownik nie zacznie tam czegoś wprowadzać. Po naciśnięciu „Ok” zmiany zostaną zastosowane do rekordów. Tego rodzaju zachowanie interfejsu użytkownika nie jest "nauką rakietową", już to znaleźliśmy na przykład w edytorach graficznych (gdzie można wybrać wiele elementów rysunku jednocześnie i zmienić ich właściwości). Problem polega na tym, jak wizualizować stan "nieokreślony" w sposób intuicyjny, zwłaszcza w przypadku właściwości tekstowych. W przypadku wartości logicznych jest to łatwe: używamy tylko trójstanowego pola wyboru. W przypadku wartości liczbowych jest to również łatwe: stan „niezdefiniowany” jest wyświetlany jako puste pole numeryczne interfejsu użytkownika, a jeśli rzeczywiście jest tam liczba, stan jest „zdefiniowany”. Ale jak zaprojektować to dla właściwości tekstu? Puste pole pola tekstowego w rzeczywistości nie jest stanem „niezdefiniowanym”, ponieważ wiele właściwości tekstowych _może_ być w rzeczywistości pustych. Można dodać osobne pole wyboru obok każdego pola tekstowego, aby wskazać różnicę między „nieokreślonymi” i „zdefiniowanymi”, ale ponieważ nasze okno dialogowe edycji zawiera już pola wyboru dla właściwości logicznych, wydaje się to być sprzeczne z intuicją i mylące dla użytkownika. Jeśli to ma znaczenie, używamy WinForm (ale myślę, że ten problem nie jest specyficzny dla faktycznego frameworka UI).


title: Która licencja zachowuje prawa autorskie, pozwalając jednocześnie na udostępnianie i pozyskiwanie pracy?

text: Pracuję nad naukowym projektem badawczym, którego wyniki i _jakiś_ kod zamierzamy opublikować. Czasopisma naukowe i konferencje wyraźnie wymagają, aby autorzy mieli prawa autorskie do pracy wykonanej w artykule. Chciałbym jednak dzielić się kodem ze społecznością w miarę postępów, korzystając z licencji open source. Czy istnieje licencja, która wyraźnie zachowuje prawa autorskie, jednocześnie umożliwiając udostępnianie, redystrybucję i prace pochodne oparte na oryginalnym utworze? Alternatywnie, jaka licencja byłaby odpowiednia dla takich projektów?


title: Najbardziej wydajna struktura danych do implementacji struktury dziedziczenia bez klas

text: Mam kilka typów, które wszystkie są ze sobą powiązane pod względem „pochodzenia” od siebie. Potrzebowałbym sposobu na tworzenie relacji `jest`, co sprawiło, że początkowo pomyślałem o klasach, ale zdałem sobie sprawę, że poza relacjami `jest` nie byłoby powodu, aby używać klas jako każdego 'typu' funkcji danych dokładnie w ten sam sposób. Myślałem również o wyliczeniach, ale ponieważ nie ma możliwości rozszerzenia lub odziedziczenia po wyliczeniach, był to zły wybór. Dla kontekstu (jest to mój konkretny przykład): mam wiele różnych rodzajów zasobów, z których wszystkie są „typami”, więc można ich używać w połączeniu z int, aby określić, jaka część tego zasobu jest dostępna. Mam kilka różnych rodzajów tych zasobów, takich jak żywność, metale, materiały budowlane itp. W kategorii żywności byłoby coś takiego jak pszenica lub kukurydza; pod metalami byłaby miedź, żelazo, złoto itp. Ponieważ wszystkie one są nadal tylko „zasobami” i nie mają żadnej innej funkcji poza typowaniem, wydaje się, że nie ma sensu używać klas i dziedziczenia obiektowego. Jak zaimplementować ten typ danych bez uciekania się do używania klas?


title: Jaka jest różnica między listami skonstruowanymi według cytatu a tymi skonstruowanymi według wad w programie Scheme?

text: (zdefiniuj ls1 '((1 . 2) 1 . 2)) (set-car! (car ls1) 6) ls1 (zdefiniuj ls2 (cons '(1 . 2) '(1 . 2))) (set-car (car ls2) 6) ls2 Po `set-car!`ing, ls1 będzie `((6 . 2) 1. 2)` a ls2 `((6 . 2) 6. 2)`. Wygląda na to, że `ls1` i `ls2` mają inny model przechowywania i co to znaczy, gdy ktoś mówi, że `x jest powiązany z listą`? czy x oznacza „adres początkowy” lub „lokalizację” w taki sposób, że a jest adresem początkowym a[10] w C?


title: Organizacja według funkcji biznesowej a funkcja techniczna

text: Projektuję dużą aplikację (statyczny analizator kodu) i mam wybór, jak zorganizować kod w moduły: * Jednym podejściem jest to, co nazwałbym przez **funkcję techniczną**. Tutaj masz pakiet dla obiektów danych, inny dla funkcji usługowych, widoków, kontrolerów itp. * Innym podejściem jest to, co nazwałbym przez **funkcję biznesową**. Tutaj masz pakiet dla, powiedzmy, kontroli zapasów, inny dla list produktów, zamówień klientów itp. Większość frameworków ma tendencję do popychania mnie w kierunku pierwszego podejścia. Czasami są ku temu przyczyny techniczne, np. jeśli widok jest napisany w JavaScript, a reszta w Pythonie, naprawdę musisz zachować go osobno. Ale przede wszystkim jest to kwestia konwencji. Czasami organizowanie według funkcji technicznych powoduje rozproszenie powiązanego kodu w całej aplikacji. Jeśli mam kod do obsługi produktu, kończę z ProductModel, ProductService, ProductView itp. Często uważam, że lepiej byłoby po prostu mieć obiekt Product, który robi to wszystko. Organizowanie według funkcji biznesowej też ma problemy. Niektóre klasy są graniczne i dosyć arbitralne jest to, w jakim pakiecie je umieścisz. Istnieje też kilka obiektów pomocniczych, które są używane we wszystkich funkcjach biznesowych. Które podejście będzie najskuteczniejsze w tworzeniu skalowalnej i łatwej w utrzymaniu aplikacji?


title: Wady pionowych historyjek użytkownika

text: **Podejście zwinne** polega na podzieleniu pracy na **pionowe historyjki użytkownika** i zapewnieniu ukierunkowanego, ale w pełni funkcjonalnego fragmentu aplikacji od **od końca do końca**. Ponieważ jest to nowe podejście do budowania oprogramowania, czytam dużo literatury o tym, dlaczego jest to lepsze niż historie horyzontalne, ale nie znajduję zbyt wiele na temat wad tego podejścia. Wypiłem już Agile Cool-Aid i zgadzam się, że pionowe krojenie ciasta ma wiele zalet w stosunku do poziomego krojenia. Oto krótka lista wad, które mógłbym wymyślić: * Programista może początkowo wolniej wdrażać funkcję, ponieważ musi zrozumieć wszystkie technologie wymagane do opracowania historii (UI + warstwa usług + dostęp do danych + sieć, itp...) * Ogólny projekt architektury (tworzenie szkieletu aplikacji) tak naprawdę nie pasuje do tej mantry (jednak niektórzy mogą twierdzić, że opracowanie/zmiana ogólnej architektury jest częścią historii użytkownika) ** Co jeszcze wady pionowego podziału historyjek użytkownika?** _Uwaga: Powodem, dla którego teraz zadaję to pytanie, jest to, że zamierzam przekonać zespół, aby zaczął pisać historie „w pionie” i chcę być w stanie poruszyć możliwe kompromisy z wyprzedzeniem, aby nie uznali podejścia za porażkę, gdy napotkają wady._


title: Wydajne kopiowanie podczas sortowania

text: Mam bibliotekę algorytmów o nazwie NDex. Jestem w trakcie aktualizacji do nowej wersji. Część tego uaktualnienia obejmuje udostępnienie dwóch wersji wielu algorytmów: wersji w miejscu i wersji, która kopiuje wyniki do listy docelowej. Dostarczę dwie odmiany sortowania: sortowanie szybkie i sortowanie przez scalanie. Sortowanie przez scalanie jest stabilne. Jestem ciekaw, czy szybkie sortowanie jest lepsze niż, powiedzmy, sortowanie na stercie podczas kopiowania elementów do nowej listy. Sortowanie przez scalanie używa wewnętrznie bufora. Podczas sortowania przez scalanie jestem ciekaw, czy mogę podwoić miejsce docelowe jako bufor. Miałem nadzieję, że ktoś udzieli mi porady lub wskaże jakiś przydatny materiał.


title: Poinformuj młodszego programistę o złym stylu

text: Mam znajomego, któremu jako pierwsze udało się wyłapać przecinek (najlepszy przypadek można zrobić tutaj: http://ajaxian.com/archives/is-thing-to-the-the-crazy-comma-first-style), ale to 100 % w stosunku do przewodnika po stylu naszej organizacji i kultury Pythona. Jeśli nie chcesz klikać linku, zasadniczo robi to: a, b, c, d = tuple('abcd') # konfiguracja demonstracji interpretera, w razie potrzeby foo = ( a , b , c , d ) Może to tylko nawyk lub trening, ale nie chcę nawet zacząć myśleć o tym, żeby zacząć myśleć o zrobieniu tego; znacznie mniej zobaczyć, jak inni to podnoszą. Ale jestem też trochę maniakiem gramatyki. Jak mam mu zakomunikować, że trzymanie się stylu idiomatycznego jest lepsze dla jego kariery i reputacji programisty?


title: Separacja zadań w aplikacji n-warstwowej: według modułu czy według warstwy?

text: Opracowując aplikację n-warstwową z zespołem, lepiej podzielić zadania według modułu lub przypadku użycia (np. Pracownik 1 tworzy moduł Admin, pracownik 2 tworzy moduł Payroll itp.) czy według warstwy (np. Pracownik 1 tworzy UI, Pracownik 2 tworzy logikę, pracownik 3 tworzy cały dostęp do danych)? Bardziej skłaniam się ku temu pierwszemu. Myślę, że logiczne jest, że jeśli koduję jeden cały moduł lub przynajmniej powiązane przypadki użycia, byłbym w stanie kodować w sposób ciągły, nie czekając, aż inni skończą przed integracją mojej pracy. Ale kontrargumentem jest to, że rozdzielając zadania między warstwami, programista może wykorzystać n-warstwowe oddzielenie problemów i skupić się tylko na określonej warstwie (dla niektórych), z którą jest zaznajomiony.


title: Jakie są zalety i wady dokumentacji i samouczków w porównaniu z samouczkami wideo?

text: Jakie rodzaje zasobów edukacyjnych uważasz za najbardziej przydatne, dla jakich rodzajów nauki i/lub w określonych momentach? Kilka przykładów typów uczenia się, które możesz rozważyć: * Kiedy zaczynasz integrować nowy SDK w istniejącej bazie kodu * Gdy uczysz się nowego frameworka bez konieczności integrowania starszego kodu * Gdy zagłębiasz się w już używany SDK, którego możesz nie znać za bardzo dobrze jeszcze Na przykład - samouczki (wideo) są zwykle bardzo łatwe do naśladowania i opowiadają historię od początku do końca, aby uzyskać wyniki, ale prawie zawsze zakładają rozpoczęcie od zera lub poprzedniego samouczka. Dlatego taki zasób jest przydatny do szybkiego uczenia się, jeśli nie masz starszego kodu, ale mniej, jeśli musisz szukać najlepiej dopasowanego kodu, który już masz. Z drugiej strony dokumentacja SDK jest dobrze zorganizowana, ale nie opowiada historii. Trudniej jest uzyskać konkretny, większy wynik z samą dokumentacją, ale jest to lepsze rozwiązanie, gdy masz starszy kod i szukasz być może nieoczywistych sposobów wykorzystania SDK lub biblioteki. Czy istnieją inne formy zasobów, które uważasz za przydatne, takie jak interaktywne szkolenie?


title: Jak konfigurujesz środowiska programistyczne wielokrotnego użytku?

text: Staram się wymyślić dobre podejście do tworzenia środowiska programistycznego wielokrotnego użytku, tak aby przebudowa maszyny nie zajęła kilku dni, jeśli zacznie się rozpryskiwać i aby móc szybciej wdrażać nowych programistów. Przeczytanie o konfiguracji programistycznej Quora sprawiło, że rozważyłem alternatywy dla opóźnienia kompilacji starego środowiska programistycznego. Jednak w przypadku sklepu .NET/Windows, jak rozwiązujesz ten problem? * Lokalna maszyna wirtualna na komputerze stacjonarnym/laptopie, którą możesz udostępnić innym członkom zespołu? * Dedykowany serwer (fizyczny lub wirtualny), na którym wszyscy programiści mogą korzystać ze zdalnego pulpitu i który można łatwo zarchiwizować. (oczywiście wymaga połączenia sieciowego, więc jest minus)? * Instancja w chmurze (jak Quora)?


title: Jak automatycznie testować kontrolę czasu?

text: Załóżmy, że masz właściwość `startTime`. Następnie masz metodę `doSomething`: doSomething() { //...stuff startTime = System.currentTimeMillis(); //... więcej rzeczy } Jak sprawdzić, czy parametr `startTime` został przypisany poprawnie? Nie możesz przeprowadzić testu względem bezwzględnego znacznika czasu — prawdopodobnie zmieni się między przypisaniem a testem. Może użyć zakresu?


title: Czy mądrze jest przechowywać dużą bryłę json w wierszu bazy danych?

text: Mam ten projekt, który przechowuje szczegóły produktu z amazon w bazie danych. Tylko po to, by dać ci wyobrażenie o jego wielkości: ` [{"title":"Inżynieria genetyczna (przeciwne punkty widzenia)","short_title":"Inżynieria genetyczna ...","brand":"","stan" :"","sales_rank":"7171426","binding":"Książka","item_detail_url":"http://localhost/wordpress/product/?asin=0737705124","node_list":"Książki > Nauka i Matematyka > Nauki biologiczne > Biotechnologia","node_category":"Książki","subcat":"","model_number":"","item_url":"http://localhost/wordpress/wp-content/ecom-plugin - przekierowania/ecom_redirector.php?id=128","details_url":"http://localhost/wordpress/product/?asin=0737705124","large_image":"http://localhost/wordpress/wp- content/ plugins/ecom/img/large- notfound.png","medium_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/medium-notfound.png","small_image":"http: //localhost/wordpress/wp- content/plugins/ecom/img/small- notfound.png","thumbnail_image":"http://localhost/wordpress/wp-content/plugins/ecom/img/thumbnail- notfound. png","tiny_img":"http://localhost/wordpress/wp-con tent/plugins/ecom/img/tiny- notfound.png","swatch_img":"http://localhost/wordpress/wp- content/plugins/ecom/img/swatch- notfound.png","total_images":" 6","amount":"33,70","currency":"$","long_currency":"USD","price":"33,70$","price_type":"Cena katalogowa","show_price_type":"0 ","stars_url":"","product_review":"","rating":"","yellow_star_class":"","white_star_class":"","rating_text":" z 5","reviews_url": "","review_label":"","reviews_label":"Przeczytaj wszystko","review_count":"","create_review_url":"http://localhost/wordpress/wp-content/ecom-plugin-redirector/ecom_redirector .php?id=132","create_review_label":"Napisz recenzję","buy_url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=19186", "add_to_cart_action":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/add_to_cart.php","asin":"0737705124","status":"Dostępne jest tylko 7."," snippet_condition":"in_stock","status_class":"ninstck","customer_images":["http://localhost/wordpress/wp- content/uploads/2013 /10/ecom_images/51M2vvFvs2BL.jpg","http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/31FIM- YIUrL.jpg","http://localhost/wordpress/wp-content /uploads/2013/10/ecom_images/51M2vvFvs2BL.jpg","http://localhost/wordpress/wp-content/uploads/2013/10/ecom_images/51M2vvFvs2BL.jpg"],"disclaimer":"","item_attributes ":[{"attr":"Autor","value":"Greenhaven Press"},{"attr":"Oprawa","value":"Oprawa twarda"},{"attr":"EAN"," value":"9780737705126"},{"attr":"Edition","value":"1"},{"attr":"ISBN","value":"0737705124"},{"attr":"1" Label","value":"Greenhaven Press"},{"attr":"Producent","value":"Greenhaven Press"},{"attr":"Ilość elementów","value":"1"}, {"attr":"Ilość stron","value":"224"},{"attr":"Grupa Produktów","value":"Książka"},{"attr":"NazwaProduktu","value":" ABIS_BOOK"},{"attr":"Data publikacji","value":"2000-06"},{"attr":"Wydawca","value":"Greenhaven Press"},{"attr":"SKU ","value":"G0737705124I2N00"},{"attr":"Studio","value":"Greenhaven Press"},{"attr":"Tytuł","value":"Inżynieria genetyczna (przeciwne punkty widzenia)"}],"customer_review_url":"http://localhost/wordpress/wp-content/ecom-customer- Reviews/0737705124.html","flickr_results":["http://localhost/wordpress/ wp- content/uploads/2013/10/ecom_images/5105560852_06c7d06f14_m.jpg"],"freebase_text":"Nie ma jeszcze danych z internetu","freebase_image":"http://localhost/wordpress/wp- content/plugins /ecom/img/freebase- notfound.jpg","ebay_related_items":[{"title":"Inżynieria genetyczna (wprowadzanie problemów z przeciwstawnymi punktami widzenia), Dobra książka","image":"http://localhost/wordpress /wp-content/uploads/2013/10/ecom_images/140.jpg","url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=12165", "currency_id":"$","current_price":"26.2"},{"title":"Inżynieria genetyczna przeciwstawne poglądy DAVID BENDERA - 1964 w twardej oprawie","image":"http://localhost/wordpress/wp- content/uploads/2013/10/ecom_images/140.jpg","url":"http://localhost/wordpress/wp-content/ecom-plugin-redirects/ecom_redirector.php?id=130" ,"currency_id":"AUD","current_price":"11,99"}],"no_follow":"rel=\"nofollow\"","new_tab":"target=\"_blank\"","related_products" :[],"super_saver_shipping":"","shipping_availability":"","total_offers":"7","added_to_cart":""}] ` Struktura tabeli jest następująca: * tytuł * szczegóły ( szczegóły produktu w json) Czy wydajność ucierpi, jeśli będę musiał przechowywać jak 10 000 produktów? Czy jest inny sposób na zrobienie tego? Myślę o następujących, ale obecna konfiguracja jest naprawdę najwygodniejsza, ponieważ muszę również korzystać z danych po stronie klienta: * przechowywać szczegóły produktu w pliku. Więc coś takiego jak ASIN123.json * przechowuje szczegóły produktu w jednym dużym pliku. (Domyślam się, że wyciąganie danych z tego pliku będzie uciążliwe) * przechowuj każde z pól w szczegółach we własnym polu tabeli Z góry dziękuję! **AKTUALIZACJA** Dziękujemy za odpowiedzi! Chcę tylko dodać więcej szczegółów do mojego pytania. Najpierw rekordy są aktualizowane przez określony interwał. Aktualizowane są tylko konkretne dane, takie jak cena czy tytuł. Po drugie, używam również danych zakodowanych w formacie json po stronie klienta, więc na początku pomyślałem, że łatwiej będzie po prostu zakodować je w formacie json, aby móc z łatwością używać ich po stronie klienta bez konieczności konwertowania. Czy to zmienia twoją opinię na temat zwykłego przechowywania pól w zwykłym polu tabeli w konfiguracji RDBMS?


title: Czy nadszedł czas, aby pozbyć się „front-endu” i „back-endu” jako żargonu technicznego?

text: Wydaje się, że podstawowym zastosowaniem tych terminów jest albo: 1. wzajemna mistyfikacja kontrahentów i/lub klientów, którzy nie wiedzą, o czym mówią i jak o tym mówić, 2. niewinni i nieświadomi (patrz to pytanie) lub 3. lenistwo, aby uniknąć konieczności mówienia o interfejsie użytkownika/ukierunkowaniu na użytkownika lub logice biznesowej/bazie danych/infrastrukturze. To prawda, że nie zawsze chcesz wyjaśniać członkom zarządu, co oznaczają powyższe terminy. Czy to usprawiedliwienie dodawania zamieszania przez używanie tych terminów do uogólniania i błędnego uogólniania wszystkich rodzajów technologii?


title: Jaka jest struktura warstw najlepszych praktyk aplikacji Java EE 6/7?

text: Wczoraj próbowałem znaleźć najlepszą praktykę modelowania warstw w aplikacji Java EE i nie mogłem wymyślić niczego bieżącego. W przeszłości, powiedzmy java 1.4, były to cztery warstwy: 1. Warstwa prezentacji 2. Warstwa sieci Web 3. Warstwa logiki biznesowej 4. DAL (warstwa dostępu do danych), którą zawsze uważałem za warstwę, a nie warstwę. Po pracy z usługami sieciowymi i SOA pomyślałem o dodaniu warstwy usług, ale może to być 3. warstwa logiki biznesowej. Szukałem przez jakiś czas i czytałem artykuły. Wygląda na to, że Domain Driven Design staje się coraz bardziej popularny, ale nie mogłem znaleźć diagramu jego struktury warstw. Czy ktoś ma pomysły lub diagramy dotyczące właściwej struktury warstw dla nowszych aplikacji Java EE, czy też jest to naprawdę takie samo, ale więcej elementów znajduje się w czwórce, o której wspomniałem? **Następstwo:** Naprawdę, powinienem był przeredagować moje pytanie, ponieważ moim prawdziwym zamiarem było pytanie, gdzie umieścić logikę biznesową w aplikacji Java EE? Myśląc w ten sposób, w jakiś sposób doszedłem do wniosku, że struktura poziomów uległa zmianie, podczas gdy tak się nie stało. Jednak wraz z pojawieniem się programowania POJO i lekkich frameworków, których używałem na co dzień, straciłem to wszystko z oczu. Struktura warstw aplikacji Java EE nadal pozostaje taka sama, ale teraz zamiast ciężkiej logiki biznesowej typu EJB2 w warstwie środkowej używałem POJO z usługami do implementacji logiki biznesowej.


title: Mały backlog produktu / opinie użytkowników — aplikacja odtwarzacza multimediów

text: Otrzymałem zadanie opracowania krótkiego rejestru produktów w następujących kwestiach: > Do odtwarzania plików mp3 potrzebna jest aplikacja odtwarzacza multimediów. Powinien mieć > możliwość wyszukiwania w strukturze plików użytkownika plików, które można > odtwarzać lub importować do biblioteki multimediów w celu późniejszego odtwarzania. Powinny być dostępne zwykłe opcje uruchamiania, wstrzymywania i zatrzymywania odtwarzania wybranego pliku... Moje rozwiązanie / historyjki użytkownika są następujące: * Jako użytkownik mogę korzystać z aplikacji odtwarzacza multimediów, aby móc odtwarzać pliki MP3. * Jako użytkownik chcę mieć możliwość wyszukiwania plików, które można odtworzyć, aby je później odtworzyć. * Jako użytkownik chcę mieć możliwość wyszukiwania plików, aby móc importować je do mojej biblioteki multimediów. * Jako użytkownik mogę korzystać z pewnych opcji w aplikacji, aby móc uruchamiać, wstrzymywać i odtwarzać plik. Czy jestem na dobrej drodze?