title: Konkretna klasa do przekazywania pakietu danych z mojego modelu do kontrolera lub prosta kolekcja?

text: Robię fakturę aplikacji realizującej projekt wzorca MVC w Javie. Jedną z funkcji, które musi posiadać moja aplikacja, jest pokazywanie wszystkich informacji o kliencie: danych osobowych, połączeń, faktur, numeru telefonu itp. Mój model, który ma dostęp do wszystkich tych danych, musi je przekazać i złożyć, aby przekazać je do Kontroler. Następnie mój kontroler pokaże to za pośrednictwem mojego widoku. Pomyślałem, jak w ładny sposób nawiązać połączenie między Modelem a Kontrolerem. Jedną z moich alternatyw jest dodanie każdego DTO (TelephoneNumber, CustomerData) i Collection of DTO (Collection, Collection i więcej) do Collection. IMHO, to nie jest dobre podejście do dobrego rozwiązania tego problemu, ponieważ tworzę dużą zależność w kontrolerze podczas odbierania tych informacji i odlewania zgodnie z kolejnością składania. Chcąc znaleźć inne rozwiązanie, wpadłem na pomysł stworzenia klasy (Bundle), która opakuje moje dane klienta, a następnie w kodzie Controllera wykorzystuję metody tej klasy, aby uzyskać dane, które muszę wyświetlić. Moje pytanie dotyczy tego, czy moje rozwiązanie jest dobre, czy będzie inne, które będzie lepsze. Nie jestem do końca pewien, czy klasa Bundle będzie rozwiązaniem, czy po prostu bzdurą. Dziękuję.


title: Czy istnieje biblioteka JavaScript do tworzenia starych zdjęć?

text: Pracuję nad obiektem Canvas w HTML5 i staram się, aby niektóre zdjęcia wyglądały "lepiej". Wypróbowałem VintageJS, istniejącą bibliotekę JavaScript do retuszu zdjęć i Picozu, aplikację internetową klonującą niektóre funkcje Adobe Photoshop, ale nadal nie jestem zadowolony. Czy możesz mi pomóc z algorytmem lub wskazać istniejącą bibliotekę JavaScript, która pozwoliłaby mi sprawić, by moje zdjęcia wyglądały jak w poniższym przykładzie? http://i46.photobucket.com/albums/f137/thanhtu_zx/Untitled-1.jpg ![przykład stylu „vintage”](http://i.stack.imgur.com/59Uee.jpg)


title: Zamiana par: jakie są zalety i wady?

text: Ogólną ideą popieraną przez większość teoretyków _Agile_ / _XP_ wydaje się, że pary powinny się regularnie wymieniać. Na przykład każdy programista powinien wymieniać się parami raz dziennie; połowa osób zamienia się na początku dnia, połowa osób zamienia się po obiedzie: ze względu na czynniki zewnętrzne, takie jak spotkania, święta itp., większość ludzi ma tendencję do odwracania czasu wymiany raz lub dwa razy w tygodniu, aby konfiguracje par się rozłożyły dość równomiernie w całym zespole. Jednym z powodów częstej wymiany jest to, że wiedza jest szybko i równomiernie rozprowadzana w zespole, zamiast skupiać konkretne umiejętności i wiedzę na poszczególnych osobach – co oznacza, że praca może przebiegać płynnie, jeśli ludzie są nieobecni lub opuszczają firmę. Innym uzasadnieniem, które jest swego rodzaju następstwem dogmatu otaczającego samo programowanie w parach, jest to, że za każdym razem, gdy ktoś się zmienia, otrzymujesz nowy przegląd kodu przez świeżą parę oczu, więc może to tylko poprawić jakość kodu. Oba twierdzenia brzmią rozsądnie; z punktu widzenia zarządzania wygląda to tak, jakbyś uzyskał wzrost zarówno stabilności, jak i jakości, a ponieważ taka częsta zamiana jest w zasadzie standardową teorią w większości książek _Agile_ / _XP_, które oglądałem. Tak więc, kiedy faktycznie zastosuje się je w praktyce, co ludzie właściwie myślą o zamianie par z punktu widzenia programisty? * Punkt widzenia menedżera? Oraz * Co powinno decydować, gdy ktoś zamieni się / na parę?


title: Metoda rozszerzenia C# String.format

text: Wraz z dodaniem metod rozszerzających do C# widzieliśmy wiele z nich pojawiających się w naszej grupie. Jedna debata dotyczy metod rozszerzających, takich jak ta: public static class StringExt { /// <summary> /// Shortcut for string.Format. /// </summary> /// <param name="str"></param> /// <param name="args"></param> /// <returns></returns> publiczny ciąg statyczny Format(this string str, params object[] args) { if (str == null) return null; return string.Format(str, args); } } Czy ta metoda rozszerzenia łamie jakiekolwiek najlepsze praktyki programowania, które możesz nazwać? Czy i tak go użyłbyś, jeśli nie dlaczego? Gdybym zmienił nazwę funkcji na „F”, ale zostawiłem komentarze xml, czy byłoby to epicką porażką, czy po prostu cudowną oszczędnością naciśnięć klawiszy?


title: Czy jest coś lepszego niż StringBuilder dla dużych bloków SQL w kodzie?

text: Jestem po prostu zmęczony tworzeniem dużej instrukcji SQL, testowaniem jej, a następnie wklejaniem SQL do kodu i dodawaniem wszystkich `sqlstmt.append("` na początku i `")` na końcu. Jest rok 2011, czy nie ma lepszego sposobu na obsłużenie dużego kawałka ciągów w kodzie? Prosimy: nie sugerować procedur składowanych ani ORM-ów. **edit** Znaleziono odpowiedź za pomocą literałów XML i CData. Dzięki wszystkim osobom, które faktycznie próbowały odpowiedzieć na pytanie bez kwestionowania mnie za nieużywanie ORM, SP i używanie VB **edit 2**, pytanie pozwoliło mi pomyśleć, że języki mogą spróbować włożyć większy wysiłek w używanie inline SQL z kolorem składnia itp. Będzie taniej niż rozwijanie Linq2SQL. Po prostu coś takiego: dim sql = <sql> SELECT * ... </sql>


title: Standardy de facto dotyczące ewidencji informacji o kliencie

text: Obecnie oceniam potencjalny nowy projekt, który obejmuje stworzenie bazy danych dla typowych informacji o kliencie (identyfikator użytkownika, hasło, imię i nazwisko, e-mail, adres, telfnr ...). W tym momencie wymagania są zdefiniowane tylko z grubsza. Oczekuje się, że baza danych klienta w O (miliony) rekordów. Aby obliczyć kilka liczb z tyłu koperty dla rozmiaru DB i ocenić potencjalne opcje i architektury DB, szukam pewnych standardów de facto dla tego rodzaju rekordów. **W szczególności standardowy rozmiar każdego pola (imię, nazwisko, adres...) lub typowa średnia dla prostego rekordu klienta byłyby świetną informacją**. Przy tak wielu witrynach e-commerce powinna istnieć jakaś typowa konfiguracja, którą można ponownie wykorzystać i uniknąć ponownego wymyślania koła. Jakieś pomysły? \---- edytuj ---- Odpowiedzi wydają się zmierzać w kierunku przyjęcia standardowego rekordu klienta zamiast projektowania własnego. Chciałbym podkreślić, że celem tego pytania jest zlokalizowanie **odniesienia** do określania rozmiaru pola dla obiektu klienta i unikanie samodzielnego rozgryzania tego.(Podkreśliłem tę część w oryginalnym tekście - * *teraz pogrubione** -)


title: Zespoły statyczne czy zespoły dynamiczne?

text: Czy lepiej jest tworzyć stałe zespoły programistów w firmie, które zawsze pracują razem, od projektu do projektu, czy lepiej mieć dynamiczne zespoły, które zbierają się do projektu, a następnie rozkładają? Skłaniam się ku traktowaniu całej firmy jak „plutonu” i kompletowaniu „drużyn ogniowych” dla poszczególnych projektów, wybierając z „plutonu” tych programistów, którzy najlepiej pasują do projektu.


title: Projektujesz hierarchiczną strukturę z dużą ilością odczytów i zapisów?

text: Jestem w trakcie pracy nad systemem wideo na żądanie, część tego obejmuje zarządzanie hierarchiczną strukturą drzewa (pomyśl Eksplorator Windows), która umożliwia użytkownikom przesyłanie filmów, przenoszenie folderów, tworzenie nowych folderów itp. Akcja użytkownika będzie dozwolona w zależności od posiadanych uprawnień. Oprócz zarządzania strukturą (tworzenie folderów i przesyłanie filmów), subskrybenci będą mogli oglądać treści (dostęp do odczytu). Liczba odczytów będzie znacznie większa niż zapisów. Moje pytanie (i jest duże) brzmi: czy powinienem przechowywać dane w bazie danych (do zapisów), a także mieć pamięć podręczną, która będzie używana do odczytów? czy używam dwóch baz danych? czy jest lepsze rozwiązanie? Również będę musiał rozwiązać problemy ze współbieżnością, które moim zdaniem rozwiąże optymistyczne blokowanie bazy danych. Mam sporo o CQRS w ciągu ostatnich kilku miesięcy, ale nie jestem pewien, czy to jest droga do zrobienia. Jakieś pomysły?


title: szybszy algorytm znajdowania wszystkich podzbiorów

text: To jest algorytm (pseudokod), który mam teraz do znajdowania wszystkich podzbiorów dla danego zbioru o długości k: void allSubsets(set[]) { for (i = 0; i<k; i++) { for (j = i + 1;j<k;j++) { print(ustaw[i...j]); } } } Ale czas wykonania to O(n^2). Czy ktoś może to poprawić?


title: Czy skrzynka za skrzynką w przełączniku jest sprawna?

text: Tylko przypadkowe pytanie dotyczące wydajności obudowy przełącznika w każdym przypadku; jest następującym kodem (przyjmij pseudokod): function bool isValid(String myString){ switch(myString){ case "stringA": case "stringB": case "stringC": return true; domyślnie: return false; } bardziej wydajne niż to: function bool isValid(String myString){ switch(myString){ case "stringA": return true; case "stringB": zwróć prawdę; case "stringC": zwróć prawdę; domyślnie: return false; } A może wydajność jest taka sama? Nie myślę w konkretnym języku, ale w razie potrzeby załóżmy, że jest to Java lub C (w tym przypadku należałoby użyć znaków zamiast ciągów).


title: git dla osobistych (jednoosobowych) projektów. Przesada?

text: Znam i używam dwóch systemów kontroli wersji: Subversion i git. Subversion od teraz przyzwyczaja się do osobistych projektów, w których jestem jedynym programistą, a git przyzwyczaja się do projektów open source i projektów, w których wierzę, że inni również będą pracować nad projektem. Dzieje się tak głównie z powodu niesamowitych możliwości forkingu i łączenia git, gdzie każdy może pracować na swoim własnym branchu; bardzo przydatne. Teraz używam Subversion do osobistych projektów, ponieważ myślę, że git nie ma tam sensu. Wydaje się, że to trochę przesada. Dla mnie jest OK, jeśli jest scentralizowany (zazwyczaj na moim serwerze domowym), gdy jestem jedynym programistą; I tak regularnie robię kopie zapasowe. Nie potrzebuję możliwości tworzenia własnej gałęzi, główna gałąź _jest_ moją gałęzią. Tak, SVN ma prostą obsługę rozgałęzień, ale myślę, że znacznie potężniejsza obsługa nie ma sensu. Łączenie może być z nim uciążliwe, a przynajmniej z mojego małego doświadczenia. Czy jest jakiś dobry powód, dla którego używam git w osobistych projektach, czy jest to po prostu przesada?


title: Jakie problemy z użytecznością miałeś z VS2010?

text: Kilku moich znajomych zauważyło pewne dziwactwa związane z vs2010... zwłaszcza funkcja Cofnij/Ponów nie działa niezawodnie... często psuje kod niezrozumiale. Jakie inne dziwactwa widziałeś? **Aktualizacja dla użytkowników wersji vs2010 (bez SP1)** Opublikuj swoje błędy na Microsoft Connect i odpowiedni link tutaj, abyśmy mogli zagłosować na nie w razie potrzeby. https://connect.microsoft.com/VisualStudio?wa=wsignin1.0 **Aktualizacja dla użytkowników dodatku SP1 dla VS2010** Dodatek SP1 dla wszystkich wersji programu Visual Studio można pobrać tutaj. Pamiętaj tylko, że w pliku readme wspomniano o problemach ze zgodnością. Również niektórzy ludzie zgłaszali problemy z tym wydaniem. Proszę zgłaszać błędy tutaj: https://connect.microsoft.com/VisualStudio?wa=wsignin1.0


title: Architektura JSP Model 2 i wstrzykiwanie zależności

text: Jeśli piszę aplikację internetową wykorzystującą architekturę modelu 2, czy można użyć frameworka Google Guice (lub naprawdę dowolnego kontenera IoC)? Powodem, dla którego zadaję to pytanie, jest to, że wszystko, co badałem na temat DI, IoC itp., zawsze używa w swoich przykładach Springa, Hibernate lub innego frameworka/kontenera. Po prostu używam klas Java, kontrolerów i JSP do budowy tej aplikacji i nie mogę znaleźć żadnej dobrej dokumentacji na ten temat.


title: Jaki jest obecny stan obsługi oprogramowania dla JPEG-2000?

text: Ogólne zalecenie dotyczące nagrywania oryginalnych zeskanowanych obrazów to „użyj formatu TIFF”. Ale programiści potrzebują ewolucji formatu do „ewolucji oprogramowania”, a ja muszę ewoluować mój system, aby zmienić TIFF na JP2. Posiadam dużą pamięć obrazu (terabajty) na zeskanowane materiały prawne i naukowe, wymagają one oryginalnego nagrania. Używam pewnych reguł buforowania, ale system musi pokazywać (poprzez pobieranie z sieci) lub manipulować (ImageMagick i inne) oryginalne dane. Przeczytałem artykuł o migracji pamięci obrazów z TIFF-lossless do JPEG-2000-lossless i wniosek jest taki, aby pozostać przy TIFF. Jednak artykuł pochodzi z 2009 roku i wtedy okazało się, że obsługa formatu JPEG-2000 przez dostępne oprogramowanie była bardzo słaba. Konwersje do JPEG-2000 w testowanym oprogramowaniu były stratne, a dostępne oprogramowanie do przetwarzania obrazów nie obsługiwało dobrze tego formatu. **Czy teraz nadszedł czas, aby przejść z TIFF na JP2, czy nie?** Czy obsługa oprogramowania jest nadal tak wadliwa jak w 2009 roku?


title: Jakie zadania powinien wykonać początkujący, średniozaawansowany i zaawansowany programista railsów?

text: Programuję ROR od około roku i myślę, że jestem gotowy do rozpoczęcia pracy nad projektem dla kogoś innego. Problem w tym, że oferty pracy dla wykonawców tak naprawdę nie mówią, jakie konkretne zadania powinieneś umieć wykonać na różnych poziomach doświadczenia (w szynach i innych technologiach), więc nie wiem, gdzie się rozbić. Myślę, że jestem gdzieś pomiędzy młodszym a średnim poziomem, ale kto wie? A więc moje pytanie brzmi: jakie rzeczywiste zadania powinien wykonać młodszy programista za, powiedzmy, 35 USD za godzinę, jakie rzeczywiste zadania powinien wykonać średniozaawansowany programista za, powiedzmy, 75 USD za godzinę, a które rzeczywiste zadania powinien Zaawansowany programista będzie w stanie zrobić, powiedzmy, 140 dolarów za godzinę? Wystarczy jeden lub dwa przykłady.


title: Jaki jest właściwy sposób tworzenia dokumentów wymagań?

text: W tej chwili mój przełożony tworzy dla mnie dokumentację wymagań / specyfikacje za pomocą oprogramowania do śledzenia błędów. Wydaje mi się to okropnym pomysłem, wszystkie wymagania dotyczą tych małych biletów i muszę kliknąć ten głupi formularz internetowy, aby uzyskać informacje o wymaganiach. Co to jest rozsądne rozwiązanie programowe dla wymagań/specyfikacji oprogramowania? Aby było jasne, buduję ten duży komponent oprogramowania z kilkoma funkcjami i te funkcje są przedstawione w tym oprogramowaniu do śledzenia błędów.


title: Wartość zaktualizowanej specyfikacji

text: Jestem na końcu dużego projektu (około 5 miesięcy mojego czasu, > 60 000 linijek kodu), w którym byłem jedynym programistą. Dokumentacja specyfikacji projektu została zaprojektowana na wczesnym etapie, ale jak zawsze podczas tworzenia, pewne rzeczy się zmieniły. Na przykład: * Wykryto i naprawiono błędy w sposób, który nie pasował do specyfikacji * Odkryto dodatkowe potrzeby i rozwiązano je * Znaleźliśmy obszary, w których specyfikacja nie przewidywała wystarczająco daleko i musiała zmienić implementację * Itd. Przez to wszystko specyfikacja nie była aktualizowana, ponieważ byliśmy uzależnieni od zasobów (wiem, że to wątpliwa wymówka). Mam nadzieję, że wkrótce zaktualizuję specyfikację, kiedy będziemy mieli czas, ale to kwestia przekonania kierownictwa do podjęcia wysiłku. Uważam, że to dobry pomysł, ale potrzebuję dobrego rozumowania; Nie mogę mówić z bardzo dużego doświadczenia, ponieważ jestem dopiero półtora roku poza szkołą. Oto moje pytania: 1. Jaką wartość ma aktualizowanie specyfikacji? 2. Jak często należy aktualizować specyfikację? Z każdą dokonaną zmianą, która może na nią wpłynąć, tuż pod koniec rozwoju, czy coś pomiędzy? EDIT w celu wyjaśnienia: ten projekt był wewnętrzny, więc nie był zaangażowany żaden klient zewnętrzny. To nasz produkt.


title: Zwiększenie szybkości aplikacji VB.net do serwera SQL 2008 i Hamachi VPN

text: Nasz obecny System Informacyjny (wraz ze ścieżką do zdjęć do rekordów przechowywanych w db) ma następującą specyfikację: * Aplikacja desktopowa została opracowana w vb.net * Używamy SQL Server 2008 r2 jako bazy danych * Specyfikacja serwera: taktowanie procesora Intel xeon 2,40 GHz, 2 GB RAM i system operacyjny 2008 R2 * Hamachi VPN dla naszych biur offshore (na terenie kraju). * Biuro posiada dedykowane łącze internetowe o wielkości 6 MB. Biura offshore wahały się od 2 Mb/s do 1 Mb/s Aplikacja wykonana w vb.net jest połączona z serwerem przez adres IP (lokalnie) i publiczny adres IP hamachi (dla offshore) (upewniliśmy się, że tunel jest bezpośredni, a nie przekaźnikowy) Znaleźliśmy kilka dziwne rzeczy, gdy użytkownicy korzystali z aplikacji. Zdarza się, że jednocześnie korzysta z niego 5 użytkowników (lokalnych i morskich) i wszystko poszło świetnie. Wtedy zdarzałyby się sytuacje, w których nawet trzech aktywnych użytkowników (nadal lokalnych lub offshore) nagle doświadczyłoby ekstremalnego spowolnienia (nawet w przypadku czegoś tak prostego jak zapytanie wybierające do bazy danych w celu weryfikacji logowania). W przypadku klientów offshore próbowaliśmy wysłać do nich polecenie ping w hamachi i okazało się, że każdy z nich ma średnią prędkość 500 bajtów na odpowiedź. Również ładowanie rekordów, które zawierają zdjęcia, zajmuje NAPRAWDĘ dużo czasu. Czy nie miało być tak, że jeśli zamiast BLOB umieścisz ścieżkę obrazu, obrazowanie będzie szybsze? (Obrazy aplikacji są przechowywane w udostępnionym folderze na serwerze, a następnie mapujemy ten folder na jednostkę kliencką). Pytania brzmią: na podstawie powyższego, jak dokładnie możemy przyspieszyć działanie systemu? Czy powinniśmy poprawić specyfikacje serwera? czy dostawca internetu jest problemem? czy musimy przeprojektować jak zarządzamy zdjęciami w systemie? Jakie są wąskie gardła i jak je zaradzić? Czy są jeszcze inne rzeczy, o których powinienem wiedzieć?


title: W jaki sposób ten deterministyczny algorytm liniowego wyboru czasu może być liniowy?

text: Próbując zrozumieć podstawowe pojęcia algorytmów poprzez zajęcia oferowane na Coursera (w bitach i kawałkach), natknąłem się na deterministyczny algorytm liniowej selekcji czasu, który działa w następujący sposób: Select(A,n,i) (0) If n = 1 zwrot A[1]. (1) p = ChoosePivot(A, n) (2) B = Partition(A, n, p) (3) Załóżmy, że p jest j-tym elementem B (tj. statystyką j-tego rzędu A). Niech „pierwsza część B” oznacza jego pierwsze j − 1 elementów, a „druga część” jego ostatnich n − j elementów. (3a) Jeśli i = j, zwróć p. (3b) Jeśli i < j, zwróć Select(pierwsza część B, j − 1, i). (3c) Else return Select(2-ga część B, n − j, i − j). I sortuje tablicę wewnętrznie w podprocedurze „ChoosePivot”, aby obliczyć medianę mediany przy użyciu algorytmu sortowania opartego na porównaniu. Ale czy dolna granica sortowania opartego na porównaniu nie jest równa „O(nlogn)”? Jak więc moglibyśmy osiągnąć „O(n)” dla całego algorytmu? Czy coś mi umyka?


title: Czy istnieją sytuacje, w których posiadanie „modelu danych”, w którym wszystkie twoje encje są instancjami Map<String, Object>

text: Czy istnieją sytuacje, w których posiadanie „modelu danych”, w którym wszystkie encje są instancjami `Map<String, Object>` miałoby jakikolwiek sens? Jak wyjaśnić komuś, dlaczego posiadanie takiego „modelu danych” nie jest dobrym pomysłem? Wydaje mi się, że to absurdalne podejście, czy mogę czegoś przegapić?


title: Testowanie pod kątem równości obiektów przez porównanie reprezentacji obiektów toString()

text: Kontynuując to pytanie \- jak wyjaśnić komuś, że to po prostu szaleństwo!: boolean someMethod(Map<String, Object> context) { Object object = context.get("someProperty") Object another = context.get( "innaWłaściwość") return object.toString().equals(inna.toString()); } Najwyraźniej powodem, dla którego `Object.equals(...)` nie jest używany, jest to, że „to, co jest zawarte w Mapie, nie jest konkretnie znane, ale zdecydowanie wiadomo, że jest jednym z pierwotnych opakowań, tj. `String`, `Double `, `Boolean` itd... i że `Boolean.TRUE` musi być `równe(...)` do `String` "TRUE".


title: budowanie bota czatu dla witryny e-commerce

text: Niedawno rozmawiałem z kilkoma znajomymi, którzy prowadzą skromną witrynę e-commerce (odwiedzający dziennie: ok. 100 000). Planują mieć moduł czatu na miejscu, aby zaangażować klientów. Ponieważ cała operacja jest prowadzona w tej chwili przez 3 osoby, prawdopodobnie nie będą w stanie odpowiedzieć na wszystkie zapytania w odpowiednim czasie. Pytanie, które mi zadali, brzmiało, czy można zbudować zautomatyzowanego chatbota, który może angażować klientów w przypadku prostych zapytań, a w przypadku bardziej złożonych przekierować czat do jednego z nich. Teraz nie zbudowałem niczego w tym rodzaju i wygląda na to, że jest to wielkie wyzwanie, które chciałbym podjąć. W tej chwili nie ma ustalonego terminu (co jest naprawdę świetne), a to daje czas (hipotetycznie) na nauczenie się kilku rzeczy, które mogą się przydać. Moje pytania są następujące: * Z jakiej architektury składałby się ten czat bot? * Przeglądałem tę stronę w poszukiwaniu przybliżonego pomysłu, ale zauważyłem, że nie używali bazy danych. * Czy noSQL jest standardem, jeśli chodzi o chatboty? Jeśli tak, który z nich jest polecany? * Czuję się dobrze z Pythonem - czy to wystarczająco dobry język, aby to zbudować? * Gdybym chciał udostępnić ten projekt więcej niż jednej osobie/projektowi, jakie względy należy wziąć pod uwagę, aby ten bot był przystosowany do dowolnej witryny. Na przykład ludzie, dla których zamierzam to zbudować, sprzedają tylko koszulki na swojej stronie. Czyli bot odpowiadałby na pytania związane z materiałami, wzorami, kolorami itp. Ale jutro, jeśli będę chciał pokazać tego bota komuś, kto na przykład sprzedaje ceramikę na swojej stronie, które części bota powinienem zostawić do nauki? A może powinienem mieć osobny moduł, który uczy się produktów witryny docelowej? W tej chwili używam tego pytania jako punktu wyjścia. Przepraszam, jeśli coś zostało pominięte. Daj mi znać, jeśli potrzeba więcej szczegółów.


title: Co oznacza brak obsługi Unicode w PHP?

text: Jak brak obsługi Unicode w PHP może wpłynąć na aplikację internetową PHP?


title: Czy języki programowania powinny być ścisłe czy luźne?

text: W Pythonie i JavaScript średniki są opcjonalne. W PHP cudzysłowy wokół kluczy tablicy są opcjonalne (`$_GET[key]` vs `$_GET['key']`), chociaż jeśli je pominiesz, najpierw będzie szukał stałej o tej nazwie. Pozwala również na 2 różne style bloków (rozdzielone dwukropkiem lub nawiasem klamrowym). Teraz tworzę język programowania i próbuję zdecydować, jak rygorystycznie powinienem to zrobić. Jest wiele przypadków, w których dodatkowe znaki nie są tak naprawdę potrzebne i można je jednoznacznie zinterpretować ze względu na priorytety, ale zastanawiam się, czy nadal powinienem je egzekwować, czy nie zachęcać do spójności. Co myślisz? * * * Dobra, mój język to nie tyle język programowania, co fantazyjny język szablonów. Rodzaj skrzyżowania szablonów Haml i Django. Przeznaczony do użycia z moim frameworkiem internetowym C# i powinien być bardzo rozszerzalny.


title: Dlaczego większość przeglądarek została opracowana w C++

text: Wygląda na to, że większość popularnych przeglądarek internetowych (Firefox, Chrome, Safari) jest tworzonych w C++. Moje pytanie jest proste. Dlaczego używają głównie C++, a nie jakiegokolwiek innego języka? **Edycja: Jakie czynniki musiały zostać wzięte pod uwagę, jeśli chodzi o możliwość zapisu w C++, koszt, niezawodność itp. ?**


title: Jak zastosować modelowanie regresji, aby przeanalizować cechy programowania ekstremalnego i procesu Rational Unified Process?

text: Otrzymałem zadanie, które ma studium przypadku opracowane przez Extreme Programming (XP) i Rational Unified Process (RUP). Zostałem poproszony o zastosowanie modeli regresji i wzięcie kilku zmiennych zależnych i kilku zmiennych niezależnych w celu porównania zarówno XP, jak i RUP. Mimo że szukałem, nie byłem w stanie zidentyfikować zmiennych zależnych i niezależnych, które mogłyby być użyte w testowaniu jakości oprogramowania?


title: Konwersja z proceduralnego na kod zorientowany obiektowo

text: Czytałem Pracując efektywnie ze starszym kodem i czystym kodem w celu nauczenia się strategii, jak rozpocząć czyszczenie istniejącej bazy kodu dużej aplikacji ASP.NET webforms. System ten istnieje od 2005 roku i od tego czasu przeszedł szereg ulepszeń. Pierwotnie kod miał następującą strukturę (i nadal jest w dużej mierze skonstruowany w ten sposób): * ASP.NET (aspx/ascx) * Kod za kodem (c#) * Warstwa logiki biznesowej (c#) * Warstwa dostępu do danych (c#) * Baza danych ( Oracle) Głównym problemem jest to, że kod to proceduralne maskarady jako zorientowane obiektowo. Praktycznie narusza wszystkie wytyczne opisane w obu książkach. Oto przykład typowej klasy w warstwie logiki biznesowej: public class AddressBO { public TransferObject GetAddress(string addressID) { if (StringUtils.IsNull(addressID)) { throw new ValidationException("Należy wprowadzić identyfikator adresu"); }AdresDAO adresDAO = nowy AdresDAO(); adres zwrotnyDAO.GetAddress(adresID); } public TransferObject Insert(TransferObject addressDetails) { if (StringUtils.IsNull(addressDetails.GetString("EVENT_ID")) || StringUtils.IsNull(addressDetails.GetString("LOCALITY")) || StringUtils.IsNull(".GetStringDetails ADDRESS_TARGET")) || StringUtils.IsNull(addressDetails.GetString("ADDRESS_TYPE_CODE")) || StringUtils.IsNull(addressDetails.GetString("CREATED_BY"))) { wyrzuć nowy ValidationException( "Musisz wprowadzić identyfikator zdarzenia, Locality, Adres docelowy, kod typu adresu i utworzony przez."); } ciąg adresID = Sequence.GetNextValue("ADDRESS_ID_SEQ"); addressDetails.SetValue("ADRES_ID", adresID); ciąg syncID = Sequence.GetNextValue("SYNC_ID_SEQ");addressDetails.SetValue("SYNC_ADDRESS_ID", syncID); TransferObject syncDetails = new TransferObject(); Transakcja transakcyjna = nowa Transakcja(); try { AddressDAO addressDAO = new AddressDAO(); adresDAO.Insert(adresSzczegóły, transakcja); // wstaw rekord dla docelowego TransferObject addressTargetDetails = new TransferObject(); switch (addressDetails.GetString("ADDRESS_TARGET")) { case "PARTY_ADDRESSES": { addressTargetDetails.SetValue("ADDRESS_ID", adresID); addressTargetDetails.SetValue("ADDRESS_TYPE_CODE", addressDetails.GetString("ADDRESS_TYPE_CODE")); addressTargetDetails.SetValue("ID_PARTY", addressDetails.GetString("PARTY_ID")); addressTargetDetails.SetValue("EVENT_ID", addressDetails.GetString("EVENT_ID")); addressTargetDetails.SetValue("CREATED_BY", addressDetails.GetString("CREATED_BY"));adresDAO.InsertPartyAddress(adres,Target); break; } case "PARTY_CONTACT_ADDRESSES": { addressTargetDetails.SetValue("ADDRESS_ID", addressID);addressTargetDetails.SetValue("ADDRESS_TYPE_CODE", addressDetails.GetString("ADDRESS_TYPE_CODE"));adresTargetDetails.PUBREL_ETG "PUBLIC_RELEASE_FLAG")); adresTargetDetails.SetValue("KONTAKT_ID", addressDetails.GetString("CONTACT_ID")); addressTargetDetails.SetValue("EVENT_ID", addressDetails.GetString("EVENT_ID")); adresTargetDetails.SetValue("CREATED_BY", addressDetails.GetString("CREATED_BY")); .InsertContactAddress(addressTargetDetails, transaction); break; } << wiele innych przypadków tutaj >> default: { break; } } // sync SynchronisationBO synchronizisationBO = new SynchronisationBO(); syncDetails = synchronizisationBO.Synchronise("I", transakcja, " ADRESY", addressDetails.GetString("ADDRESS_TARGET"), adresDszczegóły, adresTargetDetails); // zatwierdź transakcję.Zatwierdź(); } catch (wyjątek) { transakcja.Rollback(); rzucić; } return new TransferObject("ADDRESS_ID", adresID, "SYNC_DETAILS", syncDetails); } << dużo więcej metod jest tutaj >> } Ma dużo duplikacji, klasa ma wiele odpowiedzialności itd., itd. - jest to po prostu ogólnie 'nieczysty' kod. Cały kod w całym systemie jest zależny od konkretnych implementacji. Oto przykład typowej klasy w warstwie dostępu do danych: public class AddressDAO : GenericDAO { public static readonly string BASE_SQL_ADDRESSES = "SELECT " + " a.address_id, " + " a.event_id, " + " a.flat_unit_type_code, " + " fut.description as flat_unit_description " +" a.numer_mieszkania, " + " a.kod_poziomu_piętra, " + " opis.fl jako opis_poziomu_piętra, " + " a.numer_poziomu, " + " a.nazwa_budynku, " + " numer_partii, " + " a.numer_ulicy, " + " a.nazwa_ulicy, " + " a.kod_typu_ulicy, " + " st.description jako opis_typu_ulicy, " + " a.kod_przyrostka_ulicy, " + " ss.description jako opis_przyrostka_ulicy, " + " a.kod_typu_dostawy, " + " pdt. opis jako postal_delivery_description, " + " a.postal_delivery_num, " + " a.locality, " + " a.state_code, " + " s.description jako state_description, " + " a.postcode, " + " a.country, " + " a.lock_num, " + " a.created_by, " + " TO_CHAR(a.created_datetime, '" + SQL_DATETIME_FORMAT + "') jako created_datetime, " + " a.last_updated_by, " + " TO_CHAR(a.last_updated_datetime, '" + SQL_DATETIME_FORMAT + "') as last_updated_datetime, " + " a.sync_address_id, " + " a.lat," + " a.lon, " + " a.validation_confidence, " + " a.validation_quality, " + " a.validation_status " + "Z ADRESÓW a, FLAT_UNIT_TYPES fut, FLOOR_LEVELS fl, STREET_TYPES st, " + " STREET_SUFFIXES ss, " + POSTALES_dsDELIVERY GDZIE a.flat_unit_type_code = fut.flat_unit_type_code(+) " + "ORAZ a.floor_level_code = fl.floor_level_code(+) " + "ORAZ a.street_type_code = st.street_type_code(+) " + "AND a.street_suffix_code = ss.street_suffix_code (+) " + "ORAZ a.postal_delivery_type_code = pdt.postal_delivery_type_code(+) " + "ORAZ a.state_code = s.state_code(+) "; publiczny TransferObject GetAddress(string addressID) { //Zbuduj instrukcję SELECT StringBuilder selectStatement = new StringBuilder(BASE_SQL_ADDRESSES); //Dodaj warunek WHERE selectStatement.Append(" AND a.address_id = :addressID"); Parametry ArrayList = new ArrayList{DBUtils.CreateOracleParameter("addressID", OracleDbType.Decimal, addressID)}; // Wykonanie instrukcji SELECT Zapytanie Zapytanie = new Query(); DataSet results = query.Execute(selectStatement.ToString(), parameters); // Sprawdź, czy zwrócono 0 lub więcej niż jeden wiersz if (results.Tables[0].Rows.Count == 0) { throw new NoDataFoundException(); } if (results.Tables[0].Rows.Count > 1) { throw new TooManyRowsException(); } // Zwróć TransferObject zawierający wartości return new TransferObject(redomysły); } public void Insert(TransferObject insertValues, Transaction transaction) { // Store Values string addressID = insertValues.GetString("ADDRESS_ID"); string syncAddressID = insertValues.GetString("SYNC_ADDRESS_ID"); string EventID = insertValues.GetString("EVENT_ID"); string createdBy = insertValues.GetString("CREATED_BY"); // ciąg przesyłek pocztowych postalDeliveryTypeCode = insertValues.GetString("POSTAL_DELIVERY_TYPE_CODE"); string postalDeliveryNum = insertValues.GetString("POSTAL_DELIVERY_NUM"); // jednostka/ciąg znaków budynku flatUnitTypeCode = insertValues.GetString("FLAT_UNIT_TYPE_CODE"); string flatUnitNum = insertValues.GetString("FLAT_UNIT_NUM"); string floorLevelCode = insertValues.GetString("FLOOR_LEVEL_CODE"); string floorLevelNum = insertValues.GetString("FLOOR_LEVEL_NUM");string nazwa_budynku = insertValues.GetString("NAZWA_BUDYNKU"); // street string numer_lotu = insertValues.GetString("NUMER_LOTU"); string numer_ulicy = insertValues.GetString("NUMER_ULICY"); string nazwa ulicy = insertValues.GetString("NAZWA_ULICY"); string streetTypeCode = insertValues.GetString("STREET_TYPE_CODE"); string streetSuffixCode = insertValues.GetString("STREET_SUFFIX_CODE"); // miejscowość/stan/kod pocztowy/kraj string lokalizacja = insertValues.GetString("LOKALNOŚĆ"); string stateCode = insertValues.GetString("STATE_CODE"); string kod pocztowy = insertValues.GetString("POSTCODE"); string country = insertValues.GetString("KRAJ"); // ciąg adresu esms esmsAddress = insertValues.GetString("ESMS_ADDRESS"); //adres/ciąg GPS lat = insertValues.GetString("LAT");string lon = insertValues.GetString("LON"); string zoom = insertValues.GetString("ZOOM"); //string validateDate = insertValues.GetString("VALIDATED_DATE"); string validatedBy = insertValues.GetString("VALIDATED_BY"); string zaufanie = insertValues.GetString("VALIDATION_CONFIDENCE"); status ciągu = insertValues.GetString("STATUS_WALIDACJI"); string quality = insertValues.GetString("VALIDATION_QUALITY"); // instrukcja insert StringBuilder insertStatement = new StringBuilder("WSTAW W ADRESY ("); StringBuilder valuesStatement = new StringBuilder("VALUES ("); ArrayList parameters = new ArrayList(); // stwórz instrukcję insert insertStatement.Append(") ADDRESS_ID, EVENT_ID, CREATED_BY, CREATED_DATETIME, LOCK_NUM "); valuesStatement.Append(":addressID, :eventID, :createdBy, SYSDATE, 1");parameters.Add(DBUtils.CreateOracleParameter("adresID", OracleDbType.Decimal,adresID)); parameters.Add(DBUtils.CreateOracleParameter("identyfikator zdarzenia", OracleDbType.Decimal, identyfikator zdarzenia)); parameters.Add(DBUtils.CreateOracleParameter("createdBy", OracleDbType.Varchar2, createdBy)); // zbuduj instrukcję insert if (!StringUtils.IsNull(syncAddressID)) { insertStatement.Append(", SYNC_ADDRESS_ID"); valuesStatement.Append(",:syncAddressID"); parameters.Add(DBUtils.CreateOracleParameter("syncAddressID", OracleDbType.Decimal, syncAddressID)); } if (!StringUtils.IsNull(postalDeliveryTypeCode)) { insertStatement.Append(", POSTAL_DELIVERY_TYPE_CODE"); valuesStatement.Append(", :postalDeliveryTypeCode "); parameters.Add(DBUtils.CreateOracleParameter("postalDeliveryTypeCode", OracleDbType.Varchar2, poz.talDeliveryTypeCode)); } if (!StringUtils.IsNull(postalDeliveryNum)) { insertStatement.Append(", POSTAL_DELIVERY_NUM"); valuesStatement.Append(", :postalDeliveryNum "); parameters.Add(DBUtils.CreateOracleParameter("postalDeliveryNum", OracleDbType.Varchar2, postalDeliveryNum)); } if (!StringUtils.IsNull(flatUnitTypeCode)) { insertStatement.Append(", FLAT_UNIT_TYPE_CODE"); valuesStatement.Append(", :flatUnitTypeCode "); parameters.Add(DBUtils.CreateOracleParameter("flatUnitTypeCode", OracleDbType.Varchar2, flatUnitTypeCode)); } if (!StringUtils.IsNull(lat)) { insertStatement.Append(", LAT"); valuesStatement.Append(", :lat "); parameters.Add(DBUtils.CreateOracleParameter("lat", OracleDbType.Decimal, lat)); }if (!StringUtils.IsNull(lon)) { insertStatement.Append(", LON"); valuesStatement.Append(", :lon "); parameters.Add(DBUtils.CreateOracleParameter("lon", OracleDbType.Decimal, lon)); } if (!StringUtils.IsNull(zoom)) { insertStatement.Append(", ZOOM"); valuesStatement.Append(", :zoom "); parameters.Add(DBUtils.CreateOracleParameter("zoom", OracleDbType.Decimal, zoom)); } if (!StringUtils.IsNull(flatUnitNum)) { insertStatement.Append(", FLAT_UNIT_NUM"); valuesStatement.Append(", :flatUnitNum "); parameters.Add(DBUtils.CreateOracleParameter("flatUnitNum", OracleDbType.Varchar2, flatUnitNum)); } if (!StringUtils.IsNull(floorLevelCode)) { insertStatement.Append(", FLOOR_LEVEL_CODE");valuesStatement.Append(", :floorLevelCode "); parameters.Add(DBUtils.CreateOracleParameter("floorLevelCode", OracleDbType.Varchar2, floorLevelCode)); } if (!StringUtils.IsNull(floorLevelNum)) { insertStatement.Append(", FLOOR_LEVEL_NUM"); valuesStatement.Append(", :floorLevelNum "); parameters.Add(DBUtils.CreateOracleParameter("floorLevelNum", OracleDbType.Varchar2, floorLevelNum)); } if (!StringUtils.IsNull(nazwa_budynku)) { insertStatement.Append(", NAZWA_BUDYNKU"); valuesStatement.Append(", :nazwaBudynku "); parameters.Add(DBUtils.CreateOracleParameter("nazwa_budynku", OracleDbType.Varchar2, nazwa_budynku)); } if (!StringUtils.IsNull(numer_lotu)) { insertStatement.Append(", NUMER_LOTU"); valuesStatement.Append(", :lotNumber "); parameters.Add(DBUtils.CreateOracleParameter("lotNumber", OracleDbType.Varchar2, lotNumber)); } if (!StringUtils.IsNull(streetNumber)) { insertStatement.Append(", STREET_NUMBER"); valuesStatement.Append( ", :streetNumber "); parameters.Add(DBUtils.CreateOracleParameter("numer_ulicy", OracleDbType.Varchar2, numer_ulicy)); } if (!StringUtils.IsNull(nazwa ulicy)) { insertStatement.Append(", STREET_NAME"); valuesStatement .Append(", :streetName "); parameters.Add(DBUtils.CreateOracleParameter("streetName", OracleDbType.Varchar2, nazwa ulicy)); } if (!StringUtils.IsNull(streetTypeCode)) { insertStatement.Append(", STREET_TYPE_CODE" ); valuesStatement.Append(", :streetTypeCode "); parameters.Add(DBUtils.CreateOracleParameter("streetTypeCode", OracleDbType.Varchar2, streetTypeCode)); } if (!StringUtils.IsNull(streetSuffixCode)) { insertStatement.Append(", STREET_SUFFIX_CODE"); valuesStatement.Append(", :streetSuffixCode "); parameters.Add(DBUtils.CreateOracleParameter("streetSuffixCode", OracleDbType.Varchar2, streetSuffixCode)); } if (!StringUtils.IsNull(lokalizacja)) { insertStatement.Append(", LOKALNOŚĆ"); valuesStatement.Append(",:locality"); parameters.Add(DBUtils.CreateOracleParameter("lokalizacja", OracleDbType.Varchar2, lokalizacja)); } if (!StringUtils.IsNull(stateCode)) { insertStatement.Append(", STATE_CODE"); valuesStatement.Append(", :stateCode"); parameters.Add(DBUtils.CreateOracleParameter("stateCode", OracleDbType.Varchar2, kod stanu)); } if (!StringUtils.IsNull(kod pocztowy)) { insertStatement.Append(",POSTCODE"); valuesStatement.Append(", :kod pocztowy "); parameters.Add(DBUtils.CreateOracleParameter("kod pocztowy", OracleDbType.Varchar2, kod pocztowy)); } if (!StringUtils.IsNull(kraj)) { insertStatement.Append(", KRAJ"); valuesStatement.Append(", :kraj "); parameters.Add(DBUtils.CreateOracleParameter("kraj", OracleDbType.Varchar2, kraj)); } if (!StringUtils.IsNull(esmsAddress)) { insertStatement.Append(", ESMS_ADDRESS"); valuesStatement.Append(", :esmsAddress "); parameters.Add(DBUtils.CreateOracleParameter("esmsAddress", OracleDbType.Varchar2, esmsAddress)); } if (!StringUtils.IsNull(validatedBy)){ insertStatement.Append(", ZATWIERDZONA_DATA"); valueStatement.Append(", SYSDATE "); insertStatement.Append(", VALIDATED_BY"); valuesStatement.Append(", :validatedBy "); parameters.Add(DBUtils.CreateOracleParameter("validatedBy", OracleDbType.Varchar2, validatedBy)); } if (!StringUtils.IsNull(zaufanie)) { insertStatement.Append(", VALIDATION_CONFIDENCE"); valuesStatement.Append(", :confidence "); parameters.Add(DBUtils.CreateOracleParameter("zaufanie", OracleDbType.Decimal, zaufanie)); } if (!StringUtils.IsNull(status)) { insertStatement.Append(", VALIDATION_STATUS"); valuesStatement.Append(", :status "); parameters.Add(DBUtils.CreateOracleParameter("stan", OracleDbType.Varchar2, stan)); }if (!StringUtils.IsNull(quality)) { insertStatement.Append(", VALIDATION_QUALITY"); valuesStatement.Append(", :jakość "); parameters.Add(DBUtils.CreateOracleParameter("jakość", OracleDbType.Decimal, jakość)); } // zakończ instrukcję insertStatement.Append() "); valuesStatement.Append(")"); // zbuduj ciąg instrukcji insert sql = insertStatement + valuesStatement.ToString(); // Wykonanie instrukcji INSERT Dml dmlDAO = new Dml(); int rowsAffected = dmlDAO.Execute(sql, transakcja, parametry); if (rowsAffected == 0) { wyrzuć nowe NoRowsAffectedException(); } } << o wiele więcej metod przejdź tutaj >> } Ten system został opracowany przeze mnie i mały zespół w 2005 roku po 1-tygodniowym kursie .NET. Wcześniej niż moje doświadczenience było w aplikacjach klient-serwer. W ciągu ostatnich 5 lat dostrzegłem korzyści płynące z automatycznych testów jednostkowych, automatycznych testów integracyjnych i automatycznych testów akceptacyjnych (przy użyciu Selenium lub odpowiednika), ale obecny kod wydaje się niemożliwy do wprowadzenia tych koncepcji. Rozpoczynamy teraz pracę nad dużym projektem ulepszeń w napiętych ramach czasowych. Zespół składa się z 5 programistów .NET - 2 programistów z kilkuletnim doświadczeniem w .NET i 3 innych z niewielkim lub żadnym doświadczeniem w .NET. Żaden z zespołu (w tym ja) nie ma doświadczenia w korzystaniu z testów jednostkowych .NET lub mockowanie frameworków. Jakiej strategii użyłbyś, aby uczynić ten kod czystszym, bardziej zorientowanym obiektowo, testowalnym i konserwowalnym?


title: Programowanie obiektowe na 8-bitowym MCU Studium przypadku

text: Widzę, że jest tu dużo pytań związanych z programowaniem OO. Właściwie próbuję znaleźć konkretny zasób związany z wbudowanymi podejściami OO dla 8-bitowego MCU. Kilka lat temu (może 6) szukałem materiałów związanych z programowaniem obiektowym dla mikroprocesorów 8051 o ograniczonych zasobach. Znalazłem artykuł/stronę internetową z historią przypadku grupy projektowej, która używała bardzo małej części pamięci RAM i zaimplementowała wiele konstrukcji opartych na obiektach podczas projektowania i rozwoju w C. Uważam, że był to 8051. Projekt odniósł sukces i udało mu się pozostać w bardzo małej pamięci ROM/RAM, którą mieli. Próbuję go znaleźć ponownie, ale Google nie może go znaleźć. Artykuł był dobrze napisany i zalecał „mieszane” podejście z wykorzystaniem metod C do dziedziczenia i enkapsulacji – jeśli dobrze pamiętam. Czy ktoś może mi pomóc znaleźć ten artykuł?


title: Jak określa się funkcję „wabika” lub celowy błąd?

text: Zapomniałem slangowego terminu programowania. Ta rzecz jest celowym błędem lub funkcją wabika używaną jako odwrócenie uwagi. Przykładowe użycie: „Hej Bob, kontrola jakości robi dzisiaj przegląd. Umieść `$THING` w module, aby rzeczywiście mieli problem ze znalezieniem”. Można to wykorzystać negatywnie, aby mieć bardzo oczywistą celową wadę, którą można odkryć jako odwrócenie uwagi od prawdziwego problemu. Można to również wykorzystać pozytywnie. To tak, jakbyś zawsze pozwalał psom ratowniczym „znaleźć” ofiarę podczas przeszukiwania obszaru katastrofy. Można go również wykorzystać do sprawdzenia, czy proces kontroli jakości faktycznie wychwytuje wady. Jakiego terminu szukam?


title: Zwracasz wartość null lub pustą wartość/wyjątek?

text: Różne książki o programowaniu sugerują, że metody nie powinny zwracać wartości `null` (na przykład Clean Code). Zamiast zwracać „null” wartości domyślne (0 lub pusty ciąg lub pusty obiekt) należy zwrócić lub zgłosić wyjątek. Jest to zalecane, aby uniknąć wielu sprawdzeń `!= null` lub uniknąć `NullPointerException`. Naprawdę nie rozumiem, jak to pomaga. Jeśli zwracasz wartość domyślną, musisz wykonać sprawdzenia `!= DEFAULT`; co więcej, wartość domyślna może coś oznaczać (np. 0 dla kwoty kredytu). Zgłaszanie konkretnego wyjątku nie jest opłacalne, ponieważ jeśli nie poradzisz sobie dobrze ze swoim kodem, wyjątek i tak zostanie zgłoszony - `NullPointerException`. Myślałem o tym, gdy znalazłem błąd spowodowany przez metodę, która zwróciła pusty obiekt (np. `new MyBean()`) zamiast zwracać `null`. Kod nie działał funkcjonalnie, a dzienniki niczego nie ostrzegały, więc wykrycie i naprawa nie było takie proste; z `null` zostałby wyrzucony `NullPointerException`, więc wykrycie i naprawienie błędu byłoby trywialne. Jedynym przypadkiem, w którym zwracanie wartości domyślnej zamiast zwracania `null` ma sens, jest zwracanie tablic/kolekcji; tutaj są one zwykle zużywane `dla każdego elementu w kolekcji`, więc jeśli jest pusty, nic się nie dzieje, ale jeśli jest `null` zgłaszany jest NPE.


title: Jakie są zagrożenia prawne związane z używaniem GPL lub AGPL Web Application Framework/CMS?

text: Próbowałem zadać to pytanie na SO, ale zostałem tutaj odesłany ... Czy mam rację mówiąc, że korzystanie z frameworka aplikacji internetowych na GPL, takiego jak Composite C1, NIE zobowiązuje firmy do udostępniania kodu źródłowego, który piszemy w stosunku do wspomnianego frameworka? Taki jest cel AGPL, czy mam rację? Czy dotyczy to również frameworków JavaScript, takich jak KendoUI? GPL wymagałaby udostępnienia innym zmian, które wprowadzamy do frameworka, gdybyśmy mieli ją udostępnić do pobrania. Innymi słowy, samo załadowanie zawartości witryny internetowej do mojej przeglądarki nie jest „przekazywaniem” ani „dystrybucją” tego oprogramowania. Twierdziłem, że powinniśmy unikać frameworków internetowych GPL, a teraz po zbadaniu jestem prawie pewien, że się mylę, ale chciałem uzyskać inne opinie? Seth


title: Włączenie biblioteki na licencji GPL do komercyjnego programu Java

text: Pomagam w tworzeniu komercyjnego programu Java. Chcemy użyć w GUI pewnego zewnętrznego elementu LookAndFeel. Problem polega na tym, że biblioteka LookAndFeel jest na licencji GPL. Skoro planujemy sprzedawać nasz produkt, czy użycie GPL LookAndFeel w naszym produkcie byłoby legalne? Wspomniany LookAndFeel to wygląd i działanie InfoNode


title: Gdzie jest przechowywana zmienna „ta”?

text: Weźmy ten prosty program w C++ jako przykład: #include <wektor> class A { void fun() { a = this + 1; } A* a; }; main() { std::vector<A> vec; vec.resize(100); } Zapominając na chwilę, że `this` jest wskaźnikiem do jakiejś instancji `A`, to pytanie dotyczy samej zmiennej `this` i tego, gdzie jest przechowywana jej zawartość (wartość adresu pamięci). Nie może to być literał, ponieważ kompilator nie zna położenia klasy „A”, więc jej zawartość musi być zaalokowana _gdzieś_ na stosie lub stercie jako zmienna. W tym przypadku wystąpienia „A” są alokowane na stercie; czy to oznacza, że „ten” wskaźnik również jest na stercie? Patrząc na wywołanie `resize` funkcji `vec`, kompilator może zrobić coś takiego pod maską: std::vector<A>::resize(this, 100); // gdzie 'this' jest wskaźnikiem do vec Więc moje pytanie brzmi, skąd pochodzi wskaźnik 'this'? Tj. gdzie jest zawartość `this` (32/64-bitowa wartość adresu pamięci) przechowywana w pamięci, aby została przekazana do tej metody? Przypuszczam, że nie może to być normalny członek; więc moją pierwszą myślą było to, że jest to pewnego rodzaju zniekształcona zmienna globalna, ale potem przechowując nieznaną ich liczbę w wektorze, nie widzę, jak kompilator mógłby to osiągnąć. Gdzie jest przechowywana zawartośćx zmiennej `this` w odniesieniu do zawartości składowej klasy `A`, do której się odnosi? Jeśli norma ma coś do powiedzenia na ten temat, wolałbym odpowiedź w odniesieniu do normy. Zauważ, że powodem, dla którego chcę wiedzieć, jest to, że obawiam się fałszywego współdzielenia pamięci przydzielonej dla obiektu `this`, jeśli zmodyfikuję zmienne składowe. Wiedza o tym, gdzie przechowywany jest „ten” obiekt, może mieć wpływ na decyzje dotyczące wypełnienia.


title: Dynamiczny wybór kompilatorów?

text: Aplikacja ma następującą logikę: * klient => utworzona *.cpp => wysłana na serwer => cl.exe + *.cpp = *.exe * klient => utworzona *.cs => wysłana na serwer => csc.exe + *.cs = *.exe * client => utworzony *.pas => wysłany na serwer => PascalCompiler + *.pas = *.exe * itd. Język - C#. Słyszałem, że MSBUILD może mi pomóc, ale nie rozumiem, jak zmienić kompilator na serwerze w czasie wykonywania. Czy ktoś zna inne opcje niż klasa Process? Staram się napisać system online do testowania programów w konkursach programistycznych. Programista wybiera kompilator i wysyła kod źródłowy na serwer w celu weryfikacji. I nie muszę budować projektu, wystarczy skompilować jeden plik.


title: Aplikacja rozproszona z wykorzystaniem RabbitMQ

text: Jestem w drodze do stworzenia aplikacji z 4 ograniczonym kontekstem przy użyciu CQRS i sourcingu zdarzeń. Aby te ograniczone konteksty mogły ze sobą rozmawiać, planowałem użyć Rabbit MQ. Moje wymagania są następujące: * Ograniczony kontekst nie może wiedzieć o sobie nawzajem * Ograniczony kontekst nie może być utrudniony, jeśli inny ograniczony kontekst jest wyłączony lub jeśli rabbitMQ jest wyłączony * Jeśli ograniczony kontekst nie jest dostępny, komunikaty, że powinien odbierz, musi cierpliwie czekać na jego zwrot, tj.: każde opublikowane wydarzenie musi być przynajmniej raz przesłane do wszystkich zainteresowanych bc. Dlatego myślałem o tym, aby każdy z nich odwoływał się do kolejki: BandMasterQueue i tworzył ją, jeśli tak nie jest. Podczas tworzenia zdarzenia magazyn zdarzeń przechowuje je, a jego wysłanie składa się z dwóch etapów: 1. rzutowanie tego zdarzenia na siebie do każdej małej projekcji. Każda projekcja ma mały zasób wydarzeń, które są już przewidywane, aby zagwarantować idempotentność przez pewien czas. 2. opublikuj to zdarzenie w kolejce BandMasterQueue, jeśli nie powiedzie się w kroku 2 z powodu braku dostępnego rabbitmq, wtedy spodziewam się, że mój magazyn zdarzeń spróbuje ponownie wysłać wiadomość do RabbitMQ za jakiś czas (nie do końca, chociaż dokładnie w tej części, ja muszę powiedzieć...) BandMaster "ograniczony kontekst" wie o każdym innym BC, którym się opiekuje. To on czyta zespółMasterQueue i decyduje, które wydarzenia są publiczne, a które nie. Jest również odpowiedzialny za obsługę „sag” i może wysyłać działania naprawcze do każdego BC. W tym celu komunikuje się z każdym ograniczonym kontekstem za pomocą dedykowanej kolejki ograniczonego kontekstu i tworzy go, jeśli nie wychodzi. Każdy BC jest powiązany z tą konkretną kolejką i dodaje zdarzenie przychodzące z zewnątrz do własnego magazynu zdarzeń, a następnie wyświetla je we własnej projekcji. Czy ta „architektura” powinna działać, czy też widzisz w niej jakąś poważną wadę?


title: Transformacja wartości na poziomie właściwości dla pośredniego rzutowania obiektów

text: Czy istnieje jakiś język programowania obsługujący jawną kopię obiektu na poziomie właściwości? Na przykład załóżmy następujący kod: public class Student { public string Name { get; ustawić; } ciąg publiczny Kod { get; ustawić; } public List<string> Zainteresowania { get; ustawić; } } public class Item { public string Name { get; ustawić; } ciąg publiczny Kod { get; ustawić; } } Zastanawiam się, czy istnieje kompilator (lub język), który może pośrednio rzutować na siebie dwa obiekty, w oparciu o dopasowanie na poziomie właściwości i algorytm transformacji stratnej? 1. Utwórz instancję klasy docelowej 2. Za pomocą odbicia znajdź wszystkie właściwości klasy docelowej 3. Dla każdej właściwości spróbuj znaleźć dopasowanie w klasie źródłowej, używając nazwy i typu 4. Jeśli znaleziono, przenieś wartość 5 W przeciwnym razie zainicjuj do wartości domyślnej Oczywiście należy to zrobić **wyraźnie** z pełną intencją dewelopera. Na przykład pseudoskładnia C# może wyglądać tak: Student student = new Student(); student.Name = "Saeed"; student.Kod = "513223"; Pozycja przedmiotu = kopiuj uczeń; // załóżmy, że „kopia” jest słowem kluczowym // tutaj nazwa elementu to „Saeed”, a jego kod to „513223”


title: SEO dla strony internetowej opartej na AJAX

text: Moje pytanie brzmi, że mamy całkowicie opartą na ajax stronę internetową: http://news.swalif.com/. Teraz chcemy, aby wszystkie „strony” były indeksowane przez Google i inne wyszukiwarki, ale nie chcemy przenosić się na rozwiązanie oparte na PHP ani tworzyć archiwum. Chciałbym uzyskać jakieś pomysły, jak to możliwe.


title: Limit czasu na dane wejściowe użytkownika

text: Próbuję ustawić limit czasu na dane wejściowe użytkownika, więc jeśli wpisanie danych zajmie więcej niż 2 sekundy, program zostanie zakończony. Zastanawiałem się, czy istnieje prosty sposób na zrobienie tego w języku C?


title: Powielanie kodu testów jednostkowych?

text: Jak uniknąć powielania kodu w testach jednostkowych? Używając Java i JUnit załóżmy, że mam coś takiego: interfejs publiczny Arithmetic<T> { public T add(T a, T b); publiczne T sub(T a, T b); } public void IntegerArithmetic<Integer> { // } public void DoubleArithmetic<Double> { // } I klasa testowa: public class TestArith { private Arithmetic<Integer> arith; @Before public void init() { Arithmetic<Integer> arith = new IntegerArithmetic(); Wyraz całkowity1 = 4; Wyraz całkowity2 = 3; } @Test public void testAdd() { attachEquals(7, arith.add(term1, term2)); } @Test public void testAdd() { attachEquals(1, arith.sub(term1, term2)); } } Problem polega na tym, że klasa testowa dla klasy DoubleArithmetic powinna wyglądać dokładnie tak samo; jedyną różnicą jest @Before init(), gdzie odbywa się inicjalizacja konkretnego typu. Jak można uniknąć powielania kodu?


title: Co jest prostsze w przypadku wywołania klienta REST w celu zwrócenia kodu JSON — JQuery/JavaScript lub Spring RestTemplate?

text: Próbowałem zhakować aplikację internetową Spring MVC z adnotacjami, ale dość trudno jest wywołać adres URL mojej aplikacji internetowej, która uruchamia żądanie do zdalnego interfejsu API (dane policji w Wielkiej Brytanii) i otrzymuje odpowiedź, którą mogę następnie zwrócić jako JSON. Próbowałem użyć Spring's RestTemplate. Dziwny przykład JavaScript, na który się przyjrzałem, wydaje się pasować do tego zadania o wiele lepiej i bardziej uproszczony niż pełny serwlet. **Czy to jest opinia, którą również podzielasz i którą możesz poprzeć dobrym, jasnym, prostym przykładem?** JavaScript wydaje się być dobrą platformą do tego rodzaju zadań **Albo, innymi słowy, czy jest prostszy w tworzeniu "aplikacja internetowa" z JavaScript, która wykonuje kilka wywołań REST i renderuje odpowiedź, niż próbuje zrobić to za pomocą Spring?**


title: Co musisz zrobić, prowadząc mentoring dla nowego absolwenta?

text: Cóż, od kilku lat jestem młodszym programistą w małym zespole. Teraz jest nowy świeżo upieczony absolwent, więc zostałem niezbyt młodszym programistą i zostałem poproszony o mentoring. Ale nie mam pojęcia, co robić, ponieważ zawsze byłam osobą „wymyślającą wszystko na własną rękę” i nie otrzymywałam zbyt wiele mentoringu. Co więc musisz zrobić, gdy jesteś mentorem dla nowego absolwenta?


title: Jak stabilny jest Common LISP jako język?

text: Czytałem trochę o Common Lisp i zastanawiam się, czy nie spróbować się go nauczyć (znam tylko bardzo podstawowe pojęcia), a nawet użyć go do jakiegoś projektu. Pytanie: jak stabilny jest Common Lisp jako język? Chodzi mi o to, że niezależnie od nowych bibliotek, nowe funkcje językowe (obejmujące nową składnię i semantykę) są dodawane do języka? Innymi słowy, gdybym teraz uczył się Common Lisp, czy byłbym w stanie używać tego samego języka za 10 lat lub czytać kod, który został napisany 10, 20 lat temu (oczywiście poza koniecznością zapoznania się z różnymi biblioteki i API)?


title: Dziedziczenie z klasy abstrakcyjnej a typy wyliczeniowe dla niestandardowych wyjątków

text: Tworzę interfejs i chciałbym, aby realizator (y) tego interfejsu zgłaszał wyjątki w przypadku, gdy coś pójdzie nie tak. Nazwijmy realizatora wtyczką. Mam reżysera, który może wywołać dowolną z wtyczek. Zamiast każdej wtyczki wyrzucającej swój losowy wyjątek, chciałbym, aby wtyczki wyrzucały określone wyjątki, które mój reżyser może obsłużyć. Na przykład: Jeśli wtyczki nie zostaną uwierzytelnione przy użyciu poświadczeń dostarczonych przez reżysera lub jeśli żądana akcja przekroczy limit czasu we wtyczce, wtyczka powinna zgłosić wyjątek. Zamiast każdej wtyczki wyrzucaj swój losowy wyjątek, chciałbym, aby wtyczki wyrzucały określone wyjątki, o których reżyser wie i może obsłużyć. Robię to, ponieważ jeśli wyjątek jest krytyczny (np. uwierzytelnianie nie powiodło się), nie chcę próbować ponownie, podczas gdy jeśli był to limit czasu, dyrektor może zdecydować się na ponowną próbę. Teraz jestem zdezorientowany, który z poniższych sposobów jest lepszy: **Pomysł 1:** Utwórz niestandardowy wyjątek (powiedzmy `PluginException`) i miej typ wyliczenia dla różnych typów wyjątków (takich jak `authenticationfailed`, `timeout`, `permissiondenied` itd.) Reżyser przechwyci wszystkie `PluginException` i zajmie się każdym przypadkiem osobno. **Idea 2:** Utwórz abstrakcyjny wyjątek (powiedzmy jeszcze raz `PluginException`) i ustaw określone typy wyjątków wywodzące się z mojego abstrakcyjnego wyjątku (np. `AuthenticationFailedException`, `TimeoutException`, itd.) Reżyser może nasłuchiwać każdego konkretnego wyjątku jest zainteresowany, a także nasłuchuje szerszego `PluginException`, jeśli żaden z powyższych typów wyjątków nie pasuje do wyjątku zgłoszonego przez wtyczki.


title: Wykryj duplikat w podzbiorze z zestawu elementów

text: Mam zestaw liczb, powiedzmy: 1 1 2 8 5 6 6 7 8 8 4 2... Chcę wykryć zduplikowany element w podzbiorach (o podanym rozmiarze, powiedzmy k) powyższych liczb... Na przykład: Rozważmy rosnące podzbiory (na przykład rozważ k=3) Podzbiór 1:{1,1,2} Podzbiór 2:{1,2,8} Podzbiór 3:{2,8,5} Podzbiór 4:{8,5,6 } Podzbiór 5: {5,6,6} Podzbiór 6: {6,6,7} ....... Więc mój algorytm powinien wykryć, że podzbiór 1,5,6 zawiera duplikaty.. Moje podejście: 1) Skopiuj pierwsze k elementów do tymczasowej tablicy (wektora) 2) za pomocą pliku #include w C ++ STL ... przy użyciu unique() Określiłbym, czy nastąpiła jakakolwiek zmiana rozmiaru wektora .. Jakakolwiek inna wskazówka, jak podejść do tego problemu. .


title: Algorytm obliczania daty

text: Pracuję nad projektem harmonogramu warsztatu mechanicznego, w zasadzie mam wszystko omówione ALE obliczenia dat, mam metodę o nazwie schedule (tutaj pracuję nad PHP): public function schedule($start_date, $duration_in_minutes) Teraz mój problem polega na tym, że obecnie obliczam czas zakończenia ręcznie, ponieważ obliczenia czasu mają następujące zasady: 1. W dni powszednie pracuj w godzinach pracy (od 7:00 do 17:00) 2. Pracuj w soboty od 7:00 do 14:00 3. Ignoruj święta (w Kolumbii mamy DUŻO świąt) Mam już lookup table na święta, mam też wersję Java tego algorytmu, którą napisałem dla poprzedniej wersji projektu, ale to czyjaś także manualna. Czy jest jakiś sposób na obliczenie czasu zakończenia od czasu rozpoczęcia podanego czasu trwania? Mój problem polega na tym, że muszę wziąć pod uwagę powyższe zasady, szukam (może?) rozwiązania opartego na matematyce, jednak obecnie nie mam umysł, aby samodzielnie wymyślić takie rozwiązanie. W razie potrzeby chętnie dostarczę próbki kodu.


title: Dlaczego ludzie śmieją się z visual basic?

text: Kiedy byłem w liceum, używałem Visual Basic 6 i myślę, że było całkiem nieźle. Potem przyszedłem na uniwersytet i zacząłem używać c/c++ java python itp. Nie znalazłem powodu, dla którego ludzie śmieją się z visual basic, czy to z powodu jego składni? albo coś innego? **AKTUALIZACJA:** wszyscy udzieliliście fantastycznych odpowiedzi, ale na początku zastanawiam się nad odpowiedzią tdammers. Bardzo dziękuję za wszelką pomoc:)


title: TDD, BDD czy jedno i drugie?

text: Jestem trochę zdezorientowany BDD. Obecnie robię TDD. Moje pytanie brzmi, czy BDD jest uzupełnieniem TDD, czy jest to zupełnie nowa rzecz, a mój zespół powinien robić zarówno TDD, jak i BDD? Czy wystarczy zrobić tylko jedno lub drugie?


title: Jaka jest różnica między BDD a TDD?

text: Uczyłem się pisania przypadków testowych dla BDD przy użyciu specflow. Jeśli piszę kompleksowe testy z BDD, to czy muszę pisać osobno test TDD? Czy konieczne jest pisanie przypadków testowych osobno dla TDD i BDD? Wydaje mi się, że oba są takie same, jedyną różnicą jest to, że BDD może być zrozumiane przez nie-programistów i testerów.


title: Czy różnica między BDD a TDD to tylko zmiana słownictwa?

text: Niedawno zacząłem uczyć się BDD (Behaviour Driven Development) po obejrzeniu wykładu technicznego Google przedstawionego przez Davida Astelsa. Stworzył bardzo interesujący przypadek użycia BDD, a niektóre z literatury, które czytałem, wydają się podkreślać, że łatwiej jest sprzedać BDD kierownictwu. Trzeba przyznać, że po obejrzeniu powyższego filmu jestem trochę sceptyczny wobec BDD. Tak więc, jestem zainteresowany zrozumieniem, czy BDD rzeczywiście jest niczym więcej niż zmianą słownictwa, czy też oferuje inne korzyści.


title: Związek między BDD i TDD

text: Jaka jest relacja BDD i TDD? Z tego co zrozumiałem, BDD dodaje do TDD dwie główne rzeczy: nazewnictwo testów (zapewnienie/powinna) i testy akceptacyjne. Czy powinienem śledzić TDD podczas opracowywania przez BDD? Jeśli tak, czy moje testy jednostkowe TDD powinny być nazwane w tym samym stylu upewnij się/powinien?


title: Zwracanie atrapy obiektu z atrapy obiektu

text: Próbuję zwrócić obiekt podczas szyderstwa klasy parsera. To jest kod testowy używający PHPUnit 3.7 //ustaw obiekt wynikowy, który chcę zwrócić z wywołania metody parse $parserResult= new ParserResult(); $parserResult->setSegment('jakiś ciąg'); //ustaw obiekt pośredniczący Parser $stubParser=$this->getMock('Parser'); $stubParser->expects($this->any()) ->method('parse') ->will($this->returnValue($parserResult)); //wstrzyknięcie kodu pośredniczącego do mojej klasy klienta $fileWriter= new FileWriter($stubParser); $output=$fileWriter->writeStringToFile(); Wewnątrz mojej metody `writeStringToFile()` używam `$parserResult` w następujący sposób: writeStringToFile(){ //Jakiś kod... $parserResult=$parser->parse(); $segment=$parserResult->getSegment();//dlatego ustawiłem segment w teście. } Czy w pierwszej kolejności powinienem kpiąć z `ParserResult`, aby mock zwracał mock? Czy to dobry projekt, aby makiety zwracały makiety? Czy istnieje lepsze podejście do tego wszystkiego?!


title: Pomóż zrozumieć abstrakcyjny wzór fabryki!

text: Uczę się 23 wzorców projektowych GoF. Myślę, że znalazłem sposób na zrozumienie i uproszczenie działania Fabryki Abstrakcyjnej, ale chciałbym wiedzieć, czy to poprawne założenie, czy też się mylę. Chcę wiedzieć, czy wynik metody Fabryki Abstrakcyjnej możemy zobaczyć jako macierz możliwych produktów, gdzie dla każdej „Fabryki Betonu” x „Produkt Abstrakcyjny” istnieje Produkt, gdzie Fabryka Betonu jest pojedynczą implementacją wśród implementacji AbstractFactory i AbstractProduct to interfejs pomiędzy interfejsami do tworzenia produktów. Czy to się zgadza, czy czegoś mi brakuje?


title: Jakie są różnice między edycją specjalną a trzecią edycją języka programowania C++ Stroustrupa?

text: Kupuję kilka książek o C++ po przejściu z Javy. Oczywiście chcę przeczytać podręcznik referencyjny od samego człowieka, chociaż nie mogę odróżnić tych dwóch wydań. Wydanie specjalne jest o dziesięć stron krótsze niż wydanie trzecie. Jednak edycja specjalna jest zalecana w porównaniu z edycją trzecią i wydaje się, że ta wersja obejmuje normę ISO, podczas gdy druga edycja nie. Czy ktoś może rzucić na to trochę światła?


title: Czy możemy stworzyć aplikację desktopową za pomocą Rubiego?

text: Wiem, że framework Ruby on Rails jest przeznaczony tylko do tworzenia stron internetowych i nie nadaje się do tworzenia aplikacji na komputery stacjonarne. Ale jeśli programista ruby chce stworzyć aplikację desktopową, czy jest odpowiednie i preferowane robienie tego tylko z Ruby (nie z jRuby, ponieważ większość samouczków dotyczy jRuby)? Jeśli tak, podaj dobre tutoriale. Chcę używać linuxa jako systemu operacyjnego do rozwoju. Proszę coś zasugerować, ponieważ jestem programistą ruby i chcę tworzyć aplikację desktopową.


title: Jak szybko język Java staje się nieaktualny?

text: Niedawno zacząłem uczyć się Javy. Zacząłem się tego uczyć, korzystając z książek, które pobrałem z biblioteki, niektórych kupiłem i tu i tam z dokumentacji Java. Książka, której używam dla Javy, została opublikowana w 2011 roku. W 2012 roku zostanie wydana Java8, a w 2013 Java9. Pytania to: * Jak mogę być na bieżąco z rozwojem Javy bez konieczności kupowania tomu dla Java8 i/lub Java9 * Czy książka opublikowana w 2008 roku jest przestarzałą książką do nauki JSP i Servelets? Mowa o serwletach Head First i JSP


title: Co to znaczy „ujawnić” coś?

text: Pracuję więc nad stworzeniem aplikacji Google App Engine i niejednokrotnie spotkałem się z terminem „ujawniać”, m.in. „Twoja pierwsza aplikacja może uwidaczniać obiekty za pomocą interfejsu API opartego na HTTP” i „ujawniać tę klasę modelu danych za pomocą interfejsu API REST”. Co oznacza „ujawniać”? Czy jest z nim powiązana konkretna czynność, czy jest to abstrakcyjna część projektu?


title: Potrzebujesz przemyśleń na temat programu nauczania dla początkujących programistów

text: Chciałbym poznać Twoje przemyślenia na temat programu nauczania, który zostanie opracowany dla osób, które chcą rozpocząć pracę w dziedzinie programowania. Celem kursu jest pomoc studentom w upewnieniu się, że studenci rozumieją teorię i umiejętności wymagane do bycia programistą oraz mają wystarczające umiejętności, aby uzyskać pracę na poziomie podstawowym po ukończeniu studiów. Program nauczania to: * 400 godzin nauczania plus samodzielna nauka. * 40 godzin praktyki **1\. Fundacja** Przejrzystość Orientacja szczegółów do. Komunikacja re. Kompartmentalizacja/abstrakcja mi. Wpisywanie fa. Pamięć **2\. Teoria** Analiza leksykalna b. Parsowanie do. Optymalizacja re. Myślenie hierarchiczne mi. Zakres fa. Wpisz systemy **3\. Informatyka** b. Struktura danych (np. sortowanie, wyszukiwanie, przekrojowa struktura danych) Rekurencja do. Struktury językowe (np. tablice, listy połączone, słowniki itp.) **4\. Architektura systemów** **5\. Teoria systemu operacyjnego** POSIX ok. Przydział pamięci **6\. Programowanie obiektowe** Java PL/SQL * * * Chciałbym wiedzieć: 1. Czy powyższy program nauczania jest jasno określony? Jeśli nie, jak najlepiej to zmienić? 2. Czy w powyższym zarysie brakuje jakichś kluczowych elementów? 3. Czy z powyższego zarysu należy usunąć jakieś elementy (biorąc pod uwagę harmonogram)? Może w niektórych miejscach jest zbyt szczegółowy i nie jest w równowadze z resztą zawartości?


title: Czy używanie SVN do programowania i CM to zła praktyka?

text: Mam trochę doświadczenia z SVN jako czysty programista/deweloper. Jednak w mojej firmie używamy SVN jako narzędzia do zarządzania konfiguracją (CM). Pomyślałem, że używanie SVN do rozwoju w tym samym czasie jest w porządku, ponieważ mogliśmy używać gałęzi i trunka dla deweloperów oraz tagów dla wydań. Dla mnie tagi były częścią CM, a gałęzie/pień to część deweloperska. Ostatnio osoba zajmująca się tworzeniem kodu na wysokim poziomie (ale spoza grupy "czystego SW") wspomniała, że dotychczasowa filozofia (mieszanie SVN dla dev i CM) była błędna... jego zdaniem. Jego rozumowanie jest takie, że uważa, że narzędzie CM firmy powinno zawsze łączyć się z dającym się uruchomić SW (aby oddziały łamały tę zasadę). Wspomniał również, że narzędzie CM nie powinno być narzędziem do tworzenia kopii zapasowych dla codziennych lub przyrostowych zatwierdzeń. Wreszcie, nie podoba mu się pomysł przeskakiwania z wersji 143 do 89 w celu uzyskania kopii roboczej... a ponadto, że narzędzia CM nie powinny pozwalać na powrót do stanu zepsutego. Ogólnie rzecz biorąc, chce oddzielić narzędzia CM i narzędzia do tworzenia kopii zapasowych/programowania, które oferuje SVN. Szczerze mówiąc, jestem nowy, a osoba z tą perspektywą ma staż pracy, doświadczenie i sukces, więc chcę odpowiedzieć na ten dylemat z bazą użytkowników stackoverflow, aby sprawdzić, czy jego podejście ma wartość. Moje pytanie: Czy SVN powinien być używany wyłącznie do programowania, a inne narzędzie do CM (lub odwrotnie)? Czemu? Jeśli tak, jakie narzędzia sugerowałbyś do tego combo? A może uważasz, że integracja CM i dev z SVN jest najlepszym podejściem? Czemu? Dziękuję. * * * **Edytuj-** Podczas moich poszukiwań znalazłem następującą stronę, która może podać więcej powodów przeciwko używaniu SVN dla CM. Czy punkty autora są ważne? Czuję, że jest to zgodne z tym, co wywnioskował mój kolega... Link: SVN to nie CM


title: Różne sposoby rozwiązywania problemów w kodzie

text: Teraz programuję w C# na życie, ale wcześniej programowałem w Pythonie przez 5 lat. Odkryłem, że piszę C# zupełnie inaczej niż większość przykładów, które widzę w sieci. Zamiast pisać takie rzeczy jak: foreach (string bar in foo) { //bar ma tu coś zrobione } Piszę kod, który wygląda tak. foo.ForEach( c => c.someActionhere() ) Lub var result = foo.Select( c => { //Tutaj jakiś kod do przekształcenia elementu. }).ToList(); Myślę, że mój kod, jak powyżej, pochodzi z mojej miłości do map i redukcji w pythonie - chociaż nie jest to dokładnie to samo, koncepcje są zbliżone. Teraz czas na moje pytanie. Jakie koncepcje bierzesz i przenosisz z języka na język; które pozwalają rozwiązać problem w sposób, który nie jest zwykle akceptowanym rozwiązaniem w tym języku?


title: Przejście z CMS opartego na Oracle na CMS oparty na MySQL

text: Szukamy zamiennika naszego systemu CMS działającego na Oracle. Nowe systemy CMS, którym przyjrzeliśmy się, mogą teoretycznie działać na Oracle, ale * większość instalacji dostawcy jest uruchamiana z MySQL * dostawca obsługuje instalację swojego CMS na MySQL, a "teoretyczną" instalację na Oracle * sklepy deweloperskie dostawcy używaj MySQL * żaden z nich nie tworzy/testuje przeciwko Oracle Nasz zespół DBA pracuje wyłącznie z Oracle i nie ma przepustowości, aby zapewnić dodatkowe wsparcie dla wysoce dostępnej i wydajnej konfiguracji MySQL. Teoretycznie mogliby iść na trening i nabrać tempa, ale nasza linia czasowa też jest krótka (niespodzianka!). Więc... Myślę, że moje pytania brzmią: Jeśli widziałeś taką sytuację, jak sobie z nią poradziłeś? Co w obu przypadkach przechyliło szalę? Jakiego wysiłku to wymagało? Jeśli masz to zrobić od nowa, co byś zrobił inaczej...? Dziękuję! KM


title: Jak ważna jest pozytywna opinia w recenzjach kodu?

text: Czy ważne jest, aby podczas przeglądu kodu wskazać **dobre** części kodu i powody, dla których jest on dobry? Pozytywne opinie mogą być równie przydatne dla recenzowanego dewelopera, jak i dla innych osób biorących udział w przeglądzie. Robimy recenzje za pomocą narzędzia online, więc programiści mogą otwierać recenzje swojego zatwierdzonego kodu, a inni mogą zrecenzować swój kod w określonym czasie (np. 1 tydzień). Inni mogą komentować kod lub komentarze innych recenzentów. Czy powinna istnieć równowaga między pozytywną i negatywną informacją zwrotną?


title: Gdzie umieścić walidację formatu w „stylowym” modelu domeny CQRS?

text: Właściwe wydaje się umieszczenie walidacji formatu wewnątrz obiektów domeny (VO lub encji), ponieważ jest to naturalne miejsce dla wysokiej spójności, a domena najlepiej wie, co oznacza każdy opis/atrybut/właściwość domeny. Wielu praktyków DDD i autorów książek (Vaugh Vernon, Dan Bergh – a nawet Eric Evans sugerują, ale w innym aspekcie: autoryzacji, do modelowania domeny w celu odzwierciedlenia tych kwestii) sugeruje zaprojektowanie modelu domeny w sposób odzwierciedlający i egzekwujący właściwy stan firmy. Zgadzam się, że walidacja formatu (tj.: właściwość adresu w EmailAddress VO powinna mieć maksymalnie ~250 znaków i powinna pasować do wyrażenia regularnego) powinna być zaimplementowana wewnątrz obiektów domeny. Ale te weryfikacje sprawdzają się najlepiej z modelem domeny, który będzie używany zarówno do zmian stanu, jak i zapytań o stan. Co z CQRS, gdzie strona poleceń (gdzie znajduje się model domeny) ma niewielką lub żadną wiedzę na temat strony odczytu. Czy należy ponownie zaimplementować te same kontrole formatu wejściowego po stronie zapytań aplikacji? W CQRS istnieją pewne wspólne obowiązki zarówno po stronie poleceń, jak i zapytań (takich jak walidacja formatu wejściowego), więc zwykłe implementacje walidacji formatu, które sugeruje większość praktyków DDD, zostaną zduplikowane. Jak sobie z tym poradzić, nie czyniąc modelu domeny (od strony poleceń) anemicznym i nie uświadamiając sobie stanu atrybutów, które będzie posiadać. Przykład: może istnieć funkcja, która pozwoli właścicielowi konferencji zaplanować konferencję i zmienić liczbę dostępnych miejsc. Ale ponieważ sala konferencyjna nie jest wystarczająco duża, maksymalna dozwolona liczba miejsc wynosiłaby 100. Zatem reguła biznesowa byłaby taka: właściciel konferencji nie może dodać więcej niż 100 miejsc na zaplanowaną konferencję (również minimum 1 miejsce potrzebne na konferencję być w prawidłowym stanie). Czyli metoda byłaby na ConferenceAR : changeNumberOfAvailableSeats(numberOfAvailableSeats) { if(!isNumber(numberOfAvailableSeats) || numberOfAvailableSeats > 100 || numberOfAvailableSeats < 1) { throw new DomainException ... } // Zmień liczbę. } Po stronie zapytania może znajdować się strona UI, na której można znaleźć wszystkie zaplanowane konferencje, które mają określoną liczbę dostępnych miejsc. Tak więc ponownie po stronie zapytań serwera musi istnieć walidacja formatu, która sprawdzi, czy zapytanie o zaplanowane konferencje z liczbą dostępnych miejsc jest liczbą i mieści się w zakresie 1-100. To zapytanie może być potrzebne osobie, która chce zarezerwować określoną liczbę miejsc na konferencję. Również konferencje mogą dotyczyć tego samego tematu, aby można było wiele razy zobaczyć konferencję na ten sam temat i wybrać tę tańszą lub z większą ilością wolnych miejsc. Więc znowu, czy należy ponownie zaimplementować walidację formatu zarówno po stronie zapytań, jak i poleceń, czy jest inne rozwiązanie? PS : istnieje wiele duplikatów walidacji formatu (po stronie poleceń i zapytań), takich jak walidacja formatu e-mail lub walidacja formatu waluty (jeśli waluta to: USD || CAD || AUD itp.) **P.P.S. : Kolejne pytanie , które pojawiło się : Czy strona zapytania aplikacji wymaga walidacji formatu wejściowego ? Jeśli dane wejściowe nie mają prawidłowego formatu, nic nie zwróci , zapytanie nie znalazło danych związanych z żądaniem. Widzę, że walidacja formatu po stronie zapytania jest wyłącznie środkiem bezpieczeństwa (tj. w przypadku przepełnienia bufora). Czy walidacja formatu wejściowego jest naprawdę wymagana po stronie zapytania?**


title: Jak sprawić, by funkcja PHP uruchamiała się automatycznie w określonym przez użytkownika czasie?

text: Zajmuję się tworzeniem wewnętrznego systemu dla firmy z PHP z wykorzystaniem frameworka Zend. Potrzebuję wykonania jednej z jego funkcji w czasie określonym przez użytkownika. Moje badania w tej sprawie znalazły mi kilka sposobów na zrobienie tego za pomocą zadań CPanel Cron i skonfigurowanie zaplanowanych zadań na serwerze. Ale w tym scenariuszu nie mam CPanel i już używam zaplanowanych zadań. Ale moim wyzwaniem jest zapewnienie interfejsu dla użytkownika, aby określić czas uruchomienia funkcji.


title: Jak przekonać kolegów z drużyny, że nie powinniśmy ignorować ostrzeżeń kompilatora?

text: Pracuję nad dużym projektem (bardziej jak pomieszana kombinacja kilkudziesięciu mini projektów, których nie można łatwo rozdzielić ze względu na słabe zarządzanie zależnościami, ale to inna dyskusja) w Javie przy użyciu eclipse. Wyłączyliśmy już szereg ostrzeżeń z ustawień kompilatora, a projekt nadal zawiera ponad 10 000 ostrzeżeń. Jestem wielkim zwolennikiem próby rozwiązania wszystkich ostrzeżeń, naprawienia ich wszystkich, jeśli to możliwe, a dla tych, które są sprawdzane i uważane za bezpieczne, tłumienia ich. (To samo dotyczy mojej religijnej obsesji na punkcie oznaczania wszystkich zaimplementowanych/nadpisanych metod jako @Override). Moim największym argumentem jest to, że generalnie ostrzeżenia pomagają znaleźć potencjalne błędy w czasie kompilacji. Może 99 razy na 100, ostrzeżenia są nieistotne, ale myślę, że drapanie po głowie, że oszczędza ten jeden raz, że zapobiega poważnym błędom, to wszystko jest tego warte. (Moim innym powodem jest mój wyraźny OCD z czystością kodu). Jednak wielu moich kolegów z drużyny nie przejmuje się tym. Od czasu do czasu naprawiam ostrzeżenia, gdy się na nie natykam (ale wiesz, że jest to trudne, gdy dotykasz kodu napisanego przez współpracownika). Teraz z dosłownie większą liczbą ostrzeżeń niż klas, zalety ostrzeżeń są bardzo zminimalizowane, ponieważ gdy ostrzeżenia są tak powszechne, nikt nie będzie zawracał sobie głowy przeglądaniem ich wszystkich. Jak mogę przekonać moich kolegów z drużyny (lub mocarstwa, które są), że ostrzeżenia muszą zostać uwzględnione (lub stłumione, gdy zostaną dokładnie zbadane)? A może powinienem się przekonać, że jestem szalony? Dzięki (PS Zapomniałem wspomnieć, co w końcu skłoniło mnie do opublikowania tego pytania, to to, że niestety zauważyłem, że naprawiam ostrzeżenia wolniej niż są one produkowane)


title: Kontrolery w CodeIgniter

text: Jestem trochę nowy we frameworku CodeIgniter i jest to mój pierwszy projekt z tym frameworkiem. Podczas rozmowy na StackOverflow ktoś powiedział, że musimy zrobić kontrolery tak małe, jak to tylko możliwe. Obecnie mam domyślny kontroler o nazwie `home` z 1332 liniami kodów (i zwiększanie) oraz model o nazwie `Profunction` z 1356 liniami kodów (i zwiększanie). Klasa kontrolera ma około 46 funkcji, a także klasę modelu. Myślałem, że Codeigniter dobrze radzi sobie z dużymi kontrolerami lub modelami, czy jest jakiś problem/problem z wydajnością/zabezpieczenia w związku z tym?


title: Jak właściwie działają wyrażenia regularne?

text: Załóżmy, że masz dokument z napisanym esejem. Chcesz przeanalizować ten esej, aby wybrać tylko określone słowa. Chłodny. Czy użycie wyrażenia regularnego jest szybsze niż analizowanie pliku wiersz po wierszu i słowo po słowie w poszukiwaniu dopasowania? Jeśli tak, jak to działa? Jak możesz iść szybciej niż patrzeć na każde słowo?


title: W jaki sposób programista może powiedzieć analitykowi biznesowemu, że nie ma racji?

text: Zaimplementowałem jakąś funkcjonalność, potem analityk biznesowy stworzył usterkę, mówiąc, że jakiś tekst wiadomości jest błędny. Potem ponownie przejrzałem specyfikację i stwierdziłem, że mam rację. Wysłałem fragment specyfikacji i zamknąłem defekt. Potem ponownie otworzyła defekt, mówiąc, że w specyfikacji jest błąd i że nie powinienem go bezmyślnie wdrażać i powinienem przekazać jej tę konkretną rzecz. Jak mam odpowiedzieć?


title: Pytanie do rozmowy kwalifikacyjnej: jaki jest szacowany przez Ciebie czas na naukę języka Java

text: Podczas mojej ostatniej rozmowy kwalifikacyjnej (była to rozmowa telefoniczna) zostałam zapytana: "W jakim okresie możesz uczyć się Javy?". Odpowiedziałem, że wierzę, że za 2-3 miesiące jestem w stanie napisać dobry kod do nietypowych/zwykłych aplikacji. Potem zauważyłem, że pracodawca zrobił sobie dłuższą przerwę i przerzucił się na inne pytania. Teraz pytam, co odpowiedziałeś, gdybyś był na moim miejscu. PS: Nie pracowałem dużo z Javą (2 tygodnie), więc nie sądzę, aby osoba, która mówi coś w stylu „Mogę nauczyć się Java w 2 dni”, jest wobec siebie w porządku.


title: Komunikacja tester-programista

text: Chociaż dużo pisze się o komunikacji programista-deweloper, programista-klient, programista-kierownik zespołu, nie mogłem znaleźć żadnego tekstu, który zawierałby wytyczne dotyczące komunikacji i relacji między testerem a programistą. Niezależnie od tego, czy testerzy i programiści to osobne zespoły, czy w tym samym (w moim przypadku jestem samotnym testerem w zwinnym projekcie deweloperskim), mam przekonanie, że sposób postrzegania testerów jest niezwykle ważny, aby testowanie było dobrze akceptowane , a także służyć swojemu celowi polegającemu na podnoszeniu jakości projektu (na przykład nie powinni być postrzegani jako siły policyjne). Jakieś rady lub badania na temat tego, jak tester powinien komunikować się z programistami? **Aktualizacja** : Dziękuję wszystkim za odpowiedzi. Wszyscy potwierdzili to, co miałem na myśli. Jak na razie mój zespół był bardzo otwarty na moją rolę i ostatecznie poczyniliśmy prawdziwe postępy. Mogłem wybrać więcej niż jedną odpowiedź, ale musiałem podjąć decyzję.


title: Czy staż pracy/poziom wynagrodzenia jest ważnym czynnikiem dla skutecznych członków QA?

text: Jako członek zespołu QA naszej firmy, często otrzymuję od programistów zupełnie nieentuzjastyczne opinie w odpowiedziach na wyniki testów w naszym zwinnym, internetowym sklepie oprogramowania jako usługi. Większość naszych testów jest wykonywana ręcznie, ponieważ testy automatyczne nie mają obecnie dla nas sensu, a programiści zwykle niechętnie słuchają sugestii zmian poza tymi, które zapobiegają błędom javascript/500. Rozumiem, że poprawki/zmiany wymagają pracy, a naszym programistom rzadko brakuje pracy, ale nie sądzę, aby programiści respektowali dane wejściowe QA. Niestety, nasi właściciele produktów są wolni: testy akceptacyjne nie istnieją, a historyjki użytkowników zwykle mają tylko jedno zdanie i nie zapewniają programiście zbyt wiele do zrobienia. Nie ma innego mechanizmu sprzężenia zwrotnego do rozwoju niż od klientów po x-tygodniach, którzy oczywiście nie są również projektantami/deweloperami i których sugestie są wszędzie. Co gorsza jestem kompetentny technicznie i potrafię proste programowanie na naszym stosie LAMP i mam pewność, że programiści szanują moją wiedzę. Jednak w większości zrezygnowałem z informacji zwrotnych wykraczających poza te, które zapobiegają krytycznym błędom, które wpływają na integralność danych lub funkcjonalność. Pojawiło się pytanie, czy staż pracy lub stopień płacy są istotnym czynnikiem decydującym o tym, jak poważnie deweloperzy cenią wkład QA. W naszym przypadku, gdzie nie przeprowadzamy testów automatycznych, a członkowie QA prawdopodobnie nie mają tak dużej wiedzy technicznej, sensowne jest, że robimy mniej niż programiści (między 60-70%, w zależności od czasu w klasie). Nie wierzę w argument, że najważniejsza jest opinia członka zespołu z największą pensją, ale mogę sobie wyobrazić, jak trudno jest przyjąć informację zwrotną od członków zespołu, którzy mają rok lub dwa mniej doświadczenia, nie są tak technicznie kompetentny i zauważalnie mniej. Koniec końców najlepszy pomysł powinien wygrać, ale niestety może się o tym zdecydować po kilku miesiącach produkcji ulepszenia, które użytkownicy uwielbiają lub nienawidzą.


title: Jakie są zalety obiektów towarzyszących Scali w porównaniu z metodami statycznymi?

text: Scala nie ma _statycznego_ -słowa kluczowego, ale ma podobną funkcjonalność dzięki obiektom towarzyszącym. Za kulisami obiekty towarzyszące są kompilowane do klas, które mają metody statyczne, więc wszystko to jest cukierkiem składniowym. Jakie są zalety takiego wyboru projektu? Niedogodności? Czy inne języki mają podobną konstrukcję?


title: Najpierw przejrzyj testy

text: Zamierzam zaadoptować TDD w naszym zespole i jednym z pomysłów, jaki mam, jest najpierw przejrzenie testów. Tak więc najpierw należałoby napisać interfejsy, mocki i testy, przesłać je do przeglądu kodu, a po zatwierdzeniu interfejsów i testów (pomyśl o specyfikacji) można napisać rzeczywistą implementację (teoretycznie może to zrobić inny programista). Zastanawiam się, jak opłacalny jest ten pomysł?


title: CoffeeScript tłumaczy na JavaScript. Czy jest coś takiego dla C?

text: > **Possible Duplicate:** > Czy istnieje język, który transkompiluje do C z lepszą składnią? Istnieje wiele implementacji językowych, które kompilują się do C. Jednak większość z nich ma pewne wymagania dotyczące środowiska wykonawczego. Na przykład Gambit-C i Vala kompilują się do C. Gambit-C zależy od odśmiecacza. Vala zależy od systemu GObject. Czy istnieją języki, które kompilują się do C, które nie mają zależności poza standardowymi bibliotekami C, takimi jak libc?


title: Czytelność || sprawozdania

text: W HTML5 Boilerplate używają tego kodu dla jQuery: <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/libs/jquery-... Co jest bardziej czytelne: if (!window.jQuery) document.write(...); lub window.jQuery || document.write(. ..);


title: Napisz raz, biegnij gdziekolwiek. Czy to jest nadal aktualne?

text: Odkąd Oracle kupiło firmę Sun, a Apple zdecydowało się nie kontynuować rozwijania swojej maszyny JVM, czy model „napisz raz i uruchamiaj wszędzie” jest nadal aktualny, czy też usługi sieciowe/SOA ograniczyły go do przypadku brzegowego?


Jak ważne jest stwierdzenie „napisz raz, debuguj wszędzie” przez niektórych użytkowników Javy? Jeśli to prawda, jaki jest dla nas efekt?


title: Najlepsze praktyki dotyczące stylizacji stron internetowych za pomocą CSS?

text: Mam do zaprojektowania stronę internetową. Mam informacje o tym, jak strona powinna wyglądać i współdziałać. Problem polega na tym, że nie jestem dobry w projektowaniu front-endu i poświęciłem wiele godzin na opanowanie rzeczy. Obecnie używam CSS z przykładowych stron na githubie do stylizacji mojej strony, co wydaje się być nieetycznym sposobem. **Pytanie:** jak stylizujesz strony internetowe? * Czy istnieją naprawdę dobre narzędzia? * Byłbym bardzo wdzięczny, gdyby udzielono szczegółowej odpowiedzi lub zadziałał link do wiki.


title: Wdrożenie wzorca projektowania strategii

text: Oto mój kod: public class StrategyDemo { public static void main(String[] args) { Phone ipPhone = new IPPhone("1234", "ProviderA"); Telefon tdmPhone = new TDMPhone("4567", "DostawcaB"); ipPhone.getRecordingResource(); tdmPhone.getRecordingResource(); ipPhone.setRecordingResource(Zasób.IPRecorderIP2); ipPhone.getRecordingResource(); } } ![tutaj opis obrazka](http://i.stack.imgur.com/SX1HE.gif) Jak zrozumiałem, wzorzec strategii sprawił, że będę mógł dynamicznie zmieniać obiekty. Zawsze mam trudności z wymyśleniem czegoś, co mógłbym zaimplementować, aby na nich ćwiczyć. Ta realizacja jest w rzeczywistości realizacją strategii ? Jak powinienem to poprawić? * * * Jeśli chodzi o komentarze z prośbą o wyjaśnienie moich potrzeb, postaram się wyjaśnić problem, który stworzyłem, aby było bardziej jasne, aby określić, czy właściwie zastosowałem strategię. Telefon powinien mieć możliwość nagrywania. Telefon może być jednym z 2 typów - `IPPhone` lub `TDMPhone`. Zasób nagrywania może być jednym z 2 typów - TDMRecorder lub IPRecorder. IPRecorder powinien, ale nie musi nagrywać IPPhone. TDMRecorder powinien, ale nie musi nagrywać TDMPhone. Rzeczywistym rejestratorem jest w tym przypadku host reprezentowany przez „IP”. Starałem się to zaimplementować w taki sposób, aby w trakcie _runtime_ móc dynamicznie zmieniać zasób, na którym zapisany jest telefon (adres `IP`). Jak zrozumiałem, brakuje mi części, której brakuje mi w klasie Record abstrakcyjnej metody `startRecording` i możliwości zmiany zasobu nagrywania z `IPRecorder` na `TDMRecorder` i vice versa? Czy zdefiniowany przeze mnie problem nadaje się do wzorca projektowania strategii?


title: Co to jest „Identyfikator aplikacji” podczas tworzenia nowej aplikacji GTKmm?

text: Podczas pisania nowej aplikacji przy użyciu GTKmm. pierwsza linia to: Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc,argv,"org.gtkmm.examples.base"); i wiedziałem, że "org.gtkmm.examples.base" to identyfikator aplikacji, moje pytania to: 1 - jaki jest identyfikator aplikacji?. 2 - jak to napisać?.


title: Jak wykorzystać github, branche i automatyczne wydania do zarządzania wersjami?

text: Rozumiem już większość podstawowych pojęć Git/Github, jednak nadal mam problem ze zrozumieniem szerszego obrazu. Oto kilka rzeczy, które udało mi się do tej pory uruchomić: * Zatwierdzenia push * Praca z oddziałami * Zintegruj Github z Travis CI, systemem ciągłej integracji * Poprzez Travis CI, automatycznie buduj na każdym zatwierdzeniu, aby je opanować i umieścić wydanie jako ZIP na Github pod wydaniami. Jednak do tej pory pracowałem tylko nad wersjami alfa/beta projektów, więc jeszcze nigdy nie widziałem wersjonowanych wydań w praktyce. Dlatego chcę dowiedzieć się więcej o wersjonowaniu, utrzymywaniu oddzielnych wersji, poprawianiu wersji, itp. Jak mam się upewnić, że następują następujące rzeczy: * Mieć różne wersje mojego projektu, na przykład wersję 1.1.0 i 2.0.0 * Mieć możliwość wypychania poprawek w wersjach, podbijania wersji do 1.1.1 lub 2.0.1 itd. * Stwórz system ciągłej integracji, który automatycznie zbuduje tę wersję po zatwierdzeniu, a jeśli się powiedzie, opublikuj wydanie dla tej konkretnej wersji. Wątpię między następującymi opcjami: * Czy muszę używać tagów dla każdej wersji? Jeśli tak, w jaki sposób można automatycznie kompilować wersje systemu ciągłej integracji? * Czy powinienem tworzyć gałęzie dla każdej wersji? Jeśli tak, to czy nie stworzyłoby to całej tony gałęzi (takich jak gałęzie 1.1 i 2.0, poprawki trafiają oczywiście do tej gałęzi) * Jak mam określić numer wersji? Czy można mieć plik konfiguracyjny, który określa numer wersji, czy też istnieją mądrzejsze sposoby na jego obejście? W tym przypadku byłby to projekt Java, jeśli ma to znaczenie.


title: Jakie są alternatywy dla używania układów HTML/CSS na stronach internetowych?

text: Czy istnieją już w użyciu, a nawet tylko koncepcyjne próby stworzenia znaczników lub wyrażeń programistycznych do projektowania układów stron internetowych innych niż HTML/CSS? Jeśli są tam inne i nie wydają się być intensywnie używane. Dlaczego to?


title: Potrzebny acelerator? Czy pomyliliśmy się z programowaniem mobilnym?

text: Właśnie zajęliśmy się rozwojem mobilnym w naszej firmie i widzimy pewien potencjał nawet dla firmy takiej jak nasza, która jest głównie inżynierią. Nie mówię o cad na platformie mobilnej, ale głównie sugeruję, że możemy wykorzystać telefon komórkowy do wewnętrznych aplikacji, takich jak system zarządzania treścią / CRM / ogólnie aplikacje wewnętrzne. Nagle otrzymuję e-mail od firmy Appcelerator: http://www.appcelerator.com/. Nasza architektura mobilna jest przeznaczona głównie dla naszego środowiska Android, ponieważ mamy do czynienia z telefonami z Androidem. Jednak dane zwracane przez nasze API w formacie json, który, jak sądzę, apple / window / jakikolwiek gadżet może jasno zrozumieć. Ludzie z appcelerator nadal piszą do mnie e-maile, mówiąc, że rozwój mobilny to bestia, a pisanie „poziomu mobilnego” jest ogromnym obciążeniem. Nie jestem pewien, o czym ten facet mówi, nasze API są już napisane (nie ma znaczenia w jakim języku, ale są napisane), a nasze systemy / urządzenia korzystają z tego API, jakby były czarnymi skrzynkami. Na przykład nasze urządzenia mobilne i nasza rzeczywista aplikacja asp.net wykorzystują te same dane bez pisania kodu (wywołują jedynie metody sieciowe). Metody internetowe po prostu zwracają wyniki w formacie json. Wciąż gadają o tym, jak wspaniały jest ich produkt i jak go potrzebujemy. Ale ich własny film wydaje się pokazywać, że po prostu biorą źródło danych (nie ma znaczenia, czy jest to serwer sql, Oracle, czy sap itp.) i konwertują dane do formatu json. Co już robimy... zobacz ich wideo tutaj: http://www.appcelerator.com/platform/video/?mkt_tok=3RkMMJWWfF9wsRonuK%2FNd%2B%2FhmjTEU5z16uglWK6%2Fi5h41El3fuXBP2XqjvpVJce1cQQNrQyDB o nazwie szybko na dużą skalę”. Obejrzałem ten film (jest raczej krótki), ale zauważ, jak wspominają o pobieraniu danych w różnych formatach, co jest trudne, ponieważ urządzenia nie rozumieją formatu. Następnie wbijają logo appceleratora na wideo i wyświetlają małe widżety json jako animacje – ale już to robimy. Czy ktoś używa appceleratora lub może mi podać powód, dla którego mielibyśmy go potrzebować. Pomijając kwestie analityczne, ponieważ jeszcze nie jesteśmy w tym punkcie. **Ludzie nie pytam jak wydostać się z tego e-maila/spamu. Pytam, czy nasza strategia mobilna (przynajmniej z dźwięków tego) jest w porządku... Mam na myśli, że system wydaje się pobierać zbiór danych i wypluwać je w powszechnym formacie (czyli JSON)... robimy to. .więc się pomyliłem? Znowu proszę nie myśl, że proszę o rekomendację, jak sprawić, by sprzedawca zostawił mnie w spokoju.**


title: TDD dodając proste właściwości

text: Obecnie realizuję swój pierwszy prawdziwy projekt z TDD. Pisałem testy i zaimplementowałem większość logiki aplikacji. Istnieją jednak właściwości, o których wiem, że muszę mieć w interfejsie użytkownika, jednak tak naprawdę nie ma możliwości napisania przydatnego testu, który spowoduje ich utworzenie. Na przykład pole opisu. Jest to identyfikator, o który naprawdę dba logika aplikacji, ale rzeczywisty opis jest przenoszony od momentu jego wypełnienia i wysłania do interfejsu użytkownika. Jak byś podszedł do napisania testu, który jest wart zachodu, ponieważ nowa właściwość jest dosłownie niczym więcej niż. public string foo { get; set; }


title: Dobry projekt do rekreacji pokemona

text: Obecnie pracuję nad projektem grupowym mającym na celu odtworzenie oryginalnej wersji Pokemon Yellow w Javie. Dopiero zaczęliśmy to planować, ale sposób, w jaki narysowaliśmy teraz projekt, polega na tym, że mamy abstrakcyjną klasę Pokemonów i mamy 151 (liczba oryginalnych Pokemonów), które ją rozszerzają, z których każda jest innym Pokemonem. Każda klasa będzie mogła przechowywać dane, takie jak identyfikator, nazwę, typ Pokemona (np. kamień/woda/ogień/itd.) oraz ruchy, których może używać i których może się nauczyć. Wydaje się, że tworzenie 151 klas dla Pokemona to trochę dużo, ale wydaje się również, że jest to dobry sposób na ograniczenie łączenia. Jeśli chodzi o projektowanie, czy jest to dobry sposób na zrobienie tego, jeśli nie, jakie są lepsze metody, aby to zrobić?


title: Jak mogę zastosować koncepcje OOP do tworzenia prostej, ale rzeczywistej aplikacji internetowej?

text: Od dłuższego czasu staram się owinąć głowę wokół OOP. Widzę jego zalety. Przeczytałem wiele, wiele samouczków i obejrzałem tyle samo filmów na ten temat. Dostaję przykłady zwierząt / kotów / psów, dostaję przykłady samochodów / jazdy. To, z czym borykam się, to jak zastosować te koncepcje w rzeczywistych zastosowaniach. Postanowiłem więc zbudować taki przy użyciu OOP. Nie proszę o pomoc przy składni ani pisaniu konkretnego kodu — sam mogę to znaleźć w dokumentacji, przeszukując fora itp. To, czego naprawdę potrzebuję, to trochę wskazówek i pchnięcie we właściwym kierunku od czasu do czasu. Czy są jacyś doświadczeni programiści, którzy chcą mnie mentorować? Jako mój projekt edukacyjny chciałbym zbudować prostą "aplikację internetową" ogłoszeniową. Coś podobnego do Craigslist, ale znacznie rozwodnione pod względem zakresu. Chciałbym korzystać z PHP5 i MySQL, ponieważ je znam. Powiedzmy, że są tylko te 2 przypadki użycia: 1. Wystawianie czegoś na sprzedaż 2. Przeglądanie/szukanie czegoś do kupienia Czym „rzeczy” powinny być przedmioty? Wyobrażam sobie, że każdy przedmiot może być przedmiotem, ale w którym momencie? I dlaczego? Na przykład użytkownik wypełnia formularz „wyślij przedmiot na sprzedaż”, czy ten formularz powinien zostać przekształcony w obiekt, który zostanie przekazany do innego obiektu, który wstawia wartości do bazy danych? Co się stanie, gdy inny użytkownik przegląda i prosi o wyświetlenie wszystkich elementów kategorii C? Czy ma sens, że za każdym razem, gdy aplikacja musi połączyć się ze swoją bazą danych, tworzy obiekt bazy danych, a następnie pobiera kilka obiektów elementów i wyświetla je na stronie? … napisanie tego z pewnością uświadamia mi, jak wciąż nie mam pojęcia o OOP. Pomóż mi to naprawić. Jeśli Twoim zdaniem nie jest to dobry projekt, aby zacząć brnąć w OOP, śmiało zasugeruj inny pomysł!


title: Przechowywanie danych formularza użytkownika

text: Próbuję wymyślić schemat/metodologię danych do przechowywania danych zebranych z różnych formularzy aplikacji użytkownika. Wszystkie formularze zawierają podstawowe informacje, takie jak imię i nazwisko, adres itp., ale różnią się w tym, co gromadzą. Każda aplikacja będzie miała swój własny, unikalny podzbiór pytań, które chcą zadać. Z tego powodu jedna tabela "odpowiedzi" nie wchodzi w rachubę. Czy lepiej byłoby znormalizować bazę danych do tabeli pytań i tabeli odpowiedzi? Inną rozważaną opcją byłoby posiadanie tabeli odpowiedzi na pytania standardowe/uniwersalne, a następnie szeregowanie i przechowywanie pozostałych odpowiedzi w polu. Biorąc to pod uwagę, czy lepiej byłoby przejść na prostą opcję bazy danych nosql? Może nosql to przesada i naprawdę potrzebuję EAV? Zebrane informacje nie będą edytowane. Wystarczy przeczytać.


title: O co chodzi z DCPU-16?

text: Odkąd Notch (znany ze sławy Minecrafta) ogłosił, że jego kolejny projekt będzie zawierał programowalne 16-bitowe procesory w grze, wszyscy wydają się chcieć pisać VM zgodnie ze specyfikacją, którą napisał Notch. Widziałem je napisane w C, C++, Go, JavaScript, CoffeeScript itp. Co jest takiego specjalnego w specyfikacji, którą napisał Notch, czy po prostu jest to pierwsza gra, która faktycznie zawiera procesor w grze, w której możesz robić, co chcesz z? Rozbudziło to moją ciekawość, ale nie rozumiem, co czyni ją tak wyjątkową, nagle wszyscy muszą napisać do niej kod?


title: Czy istnieją narzędzia do automatycznej walidacji standardów baz danych?

text: Szukam czegoś w stylu FxCop, ale baz danych. Zasadniczo chcę mieć narzędzie, w którym konfiguruję moje standardy baz danych (konwencje nazewnictwa, typy pól lub bardziej złożone reguły niestandardowe). Następnie chcę włączyć to narzędzie do procesu ciągłej integracji, aby wszelkie naruszenia były natychmiast oznaczane. Obsługujemy zarówno Oracle, jak i SQL Server, więc narzędzia obsługujące którykolwiek z nich są dobre, ale jedno narzędzie, które obsługuje oba, byłoby lepsze. Czy takie narzędzia istnieją, a może istnieje jakaś lepsza metoda lub rodzaj narzędzia, które mogę wykorzystać, aby osiągnąć ten cel?


title: Testowanie pod kątem luk/błędów pętli uwierzytelniania

text: Mamy aplikację internetową, która jest ukończona w 99% przed publiczną wersją beta, obecnie zabezpieczaliśmy witrynę z punktu widzenia bezpieczeństwa, blokując serwer, bazę danych itp., Martwię się, ale nie jestem pewien, jak najlepiej to zrobić test dotyczy luk w uwierzytelniania. Na przykład istnieją 3 typy użytkowników - administrator systemu, personel, klient. Na stronie znajdują się adresy URL, do których chciałbym, aby administrator systemu miał dostęp, i są inne strony, do których chciałbym, aby wszyscy mieli dostęp, ale nie wyświetlali wszystkich danych. Administrator systemu mógłby zobaczyć wszystko, ale Personel i Klient mogliby zobaczyć niektóre treści, podobnie niektóre strony byłyby czytane tylko dla niektórych użytkowników. Czy istnieje przepływ pracy do testowania tego, w tej chwili wymyśliłem skrypt, który ma poświadczenia każdego typu użytkownika i przechodzi do każdego adresu URL w witrynie, próbując uzyskać dostęp do stron i raportów, jeśli jest w stanie zobaczyć stronę, którą jest nie jest przeznaczony, podobnie sprawdza dane do odczytu / zapisu na stronie. * Czy jest coś jeszcze, co powinienem sprawdzić, aby moje testy uwierzytelniania były bardziej niezawodne?


title: Pytanie dotyczące języka kontrolnego przedsiębiorstwa (HPCC)

text: czy ktoś ma jakiś pomysł na temat ECL, który jest językiem kontrolnym Enterprise używanym w HPCC (high performance cluster computing) używanym do przetwarzania rozproszonego? Mam jakiś problem i nie otrzymam żadnej odpowiedzi po wielu próbach, jakakolwiek pomoc zostanie doceniona. Dziękuję


title: W przeszłości MIPS był używany jako architektura wieloprocesorowa. Czy ktoś używa go w wielordzeniowym SoC?

text: Czytałem o architekturze MIPS i dowiedziałem się, że w przeszłości była ona używana jako architektura wieloprocesorowa. Czy ktoś obecnie używa go w wielordzeniowym SoC?


title: Kroki do stworzenia rozwiązania problemu

text: Jestem praktykantem. Według mojego nauczyciela, aby rozwiązać problem, powinniśmy przejść przez następujące kroki: 1. Utwórz algorytm (opcjonalnie) 2. Utwórz tabelę danych: Analizując problem, utwórz główne pojęcia w tym problemie jako kolumny i powiązane zagadnienia w głównym pojęciu jako wydziwianie. 3. Utwórz schemat blokowy na podstawie tabeli danych. (tworząc schemat, pomyśl, że jesteś w takiej sytuacji i zaprojektuj go w swoim mózgu) 4. Widząc schemat, można łatwo i skutecznie rozwiązać problem. Te kroki powinny być zawsze brane pod uwagę przez programistę, jeśli chce zostać projektantem oprogramowania (a nie tylko programistą), ponieważ takie podejście daje skuteczny sposób na znalezienie rozwiązania problemu, nawet jeśli problem jest niewielki. Według niego ten sposób podejścia sprawdza się również w scenariuszach czasu rzeczywistego. Moje pytanie brzmi: czy to naprawdę skuteczny sposób? proszę podziel się również swoimi przemyśleniami. Poprzez to pytanie chciałem również podzielić się przemyśleniami mojego nauczyciela z tobą, który jest dobrym mentorem.