title: Gra życia Conways C#

text: Nie jestem pewien, czy to jest właściwe miejsce na to pytanie, czy też SO - modów, przesuń w razie potrzeby. W weekend zamierzam spróbować stworzyć GoL jako mały projekt testowy : http://en.wikipedia.org/wiki/Conway's_Game_of_Life Rozumiem algorytm, jednak chciałem tylko sprawdzić implementację, od może ktoś, kto tego próbował. Zasadniczo moja pierwsza (podstawowa) implementacja będzie statyczną siatką o ustalonej prędkości. Jeśli dobrze rozumiem, oto kroki, których będę potrzebować: 1. Ziarno początkowe 2. Utwórz tablicę 2d z wstępną konfiguracją 3. Dla iteracji, utwórz tablicę tymczasową, obliczając nowy stan każdej komórki na podstawie algorytmu Game of Life 4. Przypisz tablica temp do właściwej tablicy. 5. Przerysuj siatkę z odpowiedniej tablicy. Moje obawy dotyczą szybkości. Kiedy wypełniam siatkę z tablicy, czy byłby to po prostu przypadek pętli w tablicy, przypisywania lub wyłączania do każdej komórki siatki, a następnie przerysowania siatki? Czy jestem na właściwej ścieżce?


title: Czy używanie programu Access jako bazy danych ma jakieś wady?

text: Odziedziczyłem aplikację, która przechowuje dane w wielu tabelach w programie Microsoft Access; Access DB jest używany tylko do przechowywania, całe przetwarzanie danych jest obsługiwane przez aplikację (VB.net). Czy to dobra praktyka? Muszę zbudować podobną aplikację od podstaw i nie jestem pewien, co jest „normalną” praktyką. Próbowałem wyszukać pytanie w Google w różnych formatach i sprawdziłem wiele wyników (w tym wiele na tym forum), ale wszystkie pytania wydają się dotyczyć tego, gdzie programujesz w programie Access, a nie po prostu używać go do przechowywania danych. Myślę, że mógłbym być bardziej szczegółowy i powiedzieć, czy SQL Server Express lub podobny byłby lepszym rozwiązaniem, a jeśli tak, dlaczego? Jeśli czytasz ten post z powodu podobnego pytania, sprawdź ten link podany przez @DanielB poniżej - http://stackoverflow.com/questions/694921/ms-access-mdb-concurrency


title: Zgłaszanie i obsługa błędów procesów asynchronicznych do klienta

text: Posiadam produkt z dwoma osobnymi aplikacjami. Rdzeń produktu żyje w bazie danych (oracle) i działa zgodnie z harmonogramem. Druga to aplikacja kliencka (obecnie ASP.NET MVC3) służąca do zarządzania aplikacją bazy danych. Trwają trzy poziomy walidacji; klient, serwer i baza danych, zanim dane klienta zostaną zapisane w bazie danych. Istnieją jednak przypadki, w których fragmenty zestawu danych są obecnie ważne, ale mogą stać się nieważne w pewnym momencie w przyszłości. W takich przypadkach zamiast przerywać cały (długi) proces wprowadzania danych, po prostu wstrzymujemy proces dla zestawu danych, dopóki dane nie staną się ważne lub zostaną zaktualizowane do prawidłowej wartości. Błąd może wyglądać tak: „Hej, zaplanowałeś proces kopiowania danych Foo do lokalizacji X, a następnie przyznałeś dostęp użytkownikowi Robert. Wybrane pierwotnie konto użytkownika Bob nie jest już ważne, co chcesz zrobić?” Anuluj żądanie kopiowania” „Zmień użytkownika” lub „Czekaj”. Czy istnieje najlepsza praktyka dotycząca przechowywania i raportowania warunków błędów (możliwych do naprawienia przez użytkownika) i wyjątków (niekrytycznych i niemożliwych do naprawienia przez użytkownika) z powrotem do klienta z bazy danych? Na przykład: - Baza danych rozpoczyna proces A - Baza danych wybiera zestaw danych Foo - Podczas procesu napotkano błąd lub wyjątek - Baza danych przechowuje błąd lub wyjątek - Baza danych obsługuje przerwanie procesu A z zestawem danych Foo - Baza kontynuuje proces A z kolejnymi danymi ustawione do momentu przetworzenia wszystkich zbiorów danych - Baza kończy proces A Potem jakiś czas później: - Użytkownik loguje się do aplikacji klienckiej później (po weekendzie?) - Użytkownik otrzymuje powiadomienie o wystąpieniu błędu lub wyjątku Moja pierwsza myśl to jakaś tabeli db przechowującej różne pola (event_time_stamp, process, event, object_type, object_pk, event_code, extra_details, status, last_updated). Następnie konfigurowanie szablonów po stronie klienta (tj. zakodowanych na sztywno z parametrami) dla każdego kodu błędu i prezentowanie ich użytkownikowi… ale czy musi być lepszy sposób? Idealnie szukam rozwiązania, które pozwoli klientowi zapewnić pomocne opcje interfejsu użytkownika, które pomogą użytkownikowi w ewentualnym rozwiązaniu błędów. Jakie rozwiązania tego problemu znalazłeś? Czy coś takiego jak NServiceBus lub MassTransit działa? EDYCJA: Istnieją dwa różne wymagania. Pierwszy do przechowywania wyjątków, a drugi do zgłaszania (i ewentualnie podejmowania działań) na ich temat.


title: Czy używanie xml + xsl do tworzenia cotygodniowej wiadomości e-mail w formacie HTML to dobry czy zły pomysł?

text: Facet odpowiedzialny za nasze e-maile html odchodzi i zostałem poproszony o przejęcie. Jesteśmy sprzedawcą internetowym i raz w tygodniu wysyłamy e-maile. E-mail będzie składał się z głównego obrazu, fragmentu akapitu otwierającego, a następnie wierszy z ofertami produktów. Jak wszyscy wiedzą, e-maile html są bolesne w pracy ze względu na archaiczny html i css, z którymi musisz się zmierzyć. Kiedy coś wymaga zmiany w ostatniej chwili, naprawdę trudno jest przebrnąć przez spaghetti td, aby dostać się do linku, który wymaga zmiany adresu URL i kodu śledzenia, a możliwości popełnienia błędu są liczne. Postanowiłem więc stworzyć plik `xml` zawierający wszystkie dane, które muszą znaleźć się w e-mailu. Na przykład produkty byłyby rejestrowane w następujący sposób: <products> <product id="1"> <title>Mój produkt</title> <image width="160px" height="160px"> <alt>Mój produkt< /alt> <url>http://somedomain.com/emails/image1.jpg</url> </image> <link> <term>my_term_for_google_analytics</term> <url>http://somedomain.com/products /1</url> </link> </product> <product id="2"> <title>Mój drugi produkt</title> ... itd ... </product> </products> Mogę wtedy użyj szablonu `xslt`, aby utworzyć wiadomość e-mail. Zaletą tego jest to, że gdy produkt wyczerpie się rano, kiedy e-mail ma się ukazać, mogę po prostu zmienić trochę tekstu w pliku `xml`, wygenerować html i możemy znowu iść. Mogę również użyć tego samego `xml` do stworzenia mikrowitryny dla e-maila. Kłopot w tym, że miałem na ten temat dobre stare Google i nie mogę znaleźć nikogo, kto naprawdę tego spróbował. Więc jestem albo wizjonerem, albo idiotą. Zwykle okazuje się, że jestem idiotą, więc czy ktoś inny miał jakieś doświadczenie w tworzeniu e-maili html z `xml` przy użyciu `xslt`, czy też ktoś widzi jakieś poważne pułapki przy takim podejściu. Czy to dobry pomysł? Zastrzeżenie - nie sądzę, że jestem potencjalnym wizjonerem geniuszu.


title: Jak byś ćwiczył współbieżność i wielowątkowość?

text: Czytałem o współbieżności, wielowątkowości i o tym, jak „darmowy lunch się skończył”. Ale nie miałem jeszcze możliwości wykorzystania MT w mojej pracy. W związku z tym szukam sugestii, co mógłbym zrobić, aby poćwiczyć MT z obciążeniem procesora poprzez ćwiczenia lub udział w niektórych projektach open-source. Dziękuję. Edycja: bardziej interesują mnie projekty typu open source, które używają MT do zadań związanych z procesorem lub po prostu algorytmy, które są interesujące do zaimplementowania przy użyciu MT, niż książki lub artykuły opisujące tylko narzędzia, takie jak wątki, muteksy i blokady lub jak można wykorzystać MT, aby mieć responsywne GUI...


title: Czy jeden obiekt ma być lepszy od wielu zmiennych?

text: Ciężko było umieścić to, co miałem na myśli, w tytule, ale łatwo to wpisać w kod. **C++** Czy to jest int offset_x = 10; int przesunięcie_y = 40; ... element.przenieś(przesunięcie_x, przesunięcie_y); Być lepszym od tego? Przesunięcie wektora<int>(10, 40); ... element.move(przesunięcie.x, przesunięcie.y); (Zauważ, że Vector nie jest jak `std::vector`, jest to wektor 2D. Ta klasa ma wiele metod, których nie potrzebuję, takich jak `normalize()` i `scale()`. Czy powinienem mieć więcej podstawowa klasa `Point` do tego?) **JavaScript** Czy to jest var offsetX = 10; var przesunięcie Y = 40; ... element.move(przesunięcieX, przesunięcieY); Być lepszym od tego? var offset = {x: 10, y: 40}; ... element.move(przesunięcie.x, przesunięcie.y);


title: Jaka jest korzyść z unikania używania debugera?

text: W trakcie mojej kariery zauważyłem, że niektórzy programiści nie używają narzędzi do debugowania, ale wyrywkowo sprawdzają błędny kod, aby dowiedzieć się, na czym polega problem. Chociaż często możliwość szybkiego znajdowania błędów w kodzie bez debuggera jest dobrą umiejętnością, wydaje się, że spędzanie dużej ilości czasu na szukaniu problemów jest mniej produktywne, gdy debuger z łatwością znajdzie drobne błędy, takie jak literówki. Czy można zarządzać kompleksem bez debuggera? Czy to wskazane? Jakie korzyści można uzyskać stosując „debugowanie psychiczne”?


title: Jak korzystać z narzędzia do śledzenia problemów Roundup?

text: Narzędzie do śledzenia problemów Roundup jest domyślnie dość minimalistyczne i nie zapewnia żadnego konkretnego przepływu pracy. Kiedyś nazywano go „tak konfigurowalnym, że prawdopodobnie lepiej opisać go jako lekki framework zorientowany na tracker”. Czy kiedykolwiek intensywnie korzystałeś z Roundup lub widziałeś ciekawe przypadki użycia? Jeśli tak, podaj przykład. (Jeśli nie uważasz swojego przepływu pracy za wystarczająco wyjątkowy, przynajmniej powiedz, jak rozumiesz i wykorzystujesz pole „superseder” w domyślnym szablonie „klasycznym”, który sam może być różnie interpretowany — zobacz _old.nabble.com/Superseder-td13792131 .html_)


title: Jaki jest właściwy sposób radzenia sobie z globalną ścieżką pliku?

text: Nie mam kodu kompilowalnego, ponieważ dany kod zależy od dużej funkcji, która nie ma związku z pytaniem, ale powiedzmy, że mam następujący scenariusz: savePath = "C:\\..." changePath1, changePath2 :: String - > String changePath1passPath = 'Zrób coś z passPath' changePath2 = 'Zrób coś z savePath' let newPath1 = changePath1 savePath in ... let newPath2 = changePath2 in ... Czy bardziej właściwe jest ustawienie funkcji takich jak changePath1 (gdzie globalna path in) lub changePath2 (gdzie tylko wewnętrznie używa ścieżki globalnej) Jeśli funkcje miały szansę przetworzyć więcej niż 1 ścieżkę, oczywiście użyłbym changePath1, ale w moim bieżącym programie jest tylko 1 ścieżka do sobie z tym poradzić, więc wydaje się prostsze, gdy wszystkie funkcje wewnętrznie znają globalną ścieżkę, zamiast ciągle ją przekazywać. Dziękuję


title: Czy warto testować w różnych przeglądarkach w aplikacjach GWT?

text: ponieważ **GWT** ma wyabstrahować wszystkie implementacje przeglądarek (dla widżetów itp.), czy warto przeprowadzać testy w różnych przeglądarkach? Myślałem tylko, żeby przetestować tylko rzeczy związane ze stylizacją (związane z CSS) w różnych przeglądarkach. Jakieś opinie na ten temat?


title: Ile oryginalnego kodu pozostało w nowoczesnym oprogramowaniu?

text: Wielu z was pracuje dla dużych firm, które dostarczają dobrze znane oprogramowanie. Zastanawiałem się, ile oryginalnego kodu (w zasadzie kodu, który był w wersji "v1.0") pozostało w nowoczesnych, ogromnych aplikacjach, takich jak, powiedzmy, Firefox, Photoshop, Windows, Linux itp.? Naprawdę wolałbym doświadczenie z pierwszej ręki i historie wojenne z prawdziwego świata. Dziękuję za zaspokojenie mojej ciekawości. **EDYTUJ** Okazuje się, że istnieje pewne nieporozumienie. To, czego szukam, jest w zasadzie następujące: kiedy obwiniasz/dodajesz adnotację do kodu źródłowego, czy są jakieś części lub nawet całe pliki nietknięte od początkowego wydania 1.0.


title: Porady i zasoby dotyczące środowisk współpracy

text: Potrzebuję porady na temat współpracujących środowisk oprogramowania. Dokładniej, szukam książek i materiałów referencyjnych, które mogą mi pomóc w zrozumieniu struktur zespołu i kodu oraz ich interakcji. Innymi słowy, książki, blogi lub białe księgi wyjaśniające: * Różne strategie konstruowania zespołów, które dzielą wspólny kod, ale mają różne indywidualne funkcje? Podsumowując moje pytanie, chciałbym wiedzieć, co byłoby dobrym źródłem wiedzy, gdybym miał powołać zespoły w organizacji, która współdzieli kod, ale każda jednostka nadal pozostaje autonomiczna. Zrobiłem kilka badań na ten temat i zgłębiłem: * narzędzia do przeglądu kodu, * rozproszone VCS, * narzędzia ciągłej integracji, * automatyzację testów jednostkowych. Najtrudniejszą częścią wdrażania tych narzędzi jest ustalenie, od czego warto zacząć, które narzędzia są nisko wiszącymi owocami, które narzędzia lub metody zapewniają wyższy wskaźnik sukcesu. Jeśli ktoś pyta mnie o odniesienie do jakości kodu, odsyłam go do Code Complete. Szukam równoważnego przewodnika po strukturach zespołów oprogramowania i narzędziach, aby to równanie działało lepiej. Zdaję sobie sprawę, że to pytanie jest dość niejasne, ale pojawiło się, gdy „musimy dzielić kod między zespołami bez łamania sobie nawzajem rzeczy i powodowania bólów głowy i biurokracji w zarządzaniu”. Odpowiedź zdecydowanie nie jest prosta i wymaga zmian na wielu poziomach, stąd pytanie. Jeśli pytanie jest zbyt niejasne, zagłosuj za zamknięciem lub usunięciem. Jako odpowiedź przyjąłbym każdy dobry punkt wyjścia.


title: Znajdź szczyt każdej wyspy w macierzy rzadkiej

text: Mam rzadką macierz, która zawiera kilka wysp o nieznanym rozmiarze. Chciałbym znaleźć najwyższy szczyt każdej wyspy. Rozważ tę macierz jako przykład: 0 0 1 0 0 0 0 0 0 1 2 1 0 0 0 0 0 3 2 1 0 0 1 0 0 0 0 0 0 2 3 4 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 W tym przypadku chciałbym otrzymać pozycję 3 na (3, 2), pozycję 4 na (3, 4) i pozycję 1 na (5, 4), (5, 5) lub (5, 6). Uwaga: rozważam 4 połączonych sąsiadów. Do tej pory wymyśliłem rozwiązanie, które skanuje każdy piksel i jeśli nie jest zerowe, rozpoczyna wypełnianie powodziowe z tego piksela. Wypełnienie powodzi maluje piksele do zera, śledząc maksymalną odwiedzoną wartość. Ten algorytm działa dobrze, ale zastanawiałem się, czy jest jakieś szybsze rozwiązanie? Na mojej platformie docelowej (iOS) mam dostęp do różnych frameworków do przetwarzania wektorów, takich jak BLAS, LAPACK, vDSP, które zapewniają kilka funkcji do szybkiego znajdowania maksymalnej wartości w wektorze (lub macierzy). Może za pomocą tych funkcji można by wdrożyć szybsze rozwiązanie?


title: Dlaczego numery wersji/kompilacji dla Mylyn są inne?

text: Na project.eclipse.org Mylyn Build 1.1.0 jest przewidziany na czerwiec 2013. Na www.eclipse.org/mylyn "Wiadomości" mówią, że Mylyn 3.8.3 został wydany 1 marca. Dlaczego istnieje niewielka lub żadna korelacja między tymi dwoma?


title: Jakie aspekty „utrzymywalności” mogą wpłynąć na wybór technologii wdrażania IS?

text: **Tło** : Jestem praktykantem i zajmuję się projektem opracowania konkretnego systemu IS. Obecnie zajmuję się tylko analizą wymagań i projektowaniem procesów informacyjnych, ale jako Software Developer chciałbym również wdrożyć tę koncepcję jako rzeczywisty Web-Portal. Jeśli chodzi o wybór technologii, to osobiście chciałbym zbudować swój front-end w oparciu o frameworki JavaScript (jQuery, Bootstrap, DataTables.Net, ...), które oferują wysoką elastyczność implementacji front-endu i ładne out-of-box nowoczesny projekt i połącz je z .NET MVC w kodzie. Ludzie wokół mnie, którzy nie napisali ani jednej linijki kodu od dziesięcioleci, martwią się trudnościami w utrzymaniu takiego systemu w porównaniu z używaniem kontrolek .NET i trzymaniem się pakietu MS Web-Site Development Package. Kiedy więc próbuję wspomnieć, że mógłbym zbudować ładnie wyglądający, przyjazny dla użytkownika, nowoczesny portal, kiedy skończymy z pierwszą fazą koncepcyjną, po prostu martwię się wyglądem i mamroczę o „utrzymywaniu” i „ wolelibyśmy spróbować korzystać z usług Sharepoint Analysis Services połączonych z naszą bazą danych”. **Pytanie** : jakie aspekty „ _utrzymania_” mogą wpłynąć na wybór technologii wdrożenia systemu? **Cel** : Chciałbym usiąść i „udowodnić”, że moje podejście jest tak samo łatwe w utrzymaniu, jak to, co proponują, a jeśli tak nie jest, chciałbym znaleźć sposoby na jego ulepszenie. * * * Pytania, które mnie zainteresowały: * Złożoność i łatwość utrzymania kodu JavaScript * Jak można sensownie zmierzyć łatwość utrzymania? * Jak mieć możliwą do utrzymania i zarządzalną bazę kodu JavaScript * Jakie cechy lub cechy sprawiają, że kod jest możliwy do utrzymania? (!) * Co szkodzi konserwacji? (!) Niektóre abstrakcyjne aspekty pielęgnowalności: * czytelność * łączenie * spójność * uzasadnienie kodu jest udokumentowane


title: Czy ktoś ma jakiś pomysł, jak Java decyduje o nazwach konwerterów?

text: Odnosząc się do tego linku W szczególności, co skłoniło ich do wybrania 'tl' jako symbolu konwertera dla godziny... Wydaje się to takie przypadkowe. Rozumiem, dlaczego zdecydowali się na „te” (to dlatego, że „e” występuje po „d” w „td”, a d to pierwsza litera „dnia”). Edycja: Och, daj spokój, dlaczego głosowanie przeciw? Pytam o coś, co może nie jest ważne, ale mnie to dręczy


title: Problemy z fasadami, a następnie ewolucja oprogramowania

text: Początkowo rozpocząłem projekt z fasadami i polimorfizmem jako sposobem na stworzenie prostego, rozszerzalnego projektu zgodnie z zasadami SOLID. Oto przykładowy kod: public interface IInterface { void FillList(List<InputPocoObject> listOfInputObjects, out List<OutputPocoObject> ListOfOutputObjects); } public class SampleClass : IInterface { public void FillList(List<InputPocoObject> listOfInputObjects, out List<OutputPocoObject> ListOfOutputObjects) { //jakiś kod warstwy danych //oraz pętla for do wypełnienia obiektu OutputPocoObject i dodania go do listy } } Mam ilość klas takich jak powyżej które są tworzone w runtime przy pomocy factory (tu nie pokazano dla uproszczenia) Ostatnio po kilku miesiącach widzę, że w moim projekcie pojawiają się różne wymagania, które próbowałem rozwiązać przez pomocy Polimorfizmu i widzę, że ugrzęzłem w łamaniu zasad DRY. Oto przykładowy kod tej sytuacji: public class SampleClass2 : IInterface { public void FillList(List<InputPocoObject> listOfInputObjects, out List<OutputPocoObject> ListOfOutputObjects) { //jakiś kod warstwy danych //oraz pętla for wypełniająca obiekt OutputPocoObject i dodaj to do listy // w OutputPocoObject znajduje się właściwość ustawiona na 1 } } public class SampleClass3 : IInterface { public void FillList(List<InputPocoObject> listOfInputObjects, out List<OutputPocoObjects> ListOfOutputObjects) { //ten sam kod jak powyżej / /z tylko jedną różnicą, że właściwość w OutputPocoObject jest tutaj ustawiona na 5 } } Prostym rozwiązaniem będzie dodanie parametru kontrolnego do interfejsu, takiego jak: public interface IInterface { void FillList(List<InputPocoObject> listOfInputObjects, out List<OutputPocoObject> ListOf OutputObjects, int controlParameter); } ale nie wiem czy to taki lepszy pomysł? Czy może to wprowadzić trochę złożoności w mój projekt?


title: Tworzenie diagramu sekwencji systemu na podstawie [rozszerzonego] przypadku użycia

text: Jak mnie uczono - jeden kontroler = jeden przypadek użycia. Ale mam: * OutsiderController * SupplierController (który rozszerza OutsiderController) * SubContractorController (który również rozszerza OutsiderController) I chcę zrobić SSD dla `SupplierController` i `SubContractorController`. Co ja robię? Czy zapisuję na obu dyskach SSD metody z `OutsiderController`?


title: Jak kategoryzować informacje w dokumentacji użytkownika końcowego?

text: Jednym z najwspanialszych fragmentów dokumentacji, jakie kiedykolwiek czytałem, jest _TeXbook_ autorstwa Donalda Knutha — podręcznik systemu składu _TeX_, którego użyłem w swojej pierwszej analizie. O ile wiem, rodzaj informacji przekazywanych przez dokumentację dzieli się na trzy kategorie: _przepis,_ _odniesienia_ i _wiedza ekspercka_, które opisuję poniżej. Jakich kategorii mi brakuje? ## Przepis Przepis odpowiada na pytanie typu „jak rozwiązać ten problem za pomocą tego oprogramowania?” i wiąże _świat problemów_ z _funkcjami oprogramowania._ Rozdziały 3, 7 i 8 w _TeXbooku_ odpowiadają na pytania typu „Jak uruchomić TeXa?” lub „Jak wpisać tekst?” i dostarczyć użytkownikowi przepisy kulinarne. Inne pakiety oprogramowania często zawierają procedury instalacji lub tworzenia kopii zapasowych, które należą do tej kategorii. ## Referencja _referencja_ dokumentuje wszystkie potrzebne szczegóły dotyczące jakiegoś oprogramowania. Jest to przydatne dla użytkownika, który wie, że „ta funkcja jest przydatna do rozwiązania tego problemu” i chce wiedzieć, czy może sparametryzować „tę funkcję” w celu rozwiązania bliskiego problemu. Przydaje się również do rozwiązywania problemów z oprogramowaniem, gdy daje nieoczekiwane wyniki. Rozdział 14 „Jak TeX dzieli akapity na wiersze” w _TeXbooku_ jest przykładem tekstu referencyjnego. Strony podręcznika UNIX prawie zawsze należą do tej kategorii. ## Wiedza ekspercka Wiedza ekspercka dotycząca problemu rozwiązywanego przez oprogramowanie również należy do dokumentacji oprogramowania. Przyczyny tego są co najmniej: 1. Użytkownicy nie są ekspertami w dziedzinie, w której oprogramowanie jest przydatne. 2. Eksperci używają różnej terminologii i metodologii do opisywania lub rozwiązywania problemów. Matematycy czytający TeXbooka uczą się również podstaw projektowania i układu graficznego: uświadamiają sobie, że istnieje ustrukturyzowana wiedza w tej dziedzinie i poznają nazwy podstawowych pojęć, aby mogli sformułować problemy i uzyskać pomoc. W przypadku 2. warto „poprawić notację” w dokumentacji oprogramowania i najlepiej to zrobić, podając pewne ogólne lub podstawowe informacje. Stąd wiedza ekspercka zawarta w dokumentacji użytkownika wiąże koncepcyjną organizację problemu, jaką znają twórcy oprogramowania, z koncepcyjną organizacją problemu, jaką znają użytkownicy oprogramowania.


title: czego potrzebują programiści zajmujący się programowaniem opartym na danych/uczeniu maszynowym?

text: Biorąc pod uwagę rosnącą ilość danych generowanych przez różne usługi sieciowe (sieci społecznościowe itp.), musi być coraz więcej programistów zaznajomionych z uczeniem maszynowym i/lub statystykami potrzebnymi do pisania programów obsługujących te dane. Zastanawiam się, czy ktoś pracujący w pokrewnych zawodach mógłby pokrótce opisać, jakie są możliwe codzienne czynności. Czy jest to bardziej jak tradycyjna inżynieria oprogramowania, czy bardziej jak praca jako statystyk? Osobiście interesuję się uczeniem maszynowym i programowaniem. Jeśli chcę pracować w takich zawodach, czy powinienem poświęcić więcej czasu na naukę statystyk, czy więcej czasu na tradycyjną stronę inżynierii oprogramowania?


title: Zapisywanie danych aplikacji mobilnej, gdy nie ma usługi?

text: Załóżmy, że mam aplikację mobilną, która pozwala użytkownikom wprowadzać informacje, które są następnie przesyłane do centralnej lokalizacji. Planowałem zbudować to tylko przy użyciu HTML5 i JavaScript (aplikacja nienatywna), ale zakładam, że jeśli ktoś jest w obszarze, w którym nie ma usługi, po prostu nie będzie mógł korzystać z aplikacji. Czy jako obejście byłoby możliwe napisanie natywnej aplikacji, która zapisuje informacje na urządzeniu, a następnie przesyła je po powrocie usługi? Jeśli tak, czy można napisać natywną aplikację w całości w HTML5 i JavaScript, która to robi?


title: Czego powinienem szukać w szkole, próbując uzyskać stopień inżyniera oprogramowania?

text: Moim celem jest uzyskanie jak największej zdolności do zatrudnienia i posiadanie wystarczającej wiedzy, aby nie wyglądać głupio podczas rozmowy kwalifikacyjnej. Jednak prawdopodobnie jest to cel każdego i nie osiąga się go po prostu przez zajęcia na uniwersytecie – trzeba też poświęcić trochę swojego czasu (co ja robię). Jestem w trakcie uzyskiwania stopnia Associates w programowaniu komputerowym w lokalnym college'u społeczności. W okolicy mam do wyboru kilka opcji, takich jak Cal Poly Pomona, CSU San Bernardino, UC Riverside i kilka innych szkół w tej okolicy (jedną z nich jest CalTech Pasadena, ale słyszę, że bardzo trudno wejdź... nawet z moim 4.0 GPA). Oczywiście jest mnóstwo informacji rankingujących szkoły, ale nic tak naprawdę nie wyjaśnia, na co zwrócić uwagę w szkole przy wyborze konkretnego kierunku studiów. Interesuję się Inżynierią Oprogramowania. Mogę przejść do AI, ale to jest teraz w powietrzu. Myślę, że na studiach licencjackich wybrałbym ogólną inżynierię oprogramowania, chyba że znajdę konkretny obszar, w który chcę się zaangażować. Zdecydowanie zdaję sobie sprawę, że stosunek liczby uczniów do nauczycieli jest ogromnym punktem do rozważenia przy wyborze szkoły. Ale jakie inne rzeczy powinienem wziąć pod uwagę? Czy powinienem wybrać szkołę bardziej skoncentrowaną na teorii, taką jak UCR, czy szkołę, która przyjmuje praktyczne podejście, takie jak CalPoly Pomona? Co widziałeś w branży, co wskazywałoby, że jedno jest lepsze od drugiego? Jakie jest twoje własne doświadczenie? Edukacja nie jest tania i mam rodzinę na utrzymaniu (pracuję na pełny etat i chodzę do szkoły), więc chcę się upewnić, że moja inwestycja jest uzasadniona. Biorąc to pod uwagę, zarabiam przyzwoitą pensję, więc mogę sobie pozwolić na inwestowanie w edukację, o ile nie jest to marnotrawstwo. Zwracam się do tych z Państwa, którzy mają doświadczenie z pierwszej ręki w tych sprawach, aby udzielić mi kilku wskazówek i odpowiedzi na powyższe pytania. Mam nadzieję, że jasno określam swoje cele i to, czego próbuję się dowiedzieć; jeśli potrzebne są wyjaśnienia, proszę daj mi znać (właśnie skończyłem z 12-godzinną zmianą, więc jestem trochę senny, heh).


title: Czy architektura mojego projektu jest wspólna? Jak się nazywa?

text: Od kilku lat jestem odpowiedzialny za projekt oprogramowania (aplikacja desktopowa Java, która w większości jest sterowana zdarzeniami). Zacząłem to od zera i na początku tego projektu dokonałem kilku mocnych wyborów dotyczących architektury oprogramowania. ## W mojej architekturze wprowadziłem klasę `Module`, która reprezentuje funkcjonalną część aplikacji, z dobrze zdefiniowaną odpowiedzialnością. Jedyną rzeczą, jaką „Moduł” udostępnia światu, jest zestaw „uchwytów komunikacyjnych”. Istnieją 4 rodzaje uchwytów komunikacyjnych: * `Emitter<T>` może emitować wiadomość typu `T`. * `Handler<T>` może odbierać wiadomość typu `T` * `Puller<R, Q>` może wykonać zapytanie reprezentowane przez wiadomość typu `Q` i otrzyma wiadomość odpowiedzi typu ` R` * `PullServer<R, Q>` może odebrać zapytanie reprezentowane przez wiadomość typu `Q` i odeśle wiadomość odpowiedzi typu `R`. Następnie, na początku działania aplikacji, instanuję wszystkie moduły, z których składa się aplikacja, oraz konfiguruję wszystkie połączenia między nimi. „Emitter” może być połączony z jednym lub wieloma „Handlerami”, a „PullServer” może obsługiwać jeden lub wiele „Pullerów” (oczywiście typy tych dwóch punktów końcowych muszą być kompatybilne). Wszystkie klasy używane do reprezentowania wiadomości są niezmienne i są zdefiniowane w jednym podprojekcie. Każdy `Moduł` zależy od tego podprojektu i nic więcej. To sprawia, że `Moduły` są bardzo oddzielone (`Moduł` nie wie nic o innych `Modułach`, a ich wejście/wyjście do świata zewnętrznego jest bardzo jasne). Również dynamiczny aspekt aplikacji (przepływ danych) jest zdefiniowany w unikalnym miejscu, w funkcji `main`. Ponadto bardzo łatwo jest przetestować `Moduł`, wystarczy dostarczyć fałszywe `Emitery` i `PullServers` i podłączyć je do `Handlers` i `Pullers` `Modułu`. ## Moje przemyślenia na temat tej architektury Więc to jest pierwszy „duży” projekt oprogramowania, nad którym pracuję, i wymyśliłem ten projekt, ponieważ wydawało mi się, że należy to zrobić. Teraz projekt działa bez zarzutu, łącznie 57 "Modułów" pracuje razem. Jeden z moich współpracowników, który niedawno dołączył do projektu, zapytał mnie, czy to powszechna architektura, czy istnieje nazwa dla takiego projektu. Nie mam odpowiedzi, ponieważ nie znam innych rzeczywistych architektur oprogramowania. Wydaje mi się, że ten projekt jest bliski koncepcji Aktorów, którą możemy znaleźć w językach takich jak Scala (a może i Erlang). Aktorzy nie zapewniają jednak oddzielenia, które zapewnia mój projekt. A aktorzy mają dodatkową możliwość: każdy aktor ma własną kolejkę komunikatów i własny wątek wykonania (tak jakby). Uważam też, że mój projekt jest w pewnym stopniu związany ze wzorcem Dependency Injection, w tym sensie, że zależności pomiędzy `Modułami` są definiowane w centralnym miejscu. Jednak ten wzorzec dotyczy interfejsów, a nie komunikatów. Nie definiuje sposobu komunikacji modułów (powiadomienie, żądanie/odpowiedź). ## Pytanie (wreszcie!) Czy znasz projekt oprogramowania, którego architektura jest podobna do mojej? Czy jest na to nazwa? ### Edytuj @Doc Brown sugeruje, że ten projekt jest podobny do projektu Flow. Nie mogę sie bardziej zgodzić. Oto porównanie jeden do jednego między tymi dwoma projektami: * Mój _Moduł_ jest tym samym, co _Jednostka funkcjonalna_. * Mój _Emitter/Handler_ jest taki sam jak _Output-pin/Input-pin_ , z wyjątkiem tego, że mój nie ma nazwy. W moim projekcie „uchwyty komunikacyjne” są identyfikowane tylko po ich typach. * Połączenia między moimi modułami są odpowiednikami ich _przewodów_. * Mój _Puller/PullServer_ jest podobny do ich _Relacji zależności_. Mówią jednak, że istnieje wyraźna zależność między dzwoniącym a odbieranym. W moim projekcie są oddzielone. * Definiują pojęcie _Des_. To ciekawe, myślę, że pożyczę ten pomysł! * Definiują pojęcie _Konfiguracji_. Mam potrzebę skonfigurowania modułu w moim programie i do tego definiuję obsługę konfiguracji w niektórych moich modułach. * Oba rozwiązania są synchroniczne. * Nie mam pojęcia _mapa_ i _join_. Ale nie czuję takiej potrzeby. Dobrze znaleziony, doktorze!


title: Planowanie sprintu i amortyzacja

text: Po przeczytaniu Slacka Toma DeMarco, zastanawiam się, jak uwzględnić luz w sprintach. Dla tych, którzy nie czytali książki, TDM opisuje „luz” jako czas na innowacje i inne dobre rzeczy. Scrum skłania się ku eliminowaniu luzu i opieraniu się zmianom w sprincie. Pozwalając na zmianę priorytetów historii między sprintami. Doceniam cel sprintu i nie próbuję pytać, jak zareagować na zmiany w nim. Moją pierwszą myślą o dodaniu luzu do sprintów byłoby zaplanowanie sprintu z 8/9 dniami pracy na dwa tygodnie sprintu. Jeśli jesteś świadomy tej decyzji, czy nadal możesz dokładnie obliczyć swoją prędkość? Na podstawie punktów fabularnych zdobytych w oknie dnia 8/9 (w porównaniu z 10). I odwrotnie, są to dwie konkurujące ze sobą idee i nie pasują do siebie... ? Link do czynnika skupienia komara jest interesujący.


title: warunki dla modelu html/css/javascript?

text: Czy są jakieś słowa określające model projektowy zaimplementowany przez HTML + CSS + JavaScript, albo dla tego konkretnego zestawu technologii, albo jakiegoś abstrakcyjnego wzorca, za którym podążają?


title: Skalowalność: Jak działa dzielenie tabeli bazy danych na różnych zreplikowanych serwerach SQL?

text: Chciałbym dowiedzieć się więcej o ogólnych koncepcjach podziału danych bazy danych na różne serwery. Załóżmy na przykład, że mam bazę danych SQL Server, która ma ogromną tabelę. Załóżmy, że jeden serwer nie może obsłużyć ilości danych w tej tabeli. Chciałbym rozbić tę tabelę i podzielić jej zawartość na różne serwery z identyczną bazą danych (zreplikowaną). Załóżmy teraz, że mam pojedyncze połączenie SQL (ADO) z dowolnym z tych serwerów i wybieram rekordy z tej konkretnej tabeli. Ponieważ dane znajdują się w osobnych bazach danych na osobnych serwerach, muszę zebrać rekordy ze wszystkich różnych serwerów i połączyć je w jeden. Jestem pewien, że istnieją standardowe sposoby przystosowania się do tego i jestem skłonny wybrać inną trasę niż bezpośrednie połączenie SQL Server (i tak planuję owinąć to we własne API serwera HTTP Server), ale nadal zamierzam używać SQL Serwer jako rzeczywisty silnik. Jaka jest najbardziej standardowa praktyka i gdzie mogę się o niej dowiedzieć więcej?


title: Używanie ref zamiast out. Czy byłoby to uważane za błąd?

text: Biorąc pod uwagę, że parametry out i ref mają nieco inne konotacje, czy pisanie kodu, jak poniżej, byłoby uważane za błąd (nawet jeśli obecnie nie powoduje problemu), czy po prostu brak zrozumienia parametrów ref i out? public void MojaMetoda() { int mojeInt = 0; MojaMetodaZRef (ref myInt); } public void MyMethodWithRef(ref myInt) { // nieużywane przed przypisaniem wartości. Czy parametr out ma większy sens niż myInt = 5; } Rozumiem, że jest to nieprawidłowe użycie ref, ale gdybyś widział to w kodzie stale lub chociaż raz, uznałbyś to za błąd, a tym samym naprawił go, a także poinformował oryginalnego kodera, czy po prostu zrobił to w ramach ogólnych praktyk refaktoryzacji?


title: Domain-Driven-Design - zewnętrzne zależności w problemie Entity

text: Chciałbym rozpocząć projektowanie oparte na domenie, ale jest kilka problemów, które chciałbym rozwiązać przed rozpoczęciem :) Wyobraźmy sobie, że mam grupy i użytkowników i gdy użytkownik chce dołączyć do grupy, dzwonię `groupsService Metoda .AddUserToGroup(grupa, użytkownik)`. W DDD powinienem zrobić `group.JoinUser(user)`, co wygląda całkiem nieźle. Problem pojawia się, jeśli istnieją pewne reguły sprawdzania poprawności dotyczące dodawania użytkownika lub niektóre zadania zewnętrzne muszą zostać uruchomione, gdy użytkownik zostanie dodany do grupy. Posiadanie tych zadań doprowadzi do tego, że podmiot będzie miał zewnętrzne zależności. Przykładem może być - ograniczenie, że użytkownik może uczestniczyć tylko w 3 grupach max. Będzie to wymagało wywołań DB z wewnątrz metody group.JoinUser, aby to zweryfikować. Ale fakt, że Entity zależy od niektórych zewnętrznych usług/klas, nie wydaje mi się tak dobry i „naturalny”. Jaki jest właściwy sposób radzenia sobie z tym w DDD?


title: Dobry schemat do reprezentowania liczb całkowitych od 0 do nieskończoności, zakładając, że masz nieskończoną liniową pamięć binarną?

text: Chciałbym, aby schemat reprezentował liczby całkowite zaczynające się od 0, bez żadnych ograniczeń (zakładając dostęp do nieskończonej pamięci liniowej). Oto schemat, który może reprezentować liczby od 0 do 255: Użyj pierwszego bajtu pamięci (adres 0), aby zapisać liczbę całkowitą. Załóżmy teraz, że chcę reprezentować liczby większe niż 255. Oczywiście mógłbym użyć więcej niż 1 bajt do reprezentowania liczby całkowitej, ale dopóki jest to stała liczba, w końcu będzie liczba całkowita tak duża, że nie będzie mogła być reprezentowana przez oryginalny schemat. Oto kolejny schemat, który powinien być w stanie wykonać zadanie, ale prawdopodobnie nie jest wydajny. Po prostu użyj jakiegoś unikalnego bajtu „końca liczby” i użyj wszystkich poprzednich bajtów do reprezentowania liczby. Oczywiście ten bajt „końca liczby” nie może być użyty w dowolnym miejscu w reprezentacji liczbowej, ale można to osiągnąć za pomocą systemu liczbowego o podstawie 255 (zamiast podstawy 256). Jest to jednak powolne i prawdopodobnie nieefektywne. Chcę mieć lepszy, który działa lepiej z niskimi wartościami i dobrze się skaluje. Zasadniczo jest to system UUID. Chcę zobaczyć, czy możliwe jest stworzenie szybko działającego systemu UUID, który teoretycznie może skalować się do używania przez lata, tysiące lat, miliony lat, bez konieczności przeprojektowywania.


title: Dlaczego plik źródłowy Java nosi nazwę klasy publicznej, którą zawiera?

text: Jestem nowicjuszem uczącym się Java. W Javie każdy plik źródłowy musi zawierać klasę publiczną i ten plik źródłowy powinien mieć taką samą nazwę jak ta klasa publiczna. Ponadto żaden plik źródłowy nie może zawierać dwóch klas publicznych. Dlaczego to ograniczenie?


title: Zalety i wady PHP/Ruby

text: Jestem programistą front-end od około dwóch lat i próbuję włamać się na stronę serwera. Idealnie chciałbym pracować dla startupowej sieci społecznościowej po stronie zaplecza, więc chcę spróbować być jak najbardziej dostępny na rynku. W moim dążeniu do nauki nowego języka skryptowego zagłębiłem się w dziurę PHP vs Ruby. Jakie są główne zalety i wady tych dwóch? Naprawdę byłbym wdzięczny za słowa z doświadczenia z tą dwójką, ale zadowolim się każdym doświadczeniem. Twoje zdrowie.


title: Uzasadnienie wersjonowania indexedDB

text: Tak więc, przez ostatnie 2 tygodnie walczyłem z `indexedDB` i jednym z dwóch powtarzających się pytań, które ciągle się pojawiają, jest dlaczego `indexedDB` musi używać/przedstawiać cały system wersjonowania? Rozumiem, że w niektórych bardzo specyficznych przypadkach fajnie jest mieć, ale w tych przypadkach wystarczy `if(localstorage.dbversion <= ...)`, więc czy jest jakiś powód w odniesieniu do implementacji/optymalizacji przeglądarki, które wymagają tego systemu ronda1? A może sprawia, że indexedDB jest znacznie wydajniejsza, czy coś takiego? 1 Rondo, ponieważ **na przykład** w „onupgradeneeded” otrzymujesz transakcję z „event.target.transaction”, podczas gdy w „onsuccess” otrzymujesz ją z „result.transaction()”. I istnieje niezliczona ilość innych, bardziej złożonych przykładów. (Tak jak przypadki, w których `createStore` jest wywoływane w odpowiedzi na różne ogromne (zbyt duże, aby zachować to wszystko w pamięci) wywołania ajax)) * * * Jeśli to nie należy do Programistów, ale w końcu do SO, to moje szczere przeprosiny i Zapytam o to ponownie. (Usunę tę notatkę za chwilę, jeśli okaże się, że to właściwe miejsce).


title: Deduplikuj podczas lub po zapisie

text: Mam narzędzie podsumowujące napisane w Pythonie, które odczytuje pliki wejściowe i zapisuje je w pliku podsumowania. Mam następujące zastrzeżenia: 1. Brak duplikatów. 2. Jeśli istnieje, dodaj do niego liczbę. Czy lepiej/szybciej jest napisać jeden plik wyjściowy GIANT, A NASTĘPNIE usunąć duplikaty wpisów czy deduplikować je w trakcie (tj. każde polecenie zapisu sprawdza przed zapisem)? Małe pliki mają około 100-300 000 każdy, mogą być ich setki tysięcy, a końcowy plik wyjściowy ma zwykle 1-4 MB. Przykładowa linia w pliku wyglądałaby tak: `String,number` Sprawdzałbym łańcuch pod kątem duplikatów. Gdyby to był duplikat, wypisałbym: `string,COUNT,number(addition)` tak jak w, dodałbym liczby za każdym razem, gdy otrzymałem duplikat, i zliczał, ile razy został zduplikowany. Powiedziałbym, że są to głównie duplikaty.


title: Jakie jest minimalne wymaganie, aby kod został uznany za implementację AI?

text: Chciałbym wiedzieć, w którym momencie można uznać za wdrożenie AI? Chodzi mi o to, jakie jest minimalne zapotrzebowanie na to? Czy możesz podać prosty przykład kodu?


title: Jakiego diagramu UML należy używać do modelowania uprawnień/użytkowników/plików w systemie Linux?

text: Jeśli planuję strukturę do wsparcia testowania w systemie Linux, strukturę, która będzie zawierała pakiety, takie jak pliki takie jak skrypty powłoki i budowania, konfiguracje aplikacji, bazy danych, źródła, testy i jary do zarządzania, aplikacje dla menedżerów, użytkownicy, uprawnienia itp., jaki schemat można by do tego wykorzystać? Właśnie teraz używam Diagramu Komponentów z pewnymi stereotypami, ale to wcale nie jest wygodne w części uprawnień/użytkowników. Istnieją takie diagramy jak RBAC, ale nie są to UML i nie jest jasne, jak je połączyć. Bardzo mile widziane byłoby zdjęcie przykładowe i/lub opis prawdziwego doświadczenia. Ale każda świeża myśl też się przyda.


title: Jaki jest najlepszy/najskuteczniejszy sposób na stworzenie półinteligentnej sztucznej inteligencji do gry w kółko i krzyżyk?

text: w zasadzie staram się stworzyć wydajną/niewielką grę w C w kółko i krzyżyk. Do tej pory zaimplementowałem na komputerze wszystko inne niż sztuczna inteligencja. moje kwadraty są zasadniczo strukturami w tablicy z przypisaną wartością na podstawie kwadratu. Na przykład s[1].wartość = 1; dlatego jest to _x_ , a wtedy wartość 3 będzie _o_. Moje pytanie brzmi: jaki jest najlepszy sposób na stworzenie pół przyzwoitej gry z AI w mojej grze w kółko i krzyżyk? Naprawdę nie chcę używać minimax, ponieważ nie jest to, czego potrzebuję. Jak więc uniknąć wielu stwierdzeń _if_ i zwiększyć ich wydajność. Oto reszta mojego kodu: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> struct state{ // zdefiniowany stan int; // 0 to remis, 1 to przegrana użytkownika, 2 to wygrana użytkownika, 3 to trwająca gra ruchy int; }; struct square{ // jedno pole planszy int value; // 1 to x, 3 to znak o znaku; // nie użyto spacji }; struktura kwadrat s[9]; //ustaw stan struct struct stan gry = {0,0}; //nic void setUpGame(){ // skonfiguruj grę int i = 0; for(i = 0; i < 9; i++){ s[i].wartość = 0; s[i].znak = ' '; } stan gry.moves=0; printf("\nCześć użytkowniku! Jesteś \"x\"! Jestem \"o\"! Powodzenia :)\n"); } void displayBoard(){// wyświetla planszę do gry printf("\n %c | %c | %c\n", s[6].sign, s[7].sign, s[8].sign) ; printf("-----------\n"); printf(" %c | %c | %c\n", s[3].sign, s[4].sign, s[5].sign); printf("-----------\n"); printf(" %c | %c | %c\n\n", s[0].sign, s[1].sign, s[2].sign); } void getHumanMove(){ // pobierz ruch od człowieka int i; while(1){ printf(">>:"); linia znaków[255]; // wprowadź ruch, aby odtworzyć fgets(line, sizeof(line), stdin); while(sscanf(line, "%d", &i) != 1) { //1 dopasowanie zdefiniowanego specyfikatora w wierszu wejściowym printf("Przepraszamy, to nie jest prawidłowy ruch!\n"); fgets(linia, sizeof(linia), stdin); } if(s[i-1].value != 0){printf("Przepraszam, ten ruch został już wykonany!\n\n");continue;} break; } s[i-1].wartość = 1; s[i-1].znak = 'x'; stan gry.moves++; } int sum(int x, int y, int z){return(x*y*z);} void getCompMove(){ // pobierz ruch z komputera } void checkWinner(){ // sprawdź zwycięzcę int i ; for(i = 6; i < 9; i++){ // sprawdź kolumny if((suma(s[i].value,s[i-3].value,s[i-6].value)) == 8){printf("Zwycięzcą jest!\n");gamestate.state=1;} if((suma(s[i].value,s[i-3].value,s[i-6] .value)) == 1){printf("Zwycięzcą jest x!\n");gamestate.state=2;} } for(i = 0; i < 7; i+=3){ // sprawdź wiersze, jeśli ((suma(s[i].value,s[i+1].value,s[i+2].value)) == 8){printf("Zwycięzca jest nieobecny!\n");stan gry. stan=1;} if((suma(s[i].value,s[i+1].value,s[i+2].value)) == 1){printf("Zwycięzcą jest x!\ n");gamestate.state=2;} } if((suma(s[0].value,s[4].value,s[8].value)) == 8){printf("Zwycięzcą jest o!\n");gamestate.state=1;} if((suma(s[0].value,s[4].value,s[8].value)) == 1){printf("The Zwycięzcą jest x!\n");gamestate.state=2;} if((suma(s[2].value,s[4].value,s[6].value)) == 8){printf( "Zwycięzcą jest o!\n");gamestate.state=1;} if((suma(s[2].value,s[4].value,s[6].value)) == 1){ printf("Zwycięzcą jest x!\n");gamestate.state=2;} } void playGame(){ // rozpocznij grę gamestate.state = 3; //ustaw gamestate srand(time(NULL)); int temp = (rand()%2) + 1; if(temp == 2){ // jeśli dwa comp idą jako pierwsze temp = (rand()%2) + 1; if(temp == 2){ s[4].value = 2; s[4].znak = 'o'; stan gry.moves++; }else{ s[2].value = 2; s[2].znak = 'o'; stan gry.moves++; }         }          wyświetlacz(); while(gamestate.state == 3){ if(gamestate.moves<10); getHumanMove(); if(stan gry.ruchy<10); getCompMove(); checkZwycięzca(); if(gamestate.state == 3 && gamestate.moves==9){ printf("Gra jest remisem :p\n"); przerwanie; }             wyświetlacz(); } } int main(int argc, const char *argv[]){ printf("Witamy w kółko i krzyżyk\nprzez Elitarnego Nooba\nWprowadź 1-9 Aby wykonać ruch, standardowy numpad\n1 jest w lewym dolnym rogu, 9 to u góry po prawej\n"); while(1){ // podczas gry printf("\nNaciśnij 1, aby zagrać w nową grę, lub dowolną inną liczbę, aby wyjść;\n>>:"); linia znaków[255]; // wpisz, czy chcesz grać w grę fgets(line, sizeof(line), stdin); int wybór; // wybór użytkownika odnośnie grania lub nie while(sscanf(line, "%d", &choice) != 1) { //1 dopasowanie zdefiniowanego specyfikatora w wierszu wejściowym printf("Przepraszamy, to nie jest poprawna opcja!\n" ); fgets(linia, sizeof(linia), stdin); } if(wybór == 1){ setUpGame(); // konfiguracja gry playGame(); // Zagraj w grę }else {break;} // zamknij aplikację } printf("\nDziękujemy za grę!\nMiłego dnia!\n"); zwróć 0; }


title: czy istnieje język, który obsługuje automatyczną ocenę wyrażeń wejściowych?

text: Zastanawiam się, czy ktoś zna język obsługujący automatyczną ocenę. (nie jestem pewien, czy to jest właściwy termin. więc pozwól, że opiszę, co mam na myśli poniżej) Na przykład, program prosi o `int` jako dane wejściowe, można podać `2 + 2`, co daje w wyniku `int` o wartości „4”. Oczywiście można zrobić program, który to akceptuje, używając dowolnego języka, ale zastanawiam się, czy jest jakiś język, który natywnie to obsługuje. Jakie są plusy i minusy tego? PS: Moim „ostatecznym” celem jest podjęcie decyzji, czy zrobić to w języku, który projektuję. Więc byłbym wdzięczny za każdy wkład, szczególnie w odniesieniu do projektowania.


title: Czy do walidacji dokumentów XML należy używać platformy testów jednostkowych?

text: Z http://www.w3.org/XML/Schema: > [Schematy XML] zapewniają środki do definiowania struktury, treści i > semantyki dokumentów XML. Używam schematu XML (XSD) do sprawdzania poprawności kilku dużych dokumentów XML. Chociaż znajduję wiele wsparcia w XSD do sprawdzania struktury moich dokumentów, nie ma żadnych proceduralnych funkcji if/else, które pozwalają mi na przykład powiedzieć, że jeśli kraj to USA, kod pocztowy nie może być pusty. Potrafię swobodnie używać frameworków do testowania jednostkowego i całkiem chętnie używam frameworka do testowania integralności treści. Czy proszę o kłopoty z robieniem tego w ten sposób, a nie o alternatywne podejście? Czy ktoś próbował tego z dobrymi / złymi wynikami? -- **Edytuj** : Nie uwzględniłem tych informacji, aby zachować agnostykę technologiczną, ale używałbym C# / Linq / xUnit do deserializacji / testowania.


title: Czy programowanie aspektowe jest błędną nazwą?

text: Ze wszystkiego, czego się dowiedziałem o „programowaniu zorientowanym na aspekty” lub „tworzeniu oprogramowania zorientowanego na aspekty”, przypisywanie tego jako paradygmatu lub metodologii programowania wydaje się być niedokładne. Z tego, co mogę powiedzieć, nie jest to podstawowa technika programowania. Aby wyjaśnić, co rozumie się przez „paradygmat” i „metodologia”, zapoznaj się z poniższymi definicjami ze Słownika Amerykańskiego Dziedzictwa. Porównaj, jak dobrze lub słabo „programowanie zorientowane obiektowo” stosuje się do każdego z nich, a jak dobrze pasuje AOP. > Paradygmat: zbiór założeń, koncepcji, wartości i praktyk, które > stanowią sposób postrzegania rzeczywistości dla społeczności, która je dzieli, > zwłaszcza w dyscyplinie intelektualnej. > > Metodologia: zbiór praktyk, procedur i zasad stosowanych przez osoby > pracujące w danej dyscyplinie lub angażujące się w dochodzenie; zestaw metod pracy. „Medycyna oparta na dowodach” spełnia definicję paradygmatu, ale „medycyna oparta na histerektomii” byłaby myląca, ponieważ przestrzeń problemowa jest zbyt wąska. Odnoszę wrażenie, że AOP może być błędnie nazwane, ponieważ oparte na sufiksie „programowanie zorientowane”, AOP twierdzi, że jest zarówno paradygmatem, jak i metodologią w taki sam sposób, jak „Programowanie zorientowane obiektowo”. Oba te terminy (paradygmat i metodologia) wskazują na podstawową technikę, w której to, co rozumiem na temat aspektów, to technologia rozwiązywania wąskiego zakresu problemu, być może porównywalna pod względem wielkości do statycznej zmiennej cechy Javy. Jeśli to prawda, że aspekty rozwiązują wąski zestaw problemów, a AOP nie jest mylącą nazwą, to dlaczego wszystkie techniki programowania nie miałyby mieć przyrostka „programowanie zorientowane”, takiego jak „programowanie zorientowane na dziedziczenie”, „programowanie zorientowane na dziedziczenie”, programowanie zorientowane” lub „programowanie zorientowane na zakres?”


title: Jak zweryfikować/udowodnić ortogonalność języka programowania?

text: Znam pojęcie ortogonalności, ale z punktu widzenia języka programowania, czy istnieje sposób, aby to zweryfikować/udowodnić? Na przykład w C# można użyć `public` lub `static` jako sygnatury metody. Możesz użyć jednego lub obu i nie przeszkadzają sobie nawzajem, więc są do siebie prostopadłe, prawda? Moje pytanie brzmi, jak mam zająć się resztą funkcji, szczególnie funkcjami, które nie są ze sobą powiązane? Czy wszystkie funkcje muszą ze sobą współistnieć/układać się? Czy istnieje język programowania, który jest w 100% ortogonalny?


title: Czy bazy danych XML są dobre do zarządzania projektami biznesowymi w małych i średnich firmach, które nie wymagają programowania?

text: Przez ostatnie kilka tygodni szukałem rozwiązania do zarządzania projektami dla miejsca, w którym aktualnie pracuję. Tam opieramy się na arkuszach kalkulacyjnych Excel, ale napotykamy ograniczenia takie jak prawa dostępu i współbieżność (muszę pracować z lokalną kopią arkusza kalkulacyjnego i dwa razy dziennie zrzucać go do głównego arkusza kalkulacyjnego) i kompatybilność wersji oprogramowania (niektórzy mają najnowsze biuro niektóre mają 2003). Redmine był najbliżej, ale tak naprawdę nie spełnia naszych potrzeb - arkusze kalkulacyjne Excela są do bani, ale mają pewne narzędzia statystyczne i każdy może je edytować bez dodatkowej nauki. Teraz, aby nie być od razu (lub w ogóle) zaproponowanym do wykorzystania w produkcji, ale raczej jako dowód koncepcji, chciałbym w wolnym czasie pobawić się z OODBMS lub XML DB, aby zrobić aplikację webową do zarządzania powtarzalnymi zadaniami, która może się jednak różnić, dla grupy 5-10 osób, nie zamiast „poważnych” rozwiązań, ale może wraz z nimi. Zastanawiam się więc, czy te systemy zarządzania bazami danych działają tutaj, czy też powinienem poznać szczegółowo relacyjne bazy danych i ORM zamiast marnować na nie czas? Czy pozwoliłyby na klonowanie istniejących opisów przepływów pracy i dostosowywanie ich do innego zadania? Czy trudno byłoby je utrzymać?


title: Jak długo zajęłoby nauczenie się Pythona?

text: Postanowiłem poświęcić czas po pracy na naukę Pythona. Python przemawia do mnie, ponieważ w pracy (Web and eLearning Company) muszę wykonywać bardzo powtarzalne zadania, takie jak usuwanie wszystkich tych tagów, zmiana nazwy wszystkich tych zadań, a nawet bardziej zaawansowane powtarzalne zadania. Dodatkowo byłoby dobrze, gdybym najpierw zrozumiał Pythona, ponieważ jego składnia jest dość łatwa do nauczenia. Jak długo zajęłoby nauczenie się podstaw Pythona?


title: Dlaczego w Unicode jest tak wiele spacji i podziałów wierszy?

text: Unicode ma może 50 spacji > > \u0009\u000A-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000][\u0009\u000A-\u000D\u0020 \u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000 i 6 łamań linii > nie tylko CRLF, LF, CR, ale także NEL (U+0085), PS (U+2029 ) i LS (U+2028). Może mógłbym zrozumieć większość spacji i PS ("Separator akapitu"), ale do czego służą "Next Line" i "Line separator"? Wygląda na to, że wszystko zostało wymyślone przez bardzo duży komitet, w którym każdy chciał mieć własną przestrzeń, a przywódcy otrzymali po jednym łamaniu linii. Ale poważnie, jak sobie z tym radzisz, gdy twój język programowania go nie obsługuje (lub robi to źle, jak np. Java)?


title: Czy LISP jest nadal przydatny w dzisiejszym świecie? Która wersja jest najczęściej używana?

text: Staram się uczyć nowego języka programowania w regularnych odstępach czasu. Ostatnio czytałem, że Lisp i jego dialekty znajdują się na zupełnym przeciwległym krańcu spektrum języków takich jak C/C++, co zaciekawiło mnie na tyle, by dowiedzieć się o nim więcej. Jednak dwie rzeczy są dla mnie niejasne i szukam wskazówek na ich temat: 1. Czy LISP jest nadal praktykowany/używany w dzisiejszym świecie, czy jest to język przestarzały jak FORTRAN/COBOL? Chodzi mi o to, czy oprócz utrzymywania istniejącego kodu w ogóle jest on używany w nowych projektach ? 2. Jaki jest najczęściej używany dialekt? Natknąłem się na Scheme i Common Lisp jako 2 najbardziej rozpowszechnione dialekty i chciałem poznać Twoją opinię na temat tego, który z nich jest najbardziej ulubiony/przydatny do nauczenia – i byłbym niezmiernie zadowolony, gdybyś mógł zasugerować jakiekolwiek zasoby dla początkujących. Chociaż jestem chętny do nauki języka, który zasadniczo różni się od języków proceduralnych, do których jestem przyzwyczajony, nie chcę inwestować nadmiernego wysiłku w coś, co jest całkowicie przestarzałe - nadal uczyłbym się tego, gdyby był zawodowo „martwy”, ale tylko z perspektywy akademickiej...


title: Kiedy chcesz mieć dwa odniesienia do tego samego obiektu?

text: Konkretnie w Javie, ale prawdopodobnie również w innych językach: kiedy przydałoby się mieć dwie referencje do tego samego obiektu? Przykład: Pies a = new Pies(); Dob b = a; Czy jest sytuacja, w której byłoby to przydatne? Dlaczego miałoby to być preferowane rozwiązanie do używania „a” za każdym razem, gdy chcesz wchodzić w interakcję z obiektem reprezentowanym przez „a”?


title: Nazewnictwo API i przestrzenie nazw

text: Czy jest słuszne czy piękniejsze nazywanie funkcji przedrostkiem, jak w Qt? Lub używając "wielu" przestrzeni nazw, ale "normalnych" nazw funkcji? Na przykład ` slOpenFile(); //"sl" oznacza "jakaś biblioteka" kontra jakaś_lib::file_functions::openFile(); ` **Aktualizacja:** Czytałem gdzieś, że pierwszy wariant (przy użyciu jakiegoś prefiksu) jest lepszy, ponieważ użytkownicy API mogą wykonywać 'szybkie' wyszukiwanie w dokumentacji iw Internecie. Np. wpisując magiczny prefiks, wyszukiwarka zaczyna podpowiadać dokładne funkcje. Czy wystarczy skorzystać z pierwszego wariantu?


title: Czy jest technicznie możliwe napisanie interpretera JS przy użyciu czytników makr Lisp w przeglądarce?

text: Używając czytników makr, można interpretować JavaScript i skompilować go tak, jak normalny kod Common Lisp. Stąd czerpanie korzyści z implementacji Lisp, w szczególności ich wydajności. Co oznaczałoby posiadanie natywnej wydajności w przeglądarce, bez oszukiwania. Czy byłoby technicznie możliwe zbudowanie tego dla przeglądarki? Martwię się głównie o wiązania DOM.


title: Na którym etapie cyklu życia oprogramowania powinienem zaprojektować algorytm obliczeniowy?

text: W projektowaniu oprogramowania zwykle zajmujemy się diagramami UML i projektowaniem architektury. Ale w przypadku oprogramowania do analizy danych musimy zwrócić uwagę na algorytmy projektowe i tym podobne. Rozważmy przypadek oprogramowania do wykrywania twarzy, które wymaga sztucznej inteligencji. Czy musimy zaprojektować sztuczną część oprogramowania bezpośrednio w projektowaniu oprogramowania? **P.S:** Mój przełożony mówi, że musi to być jasno określone w studium wykonalności i tak jasne, abyśmy mogli zaprojektować go na etapach projektowania. Czy on ma rację?


title: Elementarz o poruszaniu się w MVC

text: W moim pytaniu o przepełnienie stosu zasugerowano, że może to lepiej pasować do tej witryny, więc publikuję to krzyżowo. Pracuję nad moją pierwszą oddolną kompilacją witryny MVC. Mam kolekcję widoków, kolekcję modeli i przetestowałem większość moich widoków i naprawiłem oczywiste błędy. Ostatnim krokiem, który muszę wykonać, jest powiązanie widoków - aby umożliwić użytkownikowi klikanie w linki/przyciski i poruszanie się między nimi. Większość moich wyszukiwań w Google Actions i ActionLinks w MVC/Razor prowadzi mnie z powrotem do StackOverflow, do bardzo konkretnych pytań, które tak naprawdę mi nie pomagają - pytania zakładają, czego próbuję się nauczyć. Staram się nauczyć na wysokim poziomie sposobu przekazywania różnych rzeczy do metod kontrolera (tj. przesłonić metodę kontrolera, aby widok akceptował 2 parametry zamiast 3, lub akceptował dane POST, rozumiem, co zostanie przekazane z jednego widoku do innej akcji z wywołania Html.Action itp.).


title: Czy masz tendencję do wpisywania własnego imienia lub nazwy firmy w swoim kodzie?

text: Pracowałem nad różnymi projektami w domu iw pracy, a przez lata stworzyłem dwa główne API, których używam w prawie wszystkich serwisach opartych na AJAX. Skompilowałem oba te pliki do bibliotek DLL i nazwałem przestrzenie nazw Connell.Database i Connell.Json. Mój szef niedawno zobaczył te przestrzenie nazw w dokumentacji oprogramowania dla projektu dla firmy i powiedział, że nie powinienem używać własnego imienia i nazwiska w kodzie. (Ale to mój kod!) Należy pamiętać, że nie jesteśmy firmą programistyczną. Jesteśmy firmą zajmującą się wsparciem IT, a ja jestem tutaj jedynym pełnoetatowym programistą, więc tak naprawdę nie ma żadnych procedur dotyczących tego, jak powinniśmy pisać oprogramowanie w firmie. Inną rzeczą, o której należy pamiętać, jest to, że pewnego dnia zamierzam udostępnić te biblioteki DLL jako projekty open-source. Jak inni programiści grupują swoje przestrzenie nazw w swojej firmie? Czy ktoś używa tych samych bibliotek klas w projektach osobistych i roboczych? Czy to też działa w drugą stronę? Jeśli napiszę bibliotekę klas całkowicie w pracy, kto jest właścicielem tego kodu? Jeśli przejrzałem bibliotekę od początku do końca, zaprojektowałem ją i zaprogramowałem. Czy mogę użyć tego do innego projektu w domu? Dzięki, _**Update_** _Rozmawiałem z moim szefem w tej sprawie i zgadza się, że są to moje obiekty i mogę je otworzyć. Przed tą rozmową i tak zacząłem zmieniać obiekty, co w rzeczywistości było dość produktywne, a kod teraz bardziej pasuje do tego konkretnego projektu niż poprzednio._ _Ale dziękuję wszystkim zaangażowanym za bardzo interesującą debatę. Mam nadzieję, że cały ten tekst się nie zmarnuje i ktoś się z niego nauczy. Z pewnością tak.


title: Jak zgłosić błąd szefowi

text: Jestem stażystą programistycznym, który od 6 miesięcy pracuje w firmie (jest to moja pierwsza praca programistyczna, więc mam 6 miesięcy doświadczenia). Obecnie jestem jednoosobowym zespołem i tworzę aplikację mobilną za pomocą API Mosync C++. **Szukam porady jak zgłosić błąd szefowi, który nie jest programistą. W przeszłości miałem problemy z wyjaśnieniem wagi błędu/problemu z programowaniem, a on powie „po prostu pracuj nad czymś innym przez kilka dni”, oczekując, że i tak zostanie to naprawione w ciągu kilku dni. Główny problem polega na tym, że uważa on, że ilość wysiłku ma bezpośredni związek z wynikiem rozwiązania błędu, a jeśli nie zostanie on naprawiony po kilku dniach, to z powodu braku wysiłku lub umiejętności** Jak wyjaśnić, że nie mogę określić, w jaki sposób długo zajmie naprawienie błędu, a jeśli naprawa zajmie dużo czasu, nie jest to związane z brakiem wysiłku lub umiejętności? Trochę podstawowych informacji: Mam błąd w bieżącym projekcie (aplikacja mobilna), nad którym pracuję. Aplikacja mobilna była gotowa, ale mój szef chciał, żebym dodał do niej nowe funkcje. Po dodaniu funkcji aplikacja zawiesza się teraz po przejściu ekranów X razy i bardzo trudno jest odtworzyć błąd (wydaje się losowy i sporadyczny), ale jest to również bardzo poważne, ponieważ wypuszczanie aplikacji, która losowo się zawiesza, jest oczywiście bardzo złe. Jako młody programista wiem, że moje doświadczenie jest najprawdopodobniej przyczyną błędu w mojej aplikacji i że mogę wiele zrobić, aby uniknąć takich problemów, jak testy regresji, może lepszy projekt architektury aplikacji, aby umożliwić rozwój oparty na komponentach (dodaj nowe funkcje, które dobrze współpracują z już istniejącymi). Ale wiem też, że błędy są faktem programowania i zawsze będą się zdarzać.


title: Pro/Cons do układu tabeli bazy danych, ponieważ odnosi się do konserwacji i rozszerzalności

text: Poniżej podstawowy układ pseudoklasy... class Location(): # Klasa zawierająca informacje o lokalizacji. id address_one class CustomerLocation(Location): customer_id account_rep class VendorLocation(Location): vendor_id drop_ship_cut_off_time Załóżmy, że masz lokalizacje, które będą używane do przechowywania informacji o lokalizacji dla klientów i dostawców. Jakie byłyby plusy/minusy tych trzech opcji w ich związku z utrzymaniem aplikacji i rozszerzalnością... 1. Jedna duża tabela zawierająca wszystkie pola. 2. Jedna duża tabela zawierająca wszystkie wspólne pola z powiązanymi tabelami zawierającymi specjalistyczne informacje o rekordach dużej tabeli. 3. Wiele małych tabel zawierających wszystkie pola związane z określonymi zastosowaniami.Tabela CustomerLocation VendorLocation bez używania "tabeli głównej" dla wspólnych pól.


title: Metody abstrakcyjne a zmienne instancji dla obiektów wielokrotnego użytku

text: Mam sporo kodu Java, który przerabiam, aby można go było ponownie wykorzystać. Problem polega na tym, że istnieje wiele elementów, które są specyficzne dla projektu, więc istnieje wyższy poziom sprzężenia między projektem aplikacji a projektem bazowym kodu. Porównaj z następującymi sytuacjami, w których używamy klasy, która implementuje użycie metod abstrakcyjnych, aby pobrać zasoby z klasy potomnej, i taką, w której po prostu deklarujemy zmienne instancji. Metody abstrakcyjne: public abstract class SuperBaseClass { public abstract int getNumberOne(); public abstract String getStringOne(); public abstract String getStringTwo(); public printStuff() { Log.i("IntAndTwoStrings", String.format("%i %s i %s", getNumberOne(), getStringOne(), getStringTwo())); } } public class ReusedAppClass extends SuperBaseClass { public int getNumberOne() { return 1; } public String getStringOne() { return "String1"; } public String getStringTwo() { return "String2"; } public ReusedAppClass() { printStuff(); } } Zmienne instancji: public class SuperBaseClass { protected int numberOne; chroniony String StringOne; chroniony String stringDwa; public printStuff() { //Możliwe wyrzucenie wyjątków RuntimeException, jeśli aplikacja nie ustawiła tych Log.i("IntAndTwoStrings", String.format("%i %s i %s", numberOne, stringOne, stringTwo)); } } public class ReusedAppClass extends SuperBaseClass { public ReusedAppClass() { numberOne = 1; ciągJeden = "Ciąg1"; ciągDwa = "Ciąg2"; printStuff(); } } Czy istnieje kompromis? Czy sytuacja metody abstrakcyjnej jest przesadą, czy też po to stworzono klasy abstrakcyjne?


title: Jaki jest cel boksu NaN?

text: Czytając XXI wiek C dotarłem do rozdziału 6 w sekcji „Oznaczanie wyjątkowych wartości numerycznych za pomocą NaN”, gdzie wyjaśnia się użycie bitów w mantysie do przechowywania pewnych wzorców bitowych, aby używać ich jako znaczników lub wskaźników (książka wspomina, że WebKit używa tej techniki). Nie jestem pewien, czy zrozumiałem użyteczność tej techniki, którą uważam za hack (opiera się na sprzęcie, który nie dba o wartość mantysy w NaN), ale pochodzący z tła Java, do którego nie jestem przyzwyczajony chropowatość C. Oto fragment kodu, który ustawia i odczytuje znacznik w NaN #include <stdio.h> #include <math.h> //isnan double ref; double set_na(){ if (!ref) { ref=0/0.; znak *cr = (znak *)(&ref); cr[2]='a'; } zwróć ref; } int is_na(double in){ if (!ref) return 0; //set_na nigdy nie został nazwany==>nie ma jeszcze NA. znak *cc = (znak *)(&in); znak *cr = (znak *)(&ref); for (int i=0; i< sizeof(double); i++) if (cc[i] != cr[i]) return 0; powrót 1; } int main(){ double x = set_na(); podwójne y = x; printf("Czy x=set_na() NA? %i\n", is_na(x)); printf("Czy x=set_na() NAN? %i\n", isnan(x)); printf("Czy y=x NA? %i\n", is_na(y)); printf("Czy 0/0 NA? %i\n", is_na(0/0.)); printf("Czy 8 NA? %i\n", is_na(8)); } wypisuje: Czy x=set_na() NA? 1 Czy x=set_na() NAN? 1 Czy y=x NA? 1 Czy 0/0 nie dotyczy? 0 Czy 8 NA? 0 i na JSValue.h webkit wyjaśnia kodowanie, ale nie dlaczego jest używane. Jaki jest cel tej techniki? Czy korzyści z przestrzeni/wydajności są wystarczająco wysokie, aby zrównoważyć ich hackowy charakter?


title: Co myślisz o klejnotach i jajkach? Alternatywy?

text: Czytałem ostatnio krytykę (patrz 1, 2, 3) dotyczącą systemu dystrybucji pakietów dwóch popularnych języków programowania: klejnotów Ruby i jajek Pythona. Najważniejszym argumentem wysuwanym przeciwko nim jest to, że zastępują systemowego menedżera pakietów (jeśli taki istnieje, jak w każdej dystrybucji Linuksa), co utrudnia śledzenie jajek i klejnotów, łatanie kodu i tak dalej. Czy rzeczywiście jajka i klejnoty mają rację? Jeśli nie, czy są jakieś alternatywy dla dystrybucji modułów Pythona lub Ruby? Czy programiści powinni skupić się na wykorzystaniu możliwości menedżera pakietów (apt-get, pacman, ...)?


title: Zwracanie obiektu lub fałsz w językach dynamicznych

text: Rozważ następującą funkcję JavaScript: function Foo() { function getPreferences() { if ([istnieje istniejący obiekt preferencji]) { return preferencje; } zwróć fałsz; } } Kod wywołujący to: var foo = new Foo(); var prefs = foo.getPreferences(); if (prefs) { // zrób coś z prefs } * Czy wzorzec zwracania obiektu, jeśli istnieje, lub fałszywy w przeciwnym razie, jest postrzegany jako dobra czy zła praktyka? Inne alternatywy, które widzę, to zwrócenie pustego obiektu {} lub null. * Czy ten wzór ma nazwę?


title: W jakim obszarze sztucznej inteligencji znajduje się mój magazyn wiedzy?

text: Mam dojrzewający pomysł dotyczący sklepu z wiedzą. Na potrzeby tego pytania sklep byłby wykorzystywany przez policję do rejestrowania i przesłuchiwania przestępstw. Uważam, że w przeszłości siły policyjne posiadały rozległe systemy kart indeksowych, umożliwiające korelację krzyżową i zapytania. Magazyn wiedzy zawierałby zbiór znanych faktów, posortowanych w sposób, który obsługuje nieznane przyszłe pytania. Oczywiście, gdybym znał przyszłe pytania „ile przestępstw w tym miesiącu”, „jakie narzędzie jest najczęściej używane do włamań i włamań”, byłoby całkiem proste przechowywanie, zestawianie i prezentowanie danych. Problem stanowi moje wymaganie dotyczące nieznanych przyszłych pytań. Wyobrażam sobie szereg autorów zestawiających szczegóły zbrodni. Podawali szczegóły, intensywnie wykorzystując związki: „przestępstwo **popełniło się** wieczorem”, „włamywacz **wykorzystał** cegłę”, „przestępstwo **popełnione** przez Person_A”. Rozważając przestępstwo, użytkownik wpisałby „cegła” i otrzymałby zebraną wiedzę związaną z tym pojęciem. * często używany w nocy * często używany przy włamaniach oportunistycznych * często używany podczas napadu * najczęściej używany obiekt wejściowy używany w sąsiedztwie D * najczęściej używany obiekt przez Person_A, Person_B Użytkownik następnie przeglądał/przeglądał zestaw informacji, aby dowiedzieć się więcej o przeszłych przestępstwach . Podstawowy magazyn informacji wydaje się zbliżony do bazy danych wykresów – ale nie chcę „lunatykować” w korzystaniu z jednego z nich, jeśli istnieje bardziej naturalne rozwiązanie oparte na sztucznej inteligencji, które nie tylko rozwiązuje problem z przechowywaniem/odzyskiwaniem, ale także zapewnia odliczenia w stylu systemu eksperckiego.


title: Próbuję znaleźć wideo z przemową na temat wpływu opóźnienia dostępu do pamięci

text: Kilka miesięcy temu natknąłem się na wideo w Internecie, na którym ktoś wygłasza bardzo dobre przemówienie na temat wpływu opóźnień dostępu do pamięci na wykonywanie programów. Próbuję ponownie znaleźć wideo; może wiesz, jaki film mam na myśli i gdzie mogę go znaleźć. Oto, co pamiętam z rozmowy/wideo: * Nie pamiętam tytułu i może był on szerszy, ale rozmowa dotyczyła dużo o wpływie opóźnień dostępu do pamięci w nowoczesnych procesorach na wykonywanie programu. * Rozmowa była po angielsku i najprawdopodobniej lokalizacja była w Ameryce. * Prelegent posiadał dużą wiedzę na temat tematu, ale prelekcja miała charakter nieformalny (nie prezentacja na konferencji czy wykład uniwersytecki). Myślę, że mówca był znany publiczności i mógł nawet być sławny (nie pamiętam) * Publiczność mogła być klubem komputerowym / grupą lokalnej społeczności lub firmy (ale nie pamiętam na pewno)


title: Czy mogę użyć biblioteki na licencji LGPL do mojego projektu internetowego?

text: Chcę użyć biblioteki javascript na licencji LGPL v3. Z tego co do tej pory wyczytałem rozumiem, że jeśli nie dokonuję żadnych modyfikacji w bibliotece, mogę korzystać z biblioteki bez żadnych ograniczeń. Ale jeśli zmodyfikuję bibliotekę, muszę udostępnić zmodyfikowaną wersję użytkownikom końcowym, a także umożliwić im dynamiczne łączenie biblioteki. Ponieważ używam javascript, mój kod jest i tak otwarty dla użytkownika końcowego. Ponadto użytkownik może dynamicznie łączyć się z biblioteką poprzez konsolę debugowania. Więc moje pytanie brzmi, czy muszę zrobić coś jawnie, skoro JavaScript jest już otwarty dla użytkowników? Ponadto, czy są jakieś inne ograniczenia, które mogłem przeoczyć? Uwaga: Znalazłem inne odpowiedzi, które opisują LGPL w odniesieniu do dowolnej aplikacji. Ale szukam odpowiedzi, która opisuje, w jaki sposób LGPL odnosi się konkretnie do javascript.


title: Czy istnieje reprezentacja mixinów lub cech w UML?

text: Czy istnieje reprezentacja nowoczesnych konstrukcji programistycznych, które stają się powszechne w nowoczesnych językach OOP/hybrydowych, takich jak mixiny/cechy/kategorie/klasy częściowe?


title: Prezenter widoku modelu nad kontrolerem widoku modelu

text: > **Możliwe duplikowanie:** > Tworzenie stron internetowych, co jest lepszym podejściem MVP czy MVC? Próbuję poznać różnicę między modelami MVC i MVP. Jak dotąd nie widzę dużej różnicy pod względem ich architektonicznej konfiguracji. Więc moje pytanie brzmi, kiedy należy wybrać model MVP zamiast modelu MVC? Czy są sytuacje, w których jedno jest lepsze od drugiego?


title: Puste linie w C

text: Pracuję przez K&R i zauważam, że ich kod jest bardzo ciasno rozmieszczony. Nie rozwijałem C od czasu na Uniwersytecie, ale zawodowo większość źródeł z innych języków, w których pracowałem, używa pustych wierszy, aby poprawić czytelność. Czy C generalnie jest bardziej ciasno upakowane, czy jest to kwestia historyczna związana z rozmiarami wyświetlacza w latach 70-tych? Ćwiczenie 1-16 wydaje się utrudniać czytelność, na przykład przez użycie `if` zaraz po pętli `for`, która nie ma nawiasów klamrowych. /* mygetline: wczytaj linię do s, zwróć długość */ int mygetline(char s[], int lim) { int c,i; for (i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; powrót ja; }


title: Zalecana biblioteka do uzyskania współrzędnych 2d ruchu głowy

text: Moją platformą docelową jest Mac OS X, ale szukam biblioteki, która poda mi współrzędne 2D czyjejś głowy za pomocą wbudowanej kamery internetowej. Moje wymagania są takie, że jest to czas zbliżony do rzeczywistego, jeśli nie w czasie rzeczywistym, daj mi współrzędne ekranu 2d, które mogę zapisać w dzienniku.


title: Jak opublikować fajną bookmarklet?

text: Napisałem naprawdę fajną bookmarklet, a teraz chcę wszystkim powiedzieć. Absolutnie nie mam pojęcia, dokąd się udać, czy jest jakaś wymiana na te rzeczy? Na wypadek, gdyby ktoś był ciekawy: byłem zmęczony koniecznością ponownego wpisywania adresów URL z przeglądarki na komputerze do przeglądarki telefonu, z jej klawiaturą itsy-bitsy, więc napisałem bookmarklet, który konwertuje bieżący adres URL na kod QR, który mogę zeskanować za kilka sekund. javascript:window.location="http://chart.apis.google.com/chart?chs=250x250&cht=qr&chl="+escape(window.location)


title: jak uzyskać od 1 bajta do 2 bajtów

text: Właśnie dostałem coś, czego nie mogę zrozumieć, więc mamy `1 bajt`, czyli `8 bitów`, czyli `2^8`. Teraz `2 bajty` powinny być `2 * 1 bajt`, czyli `2 * 2^8 = 2^9`, ale w rzeczywistości 2 bajty to `2^16`. Czego mi tu brakuje? Mam na myśli, że wygląda na to, że `2 bajty` to nie `2 * 1 bajt`, to raczej `1 bajt * 1 bajt`, ale powinno to dać `bajt^2`, co nie ma sensu. Czy ktoś może mi wyjaśnić jakąś koncepcję, w której się mylę? Z góry dziękuję.


title: Tworzysz pakiet java na Ubuntu?

text: Jestem nowy w Javie. Tutaj próbuję stworzyć pakiet java. I spróbuj skompilować go z innego katalogu. Ale jest błąd taki jak bash: `/home/gaurav/Desktop/package2/B.java: Permission denied` Oto Mój pierwszy kod i katalog to /home/Desktop/package/A.java package1; public class A {interfejs A1 {nieważne show(); nieważne wyświetlanie(); } } klasa B extends A { public void show() { System.out.println("To jest metoda pokazu()"); } public void display() { System.out.println("to jest metoda wyświetlania()"); } } Do kompilacji zrobiłem to polecenie, działa dobrze. Katalog roboczy to /home/gaurav > javac /home/gaurav/Desktop/package/A.java Kiedy próbuję skompilować B.java, który znajduje się na moim Innym dysku > /media/gaurav/iPlay/package/B.java package package2 ; class B { public static void main(String args[]) { System.out.println("Osiągnięto w głównej metodzie B"); pakiet1.A Obiekt = nowy A(); } } Zmęczyłem się tym komunikatorem (grom poprzedni katalog roboczy) javac -cp /home/gaurav/Desktop/;/media/gaurav/iPlay/package/B.java _Error Comes_ javac -cp /home/gaurav/Desktop/;/media /gaurav/iPlay/package/B.java javac: brak plików źródłowych Użycie: javac <opcje> <pliki źródłowe> use -help zawiera listę możliwych opcji bash: /media/gaurav/iPlay/package/B.java: Zezwolenie odmowa Co robię źle? Proszę, to moje zadanie, bez tego nie jestem w stanie ruszyć dalej. Zmieniłem uprawnienia.


title: Jak daleko posunąć się z projektowaniem opartym na domenie?

text: Czytałem trochę o projektowaniu opartym na domenach i korzystaniu z bogatego modelu domeny, opisanego przez Martina Fowlera, i postanowiłem zastosować to w praktyce w osobistym projekcie, zamiast używać skryptów transakcyjnych. Wszystko szło dobrze, dopóki nie rozpoczęto implementacji interfejsu użytkownika. Chodzi o to, że niektóre widoki będą używać bogatych komponentów, które są poparte nietypowymi modelami, a zatem muszę przekształcić model domeny w ten, który jest używany przez te komponenty. I ta transformacja jest szczególnie „złożona” w części widok do domeny, do tego stopnia, że w grę wchodzi pewna logika biznesowa. Co prowadzi mnie do pytania: _gdzie_ powinienem zrobić te adaptacje? Do tej pory doszedłem do następujących wniosków: * Robienie tego w warstwie prezentacji jest dobre, bo cóż, jeśli ta warstwa nakłada ograniczenia w swoim modelu, to powinna je obsłużyć. Ale to źle, ponieważ nastąpi wyciek biznesowy. * Jeśli zrobię to na obiektach usług (kontrolerach, akcjach, cokolwiek), to byłoby dobrze, ponieważ nie będzie żadnych zmian w API domeny tylko z powodu warstwy prezentacji, ale jest źle, ponieważ wtedy miałbym skrypty transakcyjne, co nie jest zamierzonym projektem. * Wreszcie, jeśli zrobię to w modelu domeny, nie będzie żadnego wycieku logiki biznesowej. Ale w przyszłości mógłbym spodziewać się eksplozji API w serii metod zaprojektowanych tylko do obsługi tego modelu widoku <-> adaptacji modelu domeny. Mam nadzieję, że mogę to wyjaśnić.


title: Czy mogę połączyć GPL i CDDL, jeśli nie rozpowszechniam?

text: Być może jest to pytanie ezoteryczne, ponieważ nigdy nie będę rozpowszechniał tego kodu i mogę dość łatwo uniknąć używania kodu na licencji GPL, ale jestem ciekaw i wkurza mnie to - ale nie na tyle, by skonsultować się z prawnikiem. Co więcej, myślę, że bardziej interesuje mnie moralność tej kwestii niż legalność. Mam program, którego używam w ramach CDDL. Program miał dość małą bazę użytkowników na początek, a twórcy oferują teraz nowszą wersję, która jest zamkniętym kodem źródłowym. W związku z tym nie jestem zainteresowany wnoszeniem mojej drobnej modyfikacji z powrotem do projektu. Tylko do mojego użytku chciałbym dołączyć pojedynczy moduł, który jest na licencji GPL, aby uniknąć małej ilości żmudnego kodowania. Gdybym miał rozpowszechniać wyniki, byłoby to wyraźnie naruszeniem warunków podanych w różnych źródłach, takich jak komentarze FSF dotyczące GNU GPL i CDDL. Jeśli poprawnie wyśledziłem źródło niezgodności z powrotem do MPL z linku z wikipedii, wszystkie problemy wydają się pojawiać z klauzulami, które występują w dystrybucji. Oznaczałoby to dla mnie, że mogę legalnie modyfikować i łączyć GPL i CDDL, ale nie mogę legalnie rozpowszechniać tej kombinacji. Pomijając legalność, czy ktoś widzi jakieś moralne problemy z wprowadzeniem drobnej poprawki do programu na własny użytek, która wprowadza tę niezgodność w dystrybucji?


title: Różnica między modelem kaskadowym a modelem obiektowym?

text: Proszę wyjaśnić różnicę między modelem kaskadowym a modelem obiektowym. Ponieważ książki i strony internetowe, które widziałem, nie zawierały zbyt wielu informacji na ten temat, potrzebuję kogoś, kto mi to wyjaśni.


title: Jak mogę śledzić wszystkie utworzone przeze mnie witryny internetowe, tak jak zrobiłby to porządny biznes?

text: Wraz z kilkoma innymi studentami tworzymy grupę, która chce być dobra w tym, co robimy: stronach internetowych. W tej chwili tworzymy strony internetowe za darmo dla przyjaciół, aby zdobyć trochę doświadczenia i uczyć się od siebie nawzajem. W tym tygodniu kończymy naszą pierwszą stronę internetową. Za 6 miesięcy planujemy mieć portfolio i mamy nadzieję, że zaczniemy pobierać opłaty za strony internetowe. Problem polega na tym, że wszyscy jesteśmy początkującymi i nie jesteśmy pewni, jak prowadzić rejestry witryn, które robimy. Jest to ważne, ponieważ możemy chcieć utrzymać kilka stron internetowych lub dodać do nich później. W jaki sposób firma zajmująca się projektowaniem stron internetowych prowadzi ewidencję wszystkich potrzebnych informacji? Czy istnieje program lub pakiet oprogramowania, którego możemy użyć?


title: Czy istnieje limit pobierania aplikacji na iOS?

text: W odniesieniu do iOS 7. Nie mogłem znaleźć żadnych dokumentów Apple w tym zakresie. Czy jesteśmy w stanie pobrać dowolny rozmiar dokumentów i samodzielnie nimi zarządzać (w naszej aplikacji powiedzmy <100MB)? Na przykład co miesiąc wprowadzamy nową zawartość. Dlatego po pobraniu zawartości z tego miesiąca, powinniśmy usunąć zawartość z poprzedniego miesiąca, aby zaoszczędzić miejsce. Zawartość nie musi być archiwizowana i będzie przechowywana w folderze Caches.


title: Unikanie domeny anemicznej - Jak zdecydować, jaką odpowiedzialność ma klasa?

text: Nawet po przeczytaniu kilku wciąż wpadam w tę samą pułapkę. Mam klasę, zwykle jednostkę. Potrzebuję zaimplementować więcej niż jedną, podobną operację na tego typu. Wydaje się niewłaściwe, aby (pozornie arbitralnie) wybrać jedną z tych operacji, aby należeć do jednostki i wypchnąć pozostałe do oddzielnej klasy; W końcu wypycham operacje _all_ do klas usług i zostaje mi domena anemiczna. Jako prymitywny przykład wyobraź sobie typową klasę Pracownika z właściwościami liczbowymi, aby przechowywać liczbę płatnych dni, do których pracownik jest uprawniony zarówno z tytułu choroby, jak i urlopu, oraz zbiór dni zajętych na każde z nich. public class Pracownik { public int PaidHolidayAllowance { get; ustawić; } public int PaidSicknessAllowance { get; ustawić; } public IEnumerable<Holiday> Święta { get; ustawić; } public IEnumerable<SickDays>SickDays { get; ustawić; } } Chcę wykonać dwie operacje, jedną na obliczenie pozostałego urlopu, drugą na pozostałe płatne zwolnienia chorobowe. Wydaje się dziwne, aby dołączyć na przykład CalculateRemaingHoliday() do klasy Employee i przełączyć CalculateRemainingPaidSick() do jakiejś klasy PaidSicknessCalculator. Skończyłbym z PaidSicknessCalculator i RemainingHolidayCalculator oraz anemiczną jednostką Employee, jak pokazano powyżej. Inną alternatywą byłoby umieszczenie obu operacji w klasie Pracownik i wyrzucenie pojedynczej odpowiedzialności z krawężnika. To nie zapewnia szczególnie łatwego w utrzymaniu kodu. Przypuszczam, że klasa Employee powinna mieć jakąś logikę inicjalizacji/walidacji (nie akceptując negatywnych uprawnień itp.), Więc może po prostu trzymam się podstawowej inicjalizacji i walidacji w samych encjach i jestem zadowolony z moich oddzielnych klas kalkulatorów. A może powinienem zadać sobie pytanie, czy Anemic Domain rzeczywiście powoduje jakieś namacalne problemy z moim kodem.


title: Schemat blokowy z podprogramem

text: Nie jestem pewien, jak poprawnie opisać moje pytanie, więc wybacz mi, jeśli jest to duplikat. Tworzę schemat blokowy dla mojego programu, w którym implementuję metodę. Załóżmy, że nazywam tę metodę **someMethod**. Kod w C mógłby wyglądać mniej więcej tak: bool someMethod(int Foo, int Bar) { foo += 5; słupek -= 5; powrót (foo == bar); } Oznacza to, że mój schemat blokowy będzie miał blok podprogramu, w którym wywołam tę funkcję. Ale jak poprawnie pokazać czytelnikowi, które liczby całkowite przekazuję? A kiedy tworzę schemat blokowy "someMethod", mam podobny problem: jak poprawnie pokazać czytnikowi, że Foo i Bar są parametrami przekazanymi? **EDYTUJ:** Z tego, co do tej pory znalazłem, ludzie rozwiązali to, używając bloku Start jako pewnego rodzaju bloku deklaracji funkcji, w którym zastąpiliby Start _jakąkolwiekMetodą_ i umieścili _foo_ i _bar_ w nowej linii. Ale z tego, co rozumiem, nie jest to dobra praktyka, ponieważ początek i koniec każdego schematu blokowego powinny być blokami zawierającymi odpowiednio _Start_ i _Stop_. Widziałem również ludzi używających IO-block jako pierwszy blok niestartowy, w którym _"czytali"_ przekazane parametry, ale to po prostu wydaje się hackiem. Ale jeśli nie ma lepszych pomysłów, przypuszczam, że będę musiał się z tym pogodzić. **EDYTUJ 2:** Zaczynam się zastanawiać, czy to pytanie jest rzeczywiście ważne dla tej witryny. Czy nikt już nie używa schematów blokowych jako metody przygotowania projektu?


title: Czy nauka jakiegokolwiek języka naturalnego poszerzy Twoją karierę programisty?

text: Wydaje się oczywiste, że angielski jest dominującym językiem międzynarodowym w programowaniu opartym na poprzednich pytaniach dotyczących P.SE (chociaż bardzo przychylny komentarz słusznie wskazuje, że zadawanie takiego pytania na stronie w przeważającej mierze anglojęzycznej przekrzywi wyniki). Czy jednak nauka języka obcego przy tworzeniu oprogramowania jest korzystna? Na przykład, czy Chińczycy mają zupełnie inne narzędzia programowe, języki, technologie itp.? Co powiesz na język japoński, rosyjski i inne języki, które nie są oparte na łacinie? **Czy istnieje cały świat języków programowania, narzędzi itp., które istnieją tylko w tych innych językach?** **A może ludzie, którzy znają te języki, używają narzędzi i języków, które znamy i kochamy?**


title: Wzorzec projektowy do zarządzania oknami w aplikacji Java Swing

text: Właśnie zacząłem tworzyć swoją pierwszą małą aplikację Java Swing. Gdy program się otwiera, wyświetla pojedyncze, proste okno z etykietą i kilkoma przyciskami. Kliknięcie jednego z tych przycisków ma wymazać ekran powitalny i zastąpić go zupełnie innym panelem. Nie jestem pewien, jaki jest najlepszy sposób na stworzenie tej funkcjonalności. Jedną z metod byłoby przekazanie mojego `JFrame` jako argumentu do… prawie każdego innego komponentu, ale wydaje mi się to dziwaczne. Albo każdy panel pełni podwójną funkcję słuchacza akcji, ale to też nie wydaje się właściwe. Czy jest jakiś wzorzec projektowy, który powinienem tutaj zastosować? "Zamień zawartość głównego - i tylko - okna" musi być dość powszechną operacją. Wystarczyłaby nazwa wzoru; Mogę stamtąd samodzielnie korzystać z Google. (Nie odmówiłbym jednak dłuższego wyjaśnienia.)


Podczas moich wstępnych badań na to pytanie odkryłem, że w Internecie nie ma zbyt wielu dobrze zorganizowanych informacji na temat najlepszych praktyk Java Swing. Więc myślę, że dam Stack Exchange szansę na zbudowanie tej jednej wielkiej listy. Jakie są najlepsze praktyki programowania Java Swing? Co znalazłeś dla siebie i dlaczego?


title: Dopełniacz saksoński w nazwach zmiennych – czy należy go unikać?

text: rozważmy przypadek następujących kolizji z liczbami mnogimi: `publisher_tree` zamiast `publishers_tree` (dopełniacz), który będzie dla liczby mnogiej (np. kontener/lista) tym samym `drzewo_publikatorów`. Dla mnie angielski jest językiem obcym, więc docenię wskazówki dotyczące dobrych praktyk w nazewnictwie.


title: Haskell I Lisp kontra Haskell LUB Lisp

text: Obecnie koduję w C, C++ i Pythonie. Chcę nauczyć się funkcjonalnego języka programowania, a teraz skłaniam się ku Haskellowi. NIE chcę tutaj rozpoczynać wojny „Haskell vs Lisp”; to co chcę wiedzieć to: **Jeśli nauczę się Haskella przede wszystkim dla kontaktu z programowaniem funkcjonalnym, jakie korzyści, jeśli w ogóle, odniosę z późniejszej nauki Lispu?** * * * Aktualizacja: Dziękuję wszystkim za odpowiedzi. Teraz wszystko, co muszę zrobić, to wybrać dialekt Lisp, ale to pytanie na inny czas.


title: Kiedy pisać abstrakcyjny kod, a kiedy być bardziej szczegółowym?

text: Pracuję nad małym narzędziem jako projektem zabawki, aby pokazać różnicę między dwoma katalogami, pokazując, które pliki/katalogi zostały dodane, usunięte, zmodyfikowane itp. Próbowałem przedstawić te zmiany jako po prostu obiekty 'ChangeItem', bez rozróżnienia między tym, czy był to plik, czy katalog. Stwarzało to jednak wiele problemów, np. jak je wyświetlić w drzewie, jak wiedzieć, kto jest rodzicem dziecka itp. I było to też bardzo nieintuicyjne. Następnie dzielę zmiany między zmiany katalogów i zmiany plików. To od razu bardzo ułatwiło kodowanie i zrozumienie, co się dzieje. Teraz dużo prościej jest wybrać wszystkie pliki w katalogu itp. Moje pytanie brzmi: skąd można wiedzieć, czy użyć abstrakcji, czy uzyskać bardziej szczegółowy kod? Jak możesz stwierdzić, czy masz za dużo, czy za mało abstrakcji?


title: Jak dokumentujesz swoje duże projekty?

text: Obecnie mamy mały zespół programistów (3 osoby), ale spodziewamy się, że wkrótce dodamy więcej i zaczynamy przechowywać dokumentację dotyczącą rzeczy, które wymagają interakcji z wieloma lub wielokrotnego użytku, które napisaliśmy. Początkowo wszystkie te informacje przechowywaliśmy na tablicach do pisania @ backpack, ale nie obsługuje on podświetlania kodu ani wielu innych formatów. Moim obecnym wyborem było zainstalowanie Media Wiki wraz z podświetlaczem składni opartym na javascript i wydaje się to w porządku, z wyjątkiem braku możliwości umieszczenia rzeczy w zagnieżdżonej strukturze (znalezione wtyczki są albo uszkodzone, albo brakuje im dokumentacji) . Chociaż to rozwiązanie wydaje się teraz odpowiednie, zastanawiam się, jakie inne podejścia stosują inne zespoły do przechowywania/organizowania dużych ilości dokumentacji do trwającego, stale rozwijającego się projektu.


title: W jaki sposób program do wyszukiwania tras może omijać przeszkody/lokalizacje podczas obliczania tras?

text: Czy usuwasz węzły z podstawowej reprezentacji wykresu? A może jest na to bardziej elegancki sposób?


title: Czy dobrą praktyką jest wybieranie najwyższego poziomu ostrzegania w programowaniu C++?

text: Kiedyś wybierałem domyślny poziom ostrzeżenia w programowaniu C++. Na przykład w programie VS domyślnym poziomem ostrzeżeń jest **`Poziom 3 (/W3)`** i **`Nie (/WX-)`** (nie traktuj ostrzeżeń jako błędów). Zastanawiam się, czy dobrą praktyką jest wybieranie najwyższego poziomu ostrzeżenia w programowaniu C++, np. **`EnableAllWarnings (/Wall)`** z **`Tak (/WX)`** (traktuj ostrzeżenia jako błędy)? Wszelkie porady będą mile widziane.


title: Refaktoryzacja w projektowaniu opartym na domenie

text: Właśnie zacząłem pracę nad projektem i używamy projektowania opartego na domenie (zgodnie z definicją Erica Evansa w _Domain-Driven Design: Tackling Complexity in the Heart of Software_. Uważam, że nasz projekt jest z pewnością kandydatem do tego projektu jak opisuje to Evans w swojej książce.Zmagam się z ideą ciągłej refaktoryzacji.Wiem, że refaktoryzacja jest koniecznością w każdym projekcie i nastąpi nieuchronnie wraz ze zmianą oprogramowania.Jednak z mojego doświadczenia wynika, że refaktoryzacja ma miejsce, gdy potrzeby zespół programistów zmienia się, a nie jako rozumienie zmian domeny („refaktoryzacja do większego wglądu”, jak nazywa to Evans). Najbardziej interesują mnie _przełomy_ w zrozumieniu modelu domeny. Rozumiem wprowadzanie małych zmian, ale co, jeśli duże zmiana modelu jest konieczna? Jaki jest skuteczny sposób na przekonanie siebie (i innych), że powinieneś dokonać refaktoryzacji po uzyskaniu bardziej przejrzystego modelu domeny? W końcu refaktoryzacja w celu poprawy organizacji kodu lub wydajności może być com całkowicie oddzielony od tego, jak wyrazisty pod względem wszechobecnego kodu językowego jest. **Czasami wydaje się, że nie ma wystarczająco dużo czasu na refaktoryzację.** Na szczęście SCRUM nadaje się do refaktoryzacji. Iteracyjny charakter SCRUM sprawia, że łatwo jest zbudować mały kawałek i zmienić i to. Ale z biegiem czasu ten kawałek będzie się powiększał, a co, jeśli dojdzie do przełomu po tym, jak ten kawałek jest tak duży, że będzie zbyt trudny do zmiany? Czy ktoś pracował nad projektem wykorzystującym projektowanie oparte na domenie? Jeśli tak, to byłoby wspaniale uzyskać wgląd w ten. Szczególnie chciałbym usłyszeć kilka historii sukcesu, ponieważ DDD wydaje się bardzo trudne do uzyskania. Dziękuję!


title: Zasięgnięcie porady w sprawie dokumentacji systemu

text: Mam silnik oceny (w zasadzie jest to algorytm), który kiedy zaczynałem, nie miał formalnej dokumentacji. Stworzyliśmy specyfikację funkcjonalną/dekompozycję, która jest naszym dokumentem na poziomie biznesowym, ale teraz potrzebuję czegoś bardziej technicznego (specyfikacji technicznej). Staram się zrozumieć, jak ten dokument wygląda, w jakim formacie powinien być i na jakim poziomie szczegółowości powinniśmy się zagłębić. Jesteśmy w trakcie komentowania całego kodu. Mamy również wstępny dokument o nazwie Blueprint, który odzwierciedla przepływ modelu i jest napisany w pseudokodzie. Czy połączenie tego schematu i komentarzy do modelu jest wystarczające jako specyfikacja techniczna?


title: Cel w stylu C zero w Javie?

text: Cel C ma koncepcję obiektu nil, który bez narzekania przyjmie każde wywołanie metody z dowolnymi parametrami i po cichu zwróci kolejny nil. Użyłem czegoś podobnego w Javie, używając do testów easymock i mockito. Czy jest coś podobnego dla kodu głównej linii? Czy to w ogóle dobry pomysł, żeby mieć coś takiego? Jednym z przypadków użycia, w którym rozważam jego użycie, są opcjonalne metryki. Mamy liczniki metryk codahale, na których wywołujemy funkcję mark() za każdym razem, gdy generowane jest zdarzenie. Jest on otoczony flagą If/then, aby sprawdzić, czy metryki są włączone. Mógłbym po prostu użyć obiektu zerowego jako licznika i po cichu zaakceptować wywołanie znaku, jeśli metryki nie są włączone.


title: Projekt GitHub OS jak mieć dobrą wersję i wersję w toku

text: Uruchomiłem własną aplikację systemu operacyjnego, hostuję ją na GitHub. Mój problem polega na tym, że wpycham zmiany do repozytorium z więcej niż jednej lokalizacji, więc czasami chcę nad tym popracować, a czasami nie zawsze mogę coś dokończyć na czas, ale i tak chciałbym to wypchnąć, aby móc je później pobrać moja inna lokalizacja. Chciałbym móc jakoś mieć stabilną wersję i mieć gałąź master jako 'w toku'. Jak mam to zrobic? Czy jest jakiś przycisk, który mogę nacisnąć, który pobierze kod z mojej gałęzi master i przekształci go w plik zip w mojej zakładce pobierania i nazwie go wersją, czy powinienem to zrobić ręcznie? Czy nie byłoby lepiej, gdyby gałąź master była ładna i zgrabna i miałaby osobną gałąź do zabawy, a następnie scalić te dwie, gdy nadejdzie odpowiedni czas? Czy nie spowodowałoby to większych problemów w fazie łączenia?


title: Czy jest legalne i etyczne przeprowadzanie inżynierii wstecznej oprogramowania w celu przeniesienia go do innego systemu?

text: Kocham gry, kocham gry, które pozwalają na modowanie i kocham linuxa. Ale fakt, że większość gier jest obecnie kierowana na okna (pomijając konsole), większość modów i narzędzi do modowania jest również kierowana na okna. Istnieje pewien modder o nazwie Boris Vorontsov, który tworzy słynną serię modyfikacji wizualnych o nazwie ENB. To, co robi (lub myślę, że robi), to ulepsza lub zmienia zachowanie klas zdefiniowanych w bibliotece `d3d9.dll`. Nie trzeba dodawać, że prawie nigdy nie działa pod winem. Niedawno zapytałem go, czy kiedykolwiek wyda swoją wersję biblioteki na jakiejś otwartej licencji, a on odpowiedział „nie”. Teraz, gdy o tym myślę, nawet gdyby opublikował swój kod, z pewnością napotkałby pewne problemy prawne. Teraz jest moje pytanie. Czy jest legalne i etyczne przeprowadzanie inżynierii wstecznej jego wersji biblioteki w celu dostosowania otwartej wersji `d3d9.dll` w wine, aby móc uruchamiać jego mody?


title: Co oznacza dla dewelopera „wolność twórcza”

text: Czytałem więc schemat blokowy, który powinien działać bez ograniczeń i zastanawiałem się, co to znaczy mieć „wolność twórczą”? jako programista?.. > _"Czy dadzą ci swobodę twórczą?"_ Czy na przykład oznacza to, że masz swobodę projektowania interfejsu/strony użytkownika według własnych preferencji (a nie kogoś innego, np. kierownictwa)? czy też ma mieć możliwość wdrażania funkcji oprogramowania bez zgody?


title: Przejście z PHP na poziomie korporacyjnym z Zend Framework do bardziej korporacyjnej Java EE

text: Poważnie zastanawiałem się nad rozwojem mojej kariery i chciałbym poznać Twoją opinię na temat: * 5 lat pracy w pełnym wymiarze czasu jako programista / technologie internetowe / najlepsze praktyki * Student mgr inżynierii oprogramowania * w oparciu o typowe zadania, które wykonałem robiłem, powiedziałbym, że jestem architektem oprogramowania + administratorem + konsultantem ds. bezpieczeństwa. Problem z PHP polega na tym, że większość jego użytkowników (w tym pracodawców) to entuzjaści technologii bez odpowiedniego przeszkolenia. Firmy są małe, zazwyczaj start-upy i nie mogą sobie pozwolić na przeprowadzenie formalnych procesów. W konsekwencji pomija się inżynierię wymagań, pomija się zarządzanie projektami, testowanie polega na systematycznym klikaniu wszędzie, ponieważ pomijane są przypadki użycia, pomijana jest architektura, pomijana jest dokumentacja itp. Pracowałem na wyższych stanowiskach, m.in. kierownik techniczny i zawsze zajmowałem się tymi kwestiami, dopóki nie zacząłem studiować. Na studia lepiej być niezależnym wykonawcą pracującym w domu online. Moim celem jest dołączenie do średniej/dużej firmy, która może sobie pozwolić na robienie rzeczy, jak w książce, a potem chcę cieszyć się nowymi wyzwaniami, większymi projektami, innymi pracownikami wyższego szczebla itp. Planuję również dalsze studia po moim magisterium. Czy uważasz, że tworzenie stron internetowych z wykorzystaniem Java EE i Oracle 11g jest tym, czego potrzebuję, aby osiągnąć te cele? Dla przypomnienia, mam kilkuletnie doświadczenie z C/C++ i Javą, ale zrobiłem to głównie jako dodatkowa praca. Moje stanowiska dotyczyły bardziej PHP i różnych systemów / frameworków dla przedsiębiorstw. Dzięki za wymianę stosu, to pytanie może przyciągnąć kogoś, kto ma kilkuletnie doświadczenie w pracy wyłącznie z tymi technologiami. :)


title: Jak zachować AST dla dostępu do funkcji?

text: Rozważ taki kod (powiedzmy, że jest to C++) Foo::Bar.get().X Jak w tym celu należy zachować AST -- jako "drzewo" z korzeniem po lewej `Foo(Bar(get(X))`, lub z korzeniem po prawej `(((Foo)Bar)get)X`?A może jako płaska struktura (lista)?Pierwsza wydaje się wygodniejsza przy rozwiązywaniu nazw, druga podczas pracy z nią jako wyrażeniem._Ustawiam tag `parsowanie` ale naprawdę pytam z analizy semantycznej POV (nie ma takiego tagu)._


title: Jaka jest różnica między folderami „lib” i „vendor”?

text: Jeśli chodzi o hierarchię folderów źródłowych, zawsze istnieją pewne wspólne cechy, takie jak foldery `src`, `doc` lub `test`, które mają dość łatwą do zrozumienia zawartość. Jednak zdałem sobie sprawę, że duże projekty mają zarówno foldery `lib`, jak i `vendor`, podczas gdy zawsze myślałem, że są to te same, ponieważ ich nazwy sugerują, że zawierają „biblioteki zewnętrzne” od zewnętrznych `dostawców`. Jednak zobaczenie obu w tym samym projekcie oznacza _jest_ różnica. Nie mogłem znaleźć żadnych informacji ani w Google, ani w źródłach, takich jak Filesystem Hierarchy Standard, chociaż jest to w rzeczywistości powszechna praktyka. * * * Oto bardziej szczegółowy przykład z Symfony: po utworzeniu projektu otrzymasz folder `lib` w katalogu głównym projektu. W tym folderze znajduje się następująca struktura: lib +--filter +--form +--… +--vendor +--simpletest +--symfony Tutaj folder `symfony` zawiera cały rdzeń Symfony.


title: Ładowanie bazy danych w pamięci vs zapytania

text: Obecnie rozwijam oprogramowanie do ciągłego tworzenia kopii zapasowych. Kluczową cechą oprogramowania jest natychmiastowa kopia zapasowa, co oznacza, że za każdym razem, gdy plik jest tworzony, modyfikowany, zmieniany lub usuwany, zmiana jest natychmiast odzwierciedlana w repozytorium kopii zapasowych. W tym celu zaprojektowaliśmy system w taki sposób, aby po uruchomieniu aplikacji klienckiej cała baza danych kopii zapasowej była ładowana do pamięci. Problem pojawia się podczas tworzenia kopii zapasowych dużych ilości plików, powiedzmy 10-15 milionów plików. To po pierwsze powoduje, że czas ładowania jest powolny i duże zużycie pamięci. W niektórych przypadkach osiągając 2 GB. Wysyłanie zapytań do bazy danych przy każdej zmianie jest również mile widziane, ponieważ spowoduje duże obciążenie dysku, na którym znajduje się baza danych, nie wspominając o tym, jak powolny staje się czas wykonywania zapytania wraz ze wzrostem bazy danych. Zastanawiałem się więc, jakie opcje trzeba mieć, aby zaprojektować taki system, aby był wydajny pamięciowo i w miarę szybki.


title: Testowanie jednostkowe obiektu należącego do innego

text: Mój przykład jest w Rails/rspec, ale ma bardziej ogólny charakter. Mam klasę (abstrakcyjną-y) `Events`, która jest dołączona do innej (abstrakcyjnej-y) klasy `Assets` (. Teraz testuję przy użyciu FactoryGirl i nie jestem pewien, jak tworzyć zdarzenia, które są naprawdę ortogonalne do zasobów. Jeśli zbuduję wydarzenie, będzie ono ważne tylko wtedy, gdy należy do zasobu, więc czy mam zbudować dziesiątki wydarzeń, z których każde ma swój własny atut?


title: Jak zaprojektowałbyś ten stół?

text: Muszę utworzyć tabelę, w której każdy wiersz musi przechowywać 50 wartości liczbowych. Każdy wiersz zawsze będzie musiał przechowywać 50 wartości liczbowych. Gdyby to była mniejsza liczba wartości, po prostu zrobiłbym pola dla każdej z wartości, ale ponieważ jest ich 50, takie podejście wydaje się nieco kłopotliwe (ale skoro zawsze będzie to 50 wartości, może to jest właściwe podejście?) . Czy istnieje sposób na przechowywanie tablicy wartości w polu? Wydaje się to niezłym rozwiązaniem, ale koncepcja jest prawie identyczna z tworzeniem relacyjnej bazy danych.


title: Dlaczego powinienem unikać skryptów wbudowanych?

text: Znajomy znajomy niedawno spojrzał na stronę, której pomogłem uruchomić, i skomentował coś w stylu „bardzo fajna strona, szkoda, że w kodzie źródłowym są wbudowane skrypty”. Zdecydowanie jestem w stanie usunąć skrypty inline tam, gdzie występuje; Niejasno zdaję sobie sprawę, że to „zła rzecz”. Moje pytanie brzmi: jakie są prawdziwe problemy z inline scriptingiem? Czy jest to poważny problem z wydajnością, czy jest to głównie kwestia dobrego stylu? Czy mogę uzasadnić natychmiastowe działanie na froncie skryptów inline moim przełożonym, gdy są inne rzeczy do zrobienia, które mogą mieć bardziej oczywisty wpływ na witrynę? Gdybyś wszedł na stronę internetową i rzucił okiem na kod źródłowy, jakie czynniki skłoniłyby Cię do powiedzenia „hmm, tutaj profesjonalna praca” i co spowodowałoby, że wzdrygnąłbyś się przed ewidentnie amatorską pracą? OK, to pytanie zamieniło się w wiele pytań na piśmie. Ale w zasadzie skrypty inline — o co chodzi?