title: Które podejście doprowadziłoby do łatwiejszego w użyciu interfejsu API?

text: Piszę API JavaScript i dla konkretnego przypadku zastanawiam się, które podejście jest najseksowniejsze. Weźmy przykład: pisząc `VideoPlayer`, dodaję metodę `getCurrentTime`, która podaje czas, jaki upłynął od startu. 1. Pierwsze podejście po prostu deklaruje `getCurrentTime` w następujący sposób: getCurrentTime():number gdzie `number` jest typem **native number**. To podejście obejmuje zdarzenie `CURRENT_TIME_CHANGED`, dzięki czemu użytkownicy interfejsu API mogą dodawać wywołania zwrotne, aby być świadomym zmian czasu. Odsłuchanie tego zdarzenia wyglądałoby następująco: myVideoPlayer.addEventListener(CURRENT_TIME_CHANGED, function(evt){ console.log ("aktualny czas = "+evt.getDispatcher().getCurrentTime()); }); 2. Drugie podejście inaczej deklaruje `getCurrentTime`: getCurrentTime():CustomNumber gdzie `CustomNumber` jest obiektem o **niestandardowej liczbie**, a nie natywnym. Ten obiekt niestandardowy wywołuje zdarzenie `VALUE_CHANGED`, gdy zmienia się jego wartość, więc nie ma potrzeby występowania zdarzenia `CURRENT_TIME_CHANGED`! Po prostu posłuchaj zwróconego obiektu pod kątem zmian wartości! Odsłuchanie tego zdarzenia wyglądałoby następująco: myVideoPlayer.getCurrentTime().addEventListener(VALUE_CHANGED, function(evt){ console.log ("aktualny czas = "+evt.getDispatcher().valueOf()); }); Zauważ, że `CustomNumber` ma metodę `valueOf`, która zwraca natywną liczbę, która pozwala na użycie zwróconego obiektu `CustomNumber` jako liczby, więc: var result = myVideoPlayer.getCurrentTime()+5; będzie działać! Tak więc w pierwszym podejściu słuchamy obiektu pod kątem zmiany wartości jego właściwości. W drugim bezpośrednio słuchamy właściwości pod kątem zmiany jej wartości. Istnieje wiele zalet i wad dla każdego podejścia, chcę tylko wiedzieć, którego z nich programiści woleliby użyć!


title: skuteczny sposób na liczenie ilości swapów w sortowaniu wstawiania

text: Przeglądam online wyzwanie kodowania online i gdzieś mnie uderzyło. Celem programu jest znalezienie maksymalnej liczby zamian wymaganych do sortowania tablicy poprzez sortowanie przez wstawianie w efektywnym czasie pierwsze podejście, które jest podejściem brute force daje złożoność O (n ^ 2) Następnym o czym myślę jest algorytm sortowania przez scalanie kod używam do tego jest #include <cmath> #include <cstdio> #include <wektor> #include <iostream> #include <algorytm> przy użyciu przestrzeni nazw std; int mergesort(int *,int); int _mergesort(int *,int *,int,int); int merge(int *,int *,int,int,int); int mergesort(int arr[],int n) { int temp[n]; return _mergesort(arr,temp,0,n-1); } int _mergesort(int arr[],int temp[],int po lewej,int po prawej) { int mid,count=0; if(prawo>lewo) { mid=(lewo+prawo)/2; count=_mergesort(arr,temp,left,mid); count+=_mergesort(arr,temp,mid+1,right); count+=merge(arr,temp,left,mid+1,right); } liczba zwrotów; } int merge(int arr[],int temp[],int lewy,int mid,int prawy) { int i, j, k; liczba int = 0; i = lewo; j = środek; k = lewy; while ((i <= środek - 1) && (j <= prawy)) { if (przyp[i] <= przyp[j]) { temp[k++] = przyp[i++]; } else { temp[k++] = arr[j++]; liczba = liczba + (środek - i); } } while (i <= mid - 1) temp[k++] = arr[i++]; while (j <= prawo) temp[k++] = arr[j++]; for (i=lewo; i <=prawo; i++) arr[i] = temp[i]; liczba zwrotów; } int main() { int n,tc,i; cin>>tc; while(tc) { cin>>n; przyw[n]; for(i=0;i<n;i++) cin>>arr[i]; cout<<sortuj sortowanie(arr,n); tc--; } zwróć 0; } Przykładowym przypadkiem testowym jest Przykładowe wejście: 2 5 1 1 1 2 2 5 2 1 3 1 2 Przykładowe wyjście: 0 4 daje mi to złożoność nlogn Początkowo program odczytuje numer przypadku testowego, który wynosi 2, a następnie następuje dwa testy przypadku algorytm działa poprawnie dla małego zakresu wartości, ale w niektórych przypadkach testowych pokazuje błąd przekroczenia limitu czasu. Jaki jest najskuteczniejszy sposób na zrobienie tego, nie mogę znaleźć żadnych sugestii lub zmian, które byłyby mile widziane.


title: Czy ten kod/logikę należy uwzględnić w klasie Business Objects, czy w osobnej klasie?

text: Stworzyłem małą aplikację, która ma architekturę trójwarstwową i posiadam klasy obiektów biznesowych do reprezentowania jednostek takich jak `User`, `Orders`, `UserType` itp. W tych klasach mam metody, które są wykonywane, gdy metoda Constuctor na przykład Użytkownik to tzw. Te metody wykonują obliczenia i generują szczegóły, które konfigurują dane dla atrybutów, które są częścią każdego obiektu użytkownika. Oto struktura projektu w Visual Studio: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/TijRU.png) Oto kod z klasy obiektu biznesowego User.cs: Public Class Użytkownik { ciąg publiczny Nazwa { get; ustawić; } public int Liczba losowa { get; ustawić; } etc public Użytkownik { Nazwa = GetName(); LiczbaLosowa = PobierzLiczbęLosową(); } public string GetName() { .... return name; } public int GetRandomNumber() { ... return randomNumber; } } Czy ta logika powinna być zawarta w klasach Business Object, czy też powinna być zawarta w jakiejś klasie Utilities? A może w zasadach biznesowych?


title: Jeśli ktoś zmieni swoją licencję, czy dotyczy to wcześniej rozwidlonych projektów na wcześniejszej licencji?

text: * Powiedzmy, że ktoś umieszcza swój kod na GitHub na licencji MIT. * Następnie rozwidłem go i wykorzystałem w swoim projekcie. * Następnie zmieniają licencję tak, aby zawierała ścisłą licencję, która nie daje uprawnień do modyfikowania, sprzedawania itp. Czy nowa licencja będzie miała zastosowanie do mojego kodu, skoro kod, który mam pochodził przed zmianą licencji?


title: Czy zestaw Clojure i składnię map można dodać do innych dialektów Lisp?

text: Oprócz tworzenia listy za pomocą nawiasów, Clojure umożliwia tworzenie wektorów za pomocą [ ], map za pomocą { } i zbiorów za pomocą #{ }. Lisp jest zawsze uważany za bardzo rozszerzalny język w którym można łatwo tworzyć DSL itp. Ale czy Lisp jest tak rozszerzalnyże można wziąćdowolny dialekt Lispu i stosunkowo łatwo dodaćobsługęwektorów, map i zbiorów Clojure (które są wszystkimi funkcjami w Clojure )? Niekoniecznie pytam o _cons_ lub podobne, które faktycznie działają na tych funkcjach: chciałbym wiedzieć, czy inne można zmodyfikować tak, aby kod źródłowy wyglądał jak kod źródłowy Clojure (czyli: użycie dopasowania [ ], { } i #{ } oprócz ( )). Zauważ, że jeśli nie można tego zrobić, to nie jest to krytyka Lispa: technicznie chciałbym wiedzieć, co należy zrobić, a czego nie można zrobić, jeśli ktoś miałby coś takiego dodać.


title: Oszacowanie Story Point a oszacowanie dni idealnych

text: W moim projekcie przeznaczamy 4 godziny na 1 story point i estymujemy na podstawie story pointu. Zatem w tym przypadku jeden idealny dzień pracy zostanie wykonany w ciągu 2 dni, które upłynęły. Czy ze zwinnego punktu widzenia wykonujemy szacowanie historii, szacowanie dni idealnych, czy żadna z nich?


title: Lucene + Połączenia == RDBMS?

text: Teraz, gdy Lucene obsługuje złączenia (w czasie indeksowania i podczas wykonywania zapytań), czy można używać Lucene jako bazy danych (z NoSQL, z ostateczną spójnością)? Uwaga: zastanawiałem się nad tym przez jakiś czas i jest to pomysł, który pojawia się od czasu do czasu i są dowody na to, że faktycznie można to zrobić - do pewnego stopnia (RavenDB). Poza tym uważam, że integralność referencyjna jest przeceniana - nigdy nie używam kluczy obcych w RDBMS, gdy pracuję nad dużym, szybko zmieniającym się projektem z małym zespołem; z doświadczenia to czysty ból głowy i zabija produktywność. Jedyną rzeczą, która wydaje mi się przeszkodą w budowaniu tego sposobu myślenia, jest brak transakcji – i tak; możesz mieć transakcje dwuetapowe (np. MongoDB i Lucene używa tego do niektórych wewnętrznych), ale to dużo pracy; i nie wiem, jak byłoby to możliwe z Lucene.


title: Dlaczego programowanie wizualne nigdy nie wystartowało i jakie przyszłe paradygmaty mogą to zmienić?

text: Ponieważ liczba „wizualnych” systemów operacyjnych, takich jak Android, iOS i obiecany Windows 8 staje się coraz bardziej popularna, nie wydaje mi się, że my, programiści, mamy nowe sposoby kodowania przy użyciu tych nowych technologii, ze względu na możliwy brak nowych wizualnych paradygmaty języków programowania. Widziałem kilka dyskusji na temat niezgodności między obecnym środowiskiem programistycznym kodowania a nowymi podejściami do systemu operacyjnego z Windows 8, Androida i innych systemów operacyjnych tabletów. Mam na myśli to, że dzisiaj jak mamy nowy tablet to prawie wymóg kodowania, żeby mieć np. zewnętrzną klawiaturę (bo wydaje mi się, że programowanie za pomocą ekranu dotykowego jest bardzo trudne), właśnie dlatego, że wspomaganie kodowania jest nie został stworzony do „pisania” tysięcy wierszy kodu. Jak więc zaawansowane powinny być paradygmaty „nowych” wizualnych języków programowania? Jakich cech wymagałyby te nowe paradygmaty?


title: Kiedy preferować formularze WebForm ASP.NET zamiast MVC?

text: Wiem, że Microsoft powiedział > ASP.NET MVC nie jest zamiennikiem WebForms. Niektórzy programiści twierdzą, że tworzenie formularzy WebForms jest szybsze niż MVC. Ale wierzę, że szybkość kodowania sprowadza się do poziomu komfortu dzięki technologii, więc nie chcę żadnych odpowiedzi w tym duchu. Biorąc pod uwagę, że ASP.NET MVC daje programiście większą kontrolę nad ich aplikacją, dlaczego formularze WebForm nie są uważane za przestarzałe? Ewentualnie, kiedy powinienem preferować WebForms nad MVC przy nowych programach?


title: Czy jest to bezpieczne rozwiązanie do uwierzytelniania RESTful?

text: Muszę szybko zaimplementować system uwierzytelniania RESTful dla mojej aplikacji JavaScript. Myślę, że rozumiem, jak to powinno działać, ale chcę tylko dwukrotnie sprawdzić. Oto, o czym myślę - co myślicie? **Schemat bazy danych** users * id : integer * first_name : varchar(50) * last_name : varchar(50) * password : varchar(32) (zahaszowany MD5) * etc. user_authentications * id : integer * user_id : integer * auth_token : varchar(32) (zaszyfrowany AES, z kluczami poza bazą danych) * access_token : varchar(32) (zaszyfrowany AES, z kluczami poza bazą danych) * active : boolean **Kroki** Poniższe dzieje się przez SSL. Używam Sinatry do API. 1. JavaScript żąda uwierzytelnienia przez POST do /users/auth/token. 2. Metoda API /users/auth/token generuje hash auth_token, tworzy rekord w user_authentications i zwraca auth_token. 3. JavaScript haszuje hasło użytkownika, a następnie zmienia je za pomocą auth_token -- SHA(access_token + MD5(password)) 4. POST nazwę użytkownika i hashed+salted password do /users/auth/authenticate. 5. Metoda API /users/auth/authenticate zweryfikuje, czy SHA(AES.decrypt(access_token) + user.password) == co zostało odebrane przez POST. 6. /users/auth/authenticate wygeneruje, zaszyfruje AES, przechowa i zwróci token dostępu, jeśli weryfikacja się powiedzie; w przeciwnym razie zwróci 401 Unauthorized. 7. W przypadku wszelkich przyszłych żądań skierowanych przeciwko API, JavaScript będzie zawierał access_token, a API znajdzie na tej podstawie konto użytkownika.


title: Teoria dziwnej myśli - składanie formularzy

text: Teoretycznie, gdybyś otworzył dwa komputery, które były idealnie zsynchronizowane ze sobą na stronie internetowej, która ma formularz. Ten formularz ma pola, w których powiedzmy, że nazwa użytkownika musi być unikalna. Zakładając, że oba komputery mają te same informacje na formularzu i teoretycznie załóżmy, że przycisk przesyłania został wciśnięty w tym samym czasie, oraz że te dwa komputery mają dokładnie taką samą budowę i szybkość internetu oraz ten sam czas odpowiedzi serwera, którego informacje byłyby przesyłane do bazy danych i których informacje zostałyby odrzucone, wiedząc, że pole nazwy użytkownika jest unikatowe.


title: „Interfejs” a „warstwa”

text: W informatyce, jakie są różnice w znaczeniu między _interfejsem_ a _warstwą_? Na przykład interfejs między A i B musi należeć do A lub B lub do obu, podczas gdy warstwa między A i B musi być trzecią rzeczą, która nie jest ani częścią A ani B?


title: Czy istnieje coś takiego jak chorewars do programowania?

text: Chorewars daje nagrody w stylu RPG za prace domowe. Czy ktoś robi to dla programowania? Wiem o coderwall i workforpie.


title: Przestrzeń wokół operatorów? a=b/2; lub a = b/2; Jakie są argumenty?

text: Osobiście wolę przestrzeń wokół operatorów. Dla mnie to sprawia, że kod jest znacznie bardziej czytelny. Jakie argumenty nie mają wokół siebie miejsca? Długość linii? Przykład z przewodnika po stylu Pythona (zgadzam się z tym): Tak: i = i + 1 przesłane += 1 x = x * 2 - 1 hypot2 = x * x + y * y c = (a + b) * (a - b) Nie: i=i+1 przesłano +=1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b)


title: Dlaczego uczelnie miałyby kształcić liderów IT, którym brakuje zainteresowania IT?

text: Nie jestem pewien, czy istnieje na to oczywista odpowiedź, ale to pytanie trochę mnie zbiło z tropu, odkąd pierwszy raz zacząłem się nad tym zastanawiać. Dział IT mojej uczelni kształci menedżerów i liderów IT pod hasłem: „Liderzy IT będą mogli lepiej wykonywać swoją pracę, jeśli będą rozumieć, jak działa ta technologia”. Ten kurs obejmuje wiele zajęć technicznych obok typowych zajęć związanych z biznesem. Jednak zacząłem zauważać, że studenci, którzy aplikują na ten kurs, albo mają bardzo słabe zrozumienie IT, albo nie lubią zajęć technologicznych, takich jak inżynieria oprogramowania i programowanie, przez co uzyskują bardzo słabe wyniki egzaminów. Nasuwa się pytanie: dlaczego ktoś, kto nie jest zainteresowany głębszym zrozumieniem technologii, chciałby pracować jako lider IT? Lub, co ważniejsze, wielkości; Dlaczego ktoś pracujący jako programista miałby chcieć mieć szefa, który w ogóle nie rozumie tego, czym właściwie kieruje? Po prostu czuje się bardzo źle, gdy prowadzi cię ktoś, kto nie ma doświadczenia w zrozumieniu, dlaczego pewne rzeczy są lepiej zrobione w określony sposób. Liderzy IT, którzy nigdy nie programowali lub nie dbali o to, nie zrozumieją, dlaczego takie pojęcia jak dług techniczny naprawdę boli i dlaczego ważne jest, aby ich unikać. Cytując wujka Boba: „Architekt systemowy powinien być także programistą, w ten sposób może doświadczyć bałaganu, jaki robi dla wszystkich innych”.


## Tło Czytałem ludzi, którzy obalają fakt, że pewne oprogramowanie jest wolne, jak w przypadku wolności słowa, nawet jeśli jest licencjonowane na licencji GPL. Niektórzy twierdzą, że Java nie jest darmowa, ponieważ aby uzyskać profesjonalną certyfikację, musisz ją uzyskać od Oracle. Niektórzy twierdzą, że Java JDK nie jest bezpłatna do redystrybucji. Niektórzy mówią nawet, że openJDK nie jest ani darmowy, ani otwarty. Ale Java jest oficjalnie GPL. ## Pytania 1. Czy GPL nie oznacza wyraźnie, że możesz swobodnie rozpowszechniać? 2. Czy GPL nie wystarczy, aby uczynić oprogramowanie wolnym, tak jak w przypadku wolności słowa? 3. W jaki sposób Java może być zarówno GPL, jak i nie-wolna, tak jak w przypadku wolności słowa? 4. Czy istnieje jakakolwiek licencja, która naprawdę czyni oprogramowanie wolnym od wszelkich możliwych subiektywnych punktów widzenia? **EDYCJA: To pytanie nie dotyczy nazw ani znaków towarowych, ale dotyczy kodu.**


title: Jak skonstruować diagram aktywności UML odzwierciedlający rzeczywisty zaprogramowany kod źródłowy jako dokumenty?

text: Proszę, powiedz mi, czego muszę użyć do modelowania diagramu aktywności (Enterprise Architect) obiektu 1.method1() wywołuje object2.method2() Umiem przeciągnąć metodę klasy z widoku drzewa modelu do mojego diagramu, i pojawia się tam jako nowe działanie. Ale nie ma żadnej wskazówki co do przedmiotu przynależności. Również nie rozumiem, jakiego typu strzałki muszę użyć do modelowania, które jedno wywołuje drugie. Mam wrażenie, że nie jest to zbyt odpowiednie do konstruowania dokumentacji typowych scenariuszy wywołań mojej aplikacji. Wiesz, że chcę tworzyć dokumenty UML dla tego, co programowaliśmy do tej pory.


title: Szukasz dynamicznego rozwiązania programistycznego

text: Dany ciąg liczb całkowitych z zakresu od 1 do n. Każdy numer może pojawić się co najwyżej raz. Niech w sekwencji będzie symbol X, co oznacza usunięcie minimalnego elementu z listy. W sekwencji może być dowolna liczba X. Przykład: 1,3,4,X,5,2,X Wyjście wynosi 1,2. Musimy znaleźć najlepszy sposób na wykonanie tej operacji. Rozwiązanie, o którym myślałem, to: Przeskanuj sekwencję od lewej do prawej i policz liczbę X, która zajmuje O(n) czasu. Wykonaj częściowe sortowanie i znajdź k najmniejszych elementów (k = liczba X), które zajmują czas O(n+klogk) przy użyciu mediany median. Czy istnieje lepszy sposób rozwiązania tego problemu przy użyciu programowania dynamicznego lub w inny sposób?


title: Jak możesz stwierdzić, czy użyć wzorca złożonego, struktury drzewa, czy trzeciej implementacji?

text: Mam dwa typy klientów, typ "**Observer**" i typ "**Temat**". Obaj są powiązani z **hierarchią grup**. Obserwator otrzyma **dane (kalendarzowe)** od grup, z którymi jest powiązany w różnych hierarchiach. Te dane są obliczane przez **łączenie danych z grup „rodziców”** grupy próbującej zebrać dane (każda grupa może mieć **tylko jednego rodzica** ). Podmiot będzie mógł tworzyć dane (które otrzymają Obserwatorzy) w grupach, z którymi jest powiązany. Gdy dane są tworzone w grupie, wszystkie „dzieci” grupy również będą miały te dane i będą mogły stworzyć swoją **własną wersję określonego obszaru danych**, ale nadal z połączeniem z oryginałem utworzone dane (w mojej konkretnej implementacji oryginalne dane będą zawierać okresy czasu i nagłówek, podczas gdy podgrupy określają pozostałe dane dla odbiorców bezpośrednio powiązanych z ich odpowiednimi grupami). Jednakże, gdy Podmiot tworzy dane, musi sprawdzić, czy wszyscy Obserwatorzy, których to dotyczy, mają jakiekolwiek **dane, które są w konflikcie** z tym, co oznacza ogromną funkcję rekurencyjną, o ile rozumiem. Myślę więc, że **można to podsumować** do faktu, że muszę mieć **hierarchię, w której można poruszać się w górę iw dół**, a niektóre miejsca mogą _traktować je jako całość_ ( w zasadzie rekurencja). Poza tym nie dążę tylko do rozwiązania, które działa. Mam nadzieję, że uda mi się znaleźć rozwiązanie, które będzie stosunkowo łatwe do zrozumienia (przynajmniej pod względem architektonicznym), a także na tyle elastyczne, aby w przyszłości móc łatwo otrzymać dodatkową funkcjonalność. Czy istnieje wzorzec projektowy lub dobra praktyka, według której można rozwiązać ten problem lub podobne problemy hierarchii? **EDYTUJ** : Oto projekt, który mam: ![Diagram klas z dołączonymi metodami. Klasa „Grupa” to hierarchia](http://i.stack.imgur.com/JXMBt.png) Klasa „Phoenix” została nazwana w ten sposób, ponieważ nie wymyśliłem jeszcze odpowiedniej nazwy. Ale poza tym muszę być w stanie **ukryć określone czynności dla określonych obserwatorów** , nawet jeśli są do nich przywiązani przez grupy. * * * **Trochę Nie na temat** : Osobiście uważam, że powinienem być w stanie podzielić ten problem na mniejsze, ale umyka mi jak. Myślę, że dzieje się tak dlatego, że obejmuje wiele funkcji rekurencyjnych, które nie są ze sobą powiązane, i różne typy klientów, które muszą uzyskiwać informacje na różne sposoby. Naprawdę nie potrafię tego objąć głową. Jeśli ktokolwiek może poprowadzić mnie w kierunku, w jaki sposób stać się lepszym w ujmowaniu problemów hierarchii, bardzo bym się z tego cieszył.


title: Czy jest to właściwe użycie #define, aby ułatwić wpisywanie powtarzającego się kodu?

text: Czy istnieje pogląd na to, czy używanie #define do definiowania pełnych linii kodu w celu uproszczenia kodowania jest dobrą czy złą praktyką programistyczną? Na przykład, gdybym musiał wydrukować kilka słów razem, denerwowałbym się, wpisując << " " << Aby wstawić spację między słowami w instrukcji cout. Mógłbym po prostu zrobić #define pSpace << " " << i wpisać cout << word1 pSpace word2 << endl; Dla mnie to nie dodaje ani nie odejmuje przejrzystości kodu i sprawia, że pisanie jest nieco łatwiejsze. Przychodzą mi do głowy inne przypadki, w których pisanie będzie znacznie łatwiejsze, zwykle w przypadku debugowania. Jakieś przemyślenia na ten temat? EDYCJA: Dzięki za wszystkie świetne odpowiedzi! To pytanie właśnie przyszło mi do głowy po wielu powtarzających się typowaniach, ale nigdy nie sądziłem, że będą inne, mniej mylące makra do użycia. Dla tych, którzy nie chcą czytać wszystkich odpowiedzi, najlepszą alternatywą jest użycie makr swojego IDE, aby zmniejszyć liczbę powtarzających się pisania.


title: Schemat DB dla ACL obejmujący 3 subdomeny

text: Próbuję zaprojektować schemat bazy danych dla aplikacji sieci web, która ma 3 subdomeny: a) pracownicy wewnętrzni b) klienci c) kontrahenci. Użytkownicy będą mogli do pewnego stopnia komunikować się ze sobą, a niektóre zasoby mogą się między nimi nakładać. Moje podstawowe pytanie brzmi, czy powinienem podzielić role na osobne tabele dla każdej domeny, na przykład internal_roles, client_roles i expert_roles, czy też powinienem trzymać je w jednej tabeli ról, z polem user_type, aby rozróżnić role. Zastanawiam się również, czy posiadanie tego pola typu spowoduje, że naruszy on trzecią formę normalną? Naprawdę doceniam Twój czas i przemyślenia na ten temat. Twoje zdrowie! * * * \-- ## \-- Struktura tabeli dla tabeli `locations` CREATE TABLE IF NOT EXISTS `locations` ( `id` bigint(20) NOT NULL, `name` varchar(250) NOT NULL ) ENGINE=InnoDB DOMYŚLNY ZESTAW ZNAKÓW=łac.1; * * * \-- ## \-- Struktura tabeli dla tabeli `uprawnienia` CREATE TABLE IF NOT EXISTS `uprawnienia` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `resource_id ` int(11) NIE NULL, KLUCZ PODSTAWOWY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; * * * \-- ## \-- Struktura tabeli dla tabeli `resources` CREATE TABLE IF NOT EXISTS `resources` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `user_type ` enum('internal','client','expert') NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; * * * \-- ## \-- Struktura tabeli dla tabeli `role` CREATE TABLE IF NOT EXISTS `roles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `type ` enum('pozycja','department') NOT NULL, `parent_id` int(11) DEFAULT NULL, `user_type` enum('internal','client','expert') NOT NULL, PRIMARY KEY (`id` ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; * * * \-- ## \-- Struktura tabeli dla tabeli `role_perms` CREATE TABLE IF NOT EXISTS `role_perms` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_id` int(11) NOT NULL, `privilege_id ` int(11) NIE NULL, `tryb` varchar(250) NIE NULL, KLUCZ PODSTAWOWY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; * * * \-- ## \-- Struktura tabeli dla tabeli `users` CREATE TABLE IF NOT EXISTS `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, ` hasło` varchar(255) NOT NULL, `salt` varchar(255) NOT NULL, `type` enum('internal','client','expert') NOT NULL, `first_name` varchar(255) NOT NULL, ` last_name` varchar(255) NOT NULL, `location_id` int(11) NOT NULL, `phone` varchar(255) NOT NULL, `status` enum('active','inactive') NOT NULL DEFAULT 'active', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; * * * \-- ## \-- Struktura tabeli dla tabeli `user_perms` CREATE TABLE IF NOT EXISTS `user_perms` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `privilege_id ` int(11) NIE NULL, `tryb` varchar(250) NIE NULL, KLUCZ PODSTAWOWY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; * * * \-- ## \-- Struktura tabeli dla tabeli `user_roles` CREATE TABLE IF NOT EXISTS `user_roles` ( `id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `role_id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


title: Jak zaprojektować porównanie wydajności między dwiema strukturami danych

text: Chcę porównać wydajność dwóch drzew wyszukiwania liczb całkowitych (drzewa AVL i drzewa RedBlack). Jak zaprojektować/wykonać testy, aby to osiągnąć? Rozważmy na przykład operację _insert_; jakie kroki powinienem wykonać, aby stwierdzić, że średnio ta operacja jest szybsza w przypadku RB? Jakie względy należy wziąć pod uwagę, aby poprawnie zmierzyć czas procesora? Czy obie implementacje powinny być zoptymalizowane, czy też mogę porównać zoptymalizowaną implementację AVL z prostą implementacją RB? Wszelkie linki lub dokumenty byłyby bardzo pomocne.


title: Czy jedyne rodzaje „źródeł” danych są statyczne i dynamiczne?

text: Myśląc, że mogą istnieć inne, ale nie jestem pewien — ale zanim się tym zajmę, wyjaśnię, co rozumiem przez statyczne i dynamiczne źródła danych. * **Statyczny** (lub magazyn danych) — oznacza, że stan danych się nie zmienia, a jeśli zostałby zmieniony, byłby to nowy stan, a stare dane zostałyby uznane za bezstanowe; co oznacza, że już nie wiadomo, że istnieje lub nie istnieje. Innym sposobem ewentualnego spojrzenia na statyczne źródło danych może być to, że w przypadku odczytu i zapisu zwrotnego bez modyfikacji suma kontrolna przed i po powinna być dokładnie taka sama, niezależnie od czasu między odczytem a ponownym zapisem danych. **Przykłady:** zdjęcia, pliki, rekord bazy danych, * **dynamiczny** (lub strumień danych) – oznacza, że wiadomo, że stan danych jest zmienny i nigdy nie oczekuje się, że będzie taki sam dla każdego wejścia. **Przykład:** kanał wideo/audio na żywo, kanał giełdowy. Po pierwsze, powiem, że powyższe jest bardzo luźnym odwzorowaniem pojęć i chętnie przyjmę wszelkie uwagi. Następnie przejdźmy do sedna pytania, że są to jedyne dwa rodzaje źródeł danych. Domyślam się, że tak, są -- ale istnieją **hybrydowe** wersje tych dwóch. Oznacza to, że przesyłanie strumieniowe danych ma ustalony stan. Na przykład dane przesyłane strumieniowo mają podaną sumę kontrolną i wiadomo, że każda unikalna suma kontrolna jest pojedynczym wystąpieniem danych statycznych. Z drugiej strony dane statyczne można łączyć w łańcuch za pomocą, powiedzmy, systemu kontroli wersji; podczas odtwarzania każda wersja może być oglądana jako segment strumienia; chodzi o to, że sam fakt, że można go odtworzyć, powoduje, że źródło danych jest statyczne. Innym typem może być to, że źródło danych jest odkrywane organicznie i po prostu **nie wiadomo**, jaki jest stan. Pytania, opinie, prośby - po prostu skomentuj, dzięki!


title: Podejście do zadania programistycznego

text: Wszystko, biorąc pod uwagę stwierdzenie problemu, kiedy zaczynam od analizy i projektowania, mam tendencję do zbytniego myślenia o różnych funkcjach związanych z zadaniem (czasem nawet nie wymienionych w zadaniu). Chodzi mi o to, że odwracam się od głównego zadania, myśląc o różnych scenariuszach, które powinienem wziąć pod uwagę podczas kodowania, a to mnie demotywuje, ponieważ często jestem bardzo zdezorientowany. Jakie podejście powinienem przyjąć w tym przypadku, skoro dużo myślenia o wszystkich możliwych scenariuszach przychodzi naturalnie i tylko bardzo się staram tego nie robić.


title: Wykorzystanie wzorca repozytorium

text: W tej chwili używam wzorca repozytorium w mojej aplikacji. Jest to oparte na konsoli narzędzie do przetwarzania wsadowego. Zasadniczo potrzebuję repozytorium, aby móc losowo uzyskać dostęp do danych. Kłopot polega na tym, że moje dane muszą być: 1. wczytane raz (z pliku płaskiego) 2. dostępne losowo z repozytorium 3. raz zapisane. Zajmuję się tym w kodzie, używając klauzuli guard, aby sprawdzić, czy do rekordów uzyskano już dostęp, a jeśli nie, to wczytaj je. Prosty przykład poniżej. public IUnit GetById(int id) { if (!ReadIn) { ReadAllUnitsFromFile(); } return _listOfUnits[id]; } Moje pytanie brzmi: czy byłoby to zniweczenie wzorca Repozytorium, gdybym miał moduł, który był uruchamiany przed resztą mojego programu, aby odczytać dane do repozytorium, i inny moduł, który był uruchamiany później, aby zapisywać dane z repozytorium? Czy to jest antywzór? Czy istnieje lepszy wzór pasujący do mojej sytuacji? Dziękuję


title: Różnica między widocznością projektu a mikrozarządzaniem

text: Oto moja sytuacja. Mój szef chce wiedzieć wszystko, co robię. Używamy Scruma, więc codziennie spotykamy się po 15 minut, a ja codziennie chodzę.. Nie przeszkadza mi to i rzeczywiście interesuje mnie ta zwinność, którą moja firma zaczęła praktykować. Zajmuję się produkcją i kontrolą jakości. Jeśli jakaś sprawa produkcyjna eskalowałaby do mnie, a moja szefowa nie znalazła się w ścieżce e-maili, zaatakowałaby mnie i eskalowała do reżysera. Jeśli naprawię jeden błąd i wdrożę QA, chciałaby wiedzieć… na piśmie. Kiedyś sprzeciwiam się zespołowi, mówiąc, że chodzę na codzienne spotkanie scrumowe i wyjaśniam swój status tak szczegółowo, jak to możliwe, dlaczego mam ponownie wysyłać e-maile? Czuję się mikro zarządzany. Czuję, że programiści nie mają odpowiedzialności za żadne zadanie, nawet jeśli ćwiczymy Agile. Ale czy to byłaby tylko moja emocja? Może wszystko, czego chciała, to widoczność zadania, które wykonuję. Co sądzicie koledzy programiści o różnicy między widocznością zadania a mikrozarządzaniem.


title: Dlaczego firma Microsoft pobiera fortunę za swoje narzędzia programistyczne?

text: Microsoft pobiera tysiące dolarów za większość wersji programu Visual Studio. Porównując to z firmami takimi jak Apple i Google oraz z organizacjami takimi jak GNU i Eclipse, które rozdają narzędzia programistyczne za darmo, zastanawiam się, na czym polega różnica. Powodem, dla którego Apple i Google rozdają narzędzia za darmo, jest ułatwienie programistom rozwoju platformy, co z kolei skutkuje wzrostem sprzedaży jednostkowej. Czy system Windows jest uważany za tak wszechobecny, że nie wymaga dodatkowej promocji, a zamiast tego może być wykorzystany przez firmę Microsoft do zarabiania pieniędzy na narzędziach do jego tworzenia? Czy to po prostu dlatego, że _mogą_ pobierać taką samą opłatę, jak robią, i że niektórzy ludzie są gotowi ją zapłacić? Jestem też ciekaw, czy wysokie koszty narzędzi ograniczyły liczbę małych sklepów z oprogramowaniem, które rozwijają się pod Windows, czy istniejące sklepy używają albo wersji darmowej (ułomnej), albo innych, tańszych narzędzi.


title: Jak Delphi wpłynęło na .NET Framework?

text: W przeciwieństwie do wpływu na język C#, czy Delphi wpłynęło również na .NET Framework? Na pierwszy rzut oka .NET to Microsoftowa wersja Javy, ale .NET ma właściwości podobne do Delphi. Czy są inne wpływy?


title: W jaki konkretny sposób Delphi wpłynęło na język C#?

text: Konkretnie szukam wpływów językowych (w przeciwieństwie do frameworka). Na pierwszy rzut oka C# wydaje się być ewolucją C/C++ lub Javy. Ale wiemy, że C# ma tego samego projektanta co Delphi, a on nawet zauważył pewne podobieństwa i powiedział, że „dobre pomysły nie znikają tak po prostu”. Jedynym przykładem, który widzę w języku C#, co nie jest w Javie lub C/C++, są właściwości. Czy to to? Czy są inni?


title: FP do symulacji i modelowania

text: Mam zamiar rozpocząć projekt symulacji/modelowania. Wiem już, że w tego typu projektach wykorzystuje się OOP. Jednak studiowanie Haskella skłoniło mnie do rozważenia zastosowania paradygmatu FP do modelowania systemu komponentów. Pozwól mi rozwinąć: Załóżmy, że mam komponent typu A, charakteryzujący się zestawem danych (parametr taki jak temperatura lub ciśnienie, PDE i pewne warunki brzegowe itp.) oraz komponent typu B, charakteryzujący się innym zestawem danych (inny lub ten sam parametr, różne PDE i warunki brzegowe). Załóżmy również, że funkcje/metody, które zostaną zastosowane na każdym komponencie, są takie same (na przykład metoda Galerkina). Zmienny stan obiektu byłby używany dla parametrów niestałych. Gdybym miał użyć podejścia OOP, utworzyłbym dwa obiekty, które hermetyzowałyby dane każdego typu, metody rozwiązywania PDE (dziedziczenie byłoby tutaj używane do ponownego użycia kodu) i rozwiązanie PDE. Z drugiej strony, gdybym miał zastosować podejście FP, każdy komponent zostałby podzielony na części danych i funkcje, które działałyby na danych w celu uzyskania rozwiązania dla PDE. Parametry niestałe byłyby przekazywane jako funkcje czegoś innego (na przykład czasu) lub wyrażane przez pewien rodzaj zmienności (emulacja zmienności itp.). Takie podejście wydaje mi się prostsze, zakładając, że operacje liniowe na danych byłyby trywialne. Podsumowując, czy wdrożenie podejścia FP byłoby rzeczywiście prostsze i łatwiejsze w zarządzaniu (dodanie innego typu komponentu lub nowej metody do rozwiązania pde) w porównaniu z podejściem OOP? Pochodzę ze środowiska C++/Fortran, a ponadto nie jestem profesjonalnym programistą, więc popraw mnie we wszystkim, co mam źle.


title: Jak znaleźć stanowisko programisty w Europie?

text: Mieszkam w małym kraju nadbałtyckim i pracuję jako programista od ponad 5 lat, z doświadczeniem w kodowaniu od ponad 10 lat. Specjalizuję się głównie w C/C++. Problem polega na tym, że projekty, nad którymi musiałem pracować, były naprawdę małe w skali globalnej, a także wymagały przejścia na .NET i to lubi. Chcę się rozwijać i próbować pracować nad większymi rzeczami, z większymi zespołami, środowiskami z nowymi metodologiami, z zespołami stosującymi się do najlepszych praktyk, takimi rzeczami jak przeglądy kodu i z super-gwiazdowymi programistami, abym mógł się od nich uczyć i próbować bądź taki jak oni. W ciągu ostatnich kilku lat znalazłem się w sytuacji, w której tylko opracowuję rozwiązania, ale nie widzę możliwości kariery ani sposobu, w jaki mógłbym dowiedzieć się więcej. W wolnym czasie czytam książki, ale mam wrażenie, że nie pomogą mi one zbytnio w znalezieniu lepszej pracy lub niezwykle ambitnych projektów. Wciąż są rzeczy, których chcę się nauczyć, chcę znaleźć wymagające stanowisko, które pozwoliłoby mi nauczyć się pisać jeszcze bardziej niesamowite rzeczy w C/C++, ale nie wiem, jak szukać tych stanowisk. Czy ktoś ma jakieś wskazówki od czego zacząć? Czuję się, jakbym utknął tam, gdzie jestem, ale nadal chcę się rozwijać.


title: Po co hermetyzować zmienne kontenera?

text: Nie byłem pewien, jak sformułować tytuł, ale jest coś, co nie ma dla mnie sensu w OOP. Rozumiem ideę enkapsulacji, która polega na tworzeniu warstwy ochrony i abstrakcji, aby nie było bezpośredniego dostępu do danego zmienny. Są jednak przypadki, w których enkapsulacja nie ma dla mnie sensu, pozwólcie mi zademonstrować za pomocą prostej klasy C#: public class Person { public int Age { get; zestaw prywatny; } // ma sens, setter jest izolowany public string Name { get; zestaw prywatny; } // ta sama historia public string KodPocztowy { get; ustawić; } // nie ma sensu public string Country { get; ustawić; } // nie ma sensu albo ciąg publiczny Miasto // też ma sens { get { /*jakaś logika, która pobiera miasto na podstawie kodu pocztowego i kraju */ } zestaw prywatny; } } Mój problem polega na tym, że zgodnie z dobrymi praktykami OOP zmienne bez żadnych specjalnych reguł muszą mieć również oddzielne akcesory i mutatory, ale dlaczego miałyby one mieć, jeśli i tak wszystko, co robisz, jest ustawione i pobiera dane do nich i od nich? W przypadku `Age` i `Name` sensowne jest jego enkapsulacja, ponieważ setter jest prywatny, nie można go mutować poza zakresem klasy, podobnie z polem `City`, które ma specjalny getter , który pobiera dane na podstawie specjalnych reguł. Jaka to różnica, czy ujęto kody „Kod pocztowy” i „Kraj” we właściwości, czy nie? W obu przypadkach mogę w pełni uzyskać dostęp do zmiennych i mutować je. Czy ktoś mógłby to wyjaśnić?


title: Jakich narzędzi używasz jako programistów [internetowych], aby pomóc Ci w rozwijaniu umiejętności projektowych?

text: Jako programista lubię podejmować małe osobiste projekty i mam mnóstwo skryptów open source, które hostuję na githubie. Jestem bardzo **programistą**, a nie **projektantem**. Jednak nieuniknione jest, że czasami jestem zmuszony do _projektowania_. Są to zwykle przypadki, w których nie ma sensu płacić za projektanta, ale byłoby miło, gdyby strona wyglądała dobrze. Oto kilka przykładów: * Tworzenie stron osobistych, _np. blog, showcase_ * Landing pages dla moich skryptów github _(gh-pages)_ * Projektowanie osobistych stron dla znajomych To wszystkie sytuacje, które się pojawiły i skończyłem na tworzeniu arkuszy css w stylu spaghetti. A więc... jakie narzędzia, wskazówki, podpowiedzi, porady ogólne macie do zaoferowania nam, programistom, którzy mają małą wyobraźnię twórczą?


title: Jak rozpocząć tworzenie oprogramowania wbudowanego w celu opracowania przenośnej konsoli do gier?

text: Teraz pracuję jako programista aplikacji na iPhone'a, więc znam trochę c, c++ i cel c. Bawiłem się również Javą i wieloma innymi. Wszystkie z nich były po prostu tworzeniem aplikacji/gier na wysokim poziomie. Moim ostatecznym celem jest stworzenie przenośnej konsoli do gier. Bardziej jak domowej roboty konsola NES/SNES lub nawet Atari. Dowiedziałem się o RaspberryPI i Arduino. Ale potrzebuję więcej informacji o tym, jak do tego podejść. 1. Jak nauczyć się wybierać najlepszą płytę/procesor/kontroler/GPU/ekran LCD/kontroler LCD itp.? 2. Czy nauka tworzenia emulatora NES pomoże mi najpierw zrozumieć tę dziedzinę? Jeśli tak, czy są jakieś tutoriale?


title: Ochrona klucza API przed atakami DDOS

text: Cześć Potrzebowałem tylko opinii na temat DDOS zapobiegającego skryptowi php, który projektuję. Jest to dość proste i chciałem uzyskać informację zwrotną, czy uważacie, że będzie to skuteczne. Obecnie używam frameworku ulogin jako podstawy i zaimplementowałem klucze API. W tej chwili użytkownik wyśle prośbę z kluczem. Ten klucz jest sprawdzany w bazie danych, aby sprawdzić, czy jest poprawny. Więc jeśli klucz nie jest poprawny, program powróci. Jeśli klucz jest poprawny, zostaną obliczone pewne statystyki. Pierwszą rzeczą jest zwiększenie licznika. Średnie trafienie na sekundę zostanie obliczone od momentu rozpoczęcia żądania do bieżącego czasu. Istnieje również okno X sekund, w którym licznik zostanie zresetowany (powiedzmy 300). Programista określa maksymalną liczbę żądań, które powinny być dozwolone w tym oknie. Jeśli klucz przekroczy limit żądań na reset statystyk (Okno) lub przekroczy określoną liczbę żądań na sekundę, zostaną one zablokowane i nie otrzymają dostępu. Jednak licznik nadal rośnie, ale uruchamiany jest inny licznik (liczba bloków). Gdy licznik jest ustawiony na 0 na końcu okna, licznik dla następnego okna zostanie ustawiony na niezależnie od liczby bloków, a licznik bloków zostanie ustawiony na 0. Jeśli użytkownik nie użyje klucza API dla X (okno) sekund, a następnie oba liczniki zostaną zresetowane do 0. Dodałem zmienną kary za transfer (0-1), która przeniesie procent liczby bloków do następnego okna zamiast całej liczby bloków, ale nie sądzę, aby trzeba to mieć. Czy to już się robi? Czy chroniłoby to przed użyciem sniffowanego klucza API do (D)DOS na serwerze? Jakie są Twoje myśli :)


title: Jak działa pokrycie kodu?

text: W szczególności, co jest zawarte w danych pokrycia kodu (plik .nccov lub xml) i w jaki sposób generowany jest przez to raport html? Czy dane dotyczące pokrycia nie obejmują rzeczywistego procentu pokrycia kodu? Czy jest to generowane tylko wtedy, gdy raport jest tworzony na podstawie danych pokrycia? Czy dane dotyczące pokrycia stanowią rodzaj wytycznych dla procesu raportowania? Czy pliki pokrycia potrzebują dostępu do zespołów, aby utworzyć raport?


title: Czy powinienem dodać klucz do elementów mojej odpowiedzi REST API?

text: Mam punkt końcowy interfejsu API REST, którego odpowiedź JSON wygląda następująco: { "products": [ {"id": 1040, "price": 2,95, ...} {"id": 4545, "price": 3,95, . ..} ] } Jeden z moich kolegów zasugerował, że powinienem dodać klucz do każdej pozycji na liście. Powiedział, że powinno to ułatwić przeglądanie API. Zaproponował coś takiego: { "produkty": { "1040": {"id": 1040, "cena": 2,95, ...} "4545": {"id": 4545, "cena": 3,95, ...} } } Dokonanie tego nie będzie szkodliwe dla wydajności mojego API i rozumiem, w jaki sposób powinno to pomóc w przeglądaniu go. Czy powinienem to zrobić? Czy jest jakiś przykład publicznego API, który robi coś podobnego?


title: Zostać programistą poliglota

text: Znam kilka języków programowania. Najbardziej rynkowe z nich to Java, Javascript, a także nietrywialne procedury składowane. Znam też trochę Pythona, ActionScript i kilka języków dinozaurów. Zaczynam projekt zabawki ze Scala/lift. Lubię każdy język ze względu na jego cechy i paradygmaty, do których zachęca. Interesuje mnie koncepcja programisty poliglota i stawania się nim. Jakie są kroki, aby zostać prawdziwym programistą poliglota? (Tzn. nie tylko znam różne języki, ale znam je dobrze i znam dla nich dobre wzorce projektowe.) Czy jest to coś, co można wprowadzić na rynek?


title: Znowu historia MVVM/MVP, przekazywanie interfejsu widoku do jego modelu widoku, dlaczego jest zły?

text: Użyłem WPF dla rozwiązania Enterprise (setki widoków intensywnie używanych danych wejściowych i walidacji) we wzorcu MVP (było to czyste rozwiązanie zwykle niewielka ilość kodu za formularzami, a główny kod znajdował się w warstwie pretensyjnej, którą nazwaliśmy procesem interfejsu użytkownika lub UIP warstwa ) Do kolejnych małych projektów używałem WPF z MVVM. ogólnie niektóre pomysły MVVM wyglądają ładnie jak polecenia i wiązania szczególnie koncepcja ViewModel (posiadanie specjalnej wersji Model dedykowanej dla View) Ale nie podobała mi się tak bardzo koncepcja Messaging i event agregator zwykle staram się zminimalizować użycie tych wzorców (na przykład między ViewModels używam zwykłego wywołania funkcji zorientowanej obiektowo lub z View to ViewModel (mam ViewModel w moim widoku, więc używam ich do wywoływania ViewModel z View), ale do wywołania z modelu widoku do wyświetlenia używam wiadomości. czasami zamiast wysyłania wiadomości (z ViewModel do View) wysyłam interfejs widoku do jego ViewModel i używam tego interfejsu do wywołania funkcji w widoku.Każdy organ może mi powiedzieć, czy ta praktyka jest wzorcem anty i dlaczego jest zła?


title: Kiedy i jak zobowiązać?

text: W tej chwili przyzwyczajam się do pracy z gitem. I dotykam sprawy, która jest dla mnie niejasna. Czuję się zmuszony, jeśli pomyślę o zatwierdzeniu się po zmianie i sporządzeniu opisu dokumentującego. Nie wiem dokładnie _kiedy_ powinienem zatwierdzić, ponieważ jest to bardzo względne i zawsze jest coś w budowie. Mam skłonność do angażowania się, gdy boję się czegoś obmyć. Ale wtedy podsumowania wyglądają jak „Kopia zapasowa przed wypróbowaniem tego i tamtego” lub po prostu „Kopia zapasowa”. Co robisz? Czy jest lepszy sposób, czy moja praktyka jest powszechna?


title: Jak nowicjusz może rozpoznać kiepski kod napisany przez innego?

text: Niedawno zacząłem uczyć się programowania i chcę zatrudnić programistę Pythona. Jak mogę oddzielić dobry kod od niezbyt dobrego kodu?


title: Jak zmierzyć, kiedy projekt oprogramowania jest gotowy?

text: Mam bardzo ograniczone doświadczenie w rolach związanych z zarządzaniem projektami oprogramowania, a to pytanie zadał mi inny inżynier i byłem trochę zakłopotany. Jak zmierzyć, czy projekt oprogramowania jest gotowy? Część, z którą się zmagam, to część "miara". Wiem, że są pomiary takie jak EVM, ale są one bardziej skoncentrowane na ogólnej wydajności projektu. Na przykład niski SPI lub niski CPI może wskazywać na problemy z wydajnością/alokacją, ale tak naprawdę nie wskazuje, jak kompletny jest projekt. Czy jest tu praktyczna zasada mówiąca, że mój projekt jest ukończony w XX%, czy też zastanawiam się nad tym?


title: W jaki sposób klient może upoważnić nas do zbierania jego danych od usługodawcy?

text: Nasi klienci muszą upoważnić naszych partnerów do udostępniania nam danych. Możemy zbierać te dane za pomocą mechanizmu push/pull. Ponieważ nasi partnerzy nigdy wcześniej nie udostępniali danych, nie mają wdrożonego protokołu OAuth. Jaki jest najlepszy sposób, w jaki klienci mogą powiedzieć swoim dostawcom usług (naszym partnerom), aby udostępniali nam dane bez konieczności, aby każdy partner ponosił koszty wdrożenia protokołu OAuth. Czy istnieje standardowa praktyka dla tego rodzaju autoryzacji? Dziękuję!


title: Jaka jest rola Architekta Oprogramowania w procesie Test-Driven Development?

text: Jak rozumiem, Test-Driven Development polega na pisaniu testów w celu zdefiniowania specyfikacji programu (możesz mnie poprawić, jeśli się mylę). Jeśli jest ktoś odpowiedzialny za napisanie specyfikacji (w tym publicznego API) dla oprogramowania (nazwijmy go Architektem Oprogramowania), czy oznacza to, że Architekt Oprogramowania musi napisać wszystkie testy? Czy może architekt oprogramowania pisze specyfikacje, a następnie przekazuje je programistom do napisania testów? A może pozwalasz, aby specyfikacje rosły organicznie, pozwalając wszystkim programistom na pisanie własnych testów i zapominając o posiadaniu Architekta Oprogramowania?


title: Jak programista może efektywnie współpracować ze zdalnym projektantem stron internetowych?

text: Jestem programistą, który rozumie html i css, ale nie ma smaku. Moja firma zdecydowała się przeprojektować naszą witrynę e-commerce z nowym interfejsem użytkownika i przenieść się na ASP.Net MVC. Chcą naprawdę dobrego projektu, więc zatrudniają 2 projektantów do pracy zdalnej. Pierwszy projektant, który tworzy makiety projektu (PSD/PNG) Drugi projektant, kolejny, aby podzielić projekt na HTML/CSS/Images/etc.. Następnie moją częścią jest użycie HTML/css jako plików szablonów (jako plików widoków w ASP Projekt .Net MVC) Zwykle, nawet jeśli projektant angażuje się w projekt od samego początku, wciąż muszę przedyskutować wiele rzeczy z projektantem. usiądź razem z projektantem rysującym coś na papierze, a następnie zobacz to bezpośrednio z projektantem pracującym z Adobe Fireworks, podczas gdy projektant może zapytać, czy zmiana jest możliwa, czy nie. Teraz będę pracować zdalnie z projektantami, aby przeprojektować istniejącą stronę internetową. więc będę musiał zdalnie wyjaśnić wiele rzeczy na temat tej strony. Zapytałbym każdego z Was, który pracował z projektantem zdalnie i ma wskazówki, jak sprawić, by współpraca była bardziej efektywna? Dziękuję :)


title: Praca zespołowa 101 dla początkujących solo

text: Wybacz mi nowość, ale mam pytanie dotyczące pracy zespołowej... głównie dlatego, że nią śmierdzę. Większość moich projektów do tego momentu była solo, więc mam bardzo ograniczone doświadczenie w pracy zespołowej. Robiłem grafikę do gry, która była rozwijana przez kilka osób, ale to było _zupełnie_ inne niż _programowanie_ z kilkoma różnymi osobami. Obecnie pracuję z kimś innym nad niezależnym MMO wraz z kilkoma innymi członkami zespołu. Popełniłem już kilka dość głupich błędów (jak przepisanie WSZYSTKIEGO), więc mam do was dwa pytania: 1) Jakie są najczęstsze błędy, które ludzie popełniają w środowisku zespołowym i jak można ich uniknąć? 2) W jaki sposób można zmienić strukturę twojego programu, aby umożliwić wielu członkom zespołu pracę nad różnymi częściami programu w tym samym czasie? PS Czy to właściwa strona wymiany stosów na tego typu pytania? (jeśli nie, gdzie to idzie? Dzięki)


title: Porządkowanie mojej bazy produktów

text: Projektuję sklep internetowy w MVC (bardzo ściśle oparty na przykładzie SportsStore w Pro ASP.Net MVC 3 Framework http://www.powells.com/biblio/61-9781430234043-0). Korzystam z bazy danych SQL i uzyskuję do niej dostęp poprzez System.Data.Entity.DbContext Mam tabelę opisującą sprzedawane przeze mnie produkty, z kolumnami na nazwę, opis, cenę – wydaje się, że działa to dobrze. Jednak chcę również dołączyć obrazy. Prawdopodobnie będę mieć od 3 do 6 zdjęć na produkt, każdy o wielkości około 150 KB. Myślę, że wygodnie byłoby przechowywać te obrazy jako dane binarne w innej tabeli w bazie danych i dołączyć kolumnę, która identyfikuje produkt, z którym są powiązane. To powinno działać, ale wydaje się nieeleganckie – **masz lepszą sugestię**? Naprawdę chciałbym zachować obrazy w bazie danych, co wydaje się łatwiejsze niż przechowywanie ścieżek do obrazów w bazie danych i osobne przesyłanie obrazów na serwer WWW.


title: Strategie zarządzania użyciem typów w Pythonie

text: Od dawna jestem programistą w C#, ale od roku koduję w Pythonie. Jedną z dużych przeszkód dla mnie był brak definicji typów zmiennych i parametrów. Podczas gdy całkowicie wpadam na pomysł pisania kaczką, frustruje mnie to, że nie mogę określić typu zmiennej po prostu na nią patrząc. Jest to problem, gdy patrzysz na czyjś kod, w którym użył niejednoznacznych nazw dla parametrów metody (patrz edycja poniżej). W kilku przypadkach dodałem potwierdzenia, aby zapewnić zgodność parametrów z oczekiwanym typem, ale jest to sprzeczne z całym wpisywaniem kaczek. W przypadku niektórych metod udokumentuję oczekiwany typ parametrów (np.: listę obiektów użytkownika), ale nawet to wydaje się być sprzeczne z ideą używania obiektu i pozwalania środowisku wykonawczemu radzić sobie z wyjątkami. Jakich strategii używasz, aby uniknąć problemów z pisaniem w Pythonie? Edycja: Przykład problemów z nazewnictwem parametrów: Jeśli w naszej bazie kodu mamy obiekt task (obiekt ORM) i obiekt task_obj (obiekt wyższego poziomu, który osadza zadanie). Nie trzeba dodawać, że wiele metod akceptuje parametr o nazwie „zadanie”. Metoda może oczekiwać zadania lub task_obj lub innej konstrukcji, takiej jak słownik właściwości zadania - nie jest to jasne. To oni powinni przyjrzeć się, w jaki sposób ten parametr jest używany, aby ustalić, czego oczekuje metoda.


title: Kto jest odpowiedzialny za poszukiwanie patentów?

text: Jeśli klient zażąda dodania określonej funkcji do oprogramowania jego witryny internetowej, kto jest odpowiedzialny za wyszukiwanie i rozpoznawanie, że tantiemy patentowe muszą być uiszczone? 1. klient 2. web developer To pytanie jest skierowane do niezależnych web developerów. Gdy klient powie (na przykład) dodaj koszyk do mojej witryny. To stosunkowo proste zadanie, ale kto jest odpowiedzialny za wyszukiwanie i licencjonowanie patentów? Niedawno rozmawiałem z innym deweloperem i to wyszło. Brzmi to jak strasznie duży ciężar, który trzeba wziąć na siebie. Zwłaszcza jeśli chodzi o oferowanie klientom wyceny. Kiedy klient składa prośbę, jaki jest ogólny proces dla niezależnego twórcy stron internetowych?


title: Separacja danych i implementacja

text: Pracuję nad projektem, który ma częste zmiany w bazie danych i warstwach wdrożeniowych. Wydawałem zarówno kod, jak i bazę danych w tej samej wersji wydania, ale ponieważ zmiany w bazie danych są częstsze niż implementacja rdzenia, myślę o rozdzieleniu ich wydania/planu. Czy to normalny sposób na zrobienie tego?


Widziałem mnóstwo pytań w Stack Overflow i innych miejscach na temat pobierania narzędzi programistycznych i tego, gdzie je znaleźć. Czasami programiści nie mogą znaleźć linku do pobrania lub dostępności w swoim kraju. Zamiast zachęcać ich do łamania prawa, myślę, że ogólna edukacja dla tych użytkowników ma ogromne znaczenie. ## Skąd mam wiedzieć, jakie narzędzia mogę pobrać w moim kraju? ## Dlaczego nie mogę pobrać wszystkich narzędzi do tworzenia oprogramowania w moim kraju? Akceptowalne odpowiedzi wskażą, dlaczego użytkownicy nie mogą pobierać narzędzi w swoim kraju. Wszelkie linki do zasobów udostępniających narzędzia w krajach, w których nie powinny być dostępne, zostaną usunięte bez pośpiechu i prawdopodobnie spowodują krótki okres zakazu dla plakatu. To jest pytanie jak i dlaczego.


title: Ścieżka kariery dla oprogramowania QA / Inżynier testowy

text: Od 6 lat pracuję jako analityk oprogramowania QA. W tym roku kończę studia magisterskie z informatyki. Po prostu nie jestem pewien, jak rozwijać swoją karierę po ukończeniu studiów. Lubię programować, rozwiązywać łamigłówki, ale w międzyczasie nie lubię tak bardzo testowania oprogramowania. Właściwie czasami fajnie jest znaleźć błąd i wyśledzić go do jego pierwotnej przyczyny. Jestem całkiem dobry w tym, co robię. Zwykle znajduję 2 lub 3 razy więcej defektów niż inne testy mogą znaleźć w naszym zespole. Czasami jednak nudne jest testowanie tej samej aplikacji w kółko, powtarzalne i monotonne. Chociaż w przeszłości przeprowadziłem kilka testów automatyzacji, które są bardziej interesujące, nadal większość błędów znajduje się ręcznie. Myślę, że mam tutaj 2 opcje, albo kontynuować testowanie oprogramowania, ale robić więcej testów automatyzacji, które obejmują kodowanie i skrypty. Aby to zrobić, myślę, że muszę znaleźć miejsce, w którym większość testów jest wykonywana przy użyciu zautomatyzowanych narzędzi, takich jak w Google (z opisu stanowiska testera). Opcja 2 to przejście na stronę programistyczną, aby programować w pełnym wymiarze godzin, co zawsze lubię. Wadą opcji 2 jest to, że muszę zacząć od zera, ponieważ większość moich wcześniejszych doświadczeń dotyczy strony testowej. Czy ktoś ma podobne doświadczenie lub radę?


title: Jak uogólnić odniesienia do kluczy obcych w tabeli?

text: Próbuję zaprojektować tabelę do przechowywania odwołań do wielu tabel jako "cel" elementu w każdym wierszu. Przykład powinien wyjaśnić, co próbuję zrobić: Wyobraź sobie, że masz 4 tabele (obrazy, filmy, komentarze, polubienia) z „polubieniami” podobnymi do CREATE TABLE „polubienia” „target” int(11), „user_id” int( 11), znacznik czasu `created_at` Jak sprawić, by „cel” mógł być rzędem obrazów, filmów lub komentarzy (np. lubisz obraz, film lub komentarz) Również w jaki sposób chciałbyś przedstawić to w swoim kodzie ? (klasa abstrakcyjna Like i klasy konkretne dla LikeImage, LikeImage, LikeComment?), a może mieć interfejs ILikeable, a obiekt Like ma pod ręką obiekt ILikeable? Coraz częściej wpadam w ten wzorzec robiąc rzeczy typu "jak" (jak obiekt) lub "subskrybując" (zapisz się do zmian na obiekcie) do różnych celów i generując "powiadomienia" (powiadom użytkownika o zmianie na obiekt), które są ogólnie zdolne do kierowania obiektów. Dziękuję za podzielenie się swoją wiedzą. **Aktualizacja** :: Czy istnieje sposób na łatwe osiągnięcie tego celu przez nosql?


title: Jaki poziom wiedzy na temat OO powinni mieć programiści?

text: A dokładniej, co według Ciebie programiści Junior, Intermediate i Senior powinni wiedzieć o projektowaniu i programowaniu OO? Mam nadzieję, że odpowiednie oczekiwania pomogą nam w procesie rekrutacji.


title: Nauka języka skryptowego

text: Uważam, że każdy programista musi nauczyć się podstawowego języka programowania i języka skryptowego. Poważnie, nie mam ręki w żadnych językach, takich jak Python, JavaScript, JScript, CScript itp. Jestem rodzimym programistą Windows i który język skryptowy byłby najlepszy do robienia niektórych rzeczy związanych z automatyzacją/siecią.


title: Czym odwołanie do Javy różni się od wskaźnika C?

text: C ma wskaźniki, a Java ma tak zwane referencje. Mają pewne cechy wspólne w tym sensie, że wszystkie na coś wskazują. Wiem, że wskaźniki w C przechowują adresy, na które wskazują. Czy odniesienie przechowuje również adres? Czym się różnią, z wyjątkiem tego, że wskaźnik jest bardziej elastyczny i podatny na błędy?


title: Czy wskaźniki naprawdę istnieją w Javie?

text: Przeczytałem sporo zasobów w Internecie i teraz jestem dość zdezorientowany istnieniem wskaźników w Javie. Niektórzy twierdzą, że istnieją wskazówki, a niektórzy twierdzą, że nie ma takiego pojęcia. Więc jaka jest prawda?


title: Różnica między wskaźnikiem a referencją?

text: W Javie i innych językach wysokiego poziomu odwołanie prowadzi do obiektu. W C++, o ile wiem, wskaźnik może również prowadzić do obiektu. Jaka jest więc różnica między referencją prowadzącą do obiektu a wskaźnikiem prowadzącym do obiektu?


title: Dlaczego C++ i Java używają pojęcia „odniesienia”, ale nie w tym samym sensie?

text: W C++ argument referencyjny do funkcji pozwala funkcji na odwołanie się do czegoś innego: int Replacement = 23; void changeNumberReference(int& reference) { referencja = zastąpienie; } int main() { int i = 1; std::cout << "i=" << i << "\n"; // ja = 1; zmianaNumeruReferencji(i); std::cout << "i=" << i << "\n"; // ja = 23; } Analogicznie, stały argument referencji do funkcji spowoduje błąd w czasie kompilacji, jeśli spróbujemy zmienić referencję: void changeNumberReference(const int& reference) { reference = Replacement; // błąd w czasie kompilacji: przypisanie referencji tylko do odczytu 'referencja' } Teraz, w Javie, dokumentacja mówi, że argumenty funkcji typów innych niż podstawowe są referencjami. Przykład z oficjalnych dokumentów: public void moveCircle(Circle circle, int deltaX, int deltaY) { // kod przeniesienia początku okręgu do x+deltaX, y+deltaY circle.setX(circle.getX() + deltaX); okrąg.setY(okrąg.getY() + deltaY); // kod przypisujący nowe odniesienie do okręgu circle = new Circle(0, 0); } > Następnie circle otrzymuje odniesienie do nowego obiektu Circle z x = y = 0. > To ponowne przypisanie nie jest jednak trwałe, ponieważ odniesienie było > przekazane przez wartość i nie może się zmienić. Dla mnie to wcale nie wygląda jak odwołania do C++. Nie przypomina zwykłych odwołań do C++, ponieważ nie można sprawić, by odwoływały się do czegoś innego, i nie przypominają odwołań do const C++, ponieważ w Javie kod, który by się zmienił (ale tak naprawdę nie zmienia), odwołanie nie generuje kompilacji -błąd czasu. Jest to bardziej podobne w zachowaniu do wskaźników C++. Możesz go użyć do zmiany wartości wskazanych obiektów, ale nie możesz zmienić samej wartości wskaźnika w funkcji. Podobnie jak w przypadku wskaźników C++ (ale nie w przypadku odwołań do C++), w Javie można przekazać „null” jako wartość takiego argumentu. Więc moje pytanie brzmi: Dlaczego Java używa pojęcia „odniesienia”? Czy należy rozumieć, że nie przypominają one odwołań do C++? A może rzeczywiście przypominają odwołania do C++ i czegoś mi brakuje?


title: Jakie przedmioty informatyczne są wymagane do ukończenia kursu wprowadzającego w kompilatorach?

text: Nie jestem studentem informatyki i pracuję jako web-developer (java, python, AS3 itp.) jako profesjonalista. Biorę 1 kurs w semestrze na moim lokalnym uniwersytecie. W zeszłym semestrze wziąłem sztuczną inteligencję (zawierająca logikę, gramatykę bezkontekstową, parsowanie CYK, wprowadzające NLP, łańcuchy Markowa, HMM itp.). W nadchodzącym semestrze planuję odbyć kurs wprowadzający z kompilatorów, który obejmuje następujący program nauczania: > Analiza leksykalna, Analiza składni, Analiza semantyczna, Środowisko wykonawcze, > Reprezentacje pośrednie, Generowanie kodu, Alokacja rejestrów, > Wybór i planowanie instrukcji , Wprowadzenie do kodu lokalnego i globalnego > Optymalizacje, analiza przepływu danych Moje pytanie brzmi, czy są jakieś przedmioty informatyczne, które powinienem znać przed przystąpieniem do tego kursu? Jeśli tak, byłoby wspaniale, gdybyś mógł wymienić te kursy.


title: Jakie tematy muszę przestudiować, aby programować *web* serwer klienta?

text: Wiem o programowaniu serwera klienta poprzez _sockets_ w C/C++. **Jakie tematy muszę studiować w celu programowania serwerów klienckich związanych z _stroną internetową_?** Bazą danych, której będziemy używać, będzie _MySQL_ lub _PostgreSQL_. Platformą będzie _Linux_. Nie wiem, który język powinien być tutaj preferowany? Jakie są **_topics_** oprócz języka, które muszę znać, aby to zrobić?


title: Wskazówki dotyczące rozpowszechniania praktyk zorientowanych obiektowo

text: Pracuję dla średniej firmy, która ma około 250 programistów. Niestety wiele z nich utknęło w proceduralnym sposobie myślenia i niektóre zespoły nieustannie dostarczają duże aplikacje transakcyjne, podczas gdy w rzeczywistości aplikacja zawiera bogatą logikę. Nie potrafią również zarządzać zależnościami projektowymi i kończą z usługami, które zależą od innej dużej liczby usług (czysty przykład Big Ball of Mud). Moje pytanie brzmi: Czy możesz zasugerować, jak rozpowszechniać tego typu wiedzę? Wiem, że powierzchnia problemu polega na tym, że te aplikacje mają słabą architekturę i design. Inną kwestią jest to, że niektórzy programiści są przeciwni pisaniu jakichkolwiek testów. Kilka rzeczy, które robię, aby to zmienić (ale albo mi się nie udaje, albo zmiana jest zbyt mała, to) * Prowadzenie prezentacji na temat zasad projektowania (SOLID, czysty kod itp.). * Warsztaty o TDD i BDD. * Zespoły trenerskie (w tym korzystanie z sonaru, findbugs, jdepend i innych narzędzi). * Rozmowy na temat IDE i refaktoryzacji. Kilka rzeczy, które zamierzam zrobić w przyszłości (ale obawiam się, że mogą nie być dobre) * Stwórz zespół ewangelistów OO, którzy będą rozpowszechniać sposób myślenia OO w różnych zespołach (ci ludzie musieliby się zmienić zespoły co kilka miesięcy). * Prowadzenie sesji przeglądu projektu, aby krytykować projekt i sugerować ulepszenia (nawet jeśli ulepszenia nie są wprowadzane z powodu ograniczeń czasowych, myślę, że może to być przydatne). Coś, co odkryłem w zespołach, które prowadzę, to to, że jak tylko je opuszczę, wracają do starych praktyk. Wiem, że nie spędzam z nimi dużo czasu, zwykle tylko jeden miesiąc. Więc cokolwiek robię, to się nie trzyma. Przykro mi, że to pytanie jest pełne frustracji, ale alternatywą do napisania tego było uderzanie głową o ścianę, dopóki nie zemdleję.


title: Kiedy koncepcje domeny stają się konstrukcjami aplikacji?

text: Niedawno wysłałem pytanie dotyczące odzyskiwania architektury DDD, która stała się anemicznym modelem domeny, do architektury wielowarstwowej i to pytanie jest swego rodzaju kontynuacją. Moje pytanie brzmi, kiedy domena **_concepts_** staje się aplikacją **_constructs_**. Moja aplikacja to lokalny klient C# 4/WPF o następującej architekturze: **Warstwa prezentacji** * Widoki * ViewModels **Warstwa biznesowa** * ??? **Warstwa domeny** * Klasy, które biorą POCO z typami pierwotnymi i tworzą koncepcje domeny (np. obraz, warstwa itp.) * Wartości sprawdzające poprawność (np. szerokość obrazu > 0) * Interfejsy dla DTO * Interfejs repozytorium, które abstrahuje system plików **Warstwa dostępu do danych** * Klasy, które analizują zastrzeżone pliki binarne na POCO z typami pierwotnymi poprzez jawną znajomość formatu pliku * Implementacja DTO domeny * Implementacja klasy repozytorium domeny **Lokalny system plików** * Zastrzeżone pliki binarne Kiedy czy klasa domeny MyImageType z szerokością, wysokością i pikselami Int32 [] Int32 staje się System.Windows.Media.ImageDrawing? Jeśli umieszczę go w warstwie domeny, wygląda na to, że wyciekają szczegóły implementacji (co jeśli nie chcę używać WPF?). Jeśli umieszczę go w warstwie prezentacji, wygląda na to, że robi za dużo. Jeśli stworzę warstwę biznesową, wydaje się, że robiłabym za mało, ponieważ istnieje kilka „reguł” ze względu na charakter aplikacji CRUD. Myślę, że całe moje czytanie doprowadziło do paraliżu analitycznego, więc pomyślałem, że świeże spojrzenie może rzucić pewną perspektywę. **Aktualizacja 1:** Aby wyjaśnić, że aplikacja nie jest stricte CRUD, warstwa domeny zawierałaby również funkcje przetwarzania sygnału i ustawienia transformacji obrazu. Funkcje przetwarzania sygnału muszą być stosowane na nieprzetworzonych wartościach pikseli bezpośrednio z DAL, podczas gdy ustawienia transformacji obrazu są przechowywane z obiektami domeny, które mają być zastosowane przez WPF w ramach prezentacji.


title: Dlaczego złożone jest lepsze niż skomplikowane?

text: W Pythonie, kiedy „zaimportujesz to”, możesz uzyskać Zen of Python. Mówi, że „złożony” jest lepszy niż „skomplikowany”. Dlaczego? Jaka jest różnica między programowaniem złożonym a skomplikowanym (lub ogólnie)? Piękne jest lepsze niż brzydkie. Wyraźne jest lepsze niż niejawne. Proste jest lepsze niż złożone. Złożone jest lepsze niż skomplikowane. <-- Płaskie jest lepsze niż zagnieżdżone. Rzadki jest lepszy niż gęsty. ...


title: Czy korzystanie z wielu darmowych bibliotek zewnętrznych jest dobrą rzeczą?

text: Dla Twoich autorskich projektów w pracy? Problemy, które mogę sobie wyobrazić, to: więcej bibliotek dll (może być problemem, gdy na przykład musisz dołączyć dużą bibliotekę DLL, ale potrzebujesz tylko kilku funkcji w tej bibliotece), wiele oświadczeń licencyjnych, o które musisz zadbać przy wydawaniu swojego produktu, wiarygodność biblioteki itp. Jakieś inne potencjalne problemy? Jaka jest Twoja opinia? (info: używam .NET w pracy)


title: Java Transaction Service bez serwera aplikacji

text: Czy można mieć autonomiczną aplikację Java (bez podłączonego serwera aplikacji), która udostępnia pewne operacje, które klient może wywołać i być tym, który zarządza transakcjami? Myślałem o tej aplikacji, aby ujawnić zasoby JNDI i uzyskać stamtąd java:comp/UserTransaction, pobrać stamtąd także fasolę i wywołać na niej metody A, B i C oraz koordynować transakcję od klienta? Aplikacja, którą piszę, nie jest na tyle złożona, że potrzebuję wokół niej dużego serwera aplikacyjnego, więc myślę o tym, aby wewnątrz niej znajdował się samodzielny JTS, z którym klient mógłby wchodzić w interakcje z punktu widzenia transakcji. Nie mam dużego doświadczenia z transakcjami rozproszonymi i tak naprawdę nie wiem, jak rozwiązać ten problem. Czy to w ogóle możliwe? Czy wkraczam w coś, co przekracza możliwości zwykłego śmiertelnika (programisty)? Jak mogę do tego podejść?


title: Jakie zasady pisania są różne dla ludzi i kodu?

text: Wydaje się, że niektóre zasady pisania kodu stoją w bezpośredniej sprzeczności z zasadami ludzkiego pisania. Na przykład w kodzie wskazane jest zdefiniowanie każdej informacji tylko w jednym miejscu, a na piśmie dla ludzi normalne jest powtarzanie ważnych punktów (choć zwykle sformułowanych inaczej). **Jakie zasady pisania dobrego kodu są sprzeczne z zasadami dobrego pisania?**


title: Jak zdecydujesz się na synchronizację lub asynchronizację zdarzeń kolejki/wysyłania? (we wzorze obserwatora)

text: Rozważ następujące elementy w architekturze sterowanej zdarzeniami: 1. Obserwowalny obiekt 2. Dyspozytor zdarzeń 3. Obserwator (odbiornik) Teraz mamy dwie wiadomości: 1. Od obserwowalnego obiektu do dyspozytora zdarzeń 2. Od dyspozytora zdarzeń do obserwatora(ów) . Jak zdecydujesz się przekazać te wiadomości zsynchronizowane lub asynchroniczne? Czy używasz jakiegoś konkretnego API (w Javie), aby to zaimplementować? Na przykład w Java JFC/Swing pierwszy to Async, a drugi to Sync. Ten pierwszy jest powodem, dla którego nadal możesz wywoływać więcej zdarzeń, nawet jeśli program przetwarza inne zdarzenie. To ostatnie jest powodem, dla którego należy unikać długich operacji w słuchaczach, ponieważ blokują one dyspozytor zdarzeń.


title: Zarządzanie problemami produkcyjnymi podczas sprintu Scrum

text: Kwestia zarządzania błędami w środowisku produkcyjnym była ostatnio sporym elementem w mojej głowie. Sprint nie ma na celu dodania do nich żadnych przedmiotów, ale w przypadku **krytycznych** błędów jest to po prostu nieuniknione. Jak radzić sobie z tą przerwą w sprincie? Czy po prostu dajesz sprintowi procentowy „naddatek” czasu, wypełniając tylko powiedzmy 80% harmonogramu elementami sprintu „na wszelki wypadek”? Dzięki, Kyle


title: Szukasz wysokiej jakości witryn zbudowanych w JavaScript (nie jQuery), aby uczyć się na ich przykładzie

text: Jestem nowy w JavaScript. Czytałem JavaScript: dobre części i połowę profesjonalnego JavaScript dla programistów internetowych. Teraz chcę zastosować się do tej rady - znajdź najlepsze strony i spójrz na ich kod. Jak sugeruje Crockford w Coders at Work: Reflections on the Craft of Programming Chcę znaleźć najlepsze strony zaprogramowane tylko w JavaScript, a nie jQuery, ponieważ chcę patrzeć na ich kod i uczyć się od nich.


title: Jak mogę automatycznie przetestować duży, złożony arkusz kalkulacyjny?

text: Tak więc odziedziczyłem jeden z tych arkuszy kalkulacyjnych "Engineer's Special" - rodzaj opracowany przez Morta the Engineer, z mnóstwem włochatych VBA i WTF, skomplikowanymi obliczeniami i brakiem dokumentacji. Na szczęście większość podstawowych danych wejściowych i wyjściowych znajduje się na jednej stronie. Może nie wystarczy na pełne pokrycie testami, ale na początek. Chciałbym stworzyć szybki framework testów regresji dla biednych ludzi dla Excela, ale nie do końca wymyśliłem najlepszą metodę. Przeczucie podpowiada mi, żebym stworzył kod, który: 1. Ma makro, które „zapisuje” wartości „głównego” arkusza kalkulacyjnego I/O w innym skoroszycie, tworząc w zasadzie kopię głównego arkusza wejściowego o nazwie użytkownika i zawierającej tylko wartości. Ten skoroszyt „scenariusza” miałby, jako pierwszą kartę, listę wszystkich zapisanych arkuszy z metadanymi. 2. Ma oddzielne makro, które „ładuje” dany zestaw danych wejściowych z tych arkuszy, ale nie nadpisuje komórek użytych do danych wyjściowych, nagłówków, instrukcji itp. 3. Ma trzecie makro, które jest uruchamiane z tabeli podsumowania scenariusza. To z kolei ładuje dane wejściowe każdego scenariusza do głównego skoroszytu, porównuje każdy zapisany wynik z bieżącym wynikiem i rejestruje, czy wszystko pasuje, czy nie. Działałby bez nadzoru, dopóki nie osiągnąłby niepowodzenia dopasowania, a następnie zatrzymałby się, aby użytkownik mógł przyjrzeć się różnicom (które zostałyby podświetlone). Dwa zastrzeżenia: (1) wymaga to ręcznej synchronizacji arkusza wzorcowego i arkuszy scenariusza, gdy projekt wzorca zmienia się na tyle, aby zmienić położenie/dodać/usunąć dane wejściowe lub wyjściowe, oraz (2) nie skaluje się to dobrze, jeśli każdy scenariusz obejmuje wejścia/wyjścia do testowania na wielu skoroszytach. Zapisywanie/ładowanie nazwanych zakresów dla każdej komórki we/wy zamiast całych arkuszy może pomóc w obu sytuacjach, ale ma swoje wady. Czy ktoś wymyślił inny nowatorski sposób skutecznego testowania regresji dowolnych arkuszy kalkulacyjnych?


title: Wzorzec projektowy: Algorytm różni się w zależności od argumentów wejściowych

text: Podam prosty przykład, który pomoże ci zrozumieć moje pytanie. Załóżmy, że mamy prostokąt i klasę Utility z metodą, która tworzy bufor wokół kształtu. Metoda `.createBuffer` ma wymagane i opcjonalne argumenty: * wymagane: promień * opcjonalnie: kierunek (na przykład "wewnątrz" lub "na zewnątrz", domyślnie "na zewnątrz") ... może więcej argumentów ... Każda kombinacja argumentów potrzebuje innego algorytmu. Który wzorzec projektowy jest odpowiedni do rozwiązywania podobnych problemów?


title: Co sprawia, że Java jest tak odpowiednia do pisania baz danych NoSQL?

text: Patrząc na tę stronę, która agreguje obecny krajobraz NoSQL, można zauważyć, że większość tych projektów jest napisana w Javie. Bazy danych to złożone oprogramowanie systemowe zajmujące się systemem plików, więc C/C++ byłby do tego lepszym wyborem niż Java. (to moje myślenie, które może być błędne) Po drugie, bazy danych zajmują się przesyłaniem dużych ilości danych z dysku do pamięci RAM - co nazywają zestawem roboczym. JVM zajmuje nietrywialną ilość pamięci RAM do własnych celów - więc bardziej efektywne byłoby użycie platformy, która pozostawia dużo pamięci na dane, zamiast zajmować ją dla własnych operacji. Główne relacyjne bazy danych WSZYSTKIE są napisane w C/C++ MySQL C, C++ Oracle Assembler, C, C++ SQL Server C++ PostgreSQL C SQLite C Co sprawia, że Java jest tak popularna w świecie NoSQL.


title: Jak napisać skrypt tworzenia i konfiguracji przenośnego (opartego na maszynie wirtualnej?) środowiska deweloperskiego Windows 7?

text: Dostaję nowy komputer i chciałbym zminimalizować czas poświęcony na konfigurowanie i utrzymywanie środowisk deweloperskich na różnych komputerach. W tym celu myślę o stworzeniu maszyny wirtualnej z moim preferowanym pomysłem i konfiguracją oraz użycie tej maszyny wirtualnej do rozwoju na wszystkich moich maszynach. Chciałbym używać systemu Windows 7 jako systemu operacyjnego vm. Dla tych, którzy próbowali lub obecnie stosują takie podejście: 1. Jak mogę zsynchronizować obraz dysku bez uciekania się do pendrive'a? Jakie są plusy/minusy (jeśli występują). 2. Skoro tę pierwszą konfigurację robię ręcznie, czy powinienem rejestrować swoje kroki w celu późniejszego ich skryptowania? 3. Jeśli tak, jakie podejście poleciłbyś do pisania skryptów? Cygwin + bash? Mrówka? Coś innego? Czemu? 4. Czy istnieją potencjalne trudności, o których powinienem wiedzieć w zakresie współdzielenia systemu plików? Na przykład w A) dostęp do plików maszyn wirtualnych z hosta lub B) dostęp do serwera HTTP maszyny wirtualnej z hosta?


title: Czy agenty oparte na wątkach Clojure mogą obsłużyć wydajność c10k?

text: Piszę usługę w stylu c10k i próbuję ocenić wydajność Clojure. Czy agenci Clojure mogą obsłużyć taką skalę współbieżności za pomocą agentów opartych na wątkach? Wydaje się, że inne systemy o wysokiej wydajności zmierzają w kierunku asynchronicznej operacji we/wy/zdarzeń/zieleń, aczkolwiek przy pozornie wyższych kosztach złożoności. * * * Załóżmy, że podłączonych jest 10 000 klientów, którzy wysyłają wiadomości, które powinny być dołączone do 1000 lokalnych plików — usługa Clojure próbuje zapisywać równolegle do jak największej liczby plików, jednocześnie nie pozwalając, aby dwa oddzielne żądania zniweczyły to samo plik, pisząc w tym samym czasie. Agenci Clojure są niezwykle eleganccy pod względem koncepcyjnym — umożliwiają niezależne i asynchroniczne zapisywanie oddzielnych plików, jednocześnie szeregując (w sensie bazy danych) wiele żądań zapisu do tego samego pliku. Rozumiem, że agenci działają, uruchamiając wątek dla każdej operacji (załóżmy, że jesteśmy powiązani z operacjami we/wy i używamy `send-off`) — więc w tym przypadku prawidłowe jest uruchomienie ponad 1000 wątków? Czy obecne systemy mogą wydajnie obsłużyć taką liczbę wątków? Większość z nich powinna być związana z IO i przez większość czasu spać, ale przypuszczam, że nadal byłaby kara za przełączanie kontekstu, która teoretycznie byłaby wyższa niż systemy oparte na asynchronicznych operacjach We/Wy/zdarzeniach (np. Erlang, Go, node.js) . Jeśli rozwiązanie Clojure może obsłużyć wydajność, wydaje się, że jest to najbardziej elegancka rzecz do kodowania. Jednakże, jeśli nie radzi sobie z wydajnością, to coś takiego jak lekkie procesy Erlanga lub Go może być lepsze, ponieważ są zaprojektowane tak, aby mieć dziesiątki tysięcy z nich pojawiających się naraz i są tylko umiarkowanie bardziej skomplikowane do wdrożenia. Czy ktoś podszedł do tego problemu w Clojure lub w porównaniu do tych innych platform? (Dzięki za twoje przemyślenia!)


title: Czy powinniśmy (nadal) rozważyć złą praktykę zsynchronizowanego XMLHTTPRequest?

text: Jak być może wiesz, `XMLHTTPRequest` może być używany synchronicznie lub asynchronicznie, ale zsynchronizowane żądania zawsze były uważane za złą praktykę i zawsze się z tym zgadzałem. Nie tylko ideologia współczesnego rozwoju JS jest mocno oparta na modelu zdarzeń, ale były też bardziej prozaiczne powody, by unikać zsynchronizowanych żądań. Na przykład stare wersje Internet Explorera mogą po prostu nagle się zawiesić. Dzisiaj zobaczyłem zsynchronizowane żądanie w kodzie źródłowym Liferay i pomyślałem "Co za wstyd, jak oni śmieją. Czy nie wiedzą, że to źle?". Ale potem zadałem sobie pytanie, co właściwie jest złego w tym podejściu w dzisiejszych czasach i nie byłem w stanie udzielić dokładnej, logicznej odpowiedzi. Na przykład po stronie serwera powszechną praktyką jest używanie zsynchronizowanych żądań HTTP. Oczywiście wszystkie dane mogą być pobierane asynchronicznie i być może powinny być pobierane w ten sposób, ale często potrzebujemy danych, które posłużą do pobrania kolejnej porcji danych, więc w takim przypadku żądanie musi zostać zsynchronizowane. Czy to nadal powinno być uważane za złą praktykę? **PS** : Nie użyłem terminu `AJAX`, ponieważ pierwsze A oznacza asynchroniczny. :)


title: Przetwarzanie stdout w formacie niestandardowym czy standardowym?

text: Aby zintegrować się z innymi plikami wykonywalnymi, plik wykonywalny może uruchomić inny plik wykonywalny i przechwycić jego dane wyjściowe ze standardowego wyjścia. Jednak większość programów zapisuje komunikat wyjściowy na standardowe wyjście w formacie niestandardowym i zwykle w formacie czytelnym dla człowieka. Wymaga to od integratora systemu napisania funkcji analizującej dane wyjściowe, co jest uważane za problem, a kod parsera może być błędny. Czy uważasz, że to staromodne? Większość programów w stylu Uniksa to robi. Bardzo niewiele programów zapisuje na standardowe wyjście w standardowym formacie, takim jak XML lub JSON, który jest bardziej nowoczesny. Przykład: Veracity (DVCS) zapisuje JSON na standardowe wyjście. Czy powinniśmy przestawić się na nowoczesne formaty? W przypadku programu konsolowego, czytelnego dla człowieka lub łatwego do przeanalizowania: co jest ważniejsze?


title: Jakich zadań architekt NIE powinien wykonywać lub ograniczać, aby był skuteczny?

text: Istnieje wiele pytań/odpowiedzi dotyczących tego, czym zajmuje się architekt, ale czego NIE powinien robić ktoś na stanowisku architekta? Jakie są granice/granice, które należy utrzymać, aby być skutecznym Architektem? Myślę tutaj o Architekt kontra Deweloper i Architekt kontra Kierownik Projektu Na przykład znajduję się w roli, w której mój tytuł to Architekt, ale jestem także kierownikiem ds. Kodowania / rozwoju i kierownikiem projektów w wielu małych projektach korporacyjnych. Zmagam się z przełączaniem zadań, a teraz chcę ograniczyć przełączanie zadań. Próba noszenia każdej czapki po prostu nie działa. Jakich zadań architekt w ogóle nie powinien robić? Jakie zadania powinien ograniczać Architekt? Myślę, że architekt musi nadal kodować, ale jak określić odpowiedni limit pracy kodowania?


title: Jakie są zalety i wady bezpośredniego ujawniania klientowi klasy encji Table/View?

text: Zajmuję się tworzeniem aplikacji wielowarstwowej. Nasz projekt dzielimy na trzy logiczne warstwy: klienta, usługi i dostępu do danych. Jednak prawie wszystkie metody w warstwie usług nie robią nic poza zwracaniem tabeli/widoku z DAL do klienta, a następnie klient kontynuuje przetwarzanie danych. Ponad 50% zwróconych danych jest większych niż jest to konieczne. Na przykład klient potrzebuje nazwy użytkownika i adresu e-mail, ale warstwa usług zwraca znacznie więcej danych. To jest standard kodowania w moim zespole. Próbowałem to zmienić, kształtując zajęcia, które zwracają to, czego klient naprawdę potrzebuje, ale chcieli, abym to zmienił po wykonaniu tego. Jestem ciekaw jakie są plusy i minusy robienia rzeczy w ten sposób?


title: BizSpark i SQL Server są już obecne. Czy i powinniśmy przejść na OSS?

text: W młodym startupie zaczynam nową rolę prowadząc inżynierię. Rzeczy, które mają, są w SQL Server / Windows. Mam wrażenie, że powinniśmy pomyśleć o przejściu na architekturę OSS, której głównymi przyczynami są koszty, możliwość testowania nowych narzędzi w locie, gdy się pojawią, oraz łatwa integracja z wiodącymi technologiami, takimi jak RoR i Python. Czy ktoś ma jakieś sugestie na ten temat? Czy może być brzydkie, jeśli utrzymamy nasz backend bazy danych na SQL Server / Windows i zbudujemy na tym architekturę Linux / OSS? A może oprogramowanie BizSpark zapewnia dostęp do wszystkiego, czego potrzebujesz, podczas pobytu w świecie MSFT? Czy narzędzia takie jak LINQ i SSRS są wystarczająco dobre? Nie chcę tu wzniecać pożaru, tylko prawdziwy problem, z którym boryka się nasza firma. Dzięki za wszelkie odpowiedzi.


title: Czy łatanie małp jest uważane za dobrą praktykę programistyczną?

text: Mam wrażenie, że monkeypatching jest bardziej w kategorii szybkich i brudnych hacków niż standardowych dobrych praktyk programistycznych. Chociaż od czasu do czasu naprawiałem drobne problemy z bibliotekami stron trzecich, uważałem to za tymczasowe rozwiązanie i przesyłałem odpowiednią łatkę do projektu strony trzeciej. Jednak widziałem tę technikę używaną jako "normalny sposób" w projektach głównego nurtu, na przykład w module `gevent.monkey` firmy Gevent. Czy łatanie małp stało się główną, normalną, akceptowalną praktyką programistyczną? Zobacz także: _"Monkeypatching For Humans"_ autorstwa Jeffa Atwooda


title: Dlaczego baza danych jest reprezentowana jako walec na rysunkach architektonicznych?

text: Jestem młodym programistą i nigdy nie widziałem bazy danych. Ale komputery w większości są dostarczane w pudełkach, a nie w cylindrach, więc zastanawiałem się, dlaczego zawsze są przedstawiane jako cylinder, gdy ludzie pokazują swoje rysunki architektoniczne. Czy istnieje powód, dla którego rysowanie ich w ten sposób jest tylko tradycją?


title: Najlepsze praktyki dotyczące własności i udostępniania App Idea

text: W wolnym czasie tworzę aplikacje. Jestem jedynym programistą, a dwóch moich przyjaciół, którzy nie są programistami, dostarcza wizji, treści, algorytmów i pomysłów. Zawsze radośnie zgadzamy się na wszystkie funkcje, rzeczy do zrobienia i priorytety. Ale oczywiście najważniejszą częścią jest kodowanie. Sprzedając, zgadzamy się na **podział zysku po równo**, czyli po 33%. Ale wersja 1.0 naturalnie nie sprzedaje zbyt wiele. I dalej staram się, aby aplikacja była bardziej wirusowa. Obejmuje to mnóstwo rzeczy, w których inni nie są zbyt pomocni. Przykłady: dodanie obsługi udostępniania, facebook connect, gameifying, umożliwienie użytkownikom dodawania treści, strony głównej, wsparcia, konserwacji, usług serwerowych w celu ułatwienia aktualizacji treści. Lista jest długa. Nagle będę wykonywał 100% dużo pracy, ale tylko „posiadam” jedną trzecią dochodu. Moi znajomi mogą albo „zniknąć” z projektu po wersji 1.0, albo nadal wnosić wkład, ale z mniejszą wartością i wolałbym wymienić ich na więcej programistów lub grafików. Wysiłek, jaki włożyli w wersję 1.0, jest wiele warty dla aplikacji i zdaję sobie sprawę, że bez nich nigdy bym tego nie zrobił. Ale w końcu **wykonam całą pracę**. Ciężko jest negocjować podział 90, 5, 5 zamiast po 33%, bo pomysł wciąż jest ich. Jak to rozwiązać? Jakie są najlepsze praktyki dotyczące własności aplikacji? Jakie umowy mogę zawrzeć, aby dalsze rozwijanie aplikacji było dla mnie korzystne i motywujące?


title: Który system VCS jest bardziej odpowiedni dla naszego przepływu pracy?

text: Obecnie mamy kod przechowywany na współdzielonym dysku sieciowym i nie używamy żadnego rodzaju VCS. Kopia zapasowa kodu przechowywanego na naszym współdzielonym dysku sieciowym jest zawsze tworzona. Chcielibyśmy, aby wszystko było teraz jak najbardziej zbliżone do nich, korzystając z pewnego rodzaju oprogramowania VCS. Przewiduję scentralizowany przepływ pracy, w którym każdy programista ma lokalną kopię kodu na swoim komputerze. Nie wykonujemy rozgałęzień ani nie pracujemy offline. Zazwyczaj, gdy tworzymy nową wersję, po prostu kopiujemy bieżący katalog roboczy do nowego katalogu. Wierzę, że nadal będziemy to robić i po prostu stworzymy repozytorium dla nowej wersji. Wolałbym nie wdawać się w spór o to, który VCS jest lepszy, mając tylko nadzieję, że uzyskam opinie, które najlepiej pasują i najbardziej pasują do tego, co staramy się zrobić.


title: Czy wiele zmiennych instancji w mojej klasie sugeruje wadliwy projekt?

text: Ok, więc zaczynam skonsolidować część nauki, którą robiłem. To, co zamierzam zrobić, to stworzyć małą grę związaną z grą, którą lubię, o nazwie Persona. Dla porównania persona, którą możesz traktować jako pokemona. Zasadniczo chcę, aby przepływ polegał na tym, że użytkownik wybiera postać, broń i postać (z listy predefiniowanych postaci i osób, tj. predefiniowanych statystyk i zaklęć dla postaci oraz predefiniowanych broni, statystyk i postaci dla postaci). Oni wybiorą, a ja użyję matematyki/jeśli/czasu itp. do obliczenia zwycięzców. Obecnie mam klasę Characters (ze zmiennymi instancji Persona, Stats i Weapon), klasę Character Stats (zdrowie, mana itp. IV), klasę Persona (ze statystykami persona i nazwą iv), klasę Persona stats (siła zwinności itp. IV ) (później zrobię klasę PersonaSpells) i klasę Broni (atak, trafienie itp. IV), a także klasę Pojedynku (gdzie będą wykonywane wszystkie obliczenia i metody wyboru gracza, wyboru wroga itp. Dodatkowo z moimi obecnymi implementacja wszystkie obiekty postaci, obiekty persony i obiekty broni itp. będą zdefiniowane w tej klasie i przypisane za pomocą na przykład za pomocą Character char = new Character(Name, Health, Persona, Weapon, ...), ze zdefiniowanymi wcześniej konstruktorami dla persony i broni to.Na koniec główna klasa, w której skutecznie użyję obiektu klasy pojedynku do uruchomienia gry i utrzymam wyraźniejszą klasę główną i metodę.Moje pytanie brzmi, czy ten projekt jest w tym wadliwy, w końcu muszę zadeklarować mnóstwo obiekty (jako IV) od konstruktorów moje zajęcia. (Więc mam obiekt wszystkich 20 broni, wszystkich 10 postaci, wszystkich 20 Person, wszystkich 10 statystyk postaci, wszystkich 20 statystyk person) Wszystko w mojej klasie Duel. Przykładowy kod poniżej: private Weapon deusXiphos = new Weapon(); (x 20 więcej takich) private PersonaStats artemisiaStats = new PersonaStats(); (x 20 więcej takich) private Persona artemisia = new Persona(); (* 20 więcej takich) private CharacterStats mitsuruStats = new CharacterStats(400, 250); (* 10 więcej takich) private Character mitsuru = new Character("Mitsuru", artemisia, deusXiphos, mitsuruStats); (* 10 więcej takich)


title: Podczas kopiowania/wklejania metod prywatnych konieczne jest noszenie dokumentacji Javadoc?

text: Więc niestety utknąłem z kodem, w którym robię to: @Override method A{ //wywołuje metody prywatne 1-8 } metoda prywatna 1{ //kopiuj/wkleja } I tak dalej dla wszystkich metod prywatnych . Wolałbym, aby twórcy metody, którą zastępuję, zabezpieczyli metody prywatne, ale nie mogę tego teraz zmienić. Wszystkie te prywatne metody mają razem z javadoc - czy powinienem nosić go razem z funkcjami kopiowania/wklejania w mojej klasie i odpowiednio je dostosowywać, czy nie marnować czasu, ponieważ jest to udokumentowane w oryginalnym pliku?


title: Efektywne repozytorium w C# - Gdzie umieścić metody?

text: Próbuję po raz pierwszy zbudować nową aplikację przy użyciu wzorca Repozytorium i trochę nie rozumiem używania repozytorium. Załóżmy, że mam następujące klasy: public class Ticket { } public class User { public List<Ticket>AssignedTickets { get; ustawić; } } public class Grupa { public Lista<Użytkownik> CzłonkowieGrupy { get;set; } public List<Ticket> GroupAssignedTickets { get;set; } } Potrzebuję metod, które mogą zapełnić te kolekcje, pobierając dane z bazy danych. Jestem zdezorientowany, co do której skojarzonej klasy repozytorium powinienem umieścić te metody. Czy powinienem zaprojektować moje repozytoria tak, aby wszystko _zwracający_ typ T trafiało do repozytorium dla typu T jako takiego? public class TicketRepository { public List<Ticket> GetTicketsForGroup(Group g) { } public List<Ticket> GetTicketsForUser(User u) { } } public class UserRepository { public List<User> GetMembersForGroup(Group g) { } } Oczywista wada I zobacz tutaj, że muszę zacząć tworzyć instancje wielu repozytoriów. Co się stanie, jeśli mój Użytkownik również przypisał Widgety, Fidgety i Lidgety? Kiedy wypełniam użytkownika, muszę utworzyć wystąpienie WidgetRepository, FidgetRepository i LidgetRepository, aby wypełnić jednego użytkownika. Alternatywnie, czy mam skonstruować moje repozytorium tak, aby wszystko _żądania_ oparte na typie T zostało wrzucone do repozytorium dla typu T, jak podano poniżej? public class GroupRepository { public List<Ticket> GetTickets(Group g) { } public List<User> GetMembers(Group g) { } } public class UserRepository { public List<Ticket> GetTickets(User u) { } } Korzyści, które widzę tutaj jest to, że jeśli teraz potrzebuję, aby mój użytkownik miał kolekcję Widgets, Fidgets i Lidgets, po prostu dodaję niezbędne metody do wzorca UserRepository i nie muszę tworzyć instancji klasy WidgetRepository, FidgetRepository i LigetRepository za każdym razem, gdy chcę aby utworzyć użytkownika, ale teraz rozrzuciłem obawy dotyczące użytkownika w kilku różnych repozytoriach. Naprawdę nie jestem pewien, który sposób jest właściwy, jeśli w ogóle. Jakieś sugestie?


title: Jak obsłużyć kod zatwierdzony i scalony, który nie ma testów?

text: Tworząc aplikację w zespole, nie wszyscy w tym zespole będą równie dobrymi programistami. Niektórzy będą biegli w pewnych rzeczach, inni w innych, a niektórzy wcale. Jako zespół pracujący w zwinnym procesie zazwyczaj masz do naśladowania definicję „gotowe”. W naszym DoD mówi, aby nigdy nie łączyć kodu, który nie jest udokumentowany i ma odpowiednie testy. Czasami jednak funkcja jest tak ważna dla niektórych członków zespołu, że kod musi zostać scalony bez testów. Czasami leniwy programista może się połączyć i nazwać to weekendem. Takie scalenie oznacza, że gdy inni członkowie zespołu wyciągną kod, otrzymają kod, który może, ale nie musi działać poprawnie, a ponieważ nie ma testów, trudno jest zweryfikować. Przejście przez ten kod może być bardzo kłopotliwe, aby upewnić się, że działa, zanim członek zespołu będzie mógł pracować nad swoim zadaniem. Kilkakrotnie zdarzyło się, że kod, który został popełniony bez testów, został złamany przez innych członków zespołu bez ich zauważenia. Więc moje pytanie brzmi: * Jak poradziłbyś sobie z takimi problemami? * Czy wskazuje to raczej na złe planowanie niż na złe zachowanie? * Kto ma „winić”, jeśli kod bez testów jest uszkodzony?


title: Kiedy wszedł w życie termin „skrzynia na wąż”?

text: Wiele osób używa terminu Snake Case, aby opisać zmienne lub inne symbole `z_formą_podkreśleń`. Kiedy ten termin wszedł w życie?


title: Algorytmy open source przetwarzania języka naturalnego (NLP)

text: Szukam sposobu, aby algorytmowi (serwisowi) nadać zdanie, a on powie mi, czy jego kontekst pozytywny, czy negatywny czy nawet neutralny. Czy taka usługa istnieje?


title: Weryfikacja hasła przy użyciu wyrażeń regularnych w html 5

text: to pytanie może zabrzmieć głupio, ale nikt mnie tego nigdy nie nauczył. Mam dane wejściowe HTML dla pola hasła i możesz zalogować się tylko jednym konkretnym hasłem w JS. Czy ktoś mógłby mi podać składnię przypisywania zmiennej do document.getElementById(""); składnia czy inna składnia? Dziękuję.


title: Praktyki dotyczące nawigacji i zmiany „długich” plików kodu?

text: Wiele razy mam do czynienia z plikami kodu, które są dość długie - minimum 5 stron ekranowych. Prawie zawsze jest coś _w górę/dół_, do czego muszę się odnieść, gdy jestem na dole/na górze (odpowiednio). Ciągłe przewijanie tam i z powrotem między częściami pliku to gigantyczne obciążenie. Zapamiętywanie wszystkiego w całym pliku jest przeciążeniem poznawczym, a odwoływanie się do części pliku jest całkiem konieczne. Tak, widok _Outline_ w niektórych edytorach, takich jak Eclipse/NetBeans, pomaga, ale czasami będą działać dobrze tylko dla części rozpoznawalnych przez ten parser. Czasami widoki konturowe nie pojawiają się, np. podczas kodowania w CoffeeScript lub JavaScript przy użyciu zamknięć/funkcji z przestrzenią nazw itp. Rozwiązaniem jest wtedy ręczne przewijanie. Więc jako programiści, jakie są niektóre techniki/praktyki, które można zastosować, aby zmniejszyć ten absurdalny koszt? Tak, mogę _skrócić_ pliki, ale w szczególności biblioteki javascript, takie jak Backbone.js itp., Wszystkie są jednym plikiem, ponieważ naprawdę nie można ich podzielić na wiele plików z powodu braku _pakietów_ podobnych do Java. Wobec ograniczeń związanych z niemożliwością podzielenia pliku i niedziałającymi widokami konspektu, jakich technik mogę użyć do poruszania się po długich plikach źródłowych? Dużo pracuję nad Eclipse/Netbeans i Aptana, a czasami Vi (ale rzadko w środowiskach produkcyjnych). Byłoby wspaniale móc podzielić okno na dwie części i zobaczyć ten sam plik z jednej strony, a kod z drugiej. Niewykonalne z Eclipse/NB/Aptana IMO. Vi, tak, ale nie mogę tego cały czas używać. PS: Od teraz podzieliłem plik między wiele edytorów, m.in. Zaćmienie i Aptana. Byłoby wspaniale mieć go w jednym miejscu, ale czy to najlepsze, co możemy zrobić? :) **UPDATE** \- Wygląda na to, że Eclipse _ma_ sposób na zrobienie tego i można go znaleźć tutaj


Rozumiem, że Google nie używa MapReduce dla wyszukiwania dynamicznego Google, ale nie mogę znaleźć nigdzie, w którym podano, czego używa jako magazynu danych dla wyszukiwania dynamicznego Google. Jaki magazyn danych jest używany przez Google dla wyszukiwania dynamicznego Google?


title: Zapisywanie haseł na urządzeniu lokalnym

text: Więc w mojej aplikacji (iOS) musisz się zarejestrować, aby skorzystać z usługi (serwis gastronomiczny). Aby jednak zmienić szczegóły dotyczące konta (nazwę użytkownika, hasło i adres e-mail), musisz ponownie wprowadzić hasło. Z wyjątkiem sytuacji, gdy użytkownik się wylogował, jest to jedyny moment, w którym potrzebujesz hasła, aby korzystać z aplikacji. Zastanawiałem się więc, ponieważ użytkownik w zasadzie nigdy nie używa swojego hasła i prawdopodobnie zapomni go, gdy tylko będzie go potrzebować, czy mogę przechowywać jego hasło na swoim urządzeniu lokalnym (w `NSUserDefaults`)? Ponieważ ich hasło byłoby dostępne tylko na ich urządzeniu lokalnym, nie wydaje się to stanowić zagrożenia dla bezpieczeństwa. Jeśli aplikacja została zhakowana, jedyne hasło, które mogliby uzyskać, byłoby ich własne. Co więcej, planowałem po prostu przechowywać go jako ciąg (bez szyfrowania). Czy miałoby znaczenie, gdybym je zahaszował lub zaszyfrował przed zapisaniem hasła do wartości domyślnych? Z góry dziękuję.


title: Po co zawracać sobie głowę poprawnym i semantycznym oznaczaniem?

text: > Zauważ, że (próbuję) zaznaczyć tak semantycznie, jak to tylko możliwe, ponieważ podoba mi się to, jak wygląda i działa, ale nie dlatego, że jestem świadomy jakichkolwiek innych oszałamiających korzyści. Chodzi o to, aby móc edukować innych Cóż, widziałem wiele artykułów i tutoriali, które często mówią: „Zaznaczmy to w najbardziej semantyczny sposób”. Ale przyszła mi do głowy dziwna myśl, **dlaczego?** Dlaczego trzeba (lub chcieć) zawracać sobie głowę konkretnymi elementami, które przekazują właściwe znaczenie semantyczne? W szczególności mam na myśli nowe elementy HTML5, takie jak `<time>`, `<output>` czy `<address>`. Zwłaszcza jeśli strona "działa" (ładnie się renderuje we wszystkich przeglądarkach). Dlaczego miałbym chcieć używać elementów takich jak `<time>` lub `<address>`, gdzie w ogóle nic (lub w najgorszym przypadku ogólne `<span>`) nie działa równie dobrze? Pytam o to, ponieważ widzę mnóstwo (bardzo popularnych) stron internetowych (w tym ta), które nie przestrzegają tych tak zwanych najlepszych praktyk.


title: Odzyskiwanie anemicznego modelu domeny w architekturę wielowarstwową

text: Spędziłem kilka ostatnich dni, ucząc się projektowania opartego na domenach i próbując zastosować go w bieżącym projekcie. Dziedzinę problemową zdekomponowałem na kanoniczne komponenty logiczne: domenę, infrastrukturę i prezentację. Po wykonaniu pierwszego kroku cofnąłem się i zdałem sobie sprawę, że stworzona przeze mnie architektura spowodowała, że praktycznie cała logika biznesowa została zawarta w usługach aplikacji, co jest charakterystycznym znakiem anemicznego zapachu kodu modelu domeny. Po dalszym rozważeniu projekt oparty na domenie może nie być odpowiedni dla mojej aplikacji, a nawet jeśli tak jest, biorąc pod uwagę niewielką liczbę reguł logiki biznesowej w mojej aplikacji, narzut warstw może nie być tego wart. Ponieważ pisałem tylko kod UML i pseudo, nie zainwestowałem zbyt wiele czasu i wysiłku, ale chciałbym wykorzystać to, co mogę, jeśli to możliwe. Moja architektura składa się z 4 elementów fizycznych: 1. Projekt „domena”: abstrakcje i metody CRUD dla używanego typu danych 2. Projekt „infrastruktura”: reprezentacja logiczna i metody do wykonania na danych 3. Prezentacja „projekt: interfejs użytkownika (WinForms lub WPF) 4. Projekt „usługi”: koordynuje obiekty domeny i infrastruktury zgodnie z regułami biznesowymi Gdybym miał używać komponentów zaprojektowanych w architekturze wielowarstwowej, moja warstwa prezentacji zawierałaby tylko referencje do 3 lub 4 usług do obsługi wszystkich funkcji aplikacji. Czy to słuszne podejście?


title: Czy ostatnią datę należy nazwać „początek” czy „koniec”?

text: Mam więc funkcję, która przyjmuje dwie daty. Zapytanie SQL pobiera wszystkie wyniki między dwiema datami. Obecnie mam konfigurację funkcji w następujący sposób: function myFunc(start, end) Gdzie start to najnowsza data, a koniec to najstarsza data. Czy jest to intuicyjne/poprawne, czy może istnieje inna konwencja nazewnictwa/porządkowania, której powinienem używać?


title: Formalna nazwa lewej/prawej strony wyrażenia

text: Biorąc pod uwagę wyrażenie, takie jak „int x = y + 5”, nazwalibyśmy „int x” „lewą stroną” (lub „LHS”), a „y + 5” „prawą stroną” (lub 'RHS'). Całe wyrażenie nazywa się oczywiście „wyrażeniem” (lub „równaniem”), ale czy istnieje ogólny termin określający „stronę” wyrażenia? `LHS` i `RHS` nie do końca sprawdzają się, jeśli chodzi o wyrażenia takie jak `int x = y = 5` (pomiń tutaj fakt, że takie przypisania są generalnie złą praktyką!). Bawię się terminem „komponent”, aby opisać jakąkolwiek „stronę”, ale chciałem sprawdzić, czy istnieje już formalny termin standardowy. Wikipedia ma tylko "Strony równania", jakieś lepsze sugestie?


title: Jakieś wskazówki/sztuczki/zasoby na temat NAUCZANIA klasy na OOP?

text: Być może za rok lub dwa powoli zacznę prowadzić zajęcia z programowania obiektowego w mojej szkole. Właśnie skończyłem studia i pracuję w mojej szkole jako programista aplikacji. Najpierw zaczynałem jako asystent nauczyciela/równomiernik, a potem powoli przechodziłem do roli profesora. Klasa byłaby w Javie. Zawsze widzę na tej wspaniałej stronie zasoby o tym, JAK programować, ale czy ktoś zna jakieś wskazówki/sztuczki/zasoby, jak UCZYĆ klasę programowania? Byłby pełen różnych poziomów umiejętności (ale nadal półtechniczny), więc musiałby być trochę bardziej zrozumiały niż gdyby to były tylko dzieciaki z CS.


title: Nie możesz robić notatek na spotkaniach?

text: Zacząłem pracować w nowej pracy i postawiłem sobie za cel robić notatki na każdym spotkaniu od 2 do wielu osób. Do tej pory mi to działało dobrze. Pomaga mi organizować i refaktoryzować koncepcje, przydatne ćwiczenie dla programisty. Robię notatki tak często i kończę przepisywać je w e-mailach lub dokumentacji, że zdecydowałem się na zakup netbooka/notebooka/chromebooka w tym celu. Niedawno rozmawiałem z kolegą na temat tego i robienia notatek. Powiedział, że chociaż w przeszłości pracował jako konsultant ds. oprogramowania, w niektórych ustawieniach robienie notatek było niemile widziane. Dlaczego miałoby to być? Używanie maszyny jako środka rozpraszającego to jedno, ale korzyści płynące z robienia notatek jest tak wiele, że nie widzę powodu, dla którego ktokolwiek miałby się temu sprzeciwiać. **Inne uwagi** W miejscach, w których przywiązuje się dużą wagę do faktycznego zapamiętywania i uczenia się z dyskusji (np. wykład na uniwersytecie, zbieranie wymagań), robienie notatek jest powszechne, a nawet oczekiwane. Tak samo studiuje te notatki później. Wiele wydaje się tu przemawiać na korzyść papieru ołówkowego kontra maszyny. Ten argument musi mieć jakąś wartość. Ale przez analogię moglibyśmy nalegać, aby programiści tworzyli w Notatniku (zamiast Visual Studio) i bez połączenia z Internetem. Powinno to usunąć rozpraszacze, ale wtedy wątpliwe jest, ile wydajności można uzyskać dzięki takim ograniczeniom. Po przeczytaniu niektórych odpowiedzi/komentarzy podanych tutaj, interesujące jest, że jednym z powodów, dla których odradza się robienie notatek, jest to, że _nie_ chcą, aby ludzie odeszli z czymkolwiek po spotkaniu, np. własność intelektualna, na której warto zorganizować spotkanie, ale.