title: Czy dobrym pomysłem jest rejestrowanie widoków i wyświetlanie modeli jako singletonów w kontenerze IOC?

text: Rozumiem korzyści płynące z wstrzykiwania zależności do obiektów, ale nie znalazłem zbyt wielu wskazówek na temat typów obiektów do wstrzykiwania i kiedy zrobić je singletonami. Jeśli weźmiemy za przykład aplikację z następującymi typami obiektów: * Usługi (w tym repozytoria i usługi biznesowe, takie jak kalkulacja ceny) * Widoki * ViewModels **Usługi** Wstrzykiwanie usług jest typowym przykładem podanym i jasne jest, że nie są zarejestrowane jako singletony w kontenerze, ponieważ są bezpaństwowcami. Czy pierwotną intencją było, aby tylko usługi były wstrzykiwane przez kontenery? **Widoki/ViewModele i inne stanowe, długotrwałe obiekty** Ogólnym sposobem uzyskania dostępu do długotrwałego obiektu w kilku miejscach jest użycie rejestru (lub podobnego), zakładając, że nie możemy przekazać go jako parametru. Teraz mamy możliwość zarejestrowania obiektu jako singletona w kontenerze i wstrzyknięcia go tam, gdzie jest to potrzebne. Nie widzę żadnego problemu z używaniem singletona w podejściu kontenerowym poza kwestią usunięcia obiektu z kontenera po zakończeniu jego cyklu życia (nie jestem pewien, jak łatwo to będzie - używam Unity). Chciałabym usłyszeć o wszelkich problemach, które inni mogą przewidzieć. Jako ciekawostkę, framework MVVM Light używa ViewModelLocator zamiast wstrzykiwania modeli widoków.


title: Jaki jest dobry sposób na przygotowanie się do tego kursu zatytułowanego „Bezpieczeństwo języka programowania”?

text: Prowadzę kurs o następującym opisie: > Celem tego kursu jest nauka o bezpieczeństwie języka programowania > funkcje i języki, które wyraźnie go wspierają. Statyczne i dynamiczne > konstrukcje bezpieczeństwa w językach i systemach, a także oprogramowanie > inżynierskie zasady/wzorce bezpieczeństwa. > > Tematy: > > * Podstawowa struktura bezpieczeństwa języka programowania. > * Projektowanie bezpiecznych języków programowania > * Kontrola dostępu w językach programowania > * Języki przepływu informacji > * Języki zdolności > * Mobilne języki programowania > * Inżynieria oprogramowania i bezpieczeństwo > * Podstawowe luki w zabezpieczeniach oprogramowania w systemach > * Cykl życia bezpiecznej inżynierii oprogramowania > * Wzorce i praktyki dotyczące bezpieczeństwa oprogramowania > Jestem zdezorientowany - Czym różni się bezpieczeństwo PL od zwykłych zabezpieczeń? Szukam możliwych podręczników/książek do przestudiowania lub stron internetowych, które są dobre w tym temacie, lub jakichkolwiek porad/wskazówek. Profesor kazał mi dobrze znać C i Javę, to wszystko, co do tej pory znam. Doceniam wszelkie wskazówki i porady.


title: Potrzebuję pomocy w zaprojektowaniu długo działającego serwera przetwarzania zadań

text: Mam zamiar zaproponować nową architekturę dla kilku elementów systemu, nad którym pracuję; będzie się to wiązało z wykonywaniem wielu zadań związanych z przetwarzaniem liczb i tłumaczeniem danych z tomcat i na bardziej dopasowanej platformie, a ja potrzebuję porady. Po pierwsze, sposób, w jaki ten system jest obecnie skonfigurowany: istnieje baza danych AS400 i PostgreSQL; niektóre z tych tabel wymagają synchronizacji w różnych momentach roku. Aplikacja administracyjna działająca na Tomcat6 miałaby przycisk „Synchronizuj”, a klasa akcji struts uruchomi nowy wątek do uruchomienia zadania. Praca może trwać od 15 sekund do 4 dni (jest to maksymalny czas, jakiego do tej pory doświadczyliśmy). Nie podoba mi się ten projekt. Tomcat to serwer WWW, a nie serwer przetwarzania zadań. Rozwiązanie, które mam na myśli, to wziąć jeden z naszych nieużywanych serwerów i umieścić na nim Jboss 7. następnie mieć prosty interfejs na tym serwerze przetwarzania zadań (np. WWW, JMS), który będzie nasłuchiwał wyzwalaczy. gdy ktoś kliknie przycisk „synchronizuj” na stronie internetowej, do serwera zadań wysyłany jest sygnał informujący, jakie zadanie ma uruchomić, jakie parametry są uwzględnione i aby rozpocząć przetwarzanie zadania. Wiele lat temu zaprojektowałem podobną koncepcję w przetwarzaniu zadań, w której miałem kolejkę JMS, która nasłuchiwała nadchodzących zadań. Kiedy do kolejki dodawane było określone zadanie, system uruchamiał się i uruchamiał to zadanie. Ale w tym systemie zadania nigdy nie zajęłyby więcej niż 5 lub 6 sekund, a nie kilka dni, więc nie jestem pewien, czy JMS Queues byłyby tutaj najlepiej dopasowane. Spojrzałem na Quartz, ale to bardziej powtarzalny system planowania zadań. Chociaż wiem, że mogę to obejść i sprawić, by działało, wciąż zastanawiam się, czy to najlepsza technologia dla tego problemu. Czy masz jakieś sugestie?


title: MVC 5 - Najlepsze praktyki w zakresie obsługi dat w USA i poza nim

text: Mam aplikację MVC 5, która będzie używana na całym świecie. Niektóre strony w aplikacji będą wymagały od użytkowników wprowadzenia dat. Będę używać wtyczki datetimepicker jQuery, aby umożliwić użytkownikowi wybór dat. Lub mogą wprowadzić je ręcznie. Jestem ciekawy, jaka jest najlepsza praktyka dla kultur, w których daty są wprowadzane w formacie dd/mm/rrrr zamiast mm/dd/rrrr? Mogę wymagać, aby wszystkie daty były wprowadzane w formacie mm/dd/rrrr, czyli formacie, którego oczekuje moja aplikacja, ale nie chcę też wywoływać zbytniego niepokoju u moich użytkowników w innych częściach świata.


title: Ścisłe sprzężenie między JavaScript, HTML i CSS: bardziej nowoczesne podejście?

text: Bardzo często zdarza się, że JavaScript jest powiązany z niektórymi selektorami, aby znaleźć elementy, przechowywać dane i nasłuchiwać zdarzeń. Często zdarza się również, że te same selektory są używane do stylizacji. jQuery (i jego silnik selektora Sizzle) wspierają i promują to poprzez odwoływanie się do elementów za pomocą składni typu CSS. W związku z tym technika ta jest szczególnie trudna do „oduczenia” (lub refaktoryzacji) podczas tworzenia projektów. Zrozumiałem, że jest to wynikiem historii rozwoju HTML i JavaScript, a przeglądarki zostały zbudowane tak, aby efektywnie konsumować / analizować / i renderować tego rodzaju sprzężenie. Jednak w miarę jak strony internetowe stają się coraz bardziej złożone, ta rzeczywistość może powodować trudności w organizowaniu i utrzymywaniu tych oddzielnych warstw. **Moje pytanie brzmi: czy można i czy należy tego unikać w nowoczesnych serwisach internetowych?** Jeśli jestem nowicjuszem w programowaniu front-end i chcę uczyć się rzeczy „we właściwy sposób”, czy warto nauczyć się odsprzęgać i unikać takich zależności od początku? Czy oznacza to unikanie jQuery na rzecz biblioteki, która promuje bardziej oddzieloną strukturę?


title: Czy powinienem specjalizować się w mojej karierze? Specjalista kontra Jack-of-all-Trades?

text: > **Możliwy duplikat:** > Czy zróżnicowane umiejętności wspierają czy utrudniają specjalizację? Mam 27 lat i pracuję zawodowo jako programista od około 4-5 lat. Pracowałem głównie nad projektami webowymi używając PHP lub ASP.NET. Ostatnio zajmuję się tworzeniem aplikacji mobilnych na iOS, Androida i BlackBerry. Przeskakuję tam i z powrotem między językami i technologiami, ale czuję, że trudno byłoby przedstawić się pracodawcy jako ekspert lub półbóg w konkretnej sprawie. Jestem typem faceta od wszystkiego. Ostatnio zastanawiałem się nad specjalizacją w LAMP (CodeIgniter jako framework) dla strony internetowej i Androida i BlackBerry po stronie mobilnej. Moje pytanie brzmi, czy w ogóle powinienem się specjalizować? A może powinienem spróbować zastosować jaką technologię stosuje firma, z którą pracuję?


title: Jakieś artykuły/badania/dane porównujące walidację przed odprawą z walidacją po odprawie?

text: Obecnie jestem w zespole, który używa walidacji po zameldowaniu w przepływie pracy naszych programistów: 1. Programista sprawdza w kodzie (i miejmy nadzieję, że najpierw uruchamia testy) 2. Maszyna CI synchronizuje, kompiluje, uruchamia testy 3. Jeśli testy nie powiedzie się, kod jest już zaewidencjonowane, ale dev (i powiązane osoby) zostały powiadomione (np. poczta) Widziałem lub czytałem o kilku zespołach, które zamiast tego używają walidacji przed zameldowaniem (aka „bramowane checkins”): 1. Dev przesyła zmiany (i mam nadzieję, że uruchamia testy najpierw) 2. System sprawdzania kompiluje zmiany i uruchamia test 3. Jeśli testy nie powiodą się, zmiany nie zostaną wpisane, a dev jest informowany o niepowodzeniach testów. 4. Jeśli testy zakończą się pomyślnie, zmiany są wprowadzane, a programista jest informowany. Wygląda na to, że istnieje kilka kompromisów między tymi opcjami, takich jak odwrócenie sytuacji, w której programiści wiedzą, czy ich kod został przesłany (zameldowanie jest natychmiastowe, wstępne zameldowanie czeka na zakończenie walidacji) i znany stan kodu, który jest zaewidencjonowany (przed zameldowaniem usuwa wszystkie problemy znalezione w testach walidacyjnych, ale po zameldowaniu może pozwolić na łatwe zameldowanie kodu w piątek po południu przed wyjazdem dewelopera na wakacje). Czy jest jakiś materiał referencyjny na temat kompromisów/korzyści między tymi dwoma podejściami? A może jakieś miarowe badania dotyczące tego, czy którykolwiek z nich ma wpływ na deweloperów? (Np. produktywność programistów to przerwy od rozpraszania walidacji przed zameldowaniem, ponieważ ich kod nie jest zaewidencjonowany; lub programiści z walidacją przed zameldowaniem mają tendencję do szybszego znajdowania błędów i mogą szybciej zmieniać funkcje wysokiej jakości).


title: Legalność czerpania pomysłów z własnego narzędzia do wykorzystania w projekcie open source?

text: Ostatnio pracowałem dla średniej wielkości firmy (z Wielkiej Brytanii) nad własnym narzędziem do wtyczek IDE. Myślałem, że to ogólnie przydatne, ale prawdopodobnie potrzebowałem innego kierunku, aby był odpowiedni dla osób z moimi zainteresowaniami. Nie pracuję już dla tej firmy i myślałem o zrobieniu dla siebie podobnego narzędzia, korzystając z doświadczenia, które zdobyłem przy projekcie, a także niektórych pomysłów w nim zawartych. Rozumiem to tak, że szukali możliwości skomercjalizowania tego i prowadzili rozmowy z prawnikiem ds. własności intelektualnej, aby sprawdzić, czy coś można opatentować, co najwyraźniej nie zaowocowało żadnymi patentami. Nie sądzę, aby projekt został skomercjalizowany, ponieważ firma specjalizuje się w kontraktach konsultingowych dla innych firm i nie ma historii wytwarzania produktów. Wiem, że jestem niejasny, ale chciałbym wiedzieć, czy jest coś, co powinienem rozważyć (pod względem legalności) przed kontynuowaniem. Z góry dziękuję!


title: OOP sposób na zaprojektowanie menedżera grup użytkowników

text: W porządku. Mam ten wzór do modelowania, który występuje w dwóch odmianach, które są bardzo takie same. Mam klasę, którą można uznać za „punkt wejścia”, która wywoła kilka klas menedżera w zależności od interakcji użytkownika. Prawdopodobnie możemy porównać to do klasy kontrolera. Ta klasa powinna umożliwiać użytkownikowi zarządzanie grupami użytkowników lub samymi użytkownikami. W obu przypadkach operacje są dość podobne, można dodawać, modyfikować, usuwać, przeglądać grupy i użytkowników. Grupy mają jeszcze jedną operację, która polega na dodawaniu do nich użytkowników. W tym miejscu utknąłem: Moim pierwotnym pomysłem było zamodelowanie go w ten sposób: 1. `class User`, 2. `class Group`, 3. `class GroupManager`, 4. `class UserManager`, 5. `class IManager` ` Jednak wiąże się to z problemem braku możliwości modelowania faktu, że grupy muszą mieć możliwość dodawania do nich użytkowników. Jeśli umieszczę go w IManager, to jest on dostępny dla UserManager, co nie ma sensu i umieszczam go jako konkretną metodę GroupManager, to nie mogę mieć jednego „interfejsu”, który jest mniej czysty. To doprowadziło mnie do całkowitego pominięcia klasy IManager i tylko obu menedżerów, ale potem wydaje się to niezgrabne i powtarzalne. Czy istnieje odpowiedni wzorzec projektowy do zastosowania tutaj? **TLDR** : Jaki jest właściwy wzorzec projektowy, w którym wszystkie metody zarządzania grupą lub użytkownikiem powinny mieć wrażenie „wspólnego interfejsu”, ale nadal umożliwiać modelowanie faktu, że grupy powinny mieć możliwość dodawania użytkowników do siebie.


title: Jak przeprowadzić audyt aplikacji na Androida (nie zrootowanej) bez dostępu do jej źródła?

text: Jak mogę sprawdzić, czy aplikacja na Androida działająca na nierootowanym urządzeniu jest „bezpieczna” bez znajomości źródła? Szukałbym: 1. Zwykłego tekstu w Web-Requestach (wireshark i emulator) 2. Wstrzykiwania SQL (w EditTexts...) 3. Robienia rzeczy, których nie zawsze się oczekuje (np. szybkie klikanie, aby sprawdzić warunki wyścigu ) Pytanie: Co jeszcze może być interesujące przy kontroli aplikacji na Androida?


title: Rozkład systemu na podsystemy, moduły i komponenty

text: To pytanie dotyczy tego, jak duży system powinien zostać zdekomponowany na podsystemy, moduły, komponenty itp. Na przykład, powiedzmy, w rozwiązaniu Payroll mogą istnieć kluczowe obszary, takie jak Obecność, Przetwarzanie wynagrodzeń, Rejestry (dla utrzymania informacji takich jak dane pracowników, dane klienta, szczegóły odzyskiwania itp.), Raporty i administracja. Jeśli weźmiemy pod uwagę obecność, jego głównym celem byłoby udostępnienie użytkownikom interfejsu do wprowadzania/podglądania/edytowania/usuwania obecności oraz monitorowania postępu wpisu obecności. Jeśli w implementacji używamy architektury Model View Presenter, cała część dotycząca obecności może być reprezentowana za pomocą jednej triady MVP. Moje pytanie brzmi, czy powinniśmy traktować obecność systemu jako podsystem czy moduł lub komponent? Czy aby kwalifikować się jako podsystem, powinien mieć więcej niż jeden moduł/komponent? **EDYTUJ:** Czuję, że powinienem był wspomnieć więcej o kontekście tego pytania. Właściwie podczas wdrażania systemu możesz nie zawracać sobie głowy częściami, niezależnie od tego, czy jest to podrzędny, czy moduł. Może to również zależeć od osobistych preferencji podczas dzwonienia. Ale kiedy dokumentujesz rzeczy / przygotowujesz instrukcje itp. Uważam, że powinniśmy postępować zgodnie ze standardem.


title: Kiedy paradygmat „zrób jedną rzecz” staje się szkodliwy?

text: Ze względu na argument, oto przykładowa funkcja, która wypisuje zawartość danego pliku linia po linii. Wersja 1: void printFile(const string & filePath) { fstream file(filePath, ios::in); linia strunowa; while (std::getline(plik, linia)) { cout << linia << endl; } } Wiem, że zalecane jest, aby funkcje robiły jedną rzecz na jednym poziomie abstrakcji. Dla mnie, chociaż powyższy kod robi prawie jedną rzecz i jest dość atomowy. Niektóre książki (takie jak Clean Code Roberta C. Martina) wydają się sugerować rozbicie powyższego kodu na oddzielne funkcje. Wersja 2: void printFile(const string & filePath) { fstream file(filePath, ios::in); printLines(plik); } void printLines(fstream & file) { string line; while (std::getline(plik, linia)) { printLine(linia); } } void printLine(const string & line) { cout << line << endl; } Rozumiem, co chcą osiągnąć (otwórz plik / przeczytaj wiersze / wydrukuj wiersz), ale czy nie jest to trochę przesada? Oryginalna wersja jest prosta iw pewnym sensie już robi jedną rzecz - drukuje plik. Druga wersja doprowadzi do dużej liczby naprawdę małych funkcji, które mogą być znacznie mniej czytelne niż pierwsza wersja. Czy w takim przypadku nie byłoby lepiej mieć kod w jednym miejscu? W którym momencie paradygmat „zrób jedną rzecz” staje się szkodliwy?


title: Standardowa metoda uwierzytelniania -serwer-serwer- i -przeglądarka-serwer-

text: Mam serwer z pewnymi zasobami; do tej pory wszystkie te zasoby były żądane przez przeglądarkę przez człowieka, a uwierzytelnianie odbywało się metodą nazwy użytkownika/hasła, która generuje ciasteczko z tokenem (aby sesja była otwarta przez jakiś czas). W tej chwili system wymaga, aby inne serwery wysyłały żądania GET do tego serwera zasobów, ale muszą się uwierzytelnić, aby je uzyskać. Korzystaliśmy z listy autoryzowanych adresów IP, ale posiadanie dwóch metod uwierzytelniania sprawia, że kod jest bardziej złożony. Moje pytania to: * Czy istnieje jakaś standardowa metoda lub wzorzec uwierzytelniania użytkowników i serwerów przy użyciu tego samego kodu? * Jeśli tak nie jest, czy metody, których teraz używam, są właściwe, czy też istnieje lepszy/bardziej standardowy sposób na osiągnięcie tego, czego potrzebuję? Z góry dziękuję za wszelkie sugestie.


title: jak programowo zbudować siatkę zazębiających się, ale losowych kwadratów?

text: Chcę stworzyć dwuwymiarowy układ prostokątnych kształtów, siatkę złożoną z kostek o losowych rozmiarach. Sześcian powinien pasować do siebie i mieć równe wypełnienie lub margines (odstęp między). Coś w rodzaju układu komiksowego lub bardziej jak na załączonym obrazku. Jak mogę to zrobić proceduralnie? Praktycznie prawdopodobnie używałbym Pythona i jakiegoś oprogramowania graficznego do renderowania obrazu, ale nie znam typu algorytmu (lub czegokolwiek), którego musiałbym użyć do wygenerowania randomizowanej siatki. ![losowe kostki](http://i.stack.imgur.com/XDzF3.jpg)


title: Szacowanie czasu planowania i projektowania technicznego za pomocą harmonogramu opartego na dowodach

text: Jestem na początku projektu deweloperskiego w dużej organizacji. Wymagania funkcjonalne są obecnie opracowywane i dokumentowane z naszymi interesariuszami biznesowymi przez nasz dział Enterprise Design. Jestem zobowiązany do przygotowania dokumentacji projektu technicznego i zarządzania zespołem, aby faktycznie zbudować rozwiązanie. Chcę wypróbować planowanie oparte na dowodach, ale jak rozumiem, częścią tego jest rozbicie zadania na małe zadania trwające mniej niż 14 godzin, co wymaga ode mnie wykonania projektu technicznego. **W związku z tym, czy harmonogramowanie oparte na dowodach może być stosowane dopiero po wykonaniu projektu technicznego?** Jak następnie zaplanować i oszacować czas, jaki może zająć opracowanie projektu technicznego?


title: Projektowanie rozszerzalnych, interaktywnych systemów

text: The Pinoccio Problem Steve'a Yegge'a opisuje bardzo szczególny rodzaj programu: taki, który nie tylko spełnia pierwotny cel swoich twórców, ale także jest zdolny do wykonywania dowolnych, zdefiniowanych przez użytkownika obliczeń. Zazwyczaj zawierają również konsolę, za pomocą której można przeprogramować oprogramowanie w czasie wykonywania, być może utrzymując modyfikacje. Uważam, że ten problem jest bardzo trudny do uzasadnienia - wydaje się, że istnieje konflikt między implementacją "podstawowych modułów" programu, a uczynieniem systemu naprawdę niezależnym od implementacji (tj. Żadna funkcjonalność nie jest zakodowana na stałe). **Więc jak zaprojektować taki program - jakie techniki mogą pomóc? Czy to dobrze poznany temat?**


title: Narzędzia do zarządzania oprogramowaniem do zwinnego rozwoju procesów

text: Chcielibyśmy wdrożyć proces Agile/Scrum do naszego codziennego zarządzania oprogramowaniem, aby zapewnić lepszą widoczność postępów i zarządzanie funkcjami, oto niektóre z działań, które chcemy wykonać: 1. Codzienny stand-up 2. Cykle wydawnicze 6 tygodni z 3 2-tygodniowymi iteracjami. 3. Posiadanie backlogu produktu ( _integracja z bugzillą_ ) i oszacowanie błędów. 4. Drukowanie dziennego wypalania, aby prędkość była widoczna. Kiedy jest używany jako motywator, jest świetny. 5. Łatwe śledzenie rozwoju funkcji i pełna widoczność, szczególnie dla sprzedawców i interesariuszy (oznacza to, że musi to być narzędzie internetowe). 6. **Mój zespół jest rozproszony, więc fizyczne tablice są niewykonalne.** Czy istnieje narzędzie internetowe, które spełnia nasze potrzeby? Słyszałem, że icecrum może być jednym, ale nigdy go nie używałem, więc nie wiem. Jest jeszcze kilka sugestii jak tutaj, ale nigdy o nich nie słyszałem, komuś zależy na dopracowaniu lub zaproponowaniu nowych narzędzi?


title: Uruchamianie wielu wersji na tej samej stronie .NET

text: Mam witrynę internetową (która w rzeczywistości jest głównie witryną Web API) i chciałbym mieć jednocześnie dostęp do wielu jej wersji. Obecnie tworzę nową witrynę dla każdej wersji w ramach IIS i odnoszę się do sync2.site.com, sync3.site.com itp. To rozwiązanie nie jest ani zbyt skalowalne, ani łatwe w utrzymaniu. Jak szybko dodać więcej "wersji" tej aplikacji i uzyskać do nich dostęp za pomocą czegoś takiego jak `sync.site.com?version=3`?


title: Martwisz się o wyciek pamięci w bibliotece DLL, który tworzy tablicę o dynamicznym rozmiarze

text: Mam opakowującą bibliotekę DLL, która łączy się z inną biblioteką DLL, która zawiera następującą funkcję: char * Foobar(void) { // BLAH to funkcja z biblioteki DLL, w której to opakowanie też jest interfejsem char *array = 0; // Ustaw wskaźnik tablicy do dynamicznej alokacji pamięci. int LiczbaZnaków = 0; // Zbuduj tablicę dla (int n=0; (*(BLAH+n) != '\0'); n++) { NumOfChar++; // śledź, jak duży jest BLAH. } LiczbaZnaków++; // +1, abym mógł ponownie dodać NULL // Spróbuj przydzielić tablicę na podstawie rozmiaru BLAH To jest dynamiczne... if (!(array = new char[NumOfChar])) { // Jeśli istnieje problem z alokacją pamięci, wyskakuje komunikat. MessageBox (0, "Błąd: brak pamięci.", "Crap", MB_OK); } else { memcpy(tablica, BLAH,(NumOfChar)); // skopiuj zawartość BLAH do tablicy. } tablica[NumOfChar+1]='\0'; // upewnij się, że ostatni znak to NULL FreeLibrary(hGetProcIDDLL); // zwolnij tablicę zwracanych bibliotek DLL; } Dzwonię do tej biblioteki DLL z LabVIEW, która nie jest specyficzna dla tego pytania, ponieważ biblioteka DLL może być wywołana przez dowolny program. Moje pytanie brzmi, gdy Foobar zwróci wskaźnik do tablicy, jak mogę się upewnić, że tablica zostanie później zwolniona? Wydaje się to być wyciekiem pamięci, ponieważ następnym razem, gdy ta procedura zostanie wywołana, następna tablica niekoniecznie zastąpi starą tablicę. Po prostu zużyje coraz więcej pamięci, czy mam rację w tej logice? Dziękuję Ci


title: Jakie są argumenty przeciwko lub za umieszczeniem logiki aplikacji w warstwie bazy danych?

text: Większość programistów chce zachować logikę aplikacji w warstwie aplikacji i prawdopodobnie wydaje się to naturalne dla nas, aby zachować ją tutaj. Wydaje się, że twórcy baz danych chcą umieścić logikę aplikacji w warstwie bazy danych jako wyzwalacze i procedury składowane. Osobiście wolałbym zachować jak najwięcej w warstwie aplikacji, aby ułatwić debugowanie i oddzielić obowiązki warstw. Jakie są Twoje przemyślenia na ten temat i co powinno lub nie powinno być w porządku, aby zaimplementować w warstwie bazy danych? **Edytuj** To pytanie jest również omówione na dba.se z perspektywy administratorów baz danych. Ponieważ programrs.se i dba.se mają różnych odbiorców i uprzedzenia, przyszli czytelnicy mogą chcieć przejrzeć oba zestawy odpowiedzi, zanim zdecydują, co jest dla nich najlepsze.


title: Czy jest możliwe/prawdopodobnie uczciwe wynagrodzenie bez dyplomu ukończenia studiów wyższych?

text: Trochę historii, a potem moje pytanie: zrobiłem sobie „przerwę” od zdobycia wykształcenia uniwersyteckiego w zeszłym roku, aby pracować na pełny etat jako back-end developer nad aplikacją GIS za 10,50 $ za godzinę. Później w tym samym roku zostałem zatrudniony przez dość prestiżową organizację na ich aplikacji GIS za skromną pensję + rockin' benefity (nie żebym ich potrzebował). Zgodziłem się pracować nad tym projektem do lata 2012. Nie czuję, żebym był sprawiedliwie wynagradzany za swój czas. Inni członkowie zespołu zarabiają 3-5 razy więcej niż ja, a ich praca nie jest 3-5 razy lepsza od mojej, ani nie mają 3-5 razy większej wydajności. Nie sądzę, żeby w tej instytucji była to sytuacja możliwa do naprawienia. Mają zestaw kart personalnych i sposób, w jaki jest on obliczany, zarabiam mniej niż którykolwiek z woźnych (którzy są bardzo dobrzy i bardzo mili, i cieszę się, że tak dobrze im płacą. Ja życzę wszystkim godnych zarobków). Jestem całkiem bystra, ale szkoła to nuda. Nie chcę mega dolców, chcę tylko 40 tysięcy dolarów rocznie (zlokalizowanych w południowo-wschodnich stanach USA), żebym mógł zaoszczędzić wystarczająco dużo pieniędzy na podróże, a może „dokończyć [moją] edukację”. Moje pytanie brzmi: czy ludzie bez stopni naukowych są kiedykolwiek wynagradzani proporcjonalnie do innych osób, które mają stopnie naukowe? Jako ktoś, kto nigdy „nie ukończył edukacji”, jak bardzo uważasz, że to cię boli? Jak radzisz sobie z procesem poszukiwania pracy i zatrudniania? Jako osoba zatrudniająca programistów płacisz więcej za dyplomy? Czy jest to konieczność instytucjonalna, czy opiera się na własnym osądzie wartości?


title: Licencja na bezpłatne, ale ograniczone udostępnianie oprogramowania

text: Zbudowałem bibliotekę JavaScript, którą chciałbym udostępnić za darmo w mojej społeczności użytkowników. Jednak chcę mieć to pod kontrolą i nie pozwalać moim użytkownikom na przekazywanie ich innym bez mojej zgody. O ile wiem, licencja MIT lub GPL nie zadziała w tym scenariuszu. Jakie mam opcje licencjonowania? Tło: W przeszłości miałem złe doświadczenia, kiedy moje rozwiązania były używane w sytuacjach innych niż zamierzone, co powodowało problemy z konserwacją i bezpieczeństwem. Tym razem jestem bardziej ostrożny.


title: Strategie buforowania - LRU, MRU, Clock-Pro

text: Mam zamiar napisać pracę naukową licencjacką na temat strategii buforowania i naprawdę nie mogę znaleźć żadnych linków do specyfikacji lub pełnych opisów niektórych z nich. Tylko coś takiego jak streszczenia z wikipedii. Proszę o pomoc z kilkoma linkami dotyczącymi buforowania LRU, MRU i nowego - Clock Pro. * * * Wielkie dzięki. Wszystkie linki są dla mnie bardzo przydatne. Celem pracy jest porównanie różnych strategii pamięci podręcznej w celu uzyskania większej wydajności. Opiera się na WebApplication z ejb 2.0, więc zostaną tam zaimplementowane algorytmy, szczególnie w ejbLoad() i ejbFindByPrimarKey(). Również jeden z aspektów tej aplikacji - będzie wykorzystywał nietypowy schemat tabel w bazie danych - bazuje na metamodelu. Tak więc, jeśli miałeś jakieś doświadczenie w tym temacie, byłbym wdzięczny za część twojej wiedzy)


title: Czy pytania dotyczące wykresów są powszechne w wywiadach programistycznych?

text: Pomimo stwierdzenia, że wykresy są bardzo ważne, żaden z moich znajomych nie miał pytań związanych z wykresami w wywiadach w Google i Amazon. Przygotowuję się do tych firm właśnie teraz. Czy powinienem się martwić pytaniami dotyczącymi wykresów? Jakie są rzeczy, które musisz wiedzieć w teorii grafów przed pójściem na rozmowy kwalifikacyjne?


title: Ładowanie pliku XML

text: Używam xml do przechowywania informacji między programami. Te informacje są używane na niektórych stronach internetowych oraz w programach C#. Gdy informacje są zmieniane, te zmiany nie są wyświetlane od razu na stronach internetowych, wyświetlają informacje zapisane w pamięci podręcznej, aby strona internetowa pokazała te zmiany, potrzeba kilku odświeżeń. Czy jest jakiś sposób, aby zmusić strony internetowe, aby wyświetlały rzeczywisty plik, a nie ten z pamięci podręcznej?


title: Skojarzenia modelu domeny, które nie wymagają zachowania skojarzonego obiektu. Jak modelować?

text: Od jakiegoś czasu zmagam się z tym pytaniem. Konkretnie myślę w modelu domeny zorientowanej obiektowo. Powiedzmy, że mam dwa byty. „Dostawca” i „Klient”. Istnieje relacja, w której „dostawca” może mieć wielu klientów, a „klient” (w tym przypadku) może mieć tylko jednego „dostawcę”. Problem, który mam polega na tym, że żaden obiekt nie potrzebuje żadnego zachowania drugiego obiektu, tj. obiekt dostawcy nie musi wykorzystywać żadnego zachowania obiektu klienta i na odwrót. Jednak nadal istnieje między nimi związek. Powodem jest to, że domena problemu wymaga, aby wszyscy dostawcy, klienci, zostali zniszczeni, jeśli dostawca zostanie zniszczony. Musimy również mieć możliwość pobrania kolekcji wszystkich klientów powiązanych z dostawcą. **Jak to jest zarządzane w modelu domeny OO?** **Kto jest odpowiedzialny za powiązanie?** Niektórzy mogą powiedzieć, że powinna istnieć metoda `getCustomers()` na obiekcie `supplier` i to tutaj stowarzyszenie kłamstwa. Bardzo mi się to nie podoba, ponieważ utrudnia to zamknięcie klasy `dostawcy` (naruszenie zasady Open Closed). Za każdym razem, gdy tworzymy nowy typ klasy, który ma skojarzenie z `dostawcą`, musimy dodać metodę get do `dostawcy`. Myślę, że jedną z rzeczy, które można wykorzystać do modelowania powiązania, są repozytoria (z książki Erica Evens Domain Driven Design). Myślę, że to Repozytorium dba o ten związek? Moglibyśmy wywołać `selectCustomersFor(supplier_id)` itd. **Edytuj** Jedyny powód, dla którego widzę powiązanie, to kryteria pobierania obiektów lub niszczenie obiektu (tj. jeśli użytkownik zostanie zniszczony, wszyscy klienci zostaną zniszczeni). Według mnie żaden przedmiot nie jest odpowiedzialny za odzyskanie lub zniszczenie siebie. Można argumentować, że dostawca powinien odzyskać/zniszczyć klienta, ale z pewnością narusza to zasadę pojedynczej odpowiedzialności i może również prowadzić do naruszenia otwartego zamkniętego. Dlaczego mielibyśmy wtedy zawracać sobie głowę dodawaniem odpowiedzialności za skojarzenie do obiektu, który go nie używa? Jest bezużyteczny dla obiektu. Stowarzyszenie nie jest jednak bezużyteczne, po prostu czuję, że powinno być za to odpowiedzialne coś innego.


title: Kodowanie ciągów w instancjach ciągów z różnych języków

text: Niedawno otrzymałem wymaganie stworzenia aplikacji typu chat, a raczej podstawy klas i metod, które pozwoliłyby niektórym aplikacjom mieć funkcje typu chat. Struktura musi być dostępna w co najmniej dwóch językach: Visual Basic 6 i C#. Jeśli `VB6-Application A` miałby przesyłać łańcuchowe dane do `CSharp-Application B`, gdy dane są odbierane przez `CSharp-Application B` i umieszczane w `stringu`, czy mogę założyć, że łańcuch będzie zawierał te same informacje zawierał, gdy wysłał go `VB6-Application A`? (tj. będzie zawierał tę samą sekwencję bajtów, która została wysłana z oryginalnego wystąpienia ciągu w aplikacji VB6.)


title: Rozwój funkcji sponsorowanych przez Open Source

text: Rozważam sponsorowanie rozwoju pewnych konkretnych funkcji w niektórych narzędziach Open Source. Chciałbym, aby wyniki prac były dostępne publicznie i jeśli to możliwe, aby zostały włączone do głównej linii produktowej. Funkcje są zwykle czymś ogólnym, ale niezbyt krytycznym i nikt nie ma obecnie planu ich rozwijania. Dla ilustracji wyobraź sobie, że chciałbym użyć MinGW do rozwoju Win32, ale brakuje mi opcji debugowania post mortem, chciałbym, aby ta funkcja została zaimplementowana i jestem gotowa zapłacić za nią 1000 USD. Czy istnieje jakiś wspólny sposób postępowania, czy jest to szalenie zależne od projektu? Czy istnieją jakieś ogólne wytyczne, jak skontaktować się z twórcami produktów, czy też są jakieś wspólne miejsca spotkań, w których spotykają się sprytni ludzie open source, którzy mogą być zainteresowani udziałem w takim sponsorowanym rozwoju, które powinienem odwiedzić, aby reklamować opcję sponsorowania? Czy istnieją konkretne sposoby, jak mówić o pracy, aby była bardziej atrakcyjna dla osób uczestniczących w open source (np. udział w konkursie może być dla nich bardziej interesujący niż samo podjęcie płatnej pracy, która może być trochę przyziemna? czuć)? A może jest to coś, o czym myślisz, że ma niewielkie szanse na sukces, ponieważ być może pieniądze mają bardzo małą wartość dla programistów open source? Wszelkie wskazówki i doświadczenia od kogoś, kto ma pewne doświadczenie w sponsorowaniu open source z dowolnej strony (sponsora lub dewelopera) są mile widziane.


title: „Centrum zasobów”: czy zasoby powinny być ujawniane jako stałe publiczne, czy przez pobierające?

text: Pracuję nad aplikacją związaną z muzyką. Od początku prac nad aplikacją miałem publiczną klasę `MusicalResources`. Klasa miała „publiczny statyczny finał”, „Notatki” i „Akordy”. Każdy obiekt, który potrzebował nuty lub akordu, uzyskiwał do niego dostęp za pośrednictwem tej klasy, na przykład: `MusicalResources.C3` (`C3` to `Note`). Miałem pewne problemy z tą klasą w dalszej części projektu i postanowiłem stopniowo zastąpić ją nową klasą `NoteFactory`. Jest to również klasa statyczna, ale zamiast zawierać wiele stałych publicznych, zawiera publiczną metodę `getNote`, która przyjmuje nazwę notatki (np. `"C2"`) i zwraca pasujący obiekt `Note`. To pozwala mi, hipotetycznie, kontrolować sposób, w jaki otrzymuję notatki, które zwracam rozmówcy. Mogę przechowywać je wszystkie w Hashtable i zawsze zwracać te same lub mogę utworzyć nową instancję przy każdym połączeniu, cokolwiek. Jednak w rzeczywistości nie jestem pewien, co jest nie tak z oryginalnym `MusicalResources`. _Wydaje się_, że sprawia mi to problemy, ale wciąż nie jestem pewien, _jak_. Więc moje pytanie brzmi: gdy w Twojej aplikacji jest miejsce „centralny zasób”, czy powinieneś ujawniać zasoby za pomocą getterów, czy poprzez pola `public static final`?


title: MATLAB - błąd przy użyciu struktury dla mmreadera

text: Próbuję użyć mmreadera, aby przesłać wideo do MATLAB. Próbuję postępować zgodnie z przykładem w dokumentacji, jednak w linii move(1:nFrames) = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),'colormap',[]); Otrzymuję następujący błąd: ??? Wystąpił następujący błąd podczas konwersji ze struktury do mmreader: Błąd przy użyciu ==> którego Argument musi zawierać ciąg. Błąd w ==> VIDEO2 o 16 mov(1:nFrames) = struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),'colormap',[]); Jakieś pomysły, co może być nie tak?


title: Tworzenie obiektu, który jest gotowy do użycia i nieustawionych właściwości - z IoC

text: Mam pytanie dotyczące specyfiki tworzenia obiektów i wykorzystania właściwości. Najlepszą praktyką jest wprowadzenie wszystkich właściwości w taki stan, aby obiekt był użyteczny podczas jego tworzenia. Konstruktory obiektów pomagają zapewnić utworzenie wymaganych zależności. Ostatnio przyłapałem się na tym, że podążam za wzorcem, a potem kwestionuję jego stosowność. Wzorzec wygląda tak... public class ThingProcesser { public List<Thing> CalculatedThings { get; ustawić; } public ThingProcesser() { CalculatedThings = new List<Thing>(); } public double FindCertainThing() { CheckForException(); foreach (var thing w CalculatedThings) { //zrób coś z rzeczami... } } public double ZnajdźOtherThing() { CheckForException(); foreach (var thing w CalculatedThings) { //zrób coś z rzeczami... } } private void CheckForException() { if (CalculatedThings.Count < 2) throw new InvalidOperationException("Obliczone rzeczy muszą mieć więcej niż 2 pozycje"); } } Lista elementów nie jest zmieniana, tylko przeglądana przez metody. W klasie jest kilka metod i aby uniknąć konieczności przekazywania listy rzeczy do każdej funkcji jako parametru metody, ustawiłem ją raz w klasie. Czy to działa, ale czy narusza zasadę najmniejszego zdziwienia? Odkąd zacząłem używać IoC, stwierdziłem, że nie wklejam rzeczy do konstruktora, aby uniknąć konieczności używania wzorca fabrycznego. Na przykład mogę spierać się ze sobą i powiedzieć, że ThingProcessor naprawdę potrzebuje listy do działania, więc obiekt powinien być skonstruowany w ten sposób. public class ThingProcesser { public List<Thing> CalculatedThings { get; ustawić; } public ThingProcesser(List<Rzecz> Obliczone Rzeczy) { Obliczone Rzeczy = Obliczone Rzeczy; } } Jednak gdybym to zrobił, skomplikowałoby to sprawy dla IoC, a ten scenariusz nie wydaje się odpowiedni dla czegoś takiego jak wzorzec fabryki. Podsumowując, czy istnieją dobre wytyczne dotyczące tego, kiedy coś powinno być częścią stanu obiektu, a kiedy przekazywane jako parametr metody? Czy w przypadku korzystania z IoC wzorzec fabryki jest najlepszym sposobem radzenia sobie z obiektami, które należy utworzyć za pomocą stanu? Jeśli coś musi zostać przekazane do wielu metod w klasie, czy to sprawia, że jest to dobry kandydat do bycia częścią stanu obiektów?


title: Projektowanie metod związanych z bazą danych, które lepiej zwrócić: prawda/fałsz czy wiersz dotyczy?

text: Mam kilka metod, które wykonują niektóre zmiany danych w bazie danych (wstawianie, aktualizowanie i usuwanie). ORM używam zwracanych wartości int dotkniętych wierszem dla tego typu metody. Co powinienem zwrócić dla „mojej metody”, aby wskazać stan powodzenia/porażki operacji? Rozważmy kod, który zwraca `int`: A.1 public int myLowerLevelMethod(int id) { ... int ImprovesRows = myOrm.deleteById(id) ... return givenRows; } Następnie użyj: A.2 public void myOtherMethod() { ... int influenceRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Sukces } else { // Niepowodzenie } } Porównaj z użyciem wartości logicznej: B.1 public boolean myLowerLevelMethod(int id) { ... int ImproveRows = myOrm.deleteById(id) ... return visibleRows > 0; } Następnie użyj: B.2 public void mojaOtherMethod() { ... boolean isSuccess = myLowerLevelMethod(id) if(isSuccess) { // Sukces } else { // Niepowodzenie } } Który (A czy B) jest lepszy? A może plusy/minusy każdego z nich?


title: Architektura do obsługi współbieżności usług na zasobach udostępnianych przez REST API

text: Frameworki REST API, takie jak Python Eve, obsługują kontrolę współbieżności za pomocą tagu encji. Gwarantuje to, że kilku klientów, którzy załadowali ten sam zasób, nie nadpisze zmian od siebie nawzajem, ponieważ znajdą oni zmodyfikowany znacznik encji podczas zapisu i będą mogli zaktualizować swoją kopię przed zapisaniem. Ma to krytyczne znaczenie w przypadku aplikacji internetowych, w których strona lub zasób może pozostać w przeglądarce przez długi czas, zanim zostanie odesłana z pewnymi zmianami. Moje pytanie dotyczy jednej lub kilku usług zaplecza integrujących się w tym scenariuszu. Jeśli usługa modyfikuje niektóre zasoby, powinna wziąć pod uwagę współbieżność z klientami. Możliwe sposoby, które widzę to: 1. Wystarczy zaktualizować zasoby przez REST API 2. Ponowne wykorzystanie logiki współbieżności z frameworka REST w celu spójnej modyfikacji zasobów Pierwsze rozwiązanie wydaje się dość nieefektywne, szczególnie w przypadku aktualizacji zbiorczych, podczas gdy druga tworzy silne ograniczenie między różnymi komponentami, które musiałyby być napisane w tym samym języku, używać tej samej wersji frameworka itd. Chociaż wydaje się to być dość powszechnym przypadkiem użycia, nie mogłem znaleźć dokumentacji na temat zalecanego sposobu wykonania tego, nawet w innych frameworkach, takich jak Django czy Rails. Postrzegam to jako typowe pytanie architektoniczne: jak usługi i REST API powinny integrować się w idealny sposób pod względem współbieżności? Mam nadzieję, że dobrze jest zadać pytanie dotyczące różnych technologii, ponieważ może nam się przydać poznanie sposobu rozwiązywania problemu w kilku frameworkach.


title: Round Robin - jak określić optymalny kwant czasu?

text: Muszę obliczyć odpowiednią ilość czasu dla algorytmu planowania procesów Round Robin. Jak czytałem w książce Tanenbauma, kwant czasu powinien obejmować około 80% czasu trwania wszystkich procesów. Czy istnieje formuła, jak znaleźć optymalny kwant czasu?


title: Jak modelować relację jeden z wielu?

text: **Mam następujący model klasy, z którego jestem całkiem zadowolony:** ![Model klasy](http://i.stack.imgur.com/M7knB.png) „Whole” ma specjalną obowiązkową „Część” . Ponadto posiada zbiór części, który zawiera przynajmniej część obowiązkową, ale może zawierać o wiele więcej. W modelu OO części nie muszą wiedzieć, gdzie się znajdują. **Więc teraz wymyśliłem ten model RDB:** Whole: id - klucz podstawowy special_part_id - klucz obcy nie dopuszczający wartości null Part: id - klucz podstawowy whole_id - klucz obcy nie dopuszczający wartości null Jedyny ograniczeniem, które nie jest tutaj zaznaczone, jest `Cała = Cała.special_mandatory_part.whole`. Jednak przy takim układzie tabeli nie mogę nawet wstawiać wierszy. Może warto wspomnieć, że używam ORM-a, ale nawet przy zwykłym SQL nie wiedziałbym, jak to zrobić. Więc moje pytania to: * Czy ten projekt DB jest zły, a jeśli tak, dlaczego? * ~~Jeśli nie, jak wstawić wiersze?~~ * Jaki projekt poleciłbyś i dlaczego? Zdaję sobie sprawę z tego bardzo podobnego pytania. Jednak ze względu na ograniczenie `not null` mój problem jest nieco inny (co gorsza) i nie jestem zadowolony z podanych odpowiedzi. **AKTUALIZACJA** Właśnie znalazłem odpowiedź na temat wstawiania wierszy o takim układzie tabeli.


title: Wypychanie nowej wersji działającej aplikacji internetowej w przepływie pracy opartym na Git

text: Mam pytanie dotyczące przepływu pracy w tworzeniu stron internetowych. Tworzę swój projekt w Symfony i jest on w Git. W tej chwili mam trzy środowiska, dev (lokalne), staging i prod. Sam projekt jest hostowany na GitHub w prywatnym repozytorium. Zastanawiam się, jaki jest dobry sposób na aktualizację środowisk pomostowych i produkcyjnych. Czy powinienem w jakiś sposób skonfigurować system oparty na wypychaniu, aby móc wypchnąć gałąź prod/staging bezpośrednio na mój serwer i użyć zaczepów Git do ponownego generowania plików pamięci podręcznej i uruchamiania migracji baz danych? Obecnie w podobnych projektach używam ręcznego systemu ściągania, gdzie SSH do serwera, ściągam zmiany z gałęzi prod Git i ręcznie uruchamiam cache/migracje. To oczywiście nie jest idealne.


title: Czy inżynieria oprogramowania i informatyka powinny być osobnymi kierunkami?

text: Przez dziesięciolecia akceptowanym stopniem, aby zostać programistą, był „Compter Science”. Mieliśmy już kilka pytań o to, czy ten stopień rzeczywiście przygotowuje studentów do tworzenia oprogramowania. Niektóre szkoły w ciągu ostatnich 8 lat zaczęły oferować wiele odrębnych kierunków programowania. Korzystanie z programu nauczania z mojej szkoły: * **Informatyka** , który zaczyna się od kilku kursów programowania wprowadzającego na pierwszym roku, a następnie skupia się na teoretycznych informatyce, algorytmach i odrobinie rzeczy związanych z systemem operacyjnym. Większość zajęć obejmuje kilka mniejszych projektów i prac domowych, wykonywanych indywidualnie lub w parach. * **Inżynieria oprogramowania** , która zaczyna się od tych samych wstępnych kursów programowania, prowadzi kilka zajęć teoretycznych, a następnie przechodzi do praktyk tworzenia oprogramowania (testowanie, metodologie procesów, metryki oprogramowania, zbieranie wymagań) i projektowania oprogramowania (system rozproszony projektowanie, projektowanie systemów informacyjnych, projektowanie w czasie rzeczywistym/osadzone, projektowanie podsystemów itp.) Różne szkoły robią to w różny sposób, więc powyższe jest tylko przykładem ze świata rzeczywistego, który znam. Pytam: czy istnieje zapotrzebowanie na odrębne kierunki w programowaniu?


title: Projektowanie warstwy usług

text: Zajmuję się tworzeniem serwisu MVC w PHP i po raz pierwszy chciałbym zaimplementować warstwę serwisową. Mam pewne względy projektowe, na które chciałbym uzyskać poradę. Backend w żadnym wypadku nie będzie dużym systemem korporacyjnym, więc staram się zachować stosunkowo prostotę, jednocześnie wykorzystując zalety warstwy usług. Chodzi o to, aby moje kontrolery wchodziły w interakcję z usługami, które z kolei będą współdziałać z DAO. Moje główne pytanie brzmi, jak szczegółowe powinny być moje usługi. Znam pojęcie granulacji usług w SOA, ale nigdy nie wdrażałem tego w praktyce. Na przykład, aby obsłużyć rejestrację użytkownika, czy powinienem mieć klasę `RegistrationService`, czy powinienem mieć `UserService`, która zawiera metodę `register` wraz z innymi usługami związanymi z użytkownikiem? Pierwsze podejście oznacza, że będę miał warstwę usług pełną małych lub drobnoziarnistych usług, ale myślę, że to dobrze. To ostatnie wydaje się utrudniać ponowne wykorzystanie usług i skutkuje tworzeniem dużych klas z wieloma metodami. Może zamiast tego powinienem połączyć te dwa podejścia, aby zapewnić możliwość ponownego wykorzystania moich usług? Na przykład, miej `RegistrationService`, który współdziała z klasą DAO. Wtedy mógłbym mieć klasę `UserService` z metodą `register`. Ta metoda współdziała z drobnoziarnistą usługą „RegistrationService”. W ten sposób `RegistrationService` można łatwo ponownie wykorzystać do tworzenia bardziej gruboziarnistych usług. Z pewnością istnieją przykłady, w których ponowne użycie byłoby bardziej prawdopodobne; na przykład złożenie zamówienia wymagałoby użycia/zarządzania wieloma różnymi usługami. Myślę, że można by to nazwać podejściem „warstwowym”, o którym wspominałem już wcześniej. Czy mogę zorganizować to w taki sposób, aby moja warstwa usług nie pogrążyła się w bałaganie? Chętnie poznam Twoje przemyślenia na ten temat, niezależnie od tego, czy masz inne sugestie, rekomendacje i doświadczenia, czy komentarze do pomysłów, które przedstawiłem powyżej. Z góry dziękuję.


title: Czy ustawienie funkcji public wpływa na zdolność kompilatora C# do wbudowania funkcji jako optymalizacji?

text: Może to dotyczyć kompilatorów .NET lub Mono. Wiem, że pod pewnymi warunkami kompilator może wbudować funkcje (np. mała, pojedyncza strona wywołania itp.) jako optymalizację. Jeśli jednak funkcja jest publiczna, musi mieć zewnętrzny punkt wejścia. Czy w takich przypadkach generowany jest zduplikowany kod (publiczny punkt wejścia, który nie jest używany przez kod wewnętrzny, ponieważ kod wewnętrzny używa wersji wbudowanej), czy też oznaczenie go jako publicznego uniemożliwia kompilatorowi przeprowadzenie takiej optymalizacji?


title: Piszesz moje podejście do rozwiązywania problemów na papierze?

text: Jestem studentem pierwszego roku informatyki i właśnie zaczęliśmy robić kilka rzeczywistych projektów w Pythonie. Odkryłem, że jestem bardzo wydajny, kiedy używam metody pióra i papieru, którą zasugerował mój profesor na zajęciach. Ale kiedy nie mogę zapisać swojego problemu i rozpracować algorytmów na papierze, jestem naprawdę powolny. Podczas laboratoriów zawsze muszę zabierać zadanie z powrotem do akademika. Kiedy dotrę na miejsce i napiszę to, rozwiązuję problem, który zajął mi całą klasę w jakieś 5 minut. Może to dlatego, że denerwuję się, widząc przede mną ludzi rozwiązujących laboratoria. A może to metoda pióra i papieru. Przeglądałem fora i ktoś napisał, że jeśli musisz pisać swoje programy na papierze, to nie powinieneś być programistą. Naprawdę się martwię, ponieważ czuję się o wiele lepiej, gdy widzę, co robi program i śledzę to, zanim wpiszę właściwy kod. czy robię coś źle? Edycja: Przepraszam za niejasność, ale kiedy powiedziałem, że pisanie na papierze, miałem na myśli moje podejście do rozwiązywania problemów (np. pisanie przykładów, tworzenie tabel z wartościami itp.), a nie mój rzeczywisty kod. Po prostu używam papieru do wydawania moich pomysłów.


title: Jak wykonać blokowanie i nie korzystać z bazy danych?

text: Mam projekt, który polega na przepisaniu prawie całego zaplecza starszej aplikacji. Używa XML do trwałości i został pierwotnie napisany jako system jednego użytkownika. Mając jeden duży plik XML, do którego może mieć dostęp wielu użytkowników, a tym samym ulegać uszkodzeniu, myślałem o wprowadzeniu bazy danych SQL, w której użytkownik mógłby pracować nad swoimi zasobami i pozwolić bazie danych martwić się o współbieżność. Przy krótkich terminach zastanawiałem się, czy moglibyśmy zachować trwałość xml (jak i całą logikę biznesową) i wprowadzić blokowanie w jakiś inny sposób. czy to możliwe?


title: Czy w kontekście wersjonowania semantycznego zmiana w konfiguracji domyślnej uzasadnia nową wersję główną?

text: Mój moduł jest domyślnie włączony (tj. po dodaniu modułu). Istnieje również konfiguracja, której możesz _opcjonalnie_ użyć, która obsługuje ustawienie `enabled="true|false"`. W ten sposób moduł można wyłączyć po dodaniu, bez konieczności usuwania modułu. Ale zdałem sobie sprawę, że moduł nie działa dobrze z innym modułem, który również jest domyślnie włączony. Rozważam zmianę mojego modułu, aby nie był domyślnie włączony. Zepsułoby się to dla każdego, kto nie włączył go jawnie z ustawieniem konfiguracyjnym `enabled="true"`. Czy powinienem na to poczekać na v2.0? semver.org wspomina o publicznym API i wprowadzaniu zmian, a nie o konfiguracji. Czy ogólnie przyjmuje się, że konfiguracja jest częścią publicznego API?


title: Pisanie testowalnego kodu a unikanie spekulatywnej ogólności

text: Czytałem dziś rano kilka postów na blogu i natknąłem się na ten: > Jeśli jedyną klasą, która kiedykolwiek implementuje interfejs klienta jest > CustomerImpl, tak naprawdę nie masz polimorfizmu i zastępowalności > ponieważ w praktyce nie ma nic do zastąpienia w czasie wykonywania . To fałsz > ogólność. Ma to dla mnie sens, ponieważ implementacja interfejsu zwiększa złożoność, a jeśli istnieje tylko jedna implementacja, można argumentować, że dodaje niepotrzebną złożoność. Pisanie kodu, który jest bardziej abstrakcyjny niż powinien, jest często uważany za zapach kodu zwany „spekulacyjną ogólnością” (również wspomniany w poście). Ale jeśli podążam za TDD, nie mogę (łatwo) tworzyć testowych dublerów bez tej spekulatywnej ogólności, czy to w postaci implementacji interfejsu, czy naszej innej opcji polimorficznej, dzięki czemu klasa jest dziedziczna, a jej metody wirtualne. Jak więc pogodzić ten kompromis? Czy warto być spekulatywnie uogólnionym, aby ułatwić testowanie/TDD? Jeśli używasz testowych dublerów, czy liczą się one jako drugie implementacje, a tym samym sprawiają, że ogólność nie jest już spekulatywna? Czy powinieneś rozważyć bardziej ciężką platformę do prześmiewania, która pozwala na wyśmiewanie konkretnych współpracowników (np. Moles kontra Moq w świecie C#)? A może powinieneś testować z konkretnymi klasami i pisać to, co można uznać za testy „integracyjne” do czasu, gdy Twój projekt naturalnie będzie wymagał polimorfizmu? Z ciekawością zapoznam się z opiniami innych osób w tej sprawie - z góry dziękuję za opinie.


title: Jak zapobiec uszkodzeniu hierarchicznego drzewa XML?

text: Mamy drzewo XML, które przechowuje relacje między folderami i plikami wideo. Tak więc każdy folder może zawierać nazwę artysty, a pod nim mamy filmy artysty. Również każdy folder może mieć inne podfoldery. Ta struktura drzewa może być dostępna dla wielu użytkowników, gdzie niektórzy użytkownicy mogą usuwać filmy, inni przenosić filmy między folderami, a jeszcze inni mogą zmieniać nazwy folderów. To, czego potrzebuję, to mechanizm, w którym blokuję części drzewa, gdy pracuje na nim jeden użytkownik i gdy wielu użytkowników pracuje na swoich częściach drzewa, gdy wprowadzają zmiany, drzewo nie jest uszkodzone. Czy można to zaimplementować przy użyciu XML?


title: Uczysz się nowego konceptu - pisz od podstaw czy używaj frameworków?

text: Ostatnio próbowałem poznać MVVM i wszystkie związane z nim koncepcje, takie jak repozytoria, mediatorzy, dostęp do danych. Podjąłem decyzję, że nie będę używał do tego żadnych frameworków, aby móc lepiej zrozumieć, jak to wszystko działa. Zaczynam się zastanawiać, czy to był najlepszy pomysł, bo natrafiłem na pewne problemy, których nie jestem w stanie rozwiązać, nawet z pomocą Stack Overflow! **Piszę od zera** Nadal czuję, że znacznie lepiej rozumiesz coś, gdy byłeś w bebechach niż gdybyś był na wyższym poziomie. Drugą stroną medalu jest to, że jesteś we wnętrzu czegoś, czego nie do końca rozumiesz, co doprowadzi do złych decyzji projektowych. Utrudnia to uzyskanie pomocy, ponieważ stworzysz nietypowe scenariusze, które są mniej prawdopodobne podczas pracy w ramach frameworka. Odkryłem, że istnieje wiele samouczków dotyczących podstaw koncepcji, ale bardzo niewiele, które prowadzą od nowicjusza do eksperta. Może powinienem zajrzeć do książki? **Korzystanie z frameworków** Największą motywacją dla mnie do korzystania z frameworków jest to, że jest znacznie bardziej prawdopodobne, że będą używane w miejscu pracy niż niestandardowe rozwiązanie rolowane. Może to być całkiem korzystne przy rozpoczynaniu nowej pracy, jeśli jest to jedna rzecz mniej, której musisz się nauczyć. Czuję, że istnieje znacznie lepsze wsparcie dla frameworka niż niestandardowe rozwiązanie, które ma sens; znacznie więcej osób korzysta z frameworka niż z rozwiązania, które stworzyłeś. Również poziom pomocy jest znacznie szerszy, od pytań podstawowych do naprawdę szczegółowych, szczegółowych. Chciałbym usłyszeć opinie innych ludzi na ten temat. Kiedy uczysz się czegoś nowego, czy powinieneś/korzystasz z frameworków, czy nie? Czemu? Jeśli jest to połączenie obu, kiedy zatrzymujesz jedno i przechodzisz do drugiego?


title: Dlaczego firma Microsoft często używa ogólnych nazw produktów?

text: Microsoft wydaje się używać takich ogólnych nazw dla swoich podstawowych produktów, że wydaje się, że musiało to być lub było częścią przemyślanej strategii. Jest to tak powszechne, że wydaje mi się, że mogło powstać jako sposób na przytłoczenie klienta biznesowego lub studenta szkół średnich, który niejasno wie, że serwery SQL istnieją – że serwery SQL są produktami specyficznymi dla Microsoftu. To samo z serwerem wymiany poczty. Mianowicie: SQL Server (najbardziej ogólny możliwy termin, mimo że zastrzegają sobie znak towarowy) Exchange Server (patrz rfc od lat 80. opisujące wymianę poczty i nazywanie ich dokładnie tak) Windows (ogólny termin używany w aplikacjach okienkowych od czasu ich wynalezienia) Office ( jeśli jesteś skłonny zaprotestować, że to naprawdę Microsoft Office, przejdź do strony powitalnej produktu i poszukaj słowa „microsoft”). wiedza, czy jest to w rzeczywistości wzorzec mający na celu skojarzenie w świadomości opinii publicznej podstawowych ogólnych technologii z produktami Microsoft (przy jednoczesnym rozciągnięciu skrajnych granic własności znaków towarowych)?


title: Jeśli ktoś ma uczyć się nowego języka programowania każdego roku, jaka powinna być lista?

text: W pierwszym rozdziale „Pragmatycznego programisty” pierwszym celem nauki jest: > **Naucz się co najmniej jednego nowego języka każdego roku.** Różne języki rozwiązują > te same problemy na różne sposoby. Ucząc się kilku różnych podejść, możesz pomóc poszerzyć swoje myślenie i uniknąć popadania w rutynę. [...] Aby osiągnąć to w ciągu całej kariery, lista języków prawdopodobnie będzie dość długa (zwłaszcza, jeśli nie chcesz „postępować” w zarządzaniu). Wyraźnie widać, że wykształcenie programisty (lub w jakiejkolwiek formie) pozwoli Ci zacząć od podstawowych języków użytecznych komercyjnie (zwykła lista z ogłoszeń o pracę: C, C++, Ruby, Python, JavaScript, C#, Java, VB, .. .). Dodatkowo, formalny lub nieformalny program nauczania prawdopodobnie obejmował podejścia funkcjonalne (poprzez coś takiego jak Haskell, LISP lub język wywodzący się z ML). Ale kiedy nauczymy się rozsądnego podzbioru tej listy – co dalej, _i dlaczego_?


title: Jak uczyć programowania osobę, która ukończyła studia CS, ale przez 5 lat pracowała w innym zawodzie?

text: Mam kolegę, który po 5 latach robienia czegoś innego chce wrócić do programowania. Pięć lat temu pracował z C++ / linux, delphi i dużo z mSQL . Poprosił mnie o pomoc w powrocie do programowania. Zacząłem go wspierać (w C# i Javie), ale widzę, że jest coraz mniej zmotywowany do ćwiczeń. Prawdopodobnie jest sfrustrowany powolnym postępem lub przytłoczonym rzeczami, o których zapomniał. Obecnie szukam sposobu, jak go zachęcić. Obecnie myślę o dwóch możliwych podejściach: 1. znaleźć projekt opensource, nad którym może zacząć pracować 2. wspólnie założyć projekt (np. na assembla.com) i spróbować wspólnie opracować coś, co jest dla niego interesujące. Może powinienem mu doradzić, aby zaczął od języków skryptowych (np. groovy, jython), które pozwalają szybciej programować i nie pisać tak dużo kodu bojlera?


title: Najlepszy sposób na wniesienie pomysłu do korporacji

text: Mam pomysł, który zmieni edukację i mam nadzieję, że zarobi dużo pieniędzy, ale nie ma mowy, żebym mógł go rozwinąć bez pomocy pewnej firmy. Czy istnieje sposób, aby im to dostarczyć, a jednocześnie chronić moje IP? Nie chcę, żeby to ukradli. Przypuszczam, że mógłbym ubiegać się o patent...


title: Jak zaprojektować mój kod, aby mógł używać alternatywnych informacji do tworzenia obiektu?

text: Mam klasę o nazwie `Product`, która pobiera numer modelu produktu i liczbę kół dla tego produktu jako część informacji o jego utworzeniu, a następnie tworzy instancję produktu, wykonując obliczenia na podstawie liczby kół i różnych parametrów podstawowych. Przykład, `Produkt(5, 22)` tworzy produkt modelu 5 z 22 kołami, gdzie waga i wymiary tego konkretnego produktu są _obliczane_ na podstawie liczby kół i specyfikacji bazowych dla tego numeru modelu. W tej chwili specyfikacje podstawowe są częścią samej klasy i są zakodowane w klasie wraz z formułami obliczeniowymi. Mój problem: w (starszym) kodzie, z którym pracuję, nie zawsze mogę bezpośrednio użyć numeru modelu. Może nie być dostępny. Zamiast tego podawany jest niepowiązany `product_id`, gdzie link pomiędzy `product_id` i `model_number` znajduje się w bazie danych. Chcę, aby moja klasa była jak najprostsza. W związku z tym nie chcę wprowadzać innego konstruktora, który pozwala na `product_id` jako parametr wejściowy, oprócz istniejącego `model_number`, ponieważ będzie to duplikacja kodu. Nie bardzo mi też zależy na umieszczaniu logiki bazodanowej wewnątrz klasy, ale może potrafię, myśląc o tym teraz, może to być dobry kandydat na klasę database- wrapper, czyli aktywny rekord (gdzie można przenieść moje specyfikacje bazowe z kodu i do bazy danych). Pytanie: Jak utworzyć i zwrócić obiekt, przestrzegając dobrych zasad obiektowych, kiedy `model_number`, którego zwykle używam do jego tworzenia, nie jest dostępny, ale dostępny jest inny parametr (w tym przypadku `product_id`), który łączy 1: 1 na `numer_modelu`? Przykładowe rozwiązania, które mi się nie podobają: * Nie angażuj bazy danych - ponieważ pracuję w tej chwili z zaledwie kilkoma Produktami, a Produkty nie zmieniają się często, mogę stworzyć "funkcję konwersji", która służy jako mapować między `id_produktu` a `numer_modelu` i nie dotykać bazy danych. Podobnie utwórz obiekt „Konwertuj”, który ma taką samą funkcjonalność i użyj go przed utworzeniem obiektu. Problem: powielanie funkcjonalności DB w kodzie. * Umieść funkcjonalność DB w kodzie i dodaj alternatywny konstruktor. Problem: wiele punktów wejścia tworzenia produktu dla klasy tworzy duplikację kodu. **Aktualizacja:** Zasadniczo są tu 3 aspekty: * dane podstawowe (zakodowane na sztywno lub część bazy danych) * wyszukiwanie danych podstawowych według różnych parametrów, czy to numer modelu, czy inne informacje identyfikujące * wykonywanie obliczeń przy użyciu danych podstawowych zgodnie z numerem modelu


title: nawiasy w szablonach php

text:
Mam skrypt i teraz jest idealny czas, aby mieć możliwość zmiany szablonów `theme`. Nie mogłem się doczekać przechowywania tych plików w plikach `php` lub html. z plikiem `CSS`. Przejrzałem niektóre kody i stwierdziłem, że używają nawiasów do odwoływania się do zmiennej. Oto przykład bloku szablonu:
 {title} {content}
 Wiem, że mogę używać `PHP` vars używając `<?=$var ;?>`. Myślę jednak, że ten powyżej jest lepszy i przejrzałem sieć, aby znaleźć coś na ten temat, ale nie mogłem. Moje pytanie brzmi, jak mogę użyć tych nawiasów w moim kodzie php lub html. aby użytkownik mógł zmienić tylko szablon, a nie kod!


title: Czy kod AfferoGPLv3 może być użyty w kodzie GPLv3?

text: Czy oprogramowanie z licencją AGPLv3 może być używane z projektem GPLv3? Czy wynikowy projekt może być na GPLv3, czy musi mieć specjalne wymagania AGPLv3? Nie jestem zbyt mądry z punktu 13 GLPv3, który wspomina o AGPLv3. > Niezależnie od wszelkich innych postanowień niniejszej Licencji, masz pozwolenie na > połączenie lub połączenie dowolnego dzieła objętego licencją z dziełem na licencji > GNU Affero General Public License w wersji 3 w jedną połączoną pracę oraz na przekazanie > powstałego dzieła. Warunki niniejszej Licencji będą nadal miały zastosowanie do > części, która jest utworem objętym umową, ale specjalne wymagania GNU > Affero General Public License, rozdział 13, dotyczące interakcji za pośrednictwem > sieci, będą miały zastosowanie do kombinacji jako takiej. Czy wynikowa, połączona praca musi być AGPLv3, czy nie?


title: Jakie są metody szacowania wartości kodu źródłowego?

text: Od kilku miesięcy w wolnym czasie pracuję nad jakimś projektem. Ostatnio zwrócili się do mnie znajomi o zbudowanie startupu i ten kod źródłowy byłby dla nas bardzo cenny. Jako współzałożyciel ten kod mógł liczyć na coś w kapitale firmy i być wymieniany na akcje. Ale jak oszacować jego wartość? Czy po prostu mnożysz standardowe zarobki w branży przez czas, który na to poświęcam, czy są inne metody?


title: Dlaczego większość logiki powinna znajdować się w obiektach monitora, a nie w obiektach wątków podczas pisania oprogramowania współbieżnego w Javie?

text: Kiedy uczęszczałem na kurs programowania w czasie rzeczywistym i współbieżnym, nasz wykładowca powiedział nam, że podczas pisania programów współbieżnych w Javie i korzystania z monitorów większość logiki powinna znajdować się w monitorze, a jak najmniej w wątkach, które mają do niego dostęp. Nigdy tak naprawdę nie rozumiałem dlaczego i naprawdę chciałbym. Pozwól mi wyjaśnić. W tym konkretnym przypadku mieliśmy kilka klas. Lift extends Thread Person rozszerza Thread LiftView Monitor, wszystkie metody są zsynchronizowane. To nic, co wymyśliliśmy, naszym zadaniem było zaimplementowanie symulacji windy z osobami czekającymi na różnych piętrach, a tezami były szkielety zajęć, które zostały podane. Następnie nasz wykładowca powiedział, aby większość logiki zaimplementować w monitorze (mówił o klasie Monitor jako monitor) i jak najmniej w wątkach. Dlaczego miałby wygłaszać takie oświadczenie?


title: Wykonując autoryzowane wywołania API Twittera po stronie klienta OAuth w porównaniu z serwerem, jaka jest różnica pod względem wydajności?

text: Pracuję nad aplikacją Twitter w Ruby on Rails. Jednym z największych argumentów, jakie mam z innymi osobami w projekcie, jest metoda wywoływania API Twittera. Wcześniej wszystko odbywało się na serwerze: logowanie OAuth, aktualizowanie danych użytkownika na Twitterze i pobieranie tweetów. Pobieranie tweetów było najcięższą rzeczą do zrobienia, ponieważ nie przechowujemy tweetów w naszej bazie danych, więc przeglądanie tweetów oznacza, że musimy za każdym razem wywoływać API. Jedna z osób biorących udział w projekcie zasugerowała, abyśmy zamiast tego wywoływali tweety przez JavaScript, aby zmniejszyć obciążenie serwera. Użyliśmy wyszukiwania GET, które, popraw mnie, jeśli się mylę, zostanie usunięte, gdy wersja 1.0 stanie się całkowicie przestarzała, ale to naprawdę nie jest teraz problemem. Gdy API Twittera zostanie całkowicie zmigrowane do wersji 1.1 (ponownie, popraw mnie, jeśli się mylę), każde wywołanie API musi być uwierzytelnione, więc musimy uwierzytelnić nasze żądania Javascript do API. Jak wspomniano tutaj: > Nie obsługujemy ani nie zalecamy wykonywania OAuth bezpośrednio przez Javascript > -- jest to niebezpieczne i naraża Twoją aplikację na ryzyko. Jedyny akceptowalny sposób na wykonanie tego > to zachowanie wszystkich kluczy i sekretów po stronie serwera, obliczenie > podpisów OAuth i parametrów po stronie serwera, a następnie wysłanie żądania > > klienta z wartości OAuth generowanych przez serwer. Jeśli zrobimy dokładnie to, co sugeruje Twitter, jedyną różnicą między tym a robieniem wszystkiego po stronie serwera jest to, że nasz serwer nie będzie już musiał kontaktować się z API Twittera za każdym razem, gdy użytkownik chce wyświetlić tweety. Oto jak wyobrażam sobie, co się dzieje za każdym razem, gdy użytkownik wysyła żądanie: ![setup](http://i.imgur.com/qH2yB.png) Jeśli zrobimy to przez JavaScript, będzie to z mojej strony trudniejsze, ponieważ ja musiałbym ręcznie tworzyć podpisy dla każdego żądania, ale chętnie to zrobię, jeśli zwiększenie wydajności jest warte całego zachodu. Zrobienie tego przez Ruby on Rails byłoby bardzo łatwe, ponieważ klejnot na Twitterze już teraz wykonuje większość podstawowej pracy, więc naprawdę zachęcam innych ludzi w projekcie, aby się ze mną zgodzili. Czy różnica w wydajności jest trywialna, czy jest na tyle znacząca, aby przełączyć się na JavaScript?


title: Jak uniknąć przeskakiwania do rozwiązania pod presją?

text: Kiedy w szczególnie surowym terminie programowania (jak godzina), jeśli w ogóle wpadam w panikę, moją tendencją jest wskakiwanie do kodowania bez prawdziwego planu i mam nadzieję, że zrozumiem to w miarę postępów. Mając wystarczająco dużo czasu, może to zadziałać, ale w wywiadzie było to dość nieudane, jeśli nie wręcz przeciwnie do zamierzonego. Nie zawsze czuję się komfortowo, siedząc i myśląc, podczas gdy zegar tyka. Czy istnieje lista kontrolna lub czy istnieją techniki umożliwiające rozpoznanie, kiedy rozumiesz problem na tyle dobrze, aby rozpocząć kodowanie? Kiedy najbardziej produktywne jest myślenie i projektowanie więcej w porównaniu z kodowaniem niektórych eksperymentów i późniejsze wymyślanie całościowego projektu? Oto lista technik przystępowania do testu z matematyki, a druga do egzaminu ustnego. Czy istnieje podobna lista technik rozwiązywania problemów programistycznych pod presją? **ODPOWIEDZI:** Myślę, że to prawidłowa odpowiedź: Jak to rozwiązać. Znalazłem ten link jako odpowiedź na kroki do rozwiązania lub podejście do rozwiązania. Było też kilka naprawdę dobrych wskazówek na temat Czy głośne myślenie podczas wywiadu jest naprawdę najlepszą strategią?. Świetnym i zwięzłym argumentem przemawiającym za TDD jest pierwsza odpowiedź na TDD Pisanie kodu a szukanie odpowiedzi na problem?.


title: Funkcje C# lub .Net do odcięcia przy założeniu, że nie jest wymagana kompatybilność wsteczna?

text: Każdy produkt lub framework ewoluuje. Głównie ma to na celu zaspokojenie potrzeb użytkowników, wykorzystanie nowych mocy obliczeniowych i po prostu ulepszenie. Czasami główny cel projektowy również zmienia się wraz z produktem. C# lub .net framework nie jest wyjątkiem. Jak widzimy, dzisiejsza czwarta wersja bardzo różni się od pierwszej. Ale pojawia się jako barykada tej ewolucji – wsteczna kompatybilność. W większości frameworków/produktów pewne funkcje zostałyby odcięte, gdyby nie było potrzeby obsługi wstecznej kompatybilności. Czym według Ciebie są te funkcje w C#/.net? **Proszę podać jedną funkcję na odpowiedź.**


title: Najlepsze oprogramowanie do zarządzania licencjami i użytkownikami?

text: Obecnie pracuję nad wdrożeniem sklepu internetowego na mojej stronie, aby sprzedawać niektóre produkty oprogramowania. Ten sklep internetowy potrzebuje klienta i bazy danych produktów, aby mógł udzielać użytkownikom licencji. Wdrożenie tego systemu zarządzania użytkownikami, produktami i licencjami od podstaw byłoby dla mnie czasochłonne, więc pytam tych, którzy mają doświadczenie w tego typu rzeczach, jakie są uważane za najlepsze gotowe produkty? EDYTUJ Oto kilka dodatkowych szczegółów. Całe oprogramowanie jest opracowywane wewnętrznie, więc integracja kodu źródłowego jest możliwa, ale ta część jest już obecna. Oprogramowanie sprawdzi, czy licencja jest ważna itp. Mam już kod, który wygeneruje licencje. Pytam o "serwerową stronę" problemu. Pozwól mi to wyjaśnić. Sprzedawane są dwa rodzaje oprogramowania: 1. Aplikacje desktopowe - Użytkownik wchodzi do sklepu internetowego, wpisuje dane karty kredytowej i kupuje licencję na jedną z tych aplikacji. Następnie użytkownik wprowadza licencję i działa aplikacja. 2. Aplikacje internetowe - Użytkownik przechodząc do sklepu internetowego wprowadza również dane karty kredytowej, a następnie otrzymuje nazwę użytkownika i hasło, dzięki czemu może zalogować się do aplikacji internetowej i z niej korzystać. Potrzebuję centralnej bazy danych wszystkich kupujących i wszystkich kupionych przez nich licencji. Czy jest więc jakiś system (w postaci aplikacji internetowej), który może w ten sposób zarządzać kupującymi i zapewnić API dla sklepu internetowego (lub dowolnej innej aplikacji) do przeszukiwania bazy danych, dodawania nowych kupujących, dodawania nowych licencji...


Ostatnio pracuję nad projektami, które intensywnie wykorzystują wątki. Myślę, że jestem w porządku z ich projektowaniem; używaj projektowania bezstanowego tak bardzo, jak to możliwe, blokuj dostęp do wszystkich zasobów, których potrzebuje więcej niż jeden wątek, itp. Moje doświadczenie w programowaniu funkcjonalnym bardzo w tym pomogło. Jednak czytając kod wątków innych osób, jestem zdezorientowany. W tej chwili debuguję impas, a ponieważ styl kodowania i projekt różnią się od mojego osobistego stylu, trudno mi dostrzec potencjalne warunki impasu. Czego szukasz podczas debugowania zakleszczeń?


title: Grupowe przesyłanie wiadomości z komputerów przez Internet

text: Chcę mieć możliwość wysyłania wiadomości między komputerami w sieci internetowej, ale przy minimalnych wymaganiach dotyczących funkcjonalności: 1) komputery mogą dołączyć/opuścić grupę (spodziewam się, że wielkość grupy będzie wynosić maksymalnie 5-10) 2) każda wygenerowana wiadomość przez dowolny komputer zostanie wysłany do każdego innego węzła (jest to główne wymaganie i mam krótkie wiadomości, które należy wysłać w jak najkrótszym czasie: zasugeruj użycie protokołu warstwy sieciowej), wiadomość nie zostanie wysłana ponownie ani potwierdzona (z wyjątkiem zostaw ..ale nadal chcę zachować wysoką niezawodność, czy mogę ją utrzymać bez otrzymywania potwierdzeń? jednym problemem byłoby komunikowanie się przez Internet będę potrzebować jakiegoś wsparcia NAT? jak można tym zarządzać bez serwera ogłuszającego? Czy powinienem używać biblioteki p2p? ponieważ myślę, że większość funkcji, które oferują, nie będzie mi potrzebna, czy ktoś mógłby tu coś zasugerować? Pracuję w C++.


title: Rzuć moją pracę (dla nowej pracy). Stara praca chce, żebym był dostępny do kontraktowania. Kroki do podjęcia?

text: Firma, którą odchodzę, poprosiła mnie, abym od czasu do czasu odpowiadał na pytania i/lub debugował programy, jeśli zajdzie taka potrzeba. Nie jestem temu przeciwny. Po wyszukaniu w google jakiejś standardowej umowy na tego typu rzeczy, nie znalazłem żadnej. Czy istnieje standardowa umowa na tego rodzaju rzeczy, których używasz? Czy są jakieś inne kroki, które powinienem podjąć, aby tego rodzaju układ działał sprawnie?


title: Najlepszy sposób na rozgraniczenie zmiennych elementów ścieżki w dokumentacji kodu?

text: Często jakiś element ścieżki jest zmienny, ale ścieżka jako całość musi być w jakiś sposób udokumentowana dla późniejszych programistów. Zwłaszcza gdy używa się systemów *nix, prawie każdy znak jest prawidłowym symbolem ścieżki. Biorąc to pod uwagę, chciałbym rozgraniczyć zmienne części mojej ścieżki, aby zapobiec nieporozumieniom, ale w sposób, który najlepiej przetrwa również w różnych środowiskach wyświetlania (zwłaszcza w przeglądarce). Metody, które widziałem to (przykładowa ścieżka w katalogu domowym użytkowników): * /home/<nazwa_użytkownika>/foo - wymaga specjalnej ucieczki dla kontekstu przeglądarki internetowej * /home/twoja_nazwa_użytkownika/foo - niestety element zmiennej jest często pomijany * /home /{nazwa_użytkownika}/foo * /home/:nazwa_użytkownika/foo Które widziałeś najczęściej lub z którym odniosłeś największy sukces i dlaczego? Jeśli metoda podwójnego ogranicznika (która wydaje się być najbardziej powszechna/skuteczna), co skłoniło Cię do wyboru ograniczników?


title: Największy błąd, jaki kiedykolwiek popełniłeś

text: Podobnie jak w pytaniu, które przeczytałem na Server Fault, jaki jest największy błąd, jaki kiedykolwiek popełniłeś na stanowisku związanym z IT. Kilka przykładów od znajomych: > Musiałem popracować nad stroną produkcyjną, więc zdecydowałem się skopiować > żywą bazę danych na stronę beta. Dość standardowe, ale kiedy wszedłem na stronę beta >, nadal wyświetlały się nieaktualne informacje. Ups! Skopiowałem bazę danych beta > na działającą witrynę! Dzięki Bogu za kopie zapasowe. A dla mnie stworzyłem formularz na wydarzenie, które miało się odbyć w określonym przedziale czasowym. Uczestnicy wypełniali formularz, aby mieć szansę na wygraną, a my wysyłaliśmy organizatorom wydarzenia plik CSV z bazy danych. Wszedłem do bazy danych i znalazłem TYLKO 1 WPIS, MÓJ. Po sprawdzeniu wygląda na to, że zapomniałem klucza automatycznego przyrostu, a ze względu na konfigurację serwera nie było możliwości odzyskania utraconych danych. Zdaję sobie sprawę, że to pytanie jest podobne do tych na Stack Overflow, ale te, które znalazłem, wydawały się otrzymywać ogólne odpowiedzi zamiast rzeczywistych historii :) Jaki jest największy błąd / błąd kodowania w historii…


title: Dlaczego normalizacja poprawia precyzję liczbową?

text: Czytałem następujący artykuł: Interpolacja wielomianowa współrzędnych satelity GPS, Milan Horemuz i Johan Vium Andersson 2006 i stwierdza on, co następuje: „Procedura estymacji współczynników ai jest wykonywana za pomocą funkcji Matlab polyfit, która szacuje współczynniki co najmniej squares sense. **Aby poprawić precyzję liczbową, zbiór danych p jest znormalizowany** przez wyśrodkowanie go przy średniej zerowej; przez odjęcie jego średniej wartości p; i skalowanie go do jednostkowego odchylenia standardowego poprzez podzielenie każdej obserwacji przez odchylenie standardowe σp w następujący sposób...” Moje pytanie brzmi: w jaki sposób normalizacja wartości poprawia precyzję numeryczną operacji obliczeniowych?


title: Czy metody klasy powinny wywoływać własne metody pobierające i ustawiające?

text: Tam, gdzie pracuję, widzę wiele klas, które robią takie rzeczy: public class ClassThatCallsItsOwnGettersAndSetters { private String pole; public String getField() { pole powrotu; } public void setField(String pole) { this.field = pole; } public void methodWithLogic() { setField("wartość"); //zrób coś String localField = getField(); //zrób coś z "localField" } } Gdybym napisał to od zera, napisałbym zamiast tego `methodWithLogic()` w ten sposób: public class ClassThatUsesItsOwnFields { private String pole; public String getField() { pole powrotu; } public void setField(String pole) { this.field = pole; } public void methodWithLogic() { pole = "wartość"; //rób rzeczy //rób rzeczy z "polem" } } Czuję, że kiedy klasa wywołuje swoje własne gettery i settery, utrudnia to odczytanie kodu. Dla mnie to prawie _implikuje_, że w wywołaniu metody zachodzi złożona logika, chociaż w naszym przypadku prawie nigdy tak nie jest. Kiedy debuguję nieznany kod, kto może powiedzieć, że błąd nie jest efektem ubocznym tej metody? Innymi słowy, zmusza mnie to do wielu podróży pobocznych na drodze do zrozumienia kodu. Czy są korzyści z pierwszej metody? Czy pierwsza metoda jest rzeczywiście lepsza?


title: Co zrobić z prywatnymi polami z getterami i setterami w Javie

text: When is getters and setters justified to doskonałe pytanie, które skupia się na używaniu getterów i seterów jako części interfejsu zewnętrznego. To, z czym zmagam się, to ... dzięki getterom i setterom istnieje teraz wiele sposobów aktualizowania stanu obiektu, ponieważ pola prywatne mogą być aktualizowane bezpośrednio z pominięciem settera lub mogą być aktualizowane przez settera. Weźmy poniższy przykład... _size jest polem prywatnym i posiada dwie metody `getSize()` i `setSize(int size)`. Jeśli zwiększanie _size jest zakodowane jak metoda `increment`, wszystko jest w porządku. Z drugiej strony użycie `increment2` może wprowadzić Order w nielegalny stan. Czy istnieje sposób, aby uniemożliwić programistom przypadkowe ominięcie funkcji pobierającej/ustawiającej i bezpośrednie użycie pól prywatnych!? Jeśli nie, jaką konwencję należy zastosować, aby zapewnić, że obiekt nigdy nie zostanie wprowadzony w nieprawidłowy stan? public class Order { private int _size = 0; public int getSize() { return _size; } public void setSize(int size) { if (_size < 0) throw IllegalArgumentException("...") _size = rozmiar; } public void increment(int increment) { setSize(getSize() + increment); } public void increment2(int increment) { _size = _size + increment; } }


title: Jak szybsza jest konstrukcja „if” w porównaniu z natychmiastową instrukcją „if” (IIF) i kiedy należy jej używać?

text: W jaki sposób tradycyjna instrukcja „jeśli” wypada w porównaniu z instrukcją _natychmiastową, jeśli_ (IIF, zwykle zapisywana jako „warunek ? wartość_jeśli_prawda : wartość_jeśli_fałsz”) pod względem szybkości wykonania? Ponadto, w jakich scenariuszach powinniśmy idealnie korzystać z IIF?


title: Najlepszy sposób na przechowywanie informacji o wersji w celu szybkiego dostępu do przeglądania lub cofania zmian

text: To, czego szukam, to najbardziej optymalne rozwiązanie do przechowywania wersji treści w bazie danych MSSQL. Mamy aplikację, która pozwala użytkownikom wprowadzać zmiany w małych blokach treści HTML, podobnie jak wiki, ale musimy mieć ścisłą kontrolę nad zmianami. W dowolnym momencie menedżer może chcieć przejrzeć wcześniej przesłaną zawartość lub przywrócić cały blok HTML do poprzedniego stanu. Miałem to skonfigurowane w przeszłości, gdzie mieliśmy podstawową tabelę, która przechowywała informacje HTML (wraz z różnymi innymi tagami meta), a następnie tabelę audytu, która przechowywała kopię całego wiersza danych za każdym razem, gdy dokonywana była zmiana. Zastanawiam się, czy jest to najlepsza droga, czy powinienem po prostu zachować 1 tabelę ze wszystkimi bieżącymi rekordami i zmianami w niej i po prostu mieć flagę, która informuje mnie, która z nich jest aktualna?


title: Czy praktyki „czystego kodu” są naprawdę tak czyste i przydatne?

text: Obecnie odbywam staż w dużej korporacji i przechodzą wiele zmian w strukturze dostarczania oprogramowania (przejście na Agile). W ciągu ostatnich kilku miesięcy zauważyłem, że to religijne przywiązanie do praktyk „Czystego Kodeksu” i książka jest dla twórców niczym biblia. Teraz jedną z najważniejszych cech czystego kodu jest nie wymagający wyjaśnień kod, który opiera się na zrozumiałym nazewnictwie i rygorystycznym refaktoryzacji. Po tym następuje zasada „bez komentowania”. Rozumiem, że ten czysty kod jest długoterminową inwestycją, która ułatwi utrzymanie i ulepszanie kodu, ale... czy to naprawdę warte całego tego zamieszania? Czy ktokolwiek podzieli się swoim doświadczeniem na temat Clean Code i jakąkolwiek opinią, czy jestem po prostu zbyt konserwatywny, czy to tylko chwilowy trend.


title: Jakie kary powinny nałożyć firmy w przypadku niedotrzymania terminów w przypadku tworzenia oprogramowania dla freelancerów?

text: Rozmawiałem ze współdeweloperem. Ma klienta, który chciał mieć pewność, że dostarcza na czas. Klient chce reperkusji za niedotrzymanie terminów. Chociaż nie pracuję jako freelancer, nie mogłem udzielić odpowiedzi. Więc moje pytanie brzmi: jakie reperkusje wy (freelancerzy) zgadzacie się ze swoim klientem, jeśli nie dotrzymacie terminów swoich rezultatów (oprócz zwolnienia)?


title: Ile jest rodzajów języków programowania?

text: Zasadniczo chcę nauczyć się wielu języków programowania, aby zostać świetnym programistą. Znam tylko garstkę dogłębnie i **miałem nadzieję, że ktoś może omówić, ile jest _klas_ lub _typów_ języków programowania**. Na przykład, jak byś je łączył, gdybyś musiał uczyć się ich w grupach. Wywodząc się z Javy, nieobce jest mi pisanie statyczne, ale wiem, że oprócz dynamicznego pisania musi istnieć taka różnorodność dostępnych języków, że bardzo chciałbym zobaczyć podział na kategorie, jeśli to możliwe.


title: Jak źle nie jest Dispose() SqlConnections?

text: Osobiście wybucham w ulach, jeśli nie umieszczam obiektów ADO, które implementują IDisposable w instrukcjach using. Ale w moim obecnym kontrakcie odkryłem, że ich własny kod „dostawcy dostępu do danych” w ramach przedsiębiorstwa nie 1) implementuje IDisposable i 2) nie wywołuje Dispose() na wszystkim, czego używa, w dowolnym momencie. Użytkownicy bardzo narzekają na problemy z wydajnością w aplikacjach WinForm, które intensywnie wykorzystują ten framework do dostępu do danych, i chociaż jest WIELE innych problemów w kodzie, które mogą wpływać na wydajność, ten po prostu krzyczy na mnie i jest więcej nisko wiszące owoce niż inne. Tak więc, poza powiedzeniem czegoś w stylu „Usuwaj istnieje z jakiegoś powodu, użyj go”, co mogę powiedzieć tym ludziom, aby przekonać ich, że to naprawdę, naprawdę złe?


title: Kiedy przestać sprawdzać kod?

text: Pracuję w 4-osobowym zespole. rozpoczęliśmy przeglądanie kodu 2 miesiące temu. używamy Gerrita jako narzędzia do przeglądu kodu. podczas wstępnego przeglądania kodu znaleźliśmy wiele problemów w kodzie, tj. brak odpowiednich komentarzy do kodu. metody są za duże. bez sprawdzania wskaźnika zerowego. brak właściwej obsługi wyjątków itp., ale teraz wygląda na to, że kod się poprawił. więc kiedy przeglądam kod, nie otrzymuję tak dużego problemu w kodzie. więc moje pytanie brzmi: czy powinniśmy kontynuować przegląd kodu, nawet jeśli w kodzie nie ma zbyt wielu błędów? czy przestaniemy?


title: Jak ktoś powinien przyzwyczaić się do myślenia FP czytać kod imperatywny?

text: Ukończyłem studia jakieś pięć miesięcy temu, a od czterech miesięcy pracuję w lokalnym startupie. Na uniwersytecie sam uczyłem się Haskella, F# itp. Uczono nas Javy na uniwersytecie, ale bardzo szybko zetknąłem się z programowaniem funkcjonalnym i spędziłem z nim znacznie więcej czasu niż z programowaniem imperatywnym. W rezultacie mój mózg jest przystosowany do myślenia funkcjonalnego. Firma, do której dołączyłem, używa Pythona, a kod jest bardzo imperatywny. Mam trudności z odczytaniem imperatywnego kodu. Nie mogę śledzić mutacji. Kiedy zagnieżdżanie typu „for-jeśli-inaczej-dla-...” sięga głębiej niż cztery poziomy, całkowicie tracę orientację w tym, co dzieje się w kodzie. Aby dodać do tego, Python jest językiem dynamicznym, więc w kodzie nie ma typów. Minęły tygodnie, odkąd próbowałem zrozumieć część naszego kodu (która podobno jest „umiarkowanie złożona”), ale jak dotąd nie poczyniłem żadnego znaczącego postępu w zrozumieniu tego. Proszę o przedstawienie kilku praktycznych technik dotyczących zrozumienia tego kodu. Z góry dziękuję! **Edycja:** Może powinienem też wspomnieć, że w kodzie nie ma zbyt wielu komentarzy, a nazwy też nie są zbyt intuicyjne.


Jestem w sytuacji, gdy mam aplikację internetową (WAR), która uzyskuje dostęp do usługi REST świadczonej przez inną aplikację. Usługa REST korzysta z podstawowego uwierzytelniania HTTP. Oznacza to, że aplikacja wywołująca usługę REST musi jakoś przechowywać poświadczenia użytkownika. Aby jeszcze bardziej skomplikować sprawę, jest to przedsiębiorstwo, więc istnieją różne „regiony”, przez które przechodzi aplikacja, które będą miały różne poświadczenia dla tej samej usługi (pomyśl o rozwoju lokalnym, regionie rozwoju, regionie integracji, regionie testowania użytkownika, produkcji itp.). .) Moim pierwszym odruchem jest to, że poświadczenia powinny być przechowywane przez kontener JEE, a aplikacja powinna poprosić kontener o poświadczenia (prawdopodobnie przez JNDI?). Zaczynam czytać o Java Authentication and Authorization Service (JAAS), ale nie jestem pewien, czy jest to właściwe rozwiązanie tego problemu. W jaki sposób aplikacja JEE powinna przechowywać dane uwierzytelniające do logowania do systemu zewnętrznego? * * * Jeszcze kilka szczegółów na temat mojej WOJNY. Jest to projekt Spring-Integration, który nie ma interfejsu. Kontener, z którym pracuję, to Websphere. Używam JEE 5 i Spring 4.0.1. Do tej pory nie musiałem zastanawiać się nad wiosennymi zabezpieczeniami... czy ta sytuacja oznacza, że powinienem ponownie ocenić tę decyzję?


title: MVC: przez połowę czasu mój kontroler wydaje się bezużyteczny. Czy to problem?

text: Często, gdy projektuję program z MVC, kontroler jest bezużyteczny przez połowę czasu. Mam na myśli to, że coś się dzieje na widoku (np. kliknięcie przycisku). Widok następnie powiadamia kontrolera. Kontroler następnie bezpośrednio deleguje do modelu i nie robi nic więcej, ponieważ nie ma nic do zrobienia. Na przykład: Użytkownik naciska przycisk 'Kolor Niebieski' > widok mówi kontrolerowi `controller.colorBlue()` > kontroler mówi modelowi `model.colorBlue()` > model ma kolor niebieski. W tym przykładzie kontroler wydaje się bezużyteczny. Nic nie dodaje. Widok mógł równie dobrze przemówić bezpośrednio do modelki. Jednak przez drugą połowę czasu kontroler _robi_ jakiś rodzaj mediacji między widokiem a modelem. Moje pytanie brzmi: jak często występuje to w strukturach MVC? **Czy to rozsądne, że przez połowę czasu mój kontroler wydaje się niepotrzebny? Czy to jest problem?** Czy to powszechne? Jak mam do tego podejść? Jeśli moje pytanie nie jest wystarczająco jasne, proszę o to.


title: Czy funkcja TextView.getText() systemu Android nie powinna zwracać ciągu znaków zamiast prawdopodobnie modyfikowalnego CharSequence?

text: Właśnie spędziłem godziny na debugowaniu kodu, ponieważ zapomniałem (właściwie nigdy o tym nie myślałem), że `TextView.getText()` zwraca `CharSequence`, która może być w rzeczywistości zmienną klasą... Czy nie powinna zwracać (niezmienna) ` Zamiast tego ciąg`? To znaczy nie wyobrażam sobie sytuacji, w której chcesz udostępnić stan z polem tekstowym, przynajmniej nie domyślnie. Czy nie jest to coś, co można obiektywnie nazwać błędem projektowym w bibliotece?


title: Jak izolować zależności dla wdrożenia aplikacji .Net w sposób, który jest bezpieczny dla zestawów o silnych nazwach?

text: Aby zaprojektować w taki sposób, aby można było łatwo wdrożyć zależności z aplikacją i aby środowiska programistyczne były łatwe do skonfigurowania, korzystne jest odizolowanie zależności aplikacji od jej środowiska. Oznacza to, że aplikacja może uzyskać swoje zależności od menedżera pakietów i nie będzie na nią wpływać środowisko wdrażania (takie jak GAC). Ta zasada pochodzi z sekcji Dependencies bardzo interesujących standardów "Twelve-Factor App". W .Net, myślę, że oznaczałoby to jawne określenie użycia zależności z folderu bin aplikacji? Obawiam się, że może to spowodować problemy dla wspólnych, silnie nazwanych zespołów. W tym artykule Microsoftu Ferrandez mówi, że konflikty blokowania mogą wystąpić, jeśli aplikacje nie udostępniają zestawów o silnych nazwach za pośrednictwem GAC, ponieważ zestaw jest ładowany do domeny współdzielonej. Aplikacja 12-czynnikowa opisuje elementy potrzebne do spełnienia tej zasady jako _manifest deklaracji zależności_ i _narzędzie do izolacji zależności_. Czy ktoś ma ustaloną konfigurację do izolowania zależności, która działa dla Ciebie i jest bezpieczna dla zestawów o silnych nazwach? Czy w świecie .Net jesteśmy skazani na rozdzielanie wszystkich naszych aplikacji na maszyny wirtualne, aby osiągnąć izolację? * * * > Kontekst osobisty: Utrzymuję aplikację SAAS, w której każda instancja serwera uruchamia > kilka usług/aplikacji, które angażują się w komunikację między procesami. Mają one wspólne > silnie nazwane zależności. Posiadanie zależności w > GAC sprawia, że wdrażanie jest skomplikowane, konfigurowanie środowisk deweloperskich jest uciążliwe i > ogranicza swobodę wyboru środowisk wdrażania. Nawet bez silnego > nazewnictwa lub współdzielonego problemu zależności, jestem zainteresowany tym, jak ludzie robią > deklarację zależności i/lub izolację. Dziękuję!


title: Czy zwinny to coś więcej niż tylko małe wodospady?

text: W swoich projektach używałem głównie metodologii kaskadowej, ale teraz poszerzam swoje horyzonty o metodyki zwinne. Z tego, co do tej pory przeczytałem, a może źle przeczytałem, agile oznacza małe wodospady. Zamiast dużego wodospadu rozłożonego na rok lub dwa lata, masz małe wodospady, które trwają kilka tygodni, a może najwyżej kilka miesięcy. Czy moje rozumienie jest poprawne, czy jest w tym coś więcej? Jakie są filozofie Agile?


title: Zrozumienie licencji otwartej gry

text: Zastanawiam się nad użyciem podstawowej mechaniki stojącej za systemem D20 nieodpłatnie, jednak nie jestem pewien, czy OGL na to pozwala. Wszelkie myśli doceniane. A jeśli nie mogę korzystać z systemu D20 bez opłat licencyjnych, doceniam również wszelkie sugestie dotyczące innych, dobrze przetestowanych systemów.


title: Czy korzystasz z zarządzania projektami w swoich osobistych projektach?

text: Mam w domu kilka projektów i chcę je już zrobić. Zastanawiałem się, czy często używa się do tego zarządzania projektami? Nawet jeśli byłoby to tylko dla mnie, czy używasz jakiegoś rodzaju zarządzania projektami w projektach osobistych?


title: Jak systemy operacyjne są kompilowane i uruchamiane po raz pierwszy?

text: Interesuje mnie działanie systemów operacyjnych. Czytałem kilka artykułów na temat Linuksa i wydaje mi się, że rozumiem, jak to wszystko ogólnie łączy się w całość, ale czuję, że istnieje dylemat kurczaka i jajka, jeśli chodzi o konstruowanie systemu operacyjnego. Ponieważ Linux jest napisany w C (i asemblerze), który wymaga kompilatora do skompilowania, jak właściwie skompilować system operacyjny po raz pierwszy? Czy najpierw piszesz program ładujący z istniejącego systemu operacyjnego? A może robisz coś innego? Czy po raz pierwszy musisz uruchomić podwójny system? A może potrzebujesz dwóch maszyn? Z czym Linus po raz pierwszy skończył, kiedy zaczął swój projekt? Jak wyglądał jego pierwszy wynik? Jaka jest pierwsza rzecz, którą musisz zaprojektować i napisać podczas programowania systemu operacyjnego?


title: Czy warto zaplanować regularne czyszczenie kodu?

text: Zarządzam małym zespołem programistów. Co jakiś czas decydujemy, że spędzimy dzień lub dwa, aby oczyścić nasz kod. Czy nie byłoby dobrym pomysłem zaplanowanie regularnego czasu, powiedzmy 1 tydzień co 2 miesiące, po prostu posprzątanie naszej bazy kodu?


title: Pisanie API, które jest składniowo poprawne w wielu językach programowania

text: Planuję napisać jedno API, które będzie poprawne składniowo w większości głównych języków programowania (w największym możliwym stopniu, tak że tylko minimalne ilości kodu będą musiały zostać przepisane przy przechodzeniu z jednego języka do drugiego). Myślę, że najprostszym sposobem na to byłoby napisanie grupy funkcji, która składałaby się wyłącznie z wywołań funkcji i przypisań zmiennych, ponieważ składnia wywołań funkcji jest prawie dokładnie taka sama we wszystkich głównych językach programowania. Oczywiście musiałbym napisać funkcje „zawijające” dla instrukcji if i pętli while, ponieważ składnia każdego z nich jest inna w każdym języku programowania. Oto weryfikacja koncepcji dla jednej funkcji „poliglota”, która powinna działać w większości języków programowania: //funkcja składni JavaScript proofOfConcept(){ printSomething("To tylko dowód koncepcji."); //funkcja printSomething będzie // musiała zostać zaimplementowana oddzielnie w każdym języku programowania. } //Składnia Java public static void proofOfConcept(){ printSomething("To tylko dowód koncepcji."); //funkcja printSomething będzie // musiała zostać zaimplementowana oddzielnie w każdym języku programowania. } //Składnia Pythona def proofOfConcept(): printSomething("To tylko dowód koncepcji."); //funkcja printSomething będzie // musiała zostać zaimplementowana oddzielnie w każdym języku programowania. //C składnia void proofOfConcept(){ printSomething("To tylko dowód koncepcji."); //funkcja printSomething będzie // musiała zostać zaimplementowana oddzielnie w każdym języku programowania. } Czy byłaby to użyteczna strategia projektowania, czy może jest na to lepszy sposób? Myślę, że byłaby to przydatna strategia tworzenia bibliotek w wielu językach programowania, chociaż wymagałoby to napisania niewielkiej liczby „specyficznych dla języka” funkcji dla każdego języka docelowego.


title: Dlaczego większa liczba rdzeni procesora na maszynie wirtualnej spowalnia czas kompilacji?

text: [edycja#2] Jeśli ktoś z VMWare mógłby mnie poderwać z kopią VMWare Fusion, byłbym bardziej niż szczęśliwy mogąc zrobić to samo, co porównanie VirtualBox z VMWare. Jakoś podejrzewam, że hiperwizor VMWare będzie lepiej dostrojony do hiperwątkowości (patrz też moja odpowiedź) Widzę coś ciekawego. Gdy zwiększam liczbę rdzeni na mojej wirtualnej maszynie Windows 7 x64, ogólny czas kompilacji **_wzrasta_** zamiast się zmniejszać. Kompilacja jest zwykle bardzo dobrze dopasowana do przetwarzania równoległego, ponieważ w środkowej części (mapowanie zależności post) możesz po prostu wywołać instancję kompilatora na każdym z plików .c/.cpp/.cs/Whatever, aby zbudować częściowe obiekty, które ma wziąć linker koniec. Tak więc wyobrażałem sobie, że kompilacja będzie naprawdę dobrze skalować się z liczbą rdzeni. Ale to, co widzę, to: * 8 rdzeni: 1,89 s * 4 rdzenie: 1,33 s * 2 rdzenie: 1,24 s * 1 rdzeń: 1,15 s Czy jest to po prostu artefakt projektowy wynikający z implementacji hiperwizora określonego dostawcy (typ 2: virtualbox w mój przypadek) lub coś bardziej wszechobecnego w większej liczbie maszyn wirtualnych, aby uprościć implementacje hiperwizora? Przy tak wielu czynnikach wydaje mi się, że jestem w stanie przedstawić argumenty zarówno za, jak i przeciw takiemu zachowaniu - więc jeśli ktoś wie o tym więcej niż ja, byłbym ciekawy Twojej odpowiedzi. Dzięki Sid [ _edit:adresowanie komentarzy_ ] @MartinBeckett: Zimne kompilacje zostały odrzucone. @MonsterTruck: Nie można znaleźć projektu opensource do bezpośredniej kompilacji. Byłoby świetnie, ale nie mogę teraz schrzanić mojego dev env. @Mr Lister, @philosodad: Mam 8 wątków sprzętowych, używając VirtualBox, więc powinno być mapowanie 1:1 bez emulacji @Thorbjorn: Mam 6,5 GB na maszynę wirtualną i niewielki projekt VS2012 - jest mało prawdopodobne, że zamieniam/ wyrzucanie pliku strony. @All: Jeśli ktoś może wskazać projekt open source VS2010/VS2012, może to być lepsze odniesienie dla społeczności niż mój (zastrzeżony) projekt VS2012. Orchard i DNN wydają się potrzebować dostosowania środowiska do kompilacji w VS2012. Naprawdę chciałbym zobaczyć, czy ktoś z VMWare Fusion również to widzi (dla podziału na VMWare vs VirtualBox) **Szczegóły testu:** * Sprzęt: Macbook Pro Retina * Procesor: Core i7 @ 2,3 GHz (czterordzeniowy, hiperwątkowy = 8 rdzenie w menedżerze zadań systemu Windows) * Pamięć : 16 GB * Dysk : 256 GB SSD * System operacyjny hosta: Mac OS X 10.8 * Typ maszyny wirtualnej: VirtualBox 4.1.18 (hiperwizor typu 2) * System operacyjny gościa: Windows 7 x64 SP1 * Kompilator: kompilacja VS2012 rozwiązanie z 3 projektami C# Azure * Czasy kompilacji mierzone przez wtyczkę VS2012 o nazwie 'VSCommands' * Wszystkie testy są uruchamiane 5 razy, pierwsze 2 uruchomienia są odrzucane, ostatnie 3 są uśredniane


title: Czy Java promuje oddzielenie definicji klas od implementacji, tak jak C++?

text: Mam zadanie domowe i muszę ocenić, które podejście jest lepsze zgodnie z GRASP „Odmiana chroniona”. Znalazłem pytanie na Stack Overflow dotyczące separacji plików nagłówka i kodu w C++. Chciałbym jednak wiedzieć, dlaczego Java nie podąża za C++ w promowaniu rozdziału między definicjami klas i implementacjami klas. Czy są jakieś zalety metody Java nad metodą C++?


title: Jakie było najwcześniejsze zastosowanie tokenów kryptograficznych w adresach URL?

text: Zastanawiałem się: teraz wydaje się, że coraz częściej ludzie/frameworki umieszczają tokeny kryptograficzne w adresach URL generowanych przez ich aplikacje internetowe (aby dość skutecznie zapobiegać wielu atakom). Zalecane przez OWASP itp. Zastanawiałem się jednak: jakie było najwcześniejsze znane zastosowanie tej techniki (w szczególności wewnątrz adresów internetowych)? Znalazłem wiadomość na Usenecie pochodzącą z 2003 roku (dla aplikacji internetowej Java) opisującą technikę przez kogoś, kto oczywiście samodzielnie ją odkrył (prosi o poznanie "wcześniejszego stanu techniki"): Każdy pojedynczy link na dowolnej przesłanej stronie jsp do klienta jest generowana z sumą kontrolną, która działa jako podpis dla adresu URL. Opis wyraźnie pokazuje, że jest to używana kryptograficzna suma kontrolna (a sposób jej działania wydaje się bardzo zbliżony do współczesnych zwolenników „tokenów” OWASP itp.). Co ciekawe, osoba go opisująca mówi, że „nie może zaszkodzić”, ale może nie być tak użyteczna, ponieważ Java jest stosunkowo odporna na przepełnienie bufora. Autor nie mógł sobie wyobrazić, że ta technika zatrzymałaby większość exploitów XSS i CSRF martwych na ich drodze, zanim te techniki zostały nawet wynalezione… Moje pytanie jest więc proste: jakie są najstarsze znane zastosowania tej techniki, jakie znasz ? **EDYTUJ** Po ponownym przeczytaniu starego opisu, myślę, że w tej wiadomości z 2003 roku technika jest jeszcze bardziej zaawansowana niż „tokeny na sesję”, które OWASP zaleca, ponieważ każdy parametr jest sprawdzany pod kątem fałszerstwa (ale ja' nie jestem pewien)


title: Której wersji Javy powinienem używać do nauki?

text: Jestem inżynierem QA zainteresowanym rozwojem mobilnym i automatyzacją. Posiadam podstawowe doświadczenie w programowaniu (Python na poziomie średniozaawansowanym, programista C++) i jak większość firm wybiera Javę do pisania frameworków, muszę wybrać Javę. Używam Ubutnu 12.04 LTS i będę używał Head First Java jako materiału do nauki. Kiedy szukałem opcji JDK, znalazłem Oracle Java 6 i 7 oraz Open JDK. Czytałem gdzieś na forach Ubuntu, że Java 6 nie jest zalecana na systemach Ubuntu i jestem trochę zdezorientowany, której wersji powinienem użyć, która byłaby zgodna z książką i systemem operacyjnym.


title: Wszystkie funkcje programowania zawsze powracają do instrukcji If lub If/Else?

text: Po nauce, kodowaniu i kodowaniu jeszcze bardziej niż kiedykolwiek zauważyłem trend w wielu programach, które robię. Trend jest taki, że _większość_ moich funkcji to instrukcje `if{}` lub `if{} else{}`, jeśli chodzi o wykonywanie funkcji w moim kodzie. Zawęziłem opcję, że jest to po prostu projekt, nad którym pracuję. Projekt buduje framework PHP lub aplikację (jakkolwiek chcesz to nazwać). Ogromna większość mojego kodu dla `autoloader.php`, `application.php` i wszystkich plików _heavy-lifting_ wykonuje swoje funkcje, aby upewnić się, że wszystko ładuje się poprawnie i buduje środowisko. Po pracy z bardzo złożonymi funkcjami w moim kodzie, aby zrobić to i tamto, wszystkie są opakowane w instrukcję `if{}` lub `if{} else{}`. Czy to powszechny trend w większości programów? A może przesadnie reaguję na coś, czego często się widuję? Czy najbardziej złożone funkcje w kodowaniu zawsze wracają do podstaw legendarnych instrukcji `if{}` lub `if{} else{}`?