title: Dlaczego narzędzie oferuje zmianę kodu - tylko dlatego, że może?

text: Resharper (a może to Visual Studio - jest to żółta żarówka z maleńkim czerwonym żarnikiem) oferuje "odwrócenie if" na tym kodzie: if (tItems >= 0) { return tItems; } SetTotalItemsAndTotalAmt(); ...a jeśli na to pozwolę, stanie się to: if (tItems < 0) { SetTotalItemsAndTotalAmt(); } zwróć pozycje; ...ale potem proponuje ponownie "odwrócić, jeśli" i jeśli naiwnie połknę przynętę, przywraca jej dawną świetność. Jeśli jeden sposób jest uważany za lepszy (chyba bardziej do grokkable) niż drugi, dlaczego miałby również zezwalać na odwrotną inwersję? A jeśli jest to przypadek „sześciu jednego i pół tuzina innych”, dlaczego w ogóle zawraca sobie głowę proponowaniem zmiany? ## AKTUALIZACJA Właściwie, pomyśl o tym, jeden z tych sposobów nie jest nawet prawidłowy, ponieważ mówi: " _WorkFiles.getAmount()': nie wszystkie ścieżki kodu zwracają wartość_ ", chyba że zawiera instrukcję return poza warunkiem if . Domyślam się, że to _nie_ robi to Resharper; te koty z napędem Urquell nie zrobiłyby czegoś takiego, wydaje mi się.


title: Preferowany sposób deklarowania wydarzeń

text: Jestem całkiem zadowolony z mojego zrozumienia modelu zdarzeń .NET. Myślę, że mogę źle zrozumieć mały niuans systemu. Kiedy zaczynałem umieszczać zdarzenia w swoich klasach, używałem standardowego sposobu, takiego jak: public event EventHandler<MyEventArgs> MyEvent; Oznaczało to, że każda subskrypcja na wydarzenie wymagałaby metody takiej jak: void HandleThatEvent(object sender, MyEventArgs args){...} Co jest miłe, ale stwierdziłem, że rzadko zależy mi na nadawcy, więc pomogło mi to dużo rozdęte podpisy metod. Więc przełączyłem się na deklarowanie własnych typów delegatów public delegate void MyEventHandler(SomeClass argument); Co zmniejszyło bałagan, ale pozostawiło mi mały problem, jeśli chodzi o pisanie programów obsługi: eventImplmentor.MyEvent += HandleThatEvent; . . . void HandleThatEvent(/*oh, um, jakie to ma argumenty? Intellisense nie mówi mi*/) Więc musiałbym wrócić do deklaracji delegata i spojrzeć, a następnie wrócić i zapisać je lub skompilować i czekaj, aż zostaniesz poinformowany. Więc teraz zamiast tego używam po prostu `Action`, `Action<T>` lub dowolnego szablonu, który pasuje. zdarzenie publiczne Action<SomeClass> MyEvent; Abym mógł najechać kursorem na zdarzenie i dowiedzieć się, jakich parametrów oczekuje. Moje pytanie, po tym wszystkim: Czy istnieje najlepsza praktyka deklarowania zdarzeń w C#? Czy powinienem wrócić do sposobu `EventHandler<T>`, czy `Action<T>` jest akceptowalny?


title: Czy praca nad projektami open source pomogła Twojej produktywności w codziennej pracy?

text: Jeśli tak, czy możesz podać przykład? Czy to dzięki nauce nowych sztuczek, których nie nauczyłbyś się inaczej, czytając kod innych? A może z innych powodów?


title: czym dokładnie jest programowanie systemowe?

text: Nigdy nie rozumiałem, co oznacza programowanie systemowe. Zwykle podaje się definicję "...robienie czegoś zbliżonego do Os lub rozszerzenie funkcji Os...". Czy używanie Windows API bezpośrednio, a nie niektórych bibliotek, aby powiedzieć, że plik i/o czyni z niego programowanie systemowe? Czy pisałeś programowanie systemu operacyjnego Android? Jeśli napiszę coś, co ujawni jądro Linuxa za pomocą konsoli, np. Aplikacja na Androida, czy zajmę się programowaniem systemu? Jeśli piszę oprogramowanie do sterowania pralką, czy piszę programowanie systemu? Jestem początkującym programistą i to mnie dezorientuje. Proszę wyjaśnić kontrastując to z „programowaniem aplikacji”.


title: ASP.NET bez wprowadzania stanu widoku, jak to się dzieje?

text: Zaskoczyło mnie, gdy odwiedziłem niektóre witryny z rozszerzeniem „aspx” na końcu ich adresów URL, a kiedy spojrzałem na ich źródło html, nie widziałem żadnego stanu widoku, takiego jak: <input type = "ukryty" name = " __VIEWSTATE" id="__VIEWSTATE" value="SNIKalxBOk0/lp+SgXklgi/0/IUoRXTjEjp6NrL2ColFXGht1bTDit5V+wHdkcuM3YVmVNKG1jpM6zAg+MQCnvPD8NwHvK8" nawet jeśli wyłączysz stan widoku, otrzymasz co najmniej z powyższych danych wejściowych w swoim wyjściu HTML. Oto jeden z przykładów, na które patrzyłem: http://www.ada.org/index.aspx


title: O umowie własności intelektualnej z pracodawcą

text: W porozumieniu dotyczącym własności intelektualnej IP jest zdefiniowane jak poniżej > Własność intelektualna (niezależnie od tego, czy posiada zdolność patentową oraz czy została wykonana > w godzinach pracy) jest zdefiniowana między innymi jako: wszystkie produkty > specyfikacje, rozwój, wynalazki, dzieła autorskie, dzieła pochodne > , technologie, programy, systemy, oprogramowanie, aplikacje mobilne i > inne mobilne interfejsy programistyczne, projekty, metodologie, szyfrowanie, > pomysły, techniki, patenty, formuły, procesy, koncepcje, know-how i data > stworzone lub wymyślone lub zredukowane do praktyki lub opracowane w okresie zatrudnienia >, pozostają własnością XXXXXXX[COMPANY_NAME]XXXX lub jej podmiotów stowarzyszonych. Po raz pierwszy widzę jakąkolwiek umowę dotyczącą własności intelektualnej. Czy to nie jest zbyt rygorystyczne? lub jego standardowa praktyka w branży?


title: Domyślna wartość całkowita Java to int

text: Mój kod wygląda tak import java.util.Scanner; public class StudentGrades { public static void main(String[] argv) { Scanner keyboard = new Scanner(System.in); bajt q1 = klawiatura.nextByte() * 10; } } Daje mi to błąd „Niezgodność typów: nie można przekonwertować z int na bajt”. Dlaczego Java miałaby przechowywać dosłowny operand, który jest wystarczająco mały, aby zmieścić się w bajcie, w typie int? Czy literały są przechowywane w zmiennych/rejestrach, zanim jednostka ALU wykona operacje arytmetyczne?


title: Konwertuj zwykły tekst na szablon pdf

text: Mam kilka artykułów (ponad 200 stron) w postaci zwykłego tekstu. Musi zostać przekonwertowany na dany znacznik PDF. Dostałem kilka plików Photoshopa dla nagłówków dla każdej strony i listę wymagań dla różnych elementów. Jakiego programu byś użył? A jaki byłby twój przepływ pracy?


title: Dlaczego w obliczu std::string istnieje tak wiele klas ciągów?

text: Wydaje mi się, że wiele większych bibliotek C++ tworzy swój własny typ łańcucha. W kodzie klienta musisz albo użyć tego z biblioteki (`QString`, `CString`, `fbstring` itp., jestem pewien, że każdy może wymienić kilka) lub kontynuować konwersję między standardowym typem a tym zastosowań bibliotecznych (co w większości przypadków obejmuje co najmniej jedną kopię). Czy jest więc jakaś szczególna wada lub coś złego w `std::string` (tak jak semantyka `auto_ptr` była zła)? Czy to się zmieniło w C++11?


title: Czy MVC to tylko SEO programowania PHP?

text: Istnieje około miliona "frameworków PHP". A większość z nich rozlicza się jako _zgodnie_ z wzorcem MVC. Chociaż mile widziane jest przezwyciężenie stylu kodowania osCommerce (logika przetwarzania mocno wymieszana z SQL i HTML), z pewnością istnieją prostsze i łatwiejsze do naśladowania podejścia do uzyskania projektu aplikacji, który można konserwować. Oryginalna koncepcja MVC była ukierunkowana na aplikacje GUI. A w przypadku Gtk/Pythona przestrzeganie tego wydaje się wykonalne. Ale aplikacje internetowe PHP nie działają na widokach na żywo (elementy GUI) i trwałym środowisku wykonawczym kontrolera. Jest to z pewnością mylące, jeśli opisuje tylko użyty kod + grupowanie katalogów lub nazewnictwo klas. "MVC" wydaje się być używanym jak modne słowo dla frameworków PHP. I rzeczywiście widziałem, jak jeden lub dwa dojrzałe frameworki PHP to przyznają, ale i tak redefiniują frazę, aby pasowała do interna. Czy to generalnie olej węża? Dlaczego nie jest używana lepsza terminologia i nie jest propagowana bardziej sensowna koncepcja utrzymania PHP? **Nieco rozbudowanego rozumowania** Dlaczego podejrzewam, że implementacje PHP nie są zgodne z prawdziwym wzorcem MVC: **Modele** : teoretycznie modele powinny być grube i zawierać logikę biznesową, a kontrolery powinny być cienkimi handlerami (input-> wyjście). W rzeczywistości frameworki PHP zalecają **płytkie** modele. Na przykład CI i Symfony równają Model == ORM. Nawet dane wejściowe HTTP są obsługiwane przez kontroler, nie są traktowane jako model. **Widoki** : obejścia z rabatem AJAX, nie może być widoków na stronach internetowych. Frameworki PHP wciąż wypompowują strony. Interfejs nadal skutecznie podąża za zwykłym modelem HTTP, nie ma przewagi nad aplikacjami innymi niż MVC. (I na koniec, żadna z szeroko rozpowszechnionych frameworków php nie może faktycznie wyświetlać widoków GUI zamiast HTML. Widziałem bibliotekę PHP, która może obsługiwać Gtk/Console/Web, ale frameworki nie.) **Kontroler** : Nie jestem pewien. Kontrolery prawdopodobnie nie muszą być długo działające i stale aktywne w modelu MVC. W kontekście frameworka PHP, są to jednak głównie programy obsługi żądań. Nie jest to coś, o co można by się spierać, ale jest to po prostu trochę modne. **Czy byłyby lepsze deskryptory?** Widziałem porozrzucane akronimy, takie jak PMVC lub HMVC. Chociaż opisy stają się tam bardziej niejednoznaczne, może one opisałyby obecne frameworki internetowe w mniejszym stopniu?


title: Łączność WAN między wieloma bazami danych MS ACCESS

text: Mam klienta, który poprosił mnie o stworzenie swojej aplikacji Windows i użycie MS Access zamiast bazy danych SQL. Zrobiłem to i teraz poprosił mnie, aby wdrożył Aplikację za pośrednictwem kilku swoich biur. Teraz chciał mieć „główny serwer” ze wszystkimi informacjami z „aplikacji klienckich” do celów raportowania, a także aktualizować informacje dla „aplikacji klienckiej”. Zaproponowałem ideę "EDI" przez FTP, również przekonwertowanie obecnej aplikacji na połączenie przez SQL przez WAN, ale jakoś powiedział, że FTP nie jest opcją, a także połączenie WAN jest niemożliwe, ponieważ internet w ich kraju jest tak wolny, że mp3 trzeba ściągnąć przez około 20 minut, mówi. Czy istnieje inny sposób komunikowania się z inną bazą danych (MS Access) i przechwytywania danych lub aktualizowania danych w razie potrzeby bez korzystania z wymiany FTP EDI?


title: Jakie są typowe techniki obsługi kodu HTML generowanego przez użytkownika, zmodyfikowanego w różny sposób przez różne przeglądarki?

text: Zajmuję się aktualizacją stron internetowych. Frontend używa HTML, CSS i JavaScript, a backend używa Pythona. Działa to tak, że `<p/>`, `<b/>` i niektóre inne elementy HTML mogą być aktualizowane przez użytkownika. Aby to umożliwić, ładuję stronę internetową i za pomocą JQuery konwertuję wszystkie te elementy na elementy `<textarea/>`. Po zmianie zawartości obszaru tekstowego stosuję zmianę do oryginalnych elementów i wysyłam ją do skryptu Pythona, aby przechowywać nową zawartość. Problem polega na tym, że różne przeglądarki zmieniają oryginalny kod HTML. * Jak obejść ten problem? * Jakich bibliotek Pythona używasz? * Jakich technik lub projektów aplikacji używasz, aby uniknąć tego problemu lub go rozwiązać? Problemy, które znalazłem to: * IE usuwa cudzysłowy wokół atrybutów `class` i `id`. Na przykład `<img class='abc'/>` staje się `<img class=abc/>`. * Firefox usuwa odwrotny ukośnik z łamania linii: `<br \>` staje się `<br>`. * Niektóre witryny mają bardzo specyficzne funkcje wyświetlania, więc wstawienie prostego „\n” (co robi IE) może wpłynąć na wyświetlanie witryny. Przykład: zmiana `<img class='headingpic' /><div id="maincontent">` na `<img class='headingpic'/>\n <div id="maincontent">` wstawia pionową przerwę w IE . Rzeczy, które bezskutecznie próbowałem przezwyciężyć: * Użycie JQuery lub Pythona do usunięcia wszystkich wystąpień `>\n<`, `<br>` itp. Ale to się nie udaje, ponieważ w IE otrzymuję różne wzorce, czasami `∙ \n`, czasami `\n∙∙∙`. * W Pythonie przeanalizuj nowy kod HTML, wyodrębnij nowy tekst/zawartość, wstaw go do starego kodu HTML, aby elementy i format nigdy się nie zmieniły, tylko zawartość. Jest to bardzo trudne i wydaje się przesadą.


title: Ile aplikacji należy zapewnić, aby obejmowały wszystkie rodzaje telefonów komórkowych?

text: W tej chwili mamy: * Iphone * Android * J2me touch * J2me bez dotyku * J2me bez dotyku dla Blackberry * J2me bez dotyku dla Blackberry Myśleliśmy o zrobieniu kolejnego * bezdotykowego J2me dla gównianych urządzeń (ponieważ zwykłe nie- dotyk jest po prostu za ciężki) Pytanie brzmi, czy możesz pomyśleć o innych wersjach naszej aplikacji, które powinniśmy dostarczyć do kierowania „WSZYSTKIMI” telefonami komórkowymi


title: Jeśli atrybucja odbywa się za pomocą pseudonimu, kto jest właścicielem praw do kodu?

text: Znam kilka przypadków, w których programiści używali pseudonimu do atrybucji zamiast swoich prawdziwych nazwisk. **Przykłady obejmują:** * Satoshi Nakamoto (Bitcoin) * Dlaczego (Ruby) Zastanawiałem się, czy atrybucja odbywa się za pomocą pseudonimu, który jest właścicielem praw do kodu?


title: Jak podzielić duże, ściśle powiązane klasy?

text: Mam kilka ogromnych klas składających się z ponad 2 tys. linii kodu (i rosnących), które chciałbym, jeśli to możliwe, zrefaktoryzować, aby uzyskać nieco lżejszy i bardziej przejrzysty projekt. Powodem, dla którego jest tak duży, jest głównie to, że te klasy obsługują zestaw map, do których większość metod musi mieć dostęp, a metody są ze sobą bardzo powiązane. Podam bardzo konkretny przykład: mam klasę o nazwie _Server_, która obsługuje wiadomości przychodzące. Posiada metody takie jak _joinChatroom_ , _searchUsers_ , _sendPrivateMessage_ , itp. Wszystkie te metody manipulują mapami, takimi jak _users_ , _chatrooms_ , _servers_ , ... Może byłoby miło, gdybym miał klasę obsługującą wiadomości dotyczące Użytkownicy itp., ale głównym problemem jest to, że muszę używać wszystkich map w większości metod. Dlatego na razie wszystkie są umieszczone w klasie _Server_, ponieważ wszystkie opierają się na tych wspólnych mapach, a metody są ze sobą bardzo połączone. Musiałbym stworzyć klasę Chatrooms, ale z odniesieniem do każdego z pozostałych obiektów. Znowu klasa użytkowników z odniesieniem do wszystkich innych obiektów itp. Czuję, że robię coś złego. Dziękuję za radę!


title: Dlaczego założenia są ważne przy definiowaniu puzzli?

text: w tym pytaniu OP przedstawił stronę, na której dostępne są puzzle. Opisał problem z ich rozwiązaniem. Byłem ciekaw, czy to naprawdę takie problematyczne. Pierwszy był naprawdę łatwy, więc tym razem spróbowałem następnego od końca, który powinien być najtrudniejszy (łamigłówka). I tu mam problem z niedopowiedzeniem lub chyba coś psuję. Skupmy się na przykładzie: Dane: M1 C1 C2 277317 M2 C2 C1 26247 M3 C1 C3 478726 M4 C3 C1 930382 M5 C2 C3 370287 M6 C3 C2 112344 Wynik: 617317 2 3 6 Mój problem polega na tym, że opieram się na założeniu, że > każdy związek może być użyty w reakcji chemicznej do stworzenia dowolnego innego > związku Rozwiązaniem może być 508878 2 6 5 Dlaczego ? W treści zadania nie smucimy się, że musimy zacząć od związku pierwszego potem z tego dostać dwa potem od dwóch, trzech itd. Czyli rezultatem powinno być posiadanie wszystkich najtańszych związków, przy założeniu, że nie musisz dbać o to, jak to zostało stworzone. To sprowadza nasz problem do takiej struktury. M1 C2 277317 M2 C1 26247 M3 C3 478726 M4 C1 930382 M5 C3 370287 M6 C2 112344 I z tej listy powinniśmy wybrać najniższy koszt dla każdego związku. * * * Jak więc osiągnięto to rozwiązanie, `2 3 6` ? Przeze mnie przyzwyczaili się do tego złożonej logiki, ich podstawowym założeniem było to, że C1 -> C2 to to samo co C2 -> C1, więc użyli rangi (kod skrótu) 17 * 37 * 1 * 2 == 17 * 37 * 2 * 1 (w tym poście użyłem łatwiejszej reprezentacji przy użyciu przesunięcia bitowego i bitowego, czyli mniej więcej tego samego) M1 001 | 010 = 011 277317 M2 010 | 001 = 011 26247 M3 001 | 100 = 101 478726 M4 100 | 001 = 101 930382 M5 010 | 100 = 110 370287 M6 100 | 010 = 110 112344 Po takiej operacji zbiór rozwiązań sprowadza się do tej postaci M1 3 277317 M2 3 26247 M3 5 478726 M4 5 930382 M5 6 370287 M6 6 112344 Więc teraz nie mam informacji o związkach, tylko rangę które zapewniają rozwiązanie. Na starcie mieliśmy trzy mieszanki, mamy trzy szeregi, więc szwy się zgadzają, a wynik jest taki sam, jak w przykładzie (koszt 508878 maszyn 2 6 5). * * * Z moich obserwacji wynika, że treść układanki jest bardzo zabawna, ale ma wiele luk w ograniczeniach dotyczących metody, którą należy zastosować, aby osiągnąć wynik. Więc konkludując, co ja mieszam?


title: Jak pracujesz z funkcjami asynchronicznymi, rekurencyjnie?

text: Obecnie pracuję nad FLEX i muszę zadzwonić do serwisu internetowego. gdy mam wynik, muszę ponownie wywołać usługę sieciową, z poprzednim wynikiem jako danymi wejściowymi. Problem złożony polega na tym, że usługa może zwrócić wiele wyników i muszę ponownie wywołać usługę z każdym z wyników jako danymi wejściowymi. Na koniec potrzebuję wyników, aby były w hierarchicznej kolekcji tablic, z każdym wynikiem jako elementem podrzędnym danych wejściowych do usługi sieciowej. Gdyby była to funkcja synchroniczna, byłoby to bardzo łatwe, ale spędziłem pół dnia, próbując wymyślić coś eleganckiego dla serwisu internetowego. Skończyło się na tym, że miałem dwie tablice, jedną dla danych wejściowych i jedną dla wyników. Za każdym razem, gdy miałem jeden lub więcej wyników, umieszczałem go w tablicy Input i wynikach. Następnie usunę pierwszy element z tablicy wejściowej i wywołam z nim usługę sieciową i tak dalej, aż skończę wszystkie dane wejściowe. Po uzyskaniu wszystkich wyników stworzyłem funkcję rekurencyjną, która utworzy drzewo hierarchiczne, którego potrzebowałem. To wydaje się być bardzo zwariowanym rozwiązaniem WTF. Czy jest jakieś eleganckie i lepsze rozwiązanie? Jestem wszystkimi uszami.


title: Jaki pożytek może mieć Gerrit jako programista solowy?

text: **Zastrzeżenie:** Znam pytania Jak mogę sprawdzić własny kod? oraz Jakie korzyści oferują narzędzia ciągłej integracji w projekcie solo? Czuję, że to pytanie ma na celu inny zestaw odpowiedzi, ponieważ dotyczy konkretnego oprogramowania, a nie ogólnych rozważań na temat korzystania z tej lub innej praktyki lub stosu technologii. Jestem samodzielnym programistą projektu opartego na Eclipse RCP. Aby móc kontrolować siebie i jakość mojego oprogramowania, jestem w trakcie konfigurowania stosu CSI. W tym przypadku postępuję zgodnie z wytycznymi Eclipse Common Build Infrastructure, z wyjątkiem tego, że będę używał Jenkinsa zamiast Hudsona. Trzymanie się tych wytycznych, mam nadzieję, pomoże mi przyzwyczaić się do sposobu działania środowiska Eclipse i mam nadzieję, że w przyszłości będę mógł wnieść jakiś kod do środowiska Eclipse. Jednak CBI zawiera Gerrit, oprogramowanie do przeglądu kodu. Chociaż myślę, że jest to naprawdę pomocne dla zespołów i zastosuję go, gdy tylko zespół urośnie do co najmniej dwóch programistów, zastanawiam się, jak mógłbym go używać, gdy jestem jeszcze solo. _Pytanie:_ Czy istnieje przypadek użycia dla Gerrita, który uwzględnia programistów solo? Uwagi: Wyobrażam sobie, że sam przeglądam kod po pewnym czasie, aby uzyskać do niego trochę dystansu. To jednak komplikuje przepływ pracy, ponieważ kod zostanie zbudowany dopiero po przejściu przez przegląd kodu. Może to okazać się „pułapką”, ponieważ mógłbym ulec pokusie szybkiego przepychania złego kodu przez Gerrita tylko po to, by go zbudować. Bardzo mnie interesuje, jak inni twórcy solowy wykorzystali Gerrita.


title: Motywacja dla zespołu programistów?

text: W ciągu dwóch i pół miesiąca udało mi się doprowadzić zespół z krawędzi zagłady do odnoszącego sukcesy zespołu deweloperskiego. Projekt wykorzystuje nowe technologie .net (MVC, EF), posiada nowe narzędzia, a członkowie zespołu mają duży wpływ na to, jak dana funkcja będzie tworzona, projektowana i wdrażana. To, co chcę zrobić dla zespołu, to utrzymać ten rozmach. Myślę, że motywacja jest dobra, a projekt na tyle interesujący, że jeszcze nikogo nie znudzi, ale wiem, że z biegiem czasu robienie tego samego w kółko obniża poziom zainteresowania. Co jako lider zespołu mogę zrobić, aby upewnić się, że utrzymujemy tak wysoki poziom motywacji, jaki mamy teraz?


title: Jakie są decyzje projektowe związane z wyborem sposobu udostępnienia aplikacji internetowej Java?

text: Istnieje wiele sposobów udostępnienia aplikacji internetowej Java konsumentowi: kontener aplikacji (JBoss itp.), kontener serwletów (Tomcat itp.), OSGi (Knopflerfish itp.), samowykonywalny WAR (Winstone itp.) i tak dalej. Czy istnieją jakieś jasne rozważania, w których należy preferować jedno podejście, a nie inne? Na przykład, czy zbiór samowykonywalnych plików WAR działających jako surowe procesy uniksowe może przewyższać te same aplikacje wdrożone w Tomcat, biorąc pod uwagę kwestie związane z administracją i skalowalnością?


title: Przesyłanie kodu Java z testem jednostkowym Junit

text: Pracowałem głównie nad prostymi programami java, kompilowałem je i uruchamiałem za pomocą Eclipse w systemie Windows. Tak więc nie mam doświadczenia w używaniu wiersza poleceń do kompilowania projektów Java i nie mam zbyt wielu informacji o tym, co faktycznie dzieje się pod przyciskiem odtwarzania w Eclipse. Teraz muszę złożyć aplikację Java, która będzie miała podstawowe operacje na XML. Mój projekt będzie również miał (JUnit) test jednostkowy. Moje pytanie dotyczy zgłoszenia tego Projektu. 1. Jakie pliki będą potrzebne do przesłania kodu. Więc działa poprawnie? 2. Czy wybór Eclipse jako IDE lub junit jako framweork do testów jednostkowych powoduje jakieś zależności, tj. executor programu powinien mieć eclipse/biblioteki, aby wykonać program na swoim komputerze?


title: Metody zastępujące powinny wywoływać metodę podstawową?

text: Po prostu uruchamiam NDepend w stosunku do kodu, który napisałem, a jedno z ostrzeżeń brzmi: „Zastąpienia Method() powinny wywołać base.Method()”. Miejsca, w których to się dzieje, to tam, gdzie mam klasę bazową, która ma wirtualne właściwości i metody z zachowaniem _default_, ale które mogą być nadpisane przez klasę, która dziedziczy z klasy bazowej i nie wywołuje metody nadpisanej. Na przykład w klasie bazowej mam właściwość zdefiniowaną w następujący sposób: protected virtual char CloseQuote { get { return '''; } } } A następnie w klasie dziedziczącej, która używa innego bliskiego cytatu: protected override char CloseQuote { get { return ']'; } } Nie wszystkie klasy dziedziczące po klasie bazowej używają różnych znaków cudzysłowu, stąd mój początkowy projekt.Alternatywy, o których myślałem, to mieć właściwości get/set w klasie bazowej z wartościami domyślnymi ustawionymi w konstruktorze: protected BaseClass( ) { this.CloseQuote = ''"'; } protected char CloseQuote { get; ustawić; } public InheritingClass() { this.CloseQuote = ']'; } Lub spraw, aby klasa bazowa wymagała wartości jako argumenty konstruktora: protected BaseClass(char closeQuote, ...) { this.CloseQuote = '"'; } protected char CloseQuote { get; private set; } public InheritingClass() base (closeQuote : ']', ...) { } Czy powinienem używać `virtual` w scenariuszu, w którym podstawowa implementacja może zostać zastąpiona zamiast rozszerzonej, czy też powinienem wybrać jedną z alternatyw, o których pomyślałem? Jeśli tak, która byłaby lepsza i dlaczego?


title: Dlaczego oprogramowanie używane w fabrykach jest tak źle zaprojektowane?

text: Dlaczego aplikacje takie jak pakiet Trumph są tak słabo zaprojektowane i (mogę się tylko domyślać, nie widząc rzeczywistego źródła) źle napisane? To pytanie pojawiło się dziś po południu po awarii podczas symulacji w programie Trumph's Punch, mój szef powiedział mi, że „są liderami w tego rodzaju technologii, więc jeśli coś pójdzie nie tak, to prawdopodobnie celowo”… Próbowałem wyjaśnić , jako dev fakt, że nawet czołowe firmy mogą wypuszczać brzydkie oprogramowanie (pod względem wydajności i designu), na przykład fakt, że nawet duże firmy, takie jak twitter/facebook/google/microsoft/sony... są często miał kłopoty z lukami w zabezpieczeniach, nie mógł tego zmusić do zrozumienia. **TL;DR: dlaczego tak drogie oprogramowanie nie jest dobrze zaprojektowane i nie jest tak wydajne, jak mogłoby być?**


title: Czy Notepad++ jest używany w profesjonalnym tworzeniu oprogramowania?

text: Jestem nowicjuszem w programowaniu, skupiam się na tworzeniu stron internetowych w PHP. Próbowałem kilku IDE Nusphere, burzy PHP, wszystkie IDE, które wypróbowałem, nie ładują się szybko (oczywiście ze względu na wszystkie dodatkowe funkcje). Zawsze lubiłem Notepad ++, ponieważ jest szybki, mimo że nie ma funkcji. Czy notepad++ spełnia wszystkie wymagania dotyczące profesjonalnego programowania w PHP? Czy powinienem poświęcić czas na naukę IDE? Czy powinienem nauczyć się IDE PHP, aby zostać profesjonalnym programistą PHP?


title: Używanie <= dla każdej zależności w przypadku następującego pomysłu na wersjonowanie semantyczne

text: Jak deklaruje wersjonowanie semantyczne (i zdrowy rozsądek) - wersja główna jest zwiększana w przypadku wprowadzenia zmiany niezgodnej z poprzednimi wersjami. Załóżmy teraz, że mamy projekt o nazwie `Project`, który ma aktualną wersję `1.0.42` i bibliotekę `Lib`, od której zależy, która jest aktualnie w wersji `2.1.3`. Czy to oznacza, że zgodnie z ideologią semver powinniśmy ograniczyć zależność „Projektu” do „Depends: Lib (< 3)”? Z mojego doświadczenia - nikt tego nie robi, ale uważam, że jest to semantycznie poprawne i bardzo samoopisowe. Co o tym sądzisz?


title: Kod źródłowy dozwolony tylko w jednym projekcie Open Source

text: Mam projekt open source, który jest objęty licencją GNU General Public License v3 i jest wykonywany w Windows Presentation Foundation. Natknąłem się na kogoś, kto sprzedaje motywy/skórki do projektów WPF i jest gotów przekazać jedną ze skórek do użytku z projektem open source. Chce jednak tylko, aby skórka mogła być używana w moim projekcie. Zastanawiałem się, jaki byłby najlepszy sposób, aby uniemożliwić innym osobom kradzież skóry i używanie jej w swoich projektach? Czy istnieje licencja, która spełniałaby to wymaganie? A może jest lepszy sposób na osiągnięcie tego?


title: Wątki czy pula wątków? Stała czy dynamiczna pula wątków?

text: Mam program Java, który nasłuchuje na porcie do wprowadzania danych. Na podstawie danych wejściowych wywołuje usługę sieciową, a następnie zwraca sukces/niepowodzenie z powrotem do programu klienckiego. Rozwidlam wątek dla każdego połączenia klienta. Odpowiedź zwrotna do klienta, który łączy się z programem, musi być szybka. Oto opcje, które rozważam 1. użyj zwykłych wątków 2. użyj `ExecutorService` z `newFixedThreadPool` 3. użyj `ExecutorService` z `newCachedThreadPool` , zwróć wynik do klienta i zamknij połączenie. Nie sądzę, aby `nowaFixedThreadPool` była właściwą rzeczą, ponieważ wtedy połączenia czekałyby w kolejkach, aby uzyskać wątek. `newCachedThreadPool` byłby idealny, gdyby nie jedna rzecz — wątki umierają po minucie. W moim przypadku dostaję wybuchy połączeń - tj. wiele połączeń, a potem może być cisza na kilka minut, a potem znowu pęki. Myślę, że wątki w CachedThreadPool zginęłyby i musiałyby zostać ponownie utworzone - więc w tym przypadku może to czasami działać jak #1. Idealnie chciałbym mieć `newCachedThreadPool` z minimum - tj. ustawieniem, które mówi, że liczba wątków nigdy nie spadnie poniżej powiedzmy 20. Więc bezczynne wątki są zabijane, ale nigdy nie pozwalają zejść poniżej minimalnego progu. Czy jest coś takiego dostępnego? Czy są jakieś lepsze alternatywy?


title: Kiedy iw jakim celu słowo kluczowe const powinno być używane w C dla zmiennych?

text: Podczas przeglądu mojego kodu pojawił się problem użycia słowa kluczowego `const`. Rozumiem, że służy do implementowania zachowania tylko do odczytu na zmiennych. Jestem zdezorientowany, jakie są różne sytuacje, w których może to być przydatne. * Czy należy go używać ze względu na przejrzystość w prototypach funkcji? * Czy powinien być używany jako środek bezpieczeństwa podczas tworzenia kodu? * Czy powinien być używany w ramach różnych funkcji do deklarowania stałych czasu wykonywania? * Czy w ogóle należy go używać? Te pytania to tylko przykłady zamętu, z jakim się zmagam. Ogólne zamieszanie to * Kiedy powinno być słowo kluczowe `const` używane w programowaniu w C? * Jakie są różne rodzaje korzyści, które można uzyskać, używając tego słowa kluczowego w C? * Czy są jakieś wady używania słowa kluczowego `const`? * * * Zwrócono uwagę, że to pytanie może być zbyt obszerne ze względu na wszystkie te pytania zawarte w moim pytaniu. Chciałem tylko wyjaśnić, że te pytania służą tylko wyjaśnieniu zamieszania związanego z głównym pytaniem. > Kiedy iw jakim celu należy użyć słowa kluczowego const w C dla zmiennych >? Może być również przeformułowane jako > Właściwe użycie słowa kluczowego `const` w C` z jego zaletami i wadami.


title: Szczegóły realizacji projektu w node.js

text: Pracuję jako inżynier oprogramowania, który został liderem zespołu w dużej firmie programistycznej. Jednym z moich obszarów siły jest node.js i jesteśmy w trakcie przenoszenia wielu naszych usług do oddzielnych usług node.js, co jak dotąd okazuje się bardzo udane. Mam jednak przerwać codzienny rozwój małych usług node.js i po prostu stworzyć odpowiednią specyfikację, aby jeden z członków mojego zespołu mógł pracować nad rzeczywistym kodem. Jestem świadomy narzędzi takich jak UML, ale nie sądzę, że mają zastosowanie do systemu z interfejsem API zbudowanym z node.js/express. Stworzyłem kilka schematów blokowych, ale moi seniorzy chcą, abym był bardzo kompletny ze specyfikacją, aż do każdego szczegółu implementacji. Jak mogę to osiągnąć? Czy powinienem projektować obiekty w UML i zmusić moich programistów do tworzenia obiektów javascript, które mogą być używane w trasach ekspresowych?


title: Nie podoba mi się moja obecna praca, chcesz odejść, jak to wytłumaczyć na rozmowie kwalifikacyjnej?

text: Kilka lat temu wyemigrowałem do innego kraju i na początku zeszłego roku udało mi się uzyskać tytuł magistra. Wtedy desperacko szukałem pracy i miałem szczęście, że zaproponowano mi pracę w małej firmie programistycznej. Dla przypomnienia, w mojej macierzystej firmie byłem znanym programistą z bardzo dobrymi osiągnięciami i pracowałem jako starszy programista i kierownik zespołu w firmie zajmującej się tworzeniem oprogramowania. Teraz po ponad 1 roku, zarówno z przyczyn technicznych, jak i nietechnicznych, chcę odejść z mojej obecnej pracy. Mogę tolerować niektóre problemy techniczne, które mamy, ale nasz menedżer i lider zespołu stale mnie lekceważą i komunikują się ze mną w ofensywny i poniżający sposób, co czasami sprawia, że czuję się przygnębiony, niespokojny, zestresowany i nie tylko. Teraz moje pytanie brzmi, jak osoba w mojej sytuacji powinna odpowiedzieć na pytanie „dlaczego odchodzisz z obecnej pracy?”. Oczywiście nie mogę powiedzieć „ponieważ mój menedżer jest psycholem, który mnie nie szanuje i obraża mnie przez cały czas i mam już dość”. Jak myślisz, jak powinienem odpowiadać na takie pytania?


title: Jaki jest idealny zakres (data minimalna i maksymalna) dla kopii zapasowej kalendarza?

text: Muszę wykonać kopię zapasową kalendarza na moim telefonie. Mamy wymóg wykonania kopii zapasowej całych danych kalendarza. Teraz telefon zawsze obsługuje wydarzenia cykliczne. Tak więc wydarzenie może istnieć od 01-01-1601 do 31-12-3000. Logicznie rzecz biorąc, nie ma sensu robić kopii zapasowej od 01-01-1601 do 31-12-3000. Chcę tylko poznać Twoje poglądy na temat idealnego zakresu tego samego.


title: Frameworki JEE, mapa drogowa do nauki? i czy powinienem się ich nauczyć?

text: **Informacje ogólne** Programowaniem zajmuje się zawodowo od 1 roku, moja codzienna praca obejmuje pisanie raportów BIRT, projektowanie i walidację formularzy przy użyciu JEE (rozpórki/wiosna, hibernacja). Nie mam dyplomu Sci 4 lata (elektronika), więc mam bardzo ograniczone doświadczenie w komp Sci. **Pytanie** Frameworki JEE (rozpórki1/2, sprężyna, hibernacja itp.) są obecnie gorące, jednak świat java ma tendencję do budowania A4j, B4J... coś w rodzaju mayway4J (i jestem tym zmęczony). AFAIK, frameworki to nic innego jak zbiór plików konfiguracyjnych XML i setki klas stworzonych do wpychania (przez programistę). I prędzej niż później pojawia się nowy framework, który mówi **Jestem najlepszy ze wszystkich**. Więc moje pytanie brzmi - 1. Co zrobisz, aby nauczyć się frameworka (wiele frameworków), biorąc pod uwagę, że może być przestarzały, dopóki nie będziesz w nim mistrzem (nauka frameworków może zająć dużo czasu)? 2. Rozważając na początku swojej kariery, czy dasz cholerę, jak dobrze ktoś zna framework (wiedza o frameworku jest ważna, ale nadal..) i dlaczego/jak powinienem nauczyć się frameworka, wiedząc, że muszę go (od)nauczyć, aby nauczyć się innego (dużo 4J...)? Po prostu próbuję uzyskać ogólny obraz, że jeśli jesteś na moim miejscu, jaka byłaby twoja strategia uczenia się/wkuwania (mapa drogowa)? Nie zamierzam rozpoczynać świętej wojny między A kontra B (ramki są mniej lub bardziej niezbędne).


title: Naucz się C++ przed/w tym samym czasie co C#?

text: Obecnie uczę się C#, ale zastanawiasz się, czy warto nauczyć się trochę C++ przed/w tym samym czasie, co w celu lepszego zrozumienia pojęć? Mam książkę o C++ i wydaje mi się, że jest raczej użyteczna, szczególnie wyjaśniając wskaźniki i referencje.


title: Rozwiązania dla oprogramowania wykorzystującego wiele połączeń do serwera

text: Tworzę oprogramowanie wykorzystujące wiele połączeń do serwera. Po stronie klienta jest to aplikacja Silverlight. Prawie za każdym razem, gdy użytkownik kliknie znajdujący się w nim przycisk, wysyła do serwera 1-5 wywołań WCF. Jednocześnie może być do kilkunastu użytkowników. Serwer to serwer bazy danych, który udostępnia dane klientowi. Jestem programistą na poziomie średniozaawansowanym i od czasu do czasu zastanawiam się nad buforowaniem niektórych danych i synchronizowaniem moich zmian. Czy są na to jakieś oficjalne rozwiązania lub technologie, np. wzory i tym podobne?


title: Projekt kodu serwera gry

text: Projektuję serwer do gry wieloosobowej, w którym gracze są w pokojach. W tej chwili mam zajęcia do obsługi klienta, networkingu itp. Walczę jednak ze znalezieniem projektu dla tej klasy Room. Na przykład, kiedy chcę zmienić pokój klienta, czy powinienem wywołać `client.changeRoom(newRoom)` czy `newRoom.addClient(client)`? A co z wyjściem z pokoju, czy klient powinien odłączyć się od pokoju, czy pokój odłączyć klienta? Jestem tutaj bardzo zdezorientowany, po prostu nie chcę skończyć z projektem, którego będę żałować w przyszłości.


title: Czy istnieją interfejsy API typu open source, które pomagają analizować kod?

text: Jako przykład załóżmy, że muszę sprawdzić pewne użycie kodu C# i ostrzec użytkownika, że jest to zła praktyka. Istnieje wiele zastosowań, które chcę wykryć, takie jak: * Zasób nie jest udostępniany przez programistę (w ciężkim środowisku COM) * Instancja powinna zostać utworzona za pomocą Aktywatora zamiast nowego (nie mam kontroli nad API, którym się znajduję analizowanie) * Inne Implementacja API może być w dowolnym języku, ale będę głównie analizował c# i vb.net. Odpowiednie języki: * C# * Python * Inne


title: Zawsze zwracaj pojedyncze obiekty w tablicy dla ładunków JSON interfejsu API REST?

text: W przypadku interfejsu API REST, nad którym pracuję, chcę zwrócić JSON w spójnym układzie: { "Data" : { "Id" : 123, "Email" : "charlie@somewhere.com" "Imię" : "Charlie" , "Nazwisko" : "Brown", }, "Błąd" : null } Ładunek zawsze będzie zawierał "Dane" i "Błąd", gdzie jeden lub drugi może mieć wartość null. Moje pytanie dotyczy „Danych” i punktów końcowych, które tak naprawdę zwracają tylko jeden obiekt. Na przykład, powiedzmy, że mam API `users/current`, które zwraca aktualnie uwierzytelnionego użytkownika. Zwróciłbym tego użytkownika, jak pokazano powyżej; pojedynczy obiekt JSON o nazwie „Data”. Dla punktów końcowych, które mogą zwrócić zero, jeden lub więcej obiektów, to (oczywiście) uczyniłbym "Dane" tablicą: { "Dane" : [ { (pierwszy obiekt) }, { (drugi obiekt) } ], "Błąd " : null } Słyszałem punkt widzenia, że dla spójności "Dane" powinny _zawsze_ być tablicą. Nawet jeśli punkt końcowy logicznie zwracałby tylko jeden obiekt (lub null). Co myślą inni? Myślę, że nie ma potrzeby tworzenia "Danych" i tablicy, jeśli nigdy nie zostanie zwrócony więcej niż jeden obiekt.


title: czytanie i rozumienie kodu c

text: Chcę zrozumieć kod jądra Linuksa i przechodziłem przez to, ale nie jestem w stanie w pełni odczuć tego, co się dzieje (koncentruję się na sieciowej części jądra Linuksa), więc czy ktoś z Was może zasugerować dobre praktyki czytania kodu C (lub dowolnego innego langu) ogólnie i specyficznego dla sieciowej części jądra linuksa. Z góry dziękuję


title: Jak zorganizować aplikację GUI do przekazywania wydarzeń i konfigurowania odczytów z udostępnionego zasobu?

text: Moje zaangażowane narzędzia to GTK i Haskell. Moje pytania są prawdopodobnie dość trywialne dla każdego, kto wykonał znaczącą pracę w zakresie GUI, ale przez całą moją karierę byłem wyłączony w odpowiedniku aplikacji CGI. Tworzę aplikację, która wyświetla dane tabelaryczne, wyświetla te same dane w formie wykresu i ma pole edycji zarówno do wprowadzania nowych danych, jak i do edycji istniejących danych. Po zapytaniu o współdzielenie zasobów zdecydowałem, że wszystkie dane będą przechowywane w MVar, aby każdy komponent mógł po prostu odczytać aktualny stan z MVar. Wszystko to działa, ale teraz nadszedł czas, abym przestawił aplikację tak, aby była interaktywna. Mając to na uwadze, mam trzy widżety: TextView (do edycji), TreeView (do wyświetlania danych) i DrawingArea (do wyświetlania danych w postaci wykresu). _MYŚLĘ_, że muszę zrobić dwie rzeczy, a sednem mojego pytania jest to, czy są to właściwe rzeczy, czy może jest lepszy sposób. Po pierwsze: wszystkie programy obsługi zdarzeń, te funkcje, które będą wywoływane za każdym razem, gdy potrzebne będzie ponowne wyświetlenie, muszą zostać napisane na wysokim poziomie, a następnie przekazane do funkcji, która faktycznie konstruuje widżet. Na przykład: drawStatData :: DrawingArea -> MVar Core.ST -> (Core.ST -> SetRepWorkout.WorkoutStore) -> IO () createStatView :: (DrawingArea -> IO ()) -> IO VBox createUI :: MVar Core .ST -> (Core.ST -> SetRepWorkout.WorkoutStore) -> IO HBox createUI pole storeMVar = wykonaj wykresy <- createStatView (\area -> drawStatData area storeMVar field) hbox <- hBoxNew False 10 boxPackStart hbox graphs PackNatural 0 return hbox W takim przypadku createStatView tworzy VBox, który zawiera DrawingArea do wykresu danych i potencjalnie innych widżetów. Dołącza drawStatData do zdarzeń realizacji i ekspozycji dla obszaru DrawingArea. Zrobiłbym coś podobnego dla TreeView, ale nie jestem do końca pewien, co, ponieważ jeszcze tego nie zrobiłem i to, o czym myślę, wymagałoby wymiany TreeModel za każdym razem, gdy TreeView wymaga aktualizacji. Moją alternatywą dla powyższego byłoby... drawStatData :: DrawingArea -> MVar Core.ST -> (Core.ST -> SetRepWorkout.WorkoutStore) -> IO () createStatView :: IO (VBox, DrawingArea) ... ale w tym przypadku ułożyłbym createUI tak: createUI :: MVar Core.ST -> (Core.ST -> SetRepWorkout.WorkoutStore) -> IO HBox createUI pole storeMVar = do (graphbox, graph) <- createStatView (\area -> obszar drawStatData pole storeMVar) hbox <- hBoxNew False 10 boxPackStart wykresy hbox PackNatural 0 na grafie realizuje (wykres drawStatData pole storeMVar) na grafie executeEvent (do liftIO $ drawStatData wykres storeMVar pole return()) return hbox jest lepsze, ale to prowadzi mnie do... Druga sprawa: konieczne będzie zbudowanie systemu zdarzeń, aby różne zdarzenia mogły wysyłać sygnały do moich widżetów. Potrzebuję jakiegoś mediatora, który będzie przekazywał zdarzenia i tłumaczył zdarzenia semantyczne aplikacji na rzeczywiste zdarzenia, na które reagują moje widżety. Czy lepiej jest dla mnie przekazać moje adresowalne widżety w górę stosu wywołań do poziomu, na którym mieszka mediator, czy przekazać mediatora w dół stosu wywołań i zarejestrować bezpośrednio w nim widżety? Podsumowując, moje dwa pytania: 1) przekazać widżety w górę stosu wywołań do globalnego mediatora lub przekazać globalnego mediatora w dół i czy widżety same się do niego zarejestrują? 2) przekazać moje funkcje przerysowania konstruktorom i poprosić ich o dołączenie funkcji przerysowania do skonstruowanych widżetów lub przekazać skonstruowane widżety z powrotem i poprosić wyższy poziom o dołączenie funkcji przerysowania (i potencjalnie połączyć ze sobą niektóre widżety)? Ok, i... 3) Książki lub wiki o architekturze aplikacji GUI, najlepiej spójnych architekturach, w których ludzie nie kłócą się o drobne szczegóły? * * * Aplikacja w obecnej formie (wyświetla dane, ale nie zapisuje danych ani nie pozwala na dużą interakcję) jest dostępna pod adresem https://bitbucket.org/savannidgerinel/fitness . Możesz uruchomić aplikację, przechodząc do katalogu głównego i wpisując runhaskell -isrc src/Main.hs data/ lub... cabal build dist/build/fitness/fitness data/ Być może będziesz musiał zainstalować biblioteki, ale cabal powinien ci to powiedzieć które.


title: Czynniki decydujące w programowaniu w parach

text: Czy są jakieś konkretne rzeczy, na które należy zwrócić uwagę przed wprowadzeniem zespołu do programowania w parach? Oczywiście połączenie kogoś, kto jest świetny w C++ z kimś, kto najlepiej zna ASP.NET, nie zaprowadzi mnie daleko, ale co powiesz na kogoś, kto jest świetny w C++ z kimś, kto najlepiej zna Javę, ale potrafi wystarczająco szybko nauczyć się C++? Co jeszcze? Poziomy doświadczenia? Cechy charakteru?


title: Przenieś swoją karierę na inny język programowania

text: Przejdę do sedna. Szukam porady, jak doświadczony programista przekona potencjalnego pracodawcę, że należy go rozważyć na stanowisko, które posługuje się innym językiem. Dzieje się tak przy spełnieniu innych wymagań innych niż język (znajomość kontroli wersji, OO, stopień, itp.). Na przykład doświadczony programista PHP, który chce przejść na stanowisko w Perlu. Czy to w ogóle możliwe? Jak trudne byłoby to? Czy to zależy od języka? EDYCJA: Odpowiedzi, które otrzymałem, są dowodem na to, że ta przyszłość społeczności jest rzeczywiście świetlana, ale niestety pozwala mi wybrać tylko jedną odpowiedź. Dziękuję wszystkim, którzy odpowiedzieli.


title: Serializacja danych w celu przetwarzania logiki biznesowej

text: Kierując się ogólną zasadą abstrakcji danych, zwykle abstrahuję dane w formacie serializowanym (JSON) i przekazuję je jako parametr do modułów Business Logic (BL) w taki sposób, że moduł BL zawsze widzi spójny format danych, niezależnie od podstawowa warstwa przechowywania danych. Nawet jeśli używam ORM, używam serializowanego formatu tego ORM. Czuję, że mam następujące zalety. * Dzięki serializacji danych będzie lepsza kontrola nad danymi i parametrami * Każdy programista może pisać BL bez zastanawiania się zbytnio nad bazą danych * Opakowania mogą być napisane dla nowych baz danych (istnieje wiele gotowych opakowań do konwersji danych do JSON) * Testowanie można wykonać bezwzględnie i bez bazy danych (ponieważ format danych jest serializowany) * Funkcjonalnie łatwiejszy do zrozumienia i lepsza integracja OLAP, OLTP Zauważam również następujące wady * Nowa warstwa do dodania między bazą danych a Moduł BL (większość ORM w dzisiejszych czasach ma z góry określony format JSON) * Dodatkowe wywołania funkcji spowalniają aplikację (ale myślę, że ten kompromis jest OK w porównaniu z lepszym testowaniem i łatwą obsługą) * Zwiększony poziom abstrakcji może zmylić programistę I poczynić powyższe obserwacje głównie w kontekście aplikacji biznesowych Kontynuując tę dyskusję, weźmy przykład, aby można było omówić sprawy w jego kontekście. Załóżmy bazę produktów z kolumnami: Product,Rate,Taxes i musimy utworzyć fakturę **Kod bez abstrakcji bazy danych** GET rate,podatki dla produktu X z bazy pomnożyć ilość przez stawkę i dodać podatki wyświetl fakturę **Kod z abstrakcja bazy danych** GET stawki,podatki dla produktu X z bazy danych Konwersja do JSON wywołanie funkcji create_invoice //Sprawia to, że wszystkie obliczenia wyświetlają fakturę W drugim przykładzie przekazałbym argumenty w postaci (Product=X, Qty=5, Stawka=5, Podatki=0,05). Jeśli podatki mają być podzielone na więcej niż jedną kategorię (podatek stanowy = 0,03, podatek centralny = 0,02) lub czynnik rabatowy do dodania, po prostu zwiększyłbym liczbę parametrów w funkcjach BL tak, aby pola bazy danych, klucze JSON a parametry funkcji są zgodne (odbywa się to automatycznie podczas serializacji i większość ORM-ów to robi). W moim podejściu ułatwia to rozszerzenie funkcji, a także uniezależnienie modułów od danych, ponieważ moduły zawsze znają dane, które mogą otrzymać, a nawet jeśli otrzymają nowy parametr, mogą go dostosować, pod warunkiem, że kod bazowy jest inteligentny. Moje ogólne pytania to 1. Czy to dobry wzorzec i jak się to nazywa (przychodzi mi do głowy abstrakcja danych)? 2. Plusy/Wady tego wzorca (oprócz wymienionych powyżej) w kontekście aplikacji biznesowych, aplikacji na urządzenia wbudowane, big data wrapper do pobierania danych z bazy danych, podczas gdy ten wzorzec jest bardziej zorientowany na strukturę danych) 4. Jeśli to jest dobre, czy nowy programista może to łatwo zrozumieć?


title: Które stwierdzenie sprawdza się najlepiej?

text: To pytanie zadał mi lider mojego zespołu. Zdanie 1 (napisane przeze mnie): lnkbtn1.visible = lnkbtn2.visible = lnkbtn.visible = false; Zdanie 2 (napisane przez lidera mojego zespołu): lnkbtn1.visible = false; lnkbtn2.widoczne = fałsz; lnkbtn3.visible = fałsz; Które stwierdzenie jest lepsze i dlaczego?


Jakie lekcje wyciągnąłeś z projektu, który prawie/faktycznie się nie powiódł z powodu złej wielowątkowości? Czasami framework narzuca pewien model wątków, który sprawia, że rzeczy są o rząd wielkości trudniejsze do osiągnięcia. Jeśli chodzi o mnie, to jeszcze nie doszedłem do siebie po ostatniej porażce i czuję, że lepiej nie pracować nad czymkolwiek, co ma związek z wielowątkowością w tym frameworku. Odkryłem, że jestem dobry w problemach z wielowątkowością, które mają proste rozwidlenie / łączenie i gdzie dane podróżują tylko w jednym kierunku (podczas gdy sygnały mogą podróżować w kierunku kołowym). Nie jestem w stanie obsłużyć GUI, w którym niektóre prace można wykonać tylko w ściśle serializowanym wątku („wątku głównym”), a inną pracę można wykonać tylko w dowolnym wątku poza głównym wątkiem („wątki robocze”), oraz gdzie dane i komunikaty muszą podróżować we wszystkich kierunkach między N składnikami (w pełni połączony wykres). W czasie, gdy porzuciłem ten projekt dla innego, wszędzie były problemy z impasem. Słyszałem, że 2-3 miesiące później kilku innym programistom udało się naprawić wszystkie problemy z impasem, do tego stopnia, że można je wysłać do klientów. Nigdy nie udało mi się odkryć tej brakującej części wiedzy, której mi brakuje. Coś o projekcie: liczba identyfikatorów wiadomości (wartości całkowite opisujące znaczenie zdarzenia, które może zostać wysłane do kolejki wiadomości innego obiektu, niezależnie od wątków) sięga kilku tysięcy. Unikalne ciągi (wiadomości użytkownika) również trafiają na około tysiąc. **Dodano** Najlepszą analogią, jaką otrzymałem od innego zespołu (niezwiązanego z moimi przeszłymi lub obecnymi projektami) było „umieszczenie danych w bazie danych”. („Baza danych” odnosi się do centralizacji i niepodzielnych aktualizacji). W interfejsie graficznym, który jest podzielony na wiele widoków, z których wszystkie działają w tym samym „wątku głównym”, a wszystkie operacje niezwiązane z interfejsem graficznym są wykonywane w poszczególnych wątkach roboczych, dane aplikacji powinny być przechowywane w jednej przestrzeni, która działa jak baza danych, i niech „baza danych” obsłuży wszystkie „atomowe aktualizacje” obejmujące nietrywialne zależności danych. Wszystkie inne części GUI obsługują tylko rysowanie ekranu i nic więcej. Części interfejsu użytkownika mogą buforować rzeczy, a użytkownik nie zauważy, że są przestarzałe o ułamek sekundy, jeśli są odpowiednio zaprojektowane. Ta „baza danych” jest również znana jako „dokument” w architekturze widoku dokumentu. Niestety – nie, moja aplikacja faktycznie przechowuje wszystkie dane w widokach. Nie wiem, dlaczego tak było. **Współpracownicy:** (współtwórcy nie muszą używać prawdziwych/osobistych przykładów. Lekcje z anegdotycznych przykładów, jeśli uznasz, że są wiarygodne, również są mile widziane).


title: Jak zawrzeć w CV hobby związane z programowaniem?

text: Jestem pewien, że wielu programistów ma swoje ulubione projekty i hobby, które wykonują poza zadaniami zawodowymi. Mam własne i mam problem z umieszczeniem ich w CV. Niekoniecznie są to gorące projekty open source, od których zależy życie każdego, tylko trochę majstrowania przy zabawnych językach, takich jak Haskell lub Lisp, które robię, aby nauczyć się nowych koncepcji. Może trochę eksperymentowania z frameworkiem internetowym, którego byłem ciekaw. Mam kilka powodów, aby chcieć zamieścić je w CV: * Mam na liście kilka języków i technologii, w których uważam się za „doświadczonego”. Nie miałbym problemu z tym, że zostałbym na nich grillowany podczas rozmowy kwalifikacyjnej. Ale gdybym umieścił Haskella na tej linii technologii, spasowałbym, gdybym zadał zaawansowane pytanie na ten temat. * Kiedy pomagam w rozmowach kwalifikacyjnych z kandydatami do pracy (nie jestem menedżerem ds. rekrutacji, ale inżynierowie uczestniczą w technicznej stronie rozmów kwalifikacyjnych), zawsze pytam ich o ich hobby programistyczne, jeśli takie istnieją. To otwiera ich na rzeczy, których nie ma w ich CV, może prowadzi do czegoś interesującego, czego nie nauczyłbym się tylko z pytania o poprzednie prace. * Jestem pasjonatem i ciekawością oprogramowania, chcę pokazać potencjalnym pracodawcom, że poszerzam swoją wiedzę poza obowiązkami zawodowymi. Ale chcę być szczery, że nie jestem ekspertem, kiedy nie jestem ekspertem. Jaki jest dobry próg włączenia hobby programistycznego do życiorysu programistycznego - przeczytaj książkę lub dwie, napisz działający program, użyj go do rozwiązania problemu o wielkości X itp.? Jak bardzo powinno to być oddzielone od doświadczenia zawodowego – zawartego w innych umiejętnościach (ale z jakimś rodzajem kwalifikacji „tylko hobby”, we własnej sekcji „zainteresowań osobistych”, czy też odepchniętej na drugą stronę, którą wszyscy wyrzucają? Albo zostawić to całkowicie i niech ankieter zapyta, czy go to obchodzi?


title: Radzenie sobie ze współpracownikami w stresującym środowisku pracy

text: W ciągu ostatniego roku w naszym dziale doszło do zwolnień, a my mamy szkieletową załogę. Pozbyli się większości naszego personelu pomocniczego. Pozostali członkowie zespołu woleliby raczej martwić się tym, co robią inni, niż pracować jako zespół i zastanawiać się, jak poprawić swoją sytuację. Jeden współpracownik (zajmujący się administracją sieci) spędza w biurze długie godziny. Częściowo jest to spowodowane obciążeniem pracą, ale inna część wynika ze złego zarządzania czasem (własna wina i zarządzanie). Przechodzi obok mojego biurka i robi szydercze uwagi typu „ciężko pracujesz?” i „zrób coś”. Jeśli oferuję pomoc, zachowuje się tak, jakby jej nie potrzebował. Jest typem niepewnym siebie i lubi robić wszystko sam, a potem trzymać to nad wszystkimi innymi. Obawiam się, że może się wypalić. Inny facet narzekał na swoje obciążenie pracą. Spędza tyle samo czasu, martwiąc się o to, co robią inni, niż robiąc rzeczy samemu. Uważa, że jest zbyt dobry na „gruntową pracę” i chce zostać menedżerem. Kiedy jego talerz jest pełny, upewnia się, że wszyscy inni wiedzą, kiedy musi załatwić sprawy. Nie są złymi facetami, ale stres wydaje się dotykać wszystkich. Jestem jedyną osobą, która umie kodować, więc dużo czasu spędzam na programowaniu projektów, ale mam też obowiązki wsparcia. Nie mogę wiele zrobić z powodu przerw. Faceci w biurze nie uważają tego, co robię, za "pracę"...i wydają się myśleć, że powinienem im pomagać, udzielając im wsparcia, a nie programując. Więc w zasadzie myślą, że mam popracować nad wsparciem IT, a potem wrócić do biura, aby pracować nad projektami programistycznymi, podczas gdy oni surfują po Internecie. Nie jęczę, nie jęczę i nie narzekam, jak wszyscy inni, więc zakładają, że nie mam wystarczająco dużo do roboty. Więc teraz mogę słuchać szyderczych uwag na temat mojego obciążenia pracą. Kierownictwo lubi moje projekty, ponieważ oszczędzają pieniądze firmy. Jaki jest najlepszy sposób radzenia sobie z tą sytuacją?


title: Jakiej licencji/umowy EULA potrzebuję, aby bezpłatnie korzystać z oprogramowania?

text: Nie jestem pewien, czego dokładnie szukam, ale oto fakty: będę oferować darmowe oprogramowanie, za darmo, tylko za 0 $ (nie OSS). Potrzebuję fragmentu tekstu zawartego w instalatorze z zgadzam się/nie zgadzam się, który chroniłby moje prawa. W szczególności, że nie gwarantuję niczego i nie powinienem ponosić odpowiedzialności za ich straty, które może spowodować oprogramowanie. Chcę pozwolić im na używanie oprogramowania do wszystkiego, co im się podoba, ale nie pozwalam na jego redystrybucję, sprzedaż lub inżynierię wsteczną. Nie jestem nawet pewien, czy ten tekst jest technicznie licencją, zastrzeżeniem, czy umową licencyjną użytkownika końcowego. Wątpię, czy istnieje gotowy szablon dla tego, czego szukam, ale wszelkie wskazówki byłyby bardzo mile widziane.


title: Dlaczego nie użyć RTOS z architekturą mikrojądra dla wysoce współbieżnych serwerów WWW?

text: Dlaczego nie użyć RTOS z architekturą mikrojądra dla serwerów internetowych? Harmonogram jest deterministyczny, a wszystkie żądania będą obsługiwane szybko, co prowadzi do szybszego czasu odpowiedzi? Łatwo jest rozszerzyć system operacyjny oparty na architekturze mikrojądra, ponieważ wszystko jest jak komunikacja klient-serwer poprzez przekazywanie komunikatów. Ponadto serwer będzie bardzo lekki i wymaga mniej zasobów. Załóżmy, że tworzysz usługę sieci Web przy użyciu C++. Myślę o QNX dla systemu operacyjnego. Czy to zły pomysł, czy to nie ma znaczenia?


title: Strategia baz danych dla połączonych, ale różnych aplikacji

text: Pracuję nad serią powiązanych ze sobą, ale oddzielnych aplikacji internetowych, wszystkie zlokalizowane na tym samym hoście: Super Admin | ---Administrator sieci witryny | | | ---Strona | | | ---Strona | | | ---Strona | ---Administrator sieci witryny | ---Strona | ---Strona | ---Site Wszystkie trzy będą miały dostęp do tej samej podstawowej biblioteki (Zend Framework) i oddzielnych bibliotek aplikacji dla każdej warstwy w sieci - a więc 3 aplikacji i jednej biblioteki - ale różne konfiguracje do obsługi unikalnych instancji. Interesuje mnie opinia ludzi na temat najlepszej strategii bazodanowej do obsługi tych aplikacji. Z jednej strony mógłbym wdrożyć jedną bazę danych, a może jedną dla każdego poziomu aplikacji (tj. 3). Ma to tę zaletę, że jest łatwe do wprowadzenia zmian, ale wadą jest to, że użytkownicy dzielą obciążenie dostępem – np. jeśli jeden użytkownik naprawdę uszkadza bazę danych, ucierpi wydajność innych aplikacji współdzielących bazę danych. Kolejną wadą jest to, że jakiekolwiek uszkodzenie danych może potencjalnie wpłynąć na wszystkich użytkowników końcowych. Z drugiej strony mógłbym wykorzystać szereg baz danych — jedną dla dwóch pierwszych warstw do udostępniania danych administracyjnych — ale oddzielne instancje dla każdej witryny wdrożonej w sieci. Ma to tę zaletę, że użytkownicy końcowi są odizolowani, a zatem uszkodzenie danych jest łatwiejsze do powstrzymania. Wadą jest oczywiście odwrotność poprzedniego przykładu – zmiany są wtedy trudniejsze do wprowadzenia w całej sieci. Myślę, że jest to podyktowane przez użycie a populację użytkowników. Jeśli masz małą liczbę użytkowników, ale często wchodzą oni w interakcję z bazą danych - wtedy plan B jest najlepszy. Jeśli to pierwsze, że masz wysokie zyski użytkowników z niskimi wskaźnikami interakcji - wtedy plan A jest najlepszy. Jestem zainteresowany, aby usłyszeć opinie innych ludzi na temat najlepszego podejścia do radzenia sobie z tą sytuacją.


title: Które kursy CS są „konieczne” dla programisty?

text: Moim celem jest nauczenie się programowania strony internetowej w Python/Django w przyszłym roku. Z tego co zrozumiałem, muszę się też nauczyć HTML, CSS, JavaScript. Rozumiem, że aby zbudować stronę internetową, będę musiał znaleźć współzałożyciela, którego umiejętności znacznie przewyższają moje. Jednak sytuacja będzie zupełnie inna, jeśli będę osobą, która jest bliżej swojego poziomu i poświęciła dużo czasu na naukę, niż każdy inny typ „mam pomysł, po prostu potrzebuję współzałożyciela technologii”. facet. Planuję kontynuować studia z informatyki, ale po ukończeniu liceum w maju zeszłego roku zdecydowałem się na roczny urlop, więc mogę uczyć się programowania w ciągu następnych 10 miesięcy. Na razie mam szansę uczestniczyć w kursach uniwersyteckich w topowej instytucji. Które z nich są niezbędne dla programisty stron internetowych, abym nie miał żadnych luk w zrozumieniu programowania i pisaniu „wyrafinowanego kodu”? EDYCJA:Dziękuję wszystkim za pomoc! Z sugerowanych kursów mogę być w stanie uczestniczyć w niektórych/żadnych/wszystkich programach OOP (z Java), sieci i grafikę, algorytmy SE, matematyka dyskretna dla naukowców, bazy danych, wyszukiwanie informacji i Data Mining. Które z nich są ważniejsze dla tworzenia stron internetowych w Django? Wiele razy czytałem ludzi mówiących, że programiści samoucy mają braki w swojej wiedzy, nie napisali jasnego kodu. Dlatego pytam, które kursy CS mogą te luki wypełnić? Nie tylko umiejętności praktycznych, ale także sposobu myślenia, sposobu myślenia.


title: Wydajność operacji 8-bitowych na architekturze 64-bitowej

text: Zwykle jestem programistą Python / Database i rozważam użycie C w celu rozwiązania problemu. Mam zestaw sekwencji o długości 8 znaków z 4 możliwymi znakami. Mój problem polega na łączeniu zestawów tych sekwencji i filtrowaniu, które zestawy pasują do kryteriów. Kombinacje 5 tworzą miliardy wierszy, a ich wykonanie zajmuje około godziny. Więc mogę reprezentować każdą sekwencję jako 2 bajty. Jeśli pracuję nad architekturą 64-bitową, czy osiągnę jakąkolwiek przewagę, zachowując te struktury danych jako 2 bajty podczas generowania kombinacji, czy też będę je przechowywać równie dobrze jako 8 bajtów/podwójnie? (64 bit = 8 x 8) Jeśli jestem na architekturze 64 bitowej, wszystkie rejestry będą 64 bitowe, więc jeśli chodzi o operacje, które nie powinny być szybsze (proszę mnie poprawić, jeśli się mylę). Czy zyskam coś na mniejszych wymaganiach dotyczących pamięci — czy zmieszczę więcej kombinacji w pamięci, czy i tak wszystkie zajmą 64 bity? I na koniec, czy mam szansę uzyskać cokolwiek na kodowaniu w C. Mam pierwszą wersję, która przechowuje sekwencję jako mały int w bazie danych MySQL. Następnie self łączy się kilka razy ze sobą, aby wygenerować wszystkie możliwe kombinacje. Wydajność jest akceptowalna, w zależności od liczby wygenerowanych kombinacji. Zakładam, że baza danych musi wiązać się z pewnym obciążeniem.


title: Czy dopuszczalne jest przesyłanie obraźliwych treści do GitHub?

text: Opracowałem obraźliwe narzędzie do sprawdzania treści dla mojej witryny i chcę go opublikować w serwisie GitHub. Jednak kod źródłowy zawiera wiele obraźliwych, rasistowskich i innych nieprzyjemnych treści. Źródło jest w pełni udokumentowane, ale chciałem poznać Twoją opinię na temat tego, czy można publikować taką pracę na GitHubie, czy pozostawić tablicę stringów wyobraźni czytelnika?!


title: Powiedziano mi, że HTML to język znaczników, C++ to język programowania, co może mieć znaczenie?

text: Moi znajomi programiści zawsze mi mówią, że HTML to język znaczników, a C++ to język programowania. Kiedy pytam ich, jaka jest różnica, nigdy nie udzielają mi rozsądnej odpowiedzi. Co może sprawić, że C++ można nazwać językiem programowania, a HTML nie?


title: Co powinienem zawrzeć w nagłówku dokumentacji mojej klasy

text: Szukam formatu dokumentacji klas informacyjnych dla moich klas Entity, Business Logic i Data Access. Znalazłem następujące dwa formaty stąd **Format 1** ///----------------------------------- ------------------------------- /// Przestrzeń nazw: <Przestrzeń nazw klasy> /// Klasa: <Nazwa klasy> / // Opis: <Opis> /// Autor: <Autor> Data: <DateTime> /// Notatki: <Uwagi> /// Historia zmian: /// Nazwa: Data: Opis: ///---- -------------------------------------------------- ----------- **Format 2** // ================================ // AUTOR : // UTWÓRZ DATĘ : // CEL : // UWAGI SPECJALNE: // ============================== = // Historia zmian: // //================================== Czuję, że śledzenie to podstawa elementy * Autor * Data utworzenia * Opis * Historia zmian jako Przestrzeń nazw i nazwa klasy i tak będą tam dostępne. Proszę o informację, jaki format jest zalecany i czy istnieje standardowy sposób pisania historii zmian?


title: Co oznacza "d" po pakietach linuksowych?

text: Zauważyłem, że wiele pakietów, które instalowałem na moim komputerze z Ubuntu, ma na końcu to „d”. Googlowanie nie daje mi żadnych odpowiedzi, które mogę znaleźć. Na przykład: serwer FTP — pakiet o nazwie: pure-ftpd serwer TFTP — pakiet o nazwie: atftpd serwer SSH — pakiet o nazwie: sshd O co chodzi z tym „d”?


title: Jak wykopać boks?

text: Naprawdę chciałabym wyjść z egzystencji 9-5 "kabina" i zrobić coś, gdzie mogę pracować z domu, startować, kiedy chcę itp. Nie zrozum mnie źle... Nie mam nic przeciwko ciężkiej pracy , ale po prostu nie podoba mi się cała korporacyjna sprawa, w której są ustawione moje godziny, dni urlopu, ubiór, miejsce pracy itp. Naprawdę myślę, że jest to możliwe, ponieważ inni programiści jakoś to robią. Ale na razie jest tylko na etapie „marzenia” i nie mam pojęcia, jak go posunąć do przodu. Nie wiem, czy chcę być freelancerem, założyć własną firmę, czy co. Jeśli ma to znaczenie, od kilku lat pracuję w .Net / MVC (zarówno desktop jak i web), ale mam też doświadczenie z innymi językami (Java, C++, Perl itp.). Nie mam dużego doświadczenia z "projektowaniem stron internetowych", ponieważ we wszystkich moich pracach inni ludzie zajmowali się tym, podczas gdy ja pracowałem przy pracy "programistycznej". Żeby było bardziej konkretnie, czego chcę... Budzę się w przypadkowy wtorek w czerwcu i jest to wspaniały dzień. Wyprzedzam swoje projekty i nie chce mi się pracować... Chcę wędrować. Chcę mieć swobodę robienia tego bez zajmowania się niektórymi PHB. Inny scenariusz... Mam ochotę pracować, ale chcę odwiedzić starego przyjaciela lub krewnego na tydzień w Bismarck / Budapeszcie / Bostonie. Wspomniany przyjaciel ma niezawodny Internet. Dlaczego nie mogę tego zrobić? Nie mówię o byciu nieodpowiedzialnym, tylko trochę bardziej wolnym.


title: Automatyczne ponowne przypisywanie własności

text: Czy są jakieś licencje na oprogramowanie, które automatyzują zmianę własności? Na przykład w zwykłych okolicznościach masz licencję, a następnie zmuszasz wszystkich współtwórców do podpisania się, że poprzez wniesienie wkładu ponownie przypisują własność właścicielowi projektu. W rodzaju licencji, której szukam, po prostu _edytując **i** redystrybuując_ wynik (czy to w formie źródłowej, czy binarnej), osoba, która dokonała zmian, nie tylko musiałaby redystrybuować kod, ale także automatycznie przeniósł ich własność na mnie. Ewentualnie, jeśli nie jest to możliwe, czy mogę dodać wiążącą klauzulę do istniejącej licencji, która to czyni?


title: Dlaczego tagi <section>, <header> i <footer> nie są często używane, gdy widzę witryny w języku HTML 5?

text: Zauważyłem, że nawet jeśli interfejs strony internetowej jest zakodowany w HTML 5, o czym świadczy `<!DOCTYPE html>`, ludzie rzadko używają nowych `<section>`, `<header>` i ` w HTML 5 Tagi <footer>`. Czy to dlatego, że ludzie nie rozumieją, że powinieneś używać klas wielokrotnego użytku do stylizowania rzeczy w `<section>` zamiast pełnej ścieżki selektorów tagów do elementu?


title: Czy będę mógł korzystać z usług hostingu kodu do przechowywania kodu złośliwego oprogramowania?

text: Zacznę od stwierdzenia, że jestem badaczem bezpieczeństwa komputerowego. Częścią mojej pracy jest tworzenie złośliwego oprogramowania do wdrożenia w kontrolowanym środowisku w celu zbadania lub oceny kilku aspektów bezpieczeństwa komputerowego. Teraz zaczynam myśleć, że korzystanie z usługi hostingu kodu online (takiej jak BitBucket, Github itp.), aby mieć cały mój kod w jednym miejscu, pozwoliłoby mi wydajniej pracować nad moimi projektami. Moje pytanie brzmi: **Czy są z tym jakieś problemy?** Przestudiowałem politykę prywatności tych firm i stwierdzają one, że zezwalają one na korzystanie z ich usług w sposób zgodny z prawem. Ponieważ nie rozprowadzam złośliwego oprogramowania, ale używam go tylko na moich komputerach i komputerach, do których mam upoważnienie, czy nie mogę korzystać z usługi? Do użytku, który robię, złośliwe oprogramowanie jest takie samo, jak każde inne oprogramowanie. **Zdaję sobie sprawę, że powinienem być bardzo ostrożny z hostingiem kodu** , ponieważ każdy błąd z mojej strony może narazić mnie na odpowiedzialność za szkody i pozostawić mnie otwartą na działania prawne. W związku z tym uznaję, że powinienem korzystać z prywatnych repozytoriów, więc kod nie jest dostępny publicznie. **Ale jak prywatne jest prywatne repozytorium?** Jak mogę ufać, że firmy takie jak one nie ujawnią ani nie sprzedają potencjalnej (elektronicznej) broni wirusowej, którą mogłem stworzyć w przyszłości?


title: Jak objąć prawami autorskimi i licencjonować poszczególne pliki kodu

text: W wolnym czasie mam zwyczaj pisania małych elementów wielokrotnego użytku. Ponownie używam tych komponentów z bazami kodu moich klientów. Zdaje mi się, że istnieje potencjalny problem, że używanie identycznego kodu dla wielu klientów może w przyszłości mnie odgryźć. Nie obchodzi mnie, kto używa kodu. Po prostu nie chcę sytuacji, w której jedna firma próbuje pozwać inną o naruszenie praw autorskich z powodu moich działań. Nie znam popularnych systemów licencjonowania. Co muszę określić w moich plikach kodu, aby wskazać, że te fragmenty są objęte prawami autorskimi i mogą być używane przez każdego, jednocześnie odróżniając je od kodu napisanego specjalnie dla klienta? Gdzie mogę znaleźć więcej informacji na temat tego scenariusza?


title: Web Service - co się dzieje, gdy klient nie otrzymuje odpowiedzi?

text: Opracowaliśmy usługę WCF, która działa jako API dla naszego systemu. niektóre metody ujawniają funkcjonalność, która ostatecznie zapisuje i aktualizuje dane w DB. Powiedzmy, że klient wysłał jedno z tych żądań, usługa wykonała potrzebne operacje, podczas gdy klient z jakiegoś powodu rozłączył się i nie otrzymał odpowiedzi. odpowiedź zawiera informację o powodzeniu/porażce wszystkich podoperacji Przykład aktualizowanych danych "problematycznych" - "Dodaj kwotę X do salda członka M". Czyli jeśli klient nie otrzymał odpowiedzi - klient nie wie, że dane zostały zaktualizowane. **Jak mamy sobie poradzić z tym scenariuszem, jednocześnie utrzymując możliwie jak najczystszą implementację po stronie klienta?**


title: Jak najbardziej zapracowani ludzie przekazują swoją wiedzę?

text: Niedawno przeprowadziliśmy ankietę wśród użytkowników wiki w całej naszej firmie i dowiedzieliśmy się, że istnieją dwie duże grupy użytkowników: * osoby z **dużą wiedzą**, ale (którzy twierdzą, że mają) nie mają czasu na dokumentowanie * ludzie z **czasem** ale (którzy twierdzą, że mają) za mało wiedzy wartej udokumentowania Każda grupa obejmowała prawie 50% użytkowników! Jak radzą sobie z tym Wasze firmy? To znaczy, **jak możesz zachęcić najbardziej zajętych/najbardziej kompetentnych ludzi do dzielenia się swoją wiedzą?**


title: Kiedy klasa lub moduł powinna znajdować się w osobnym zestawie/DLL?

text: Czy istnieją jakieś wytyczne dotyczące decydowania, kiedy klasa powinna znajdować się we własnym zestawie/dll? Często widzę dwie szkoły myślenia: 1) Każde „grupowanie” klas należy do własnej biblioteki DLL, m.in. Repozytoria, usługi, DTO, infrastruktura itp. 2) Wszystko powinno być w jednej bibliotece DLL, ale oddzielone przestrzeniami nazw/folderami, np. mieć „Core” DLL z dodatkowymi przestrzeniami nazw, np. Core.Repositories, Core.Services, Core.DTO itp. W pracy po prostu zbijamy wszystko w jeden Assembly o nazwie "Biznes". Istnieje kilka folderów, ale nie ma prawdziwego oddzielenia — obiekty biznesowe (z logiką, z których niektóre nie powinny nawet być klasami) są beztrosko umieszczane w folderze „BusinessObjects”. Rzeczy używane w więcej niż jednej klasie znajdują się w folderze „Core”. Narzędzia znajdują się w folderze „Narzędzia”, infrastruktura dostępu do danych to folder „Dane” - masz pomysł. Dla nowego modułu, nad którym pracuję, chcę/muszę mieć osobną warstwę dostępu do danych (pomyśl o podstawowej implementacji Repozytorium), ale nie chcę po prostu wrzucać jej do folderu „BusinessObjects” z pozostałymi 160 (!) zajęcia tam. Jednocześnie jestem zaniepokojony tworzeniem nowej biblioteki klas, ponieważ wszyscy są przyzwyczajeni do umieszczania klas w jednej bibliotece; folder/przestrzeń nazw może jednak działać.


title: Jak radzić sobie z zarządzaniem wpychając starsze systemy?

text: Obecnie odbywam płatny staż i w ciągu ostatnich 5 lat otrzymałem zadanie utrzymania przestarzałego systemu, który został opracowany przez wielu programistów (w różnym czasie). Kierownictwo zgadza się, że „system jest na podtrzymywaniu życia” i otrzymuję dość regularne raporty o błędach od użytkowników końcowych, którzy aktualnie korzystają z systemu. Kierownictwo chce teraz przedłużyć projekt o kolejny rok, a tym samym prawie potroić bazę użytkowników. Jako stażysta (lub dowolne stanowisko na poziomie podstawowym) jak mogę „odepchnąć się”? Napisałem już raport przedstawiający moje obawy, aczkolwiek w otwartym dokumencie. Czy istnieje protokół lub typ dokumentu do sugerowania zmian? Czy mam możliwość zgłaszania sugestii, czy po prostu powinienem nadal wspierać stary system? * Aby wyjaśnić, tworzenie oprogramowania nie jest podstawową działalnością mojej firmy. W związku z tym nie istnieją żadne protokoły wewnętrzne. Dodatkowo projekt nie posiada żadnej formalnej dokumentacji, ani dokumentów wymagań. Rozwój jest bardzo doraźny.


title: Zarabianie na tłumacza na zamówienie?

text: Ostatnio poczyniłem znaczne postępy w budowaniu tłumacza. Buduję go z kodu zespołu NASM (dla podstawowego silnika) i C (cl.exe kompilator Microsoft dla parsera). Naprawdę nie mam dużo czasu, ale mam wiele dobrych pomysłów na to, jak to zbudować, aby przemawiało do pewnej niszy rynkowej. Chciałbym to zakończyć, ale muszę zmierzyć się z rzeczywistością ... chyba że mogę uzyskać dobry zwrot pieniężny z mojej inwestycji, nie mam zbyt wiele czasu na zainwestowanie. Dlatego zadaję następujące pytania każdemu, szczególnie tym, którzy mają doświadczenie w zarabianiu na swoich programach: 1) Jak łatwo programiście zarobić dobre pieniądze na jednym projekcie? (Wiem, że jest to niejasne, ale ciekawie będzie usłyszeć od tych, którzy mają doświadczenie lub znają doświadczenia innych). 2) Jakie są największe przeszkody w zarabianiu na projektach programistycznych? 3) W przypadku parsera używam kompilatora Microsoft (bez IDE), który otrzymałem z Visual Express, więc czy będzie to problem? Czy będę musiał płacić tantiemy lub opłatę licencyjną? 4) O ile wiem, NASM jest aplikacją na licencji BSD z 2 klauzulami. Więc to powinno pozwolić mi na używanie NASM do rozwoju komercyjnego, chyba że czegoś mi brakuje? Dobrze jest wiedzieć o tych rzeczach przed rozpoczęciem projektu mięsa i ziemniaków.


title: Jak formatować tablice w parametrach?

text: Mówię o czymś takim: echo $form->input('general_addresss', array( 'label' => 'Gdzie dzisiaj pójdziesz?' 'format' => array('before', 'input', „po”, „etykieta”, „po”, „błąd”))); Czy zaczynasz od jednego parametru tablicowego, a następnie łamiesz linię? Jeśli nie może zmieścić się na linii, czy natychmiast ją łamiesz? Po czym wykonujesz określoną liczbę zakładek? Co się stanie, jeśli tablica w tablicy ma wiele właściwości? Czy jest jakiś konkretny przewodnik, którym się kierujesz?


title: Ograniczenie niektórych funkcjonalności tylko do środowiska programistycznego

text: Intuicyjnie uważam, że aplikacja powinna być dokładnie taka sama w środowiskach DEV, QA i PROD. Zostałem jednak poproszony o dodanie funkcji do aplikacji, która będzie dostępna tylko w środowisku DEV. Narzędzie modyfikuje wartości bazy danych DEV i tworzy skrypt wyjściowy, który zostanie przetestowany w QA, a następnie będzie używany do modyfikacji danych produkcyjnych. Uwierzytelnianie umożliwiające dostęp do funkcji nie będzie dostępne w środowiskach QA i PROD. Rozumiem, że to zadziała, ale czy jest to poprawne dla standardów Java EE? **Dodatkowe szczegóły:** -Usunąłem "najlepsze praktyki" ze względu na poniższe komentarze. - Mam serwer deweloperski i bazę danych deweloperskich, serwer testowy i bazę danych testowych oraz serwer produkcyjny i produkcyjną bazę danych. Chcę wiedzieć, czy byłyby jakieś możliwe problemy, które mogłyby się pojawić (i „najlepsza praktyka” ich unikania) z posiadania funkcji dużej aplikacji dostępnej tylko na serwerze deweloperskim. Ta funkcja zmodyfikuje wartości w programistycznej bazie danych, a następnie wyeksportuje skrypt SQL, który ma aktualny stan programistycznej bazy danych. Skrypt SQL byłby wtedy uruchamiany na testowej bazie danych, a jeśli każda funkcja działała później poprawnie, byłby również uruchamiany na produkcyjnej bazie danych. Kod, który zmodyfikowałby testową i produkcyjną bazę danych, nie jest dostępny w żadnym z tych środowisk. Przepraszam, wiem, że mówi to w zasadzie to samo, co powyżej. Jeśli nadal jest niejasne, usunę pytanie. Dziękuję.


title: Przypadki użycia wielokrotnego dziedziczenia

text: Java pomija wielokrotne dziedziczenie na tej podstawie, że omija cel projektowy, jakim jest utrzymanie prostego języka. Zastanawiam się, czy Java (ze swoim ekosystemem) jest naprawdę „prosta”. Python nie jest złożony i ma wielokrotne dziedziczenie. Więc nie będąc zbyt subiektywnym, moje pytanie brzmi... **_Jakie są typowe wzorce problemów, które korzystają z kodu zaprojektowanego tak, aby intensywnie wykorzystywać dziedziczenie wielokrotne_**


title: Algorytm zliczania podzbiorów

text: Mam następujący problem, który chcę efektywnie rozwiązać: Wejście: Zbiór s wektorów {Pass,Fail}^k, m - minimalny procent wektorów Wyjście: Zbiór Zbiorów indeksów: Gdzie każdy zbiór Zawiera indeksy hasła w podanych wektorach , a liczba wektorów zawierających Pass w tych indeksach wynosi ponad m procent od wszystkich wektorów. Przykład: {(Pass,Fail,Pass,Fail),(Pass,Fail,Pass,Pass)} gdzie k to 4 a liczba elementów zestawu to 2 i m 60% , wynik będzie {{0,2},{ 0},{2}} Wynikiem jest grupa zestawów, w których każdy zestaw zawiera indeksy wektorów, które dla co najmniej 60% wektorów mają wartość Pass


title: Jakie są wytyczne dotyczące znaków towarowych dla technologii Java?

text: Poprzednia strona „Wymagania dotyczące znaków towarowych i logo” pod adresem http://www.sun.com/policies/trademarks/ nie jest już dostępna, czy jest nowa wersja, która pomaga we właściwym nazewnictwie produktów (ziarna, biblioteki) dla Javy ? Wytyczne dotyczące korzystania ze znaków towarowych Oracle przez firmy zewnętrzne znajdują się pod adresem http://www.oracle.com/us/legal/third-party-trademarks/index.html, jednak nie występują nazwy produktów związane z „Java”. Poprzednie wytyczne mówiły, że „(nazwa produktu...) dla platformy Java” to poprawna nazwa, a teraz wydaje mi się, że należy zmienić nazwę na „ **(nazwa produktu...) dla Oracle Java**”, aby zachować zgodność z Wytycznymi dotyczącymi używania przez osoby trzecie znaków towarowych Oracle


title: Czy należy używać więcej niż jednej funkcji, gdy robią podobne, ale nie identyczne rzeczy?

text: Na przykład, gdybym chciał wygenerować HTML na podstawie niektórych danych wejściowych. Jakie jest preferowane wyjście z: <?php function generate_html($type, $input){ switch($type){ case 'paragraph': //Wygeneruj i zwróć kod HTML dla podziału akapitu; case 'ul': //Wygeneruj i zwróć kod HTML dla nieuporządkowanego podziału listy; default: error('Podano nieprawidłowy typ'); przerwanie; } } generate_html('paragraph', 'To jest akapit'); generate_html('ul', [ 'To jest pierwsza pozycja na liście', 'To jest druga pozycja na liście' ]); lub: <?php function generate_paragraph($input){ //Generuj i zwracaj kod HTML dla akapitu } function generate_ul($input){ //Generuj i zwraca kod HTML dla listy } generate_paragraph('To jest akapit'); generate_ul([ 'To jest pierwsza pozycja na liście', 'To jest druga pozycja na liście' ]); Znam ideę funkcji wykonującej tylko jedną „rzecz”, ale nie jestem pewien, jak konkretna powinna być ta „rzecz”. Pierwszy typ może wykonywać tylko jedną rzecz (generowanie HTML) lub dwie rzeczy (generowanie list, akapitów). To zależy, jak na to spojrzysz. Jaki byłby preferowany sposób zrobienia czegoś takiego?


title: Czy istnieją jakieś obawy związane z używaniem statycznej jednostki pracy tylko do odczytu, aby zachowywała się jak pamięć podręczna?

text: Powiązane pytanie: Jak buforować dane, które rzadko się zmieniają? Tworzę aplikację ASP.NET MVC4. Na każde żądanie należy sprawdzić szczegóły bezpieczeństwa dotyczące użytkownika z obszarem/kontrolerem/akcją, do której ma dostęp, aby sprawdzić, czy może je wyświetlić. Informacje o zabezpieczeniach są przechowywane w bazie danych. Na przykład: User Permission UserPermission Akcja ActionPermission „Uprawnienie” to token, który jest stosowany do akcji MVC w celu wskazania, że token jest wymagany w celu uzyskania dostępu do akcji. Gdy użytkownik otrzyma uprawnienia (za pośrednictwem tabeli UserPermission), ma token i może uzyskać dostęp do akcji. Zastanawiałem się, jak buforować te dane (ponieważ rzadko się zmienia), tak że pytam tylko o dane w pamięci i nie uderzam w bazę danych (co jest obecnie znaczącym hitem wydajności). Próbowałem przechowywać rzeczy na listach, używając dostawcy pamięci podręcznej, ale albo napotykam problemy, albo wydajność się nie poprawia. Jednym z problemów, z którym stale się spotykam, jest to, że używam leniwego ładowania i dynamicznych serwerów proxy z EntityFramework. Oznacza to, że nawet jeśli `ToList()` wszystko i przechowuję je gdzieś statycznie, relacje nigdy nie są wypełniane. Na przykład `User.Permissions` jest ICollection, ale zawsze ma wartość null. Nie chcę 'Include()' wszystkiego, ponieważ staram się, aby rzeczy były proste i ogólne (i łatwe do modyfikacji). Jedna rzecz, którą wiem, to to, że EntityFramework DbContext to jednostka pracy, która działa z buforowaniem pierwszego poziomu. Oznacza to, że przez cały czas trwania jednostki pracy wszystko, do czego uzyskuje się dostęp, jest buforowane w pamięci. Chcę utworzyć DbContext tylko do odczytu, który będzie istniał w nieskończoność i będzie używany tylko do odczytu o danych uprawnień. Po przetestowaniu to działało idealnie; moje czasy ładowania strony wzrosły z 200 ms+ do 20 ms. Mogę łatwo wymusić odświeżanie danych w określonych odstępach czasu lub po prostu pozostawić je do odświeżenia, gdy pula aplikacji zostanie przetworzona. Zasadniczo będzie się zachowywał jak pamięć podręczna. _Pamiętaj, że reszta aplikacji będzie normalnie współdziałać z innymi kontekstami, które istnieją na żądanie._ **Czy jest jakaś wada tego podejścia? Czy mógłbym robić coś innego?**


title: Omówienie zwinnego procesu, który mogę zastosować w startupie

text: Muszę dostarczyć wycenę klientowi zewnętrznemu na niektóre oprogramowanie. Chcę używać agile tylko do budowania początkowych wymagań (w czym mam doświadczenie z perspektywy programisty), ale muszę zrobić wszystko, to tylko praca jednoosobowa. Klient ma trudności z ustaleniem, jakie są wymagania, a wartością, którą mogę dodać, będzie usiąść z nimi i ustalić, czego chcą, korzystając z historyjek użytkownika itp. Zasadniczo muszę być przez trochę BA. Szukam dobrego przeglądu procedur, które należy przejść w zwinnym procesie budowania wymagań, a także kontynuacji procesu nieco dalej. Na przykład od początku, aż do opracowania eposów i budowania historyjek użytkowników (lub nie) wystarczy trochę o tym przeczytać przed spotkaniem, abym wiedział, jak najlepiej postępować, jeśli spędzę z nimi dzień. Przydatne byłoby również posiadanie dodatkowych zasobów do zapewnienia klientowi, abyśmy wszyscy byli na tej samej stronie.


title: Serializacja obiektu na różne sposoby

text: Zwykle podczas tworzenia stron internetowych kopiuję atrybuty z moich klas modeli do innej klasy, która zostanie wysłana do klienta. Zwykle z klasą, która akceptuje model i wydobywa niezbędne informacje, jest to wystarczające (przypuszczam, że coś w rodzaju adaptera), ale czasami nie jest to takie proste. W niektórych systemach z różnych powodów muszę wysłać różne zestawy atrybutów i tu prostota zdaje się zanikać. Przy moim zwykłym podejściu kończę z wieloma klasami bardzo podobnymi do siebie, tylko dlatego, że jedna jest używana w jednym kanale, który wymaga pewnych informacji, a inne dla kanałów, które wymagają bardzo podobnych informacji. Ale nie może być taką samą sumą tych dwóch, ponieważ wydajność lub bezpieczeństwo. (Kiedy mówię o kanałach, dzieje się tak dlatego, że może być serializowany przy użyciu json lub xml, lub używany w innych protokołach, lub po prostu wyświetlany jako html przez serwer.) **Pytanie brzmi:** Czy istnieje wzorzec, który pozwala na różne przekształcenia obiektu (które mogą agregować inne obiekty) w zależności od użytego kontekstu? (bez zbytniego powielania kodu) **Przypadek:** w rozproszonej grze karcianej (takiej jak poker), muszę wysłać każdemu użytkownikowi wynik, nazwiska graczy, karty, które zostały zagrane i karty ma w ręku. Ale kiedy gra się kończy, muszę też wysłać karty w ręce innych graczy. A z innego punktu widzenia gry muszę wysłać tylko wynik i nazwiska graczy. Przepraszam za mój angielski, to nie jest mój pierwszy język (a pomysł, z którym próbuję się porozumieć, wydaje mi się trochę skomplikowany).


title: Obsługa liści w menu opartych na drzewie

text: **Tl;Dr** Mając język bez polimorfizmu, jak elegancko zmodyfikować zachowanie liścia w drzewiastej strukturze danych. **Kontekst** Programuję aplikację w C dla mikrokontrolera i zastanawiam się, jaki byłby najlepszy sposób na zaprojektowanie elastycznych menu bez GUI. Zasadniczo dane wejściowe mogą pochodzić z 2 różnych źródeł: wbudowane przyciski na płycie używane przez użytkownika oraz port Uart używany przez zespół produkcyjny do kalibracji urządzenia przed wysyłką. Mam już mechanizm wykorzystujący wątek do nasłuchiwania danych wejściowych (zarówno z przycisków, jak i portu szeregowego), który wysyła je do prymitywnego parsera. Parser następnie podejmuje akcję w zależności od aktualnie zarejestrowanego wywołania zwrotnego dla odebranych danych wejściowych. Wie również, czy menu musi być wydrukowane na ekranie LCD, czy przez port szeregowy. Używam również drzewa k-ary do reprezentowania hierarchii między podmenu i różnymi opcjami. Ponieważ menu nie są jeszcze zdefiniowane, pozwoli mi to po prostu dodawać/usuwać węzły, gdy mój przełożony zdecyduje się na obsługiwane funkcje. Teraz, gdy aktualnie wyświetlane menu nie jest liściem, zachowanie jest całkiem proste. Lewo i Prawo poruszają się między rodzeństwem, Back wybiera rodzica, a Enter wybiera pierwsze dziecko. Jeśli jest to liść, Enter aktywuje / dezaktywuje modyfikacje, Lewy i Prawy zwiększa / zmniejsza wartość, a Wstecz anuluje modyfikację. **Inne obawy** * Czy nie przesadzam z rzeczami, które można zrobić z kilkoma obudowami przełączników? * Czy istnieją zasoby dające przykład czystego menu bez GUI, gdy nie wiesz, skąd pochodzą dane wejściowe, jakie działania będziesz musiał podjąć, jakie menu musisz zaoferować i gdzie wyświetlić te menu? * Ponieważ są zasadniczo 2 opcje (liść lub nie), czy powinienem zrobić wszystko z if/elses i przejść dalej?


title: Implementacja IEnumeratora bez użycia „zwrotu wydajności” w c#

text: Jestem nowy w programowaniu C#, eksperymentowałem z koncepcją iteratorów w C#. Tutaj staram się wyświetlić wszystkie terminy na liście, w tym celu próbuję różnych sposobów uzyskania wyników. W poniższym kodzie używam dwóch klas ListIterator i ImplementList. W klasie `ListIterator` : zdefiniowałem `HashSet` i używa `IEnumerator` do przechowywania wartości. Tutaj metoda `GetEnumerator()` zwraca wartości z listy. GetEnumerator jest zaimplementowany w `klasie ImplementList` (inna klasa). Na koniec lista jest wyświetlana w konsoli. public class ListIterator { public void DisplayList() { HashSet<int> myhashSet = new HashSet<int> { 30, 4, 27, 35, 96, 34}; IEnumerator<int> IE = myhashSet.GetEnumerator(); while (IE.MoveNext()) { int x = IE.Current; Console.Write("{0}", x); } Konsola.WriteLine(); Konsola.KluczOdczytu(); } } W klasie ImplementList : `GetEnumerator()` jest zdefiniowane i zwraca listę przy użyciu `yield return x.` public class ImplementList : IList<int> { private List<int> Mylist = new List<int>(); public ImplementList() { } public void Add(int item) { Mylist.Add(item); } public IEnumerator<int> GetEnumerator() { foreach (int x w Mylist) yield return x; } } Teraz chcę przepisać `GetEnumerator()` bez używania `zwrotu wydajności`. I powinien zwrócić wszystkie wartości z listy. Próbowałem użyć pętli for jako `for(int x=0; x<Mylist.Count; x++)`, ale nie zwraca ona wszystkich wartości z listy. Czy możliwe jest uzyskanie wszystkich wartości z listy bez użycia `zwrotu wydajności` w IEnumerator?


title: Czy wzorzec Obserwator jest odpowiedni dla tego rodzaju scenariusza?

text: Tworzę prosty framework do tworzenia gier z Ruby. Istnieje system węzłów. Węzeł jest elementem gry i ma pozycję. Może mieć węzły potomne (i jeden węzeł nadrzędny). Dzieci zawsze są przyciągane w stosunku do rodziców. Węzły mają pole `@position`. Każdy może to zmienić. Gdy taka pozycja zostanie zmodyfikowana, węzeł musi odpowiednio zaktualizować swoje dzieci, aby prawidłowo je narysować względem niego. `@position` zawiera instancję `Point` (klasa z właściwościami x i y oraz kilka innych przydatnych metod). Muszę wiedzieć, kiedy zmienia się stan węzła `@position`, abym mógł powiedzieć węzłowi, aby uaktualnił swoje dzieci. Jest to łatwe, jeśli programista zrobi coś takiego: @node.position = Point.new(300,300) Ponieważ jest to równoważne wywołaniu tego: # Kod w klasie Node def position=(nowaWartość) @position = newValue update_my_children # <- -- Wiem, że pozycja zmieniła się koniec Ale gubię się, gdy to się dzieje: @node.position.x = 300 Jedyną osobą, która _wie_ o zmianie pozycji jest instancja `Point` przechowywana we właściwości `@position` węzła. Ale potrzebuję powiadomienia węzła! W tym momencie rozważałem wzór Obserwator. Zasadniczo można teraz zaobserwować `Point`. Kiedy właściwość `position` węzła otrzyma nową instancję `Point` (poprzez operator przypisania), przestanie on obserwować poprzedni `Point`, który miał (jeśli był), i zacznie obserwować nowy. Gdy instancja `Point` otrzyma zmianę stanu, wszyscy obserwatorzy (właściciel węzła) zostaną powiadomieni, więc teraz mój węzeł może zaktualizować swoje dzieci, gdy zmieni się pozycja. Problem pojawia się, gdy tak się dzieje: @someNode.position = @anotherNode.position Oznacza to, że dwa węzły obserwują ten sam punkt. Jeśli zmienię jedną pozycję węzła, druga również się zmieni. Aby to naprawić, planuję utworzyć nową instancję Point, skopiować `x` i `y` przekazanego argumentu i przechowywać mój nowo utworzony punkt zamiast przechowywać przekazany. Innym problemem, którego się obawiam, jest to: somePoint = @node.position somePoint.x = 500 Z technicznego punktu widzenia zmodyfikowałoby to pozycję `@node`. Nie jestem pewien, czy ktokolwiek oczekiwałby takiego zachowania. Mam wrażenie, że ludzie postrzegają „Punkt” jako coś w rodzaju prymitywnego, a nie rzeczywistego obiektu. Czy takie podejście jest w ogóle rozsądne? Powody, dla których jestem sceptyczny: * Słyszałem, że wzorzec Observer powinien być używany z _wieloma_ obserwatorami. Technicznie rzecz biorąc, w tym scenariuszu jest tylko jeden obserwator na raz. * Kiedy przypisuję pozycję węzła jako innemu (`@someNode.position = @anotherNode.position`), gdzie tworzę zupełnie nową instancję zamiast przechowywać przekazany punkt, wydaje się to hackowe, a nawet nieefektywne.


title: Jaki jest najprostszy format pliku konfiguracyjnego czytelny dla człowieka?

text: Bieżący plik konfiguracyjny wygląda następująco: mainwindow.title = 'test' mainwindow.position.x = 100 mainwindow.position.y = 200 mainwindow.button.label = 'zastosuj' mainwindow.button.size.x = 100 mainwindow.button. size.y = 30 logger.datarate = 100 logger.enable = True logger.filename = './test.log' To jest odczytywane za pomocą Pythona do zagnieżdżonego słownika: { 'mainwindow':{ 'button':{ 'label' : {'value':'apply'}, ... }, 'logger':{ datarate: {'value': 100}, enable: {'value': True}, nazwa pliku: {'value': '. /test.log'} }, ... } Czy istnieje lepszy sposób na zrobienie tego? Chodzi o to, aby uzyskać zachowanie typu XML i unikać XML tak długo, jak to możliwe. Zakłada się, że użytkownik końcowy jest prawie całkowicie analfabetą komputerowym i zasadniczo używa notatnika i kopiuj-wklej. Dlatego standardowy typ Pythona „nagłówek + zmienne” jest uważany za zbyt trudny. Fałszywy użytkownik edytuje plik konfiguracyjny, zdolni programiści obsługują słowniki. Słownik zagnieżdżony jest wybierany w celu łatwego dzielenia (logger nie potrzebuje lub nawet nie może mieć/edytować parametrów głównego okna).


title: Czy nadal powinienem używać frameworka aplikacji internetowych?

text: Zamierzam stworzyć prostą aplikację internetową, która będzie polegała na wgrywaniu obrazów i zarządzaniu użytkownikami. Przeglądam kilka frameworków aplikacji internetowych, których mógłbym użyć, ale wciąż zastanawiam się, czy nadal powinienem z nich korzystać, czy po prostu zrobić jeden od podstaw dla tej konkretnej aplikacji. Jakieś sugestie od doświadczonych programistów aplikacji internetowych? Dziękuję!


title: Technologia non-profit dla organizacji non-profit?

text: Szukałem sposobu na odwdzięczenie się społeczności, ale nie znalazłem jeszcze swojego odpowiedniego rozwiązania, więc przyszedł mi do głowy pomysł: „firma” technologiczna non-profit, która jest skierowana do organizacji non-profit. Czy takie istnieją? Robiłem kilka wyszukiwań w Google i mogę znaleźć tylko oprogramowanie przeznaczone dla organizacji non-profit, które jest tworzone przez firmy nastawione na zysk lub które pobiera opłatę, która moim zdaniem jest kwotą oburzenia, konferencje skierowane do organizacji non-profit i technologie, które mogą używać – lub artykuły narzekające na przepaść cyfrową i to, jak organizacje non-profit postrzegają technologię jako kluczową, ale nie mają środków ani wiedzy, aby ją wykorzystać. **Pseudo „Model biznesowy”** Organizacja open source 501(3)(c) skierowana bezpośrednio do organizacji non-profit, aby wypełnić „przepaść cyfrową”. Większość usług byłaby bezpłatna, a za dostosowanie byłyby pobierane opłaty za doradztwo. Przyjmowano datki i zabiegano o dotacje rządowe. Umożliwiłoby to organizacjom non-profit dotrzymanie kroku organizacjom nastawionym na zysk w sektorze technologii, ale przy niewielkich lub zerowych kosztach. Być może pierwszym „przemysłem”, który zostanie objęty celem, będą te, które zaspokajają kluczowe potrzeby społeczne, takie jak bezrobocie lub banki żywności.


title: Jakie są konsekwencje dalszego trzymania się Windows XP, mimo że są Windows Vista, 7 i wkrótce 8?

text: Z perspektywy programisty .Net, jakie są konsekwencje dalszego trzymania się Windows XP, mimo że są Windows Vista, 7 i wkrótce 8? W jaki sposób posiadanie systemu Windows XP ogranicza rozwój programistów na platformie .Net?


title: Publikowanie: Jak i kto z recenzji rówieśniczych

text: Więc siedzę tutaj, żując kilka nowych struktur danych. Zastanawiam się nad ich zakodowaniem, ale w tej chwili nie mam z nich żadnego profesjonalnego zastosowania. Mimo to rozwiązują ciekawe problemy i zasługują na referencyjne implementacje. Tak więc chciałbym je opublikować, najlepiej w recenzowanym czasopiśmie, tak aby przynajmniej ktoś mógł na nie natknąć się i trochę z tego skorzystać. Ale nie potrafię za wszelką cenę wymyślić, jak w ogóle miałabym zacząć zajmować się takim procesem, a żaden z moich starych profesorów nie wydaje się być w stanie pomóc. Czy mogę uzyskać wstęp na temat tego, jak się zająć opublikowaniem czegoś w umiarkowanie renomowanym czasopiśmie?


title: Czy istnieje termin na ponowne użycie kodu przez przepisanie go?

text: Jakiś czas temu zbudowałem prototyp („ten do wyrzucenia”), a teraz przebudowuję go jako alfa. Mój Boże, było warto. Ponownie wykorzystałem część kodu prototypu, kopiując i wklejając, a następnie modyfikując go, ale wpadłem w nawyk patrzenia na prototyp w celu uzyskania wskazówek, ale pisząc nowy kod od zera. Nie zajmuje mi to zbyt długo, ponieważ jestem dość szybką maszynistką. W tej chwili przebudowuję złożoną funkcję i faktycznie czytam ją wiersz po wierszu i wpisuję odpowiedni kod do mojej wersji alfa. Uważam, że jest to lepsze niż kopiuj-wklej-refaktor, ponieważ ponownie zapoznaję się z logiką i nie przegapię części kodu, kiedy go czytam. Czy istnieje nazwa tego rodzaju ponownego wykorzystania? Jakiś autorytatywny komentarz na temat jego zalet/wad?


title: Dlaczego ludzie wahają się przed użyciem Pythona 3?

text: Python 3 został wydany w grudniu 2008 roku. Od tego czasu minęło sporo czasu, ale nadal wielu programistów waha się przed użyciem Pythona 3. Nawet popularne frameworki, takie jak Django, nie są jeszcze kompatybilne z Pythonem 3, ale nadal polegają na Pythonie 2. Jasne, Python 3 ma pewne niezgodności z Pythonem 2, a niektórzy ludzie muszą polegać na kompatybilności wstecznej. Ale czy Python 3 nie istnieje wystarczająco długo, aby większość projektów mogła przełączyć się lub zacząć od Pythona 3? Posiadanie dwóch konkurencyjnych wersji ma tak wiele wad; należy zachować dwie gałęzie, zamieszanie dla uczniów i tak dalej. Dlaczego więc społeczność Pythona tak bardzo waha się przed przejściem na Pythona 3?


title: Czy przeglądy kodu są niezbędne dla młodszych programistów?

text: Pracowałem w dwóch firmach, z których każda miała inną metodologię, jeśli chodzi o przeglądy kodu: W pierwszej firmie przegląd kodu był przeprowadzany przez liderów zespołu i był wymagany po zakończeniu każdego modułu. Jednak w drugiej firmie liderzy zespołów nie musieli przeprowadzać żadnych przeglądów kodu, a jedynie sprawdzali funkcjonalność i problemy projektowe. Więc jestem zdezorientowany. Czy proces przeglądu kodu jest naprawdę potrzebny? Jeśli tak, dlaczego? A jeśli nie, to dlaczego nie?


title: Subskrypcja Apple dla klienta

text: Jak radzisz sobie z subskrypcją dla programistów iOS podczas tworzenia aplikacji na iOS (freelance) dla klienta? Z jednej strony nie mam problemu ze złożeniem aplikacji za pomocą własnego abonamentu. Z drugiej strony subskrypcja jest roczna, co oznacza, że klient byłby zależny od tego, że faktycznie odnawiam moją subskrypcję co roku.


title: Jaki jest związek między frameworkiem, takim jak RoR, a bazą danych?

text: Jestem front-end developerem... Nigdy nie robiłem ŻADNEGO backendu, chociaż raz uczestniczyłem w kursie z baz danych. (Mam stopień naukowy w zakresie informatyki; jestem kompetentnym programistą, po prostu nie robiłem wcześniej żadnego backendu w sieci.) Więc próbuję dowiedzieć się, jak framework ma się do bazy danych. Przypuszczalnie są one konfigurowane osobno, a framework odbiera żądania ze strony internetowej i wysyła je do bazy danych, a następnie otrzymuje odpowiedź i odpowiednio ją obsługuje, aby poprawnie dostarczyć treść? To w zasadzie złożony pośrednik dla całej logiki aplikacji internetowej? Czy jestem daleko? Potrzebujesz dobrego wyjaśnienia tego.


title: Parsowanie tokenów tekstowych w plikach skryptów

text: Mój zespół chce odejść od kodu skompilowanego do kodu dynamicznego. Mamy wielu różnych klientów, a każdy z nich ma inne zasady biznesowe. Zamiast posiadania jednej skompilowanej bazy kodu, rozważamy posiadanie różnych szablonowych plików skryptów dla każdego klienta. Jednak mamy dużo skompilowanego kodu, więc na razie chcemy zachować większość naszego obecnego kodu i otoczyć pliki skryptów, takie jak `ruby my.rb` lub `node my.js`. Dodatkowo musimy wprowadzić dane do skryptów. Myślimy więc, że w skrypcie będziemy mieć deklaracje zmiennych, a te zmienne zostaną ustawione na pewną sekwencję znaków, którą będziemy traktować jako token. Następnie za pomocą innej aplikacji przetworzymy dokument w poszukiwaniu tokenów, zastępując je rzeczywistymi danymi. Mam pewne obawy i nie jestem pewien, co o tym wszystkim myśleć, ale zastanawiam się, czy ktoś z większym doświadczeniem może rzucić trochę światła na jakość tego rozwiązania i jakie mogą być inne alternatywy. EDYCJA: Mam nadzieję, że to pomoże wyjaśnić mój scenariusz. Jedną z motywacji jest to, że nasi klienci nie zawsze są dostępni. Ponadto mamy usługi działające na kliencie, które musiałyby zostać zatrzymane, aby zainstalować nowe wersje .dll lub .jars. Ponadto nasi klienci ulegają fragmentacji na wersjach oprogramowania pomimo prób utrzymania ich razem. Chodzi o to, że pliki skryptów będą wysyłane na żądanie wraz z innymi plikami i danymi, dla których dany skrypt jest prawidłowy, a skompilowane oprogramowanie będzie się zmieniać rzadziej.


title: Jaka jest różnica między używaniem RDFS/OWL a XML?

text: Zastanawiałem się, jakie zalety mają języki ontologiczne RDFS/OWL nad używaniem systemu tagowania/znaczników (takiego jak http://www.schema.org/) do zarządzania i tworzenia metadanych?


title: Usługa WCF — najlepszy sposób na akceptowanie żądań od klienta i działanie w tle?

text: Dla projektu w pracy miałem za zadanie stworzyć usługę WCF, która będzie odbierać wiadomości e-mail od klienta i umieszczać je w kolejce w bazie danych, a jednocześnie usługa będzie sprawdzać bazę danych co około 30 minut, aby sprawdzić, czy są jakieś nowe wiadomości e-mail są umieszczane w kolejce i wysyłają je automatycznie z odpowiednimi danymi uwierzytelniającymi. Aby to osiągnąć, mój szef kazał mi zrobić to za pomocą wątków: podczas gdy wątek główny odpowiada za przyjmowanie żądań od klientów, wątek w tle będzie odpowiadał za sprawdzanie bazy danych przez cały czas działania usługi i wysyłanie e-maile w kolejce. Jednak po zapytaniu na StackOverflow powiedziano mi, że dla tego rodzaju scenariusza _dwa_ usługi są lepszą opcją, usługa WCF, która przyjmuje żądania i inna usługa Windows, która działa w tle. Więc moje pytanie brzmi, jaka jest najlepsza opcja do realizacji tego rodzaju scenariusza? I czy robienie tego za pomocą tylko wątków jest możliwe, ale nierozważne? Chciałbym usłyszeć więcej opinii, zanim zapytam mojego szefa, jak najlepiej to osiągnąć.


title: Pomocnicza złożoność przestrzenna mapy vs mapy!

text: Ciekawi mnie różnica w złożoności przestrzeni między `mapą` a `mapą!` w rubinach. Jeśli mam metody: def mult_by_two(arr) arr.map {|i| i * 2 } end def mult_by_two!(arr) arr.map! {|i| i * 2 } end Chociaż w pierwszej metodzie nie ma jawnego przypisania, pośrednio zbiera gdzieś wynik `map` i nie działa w miejscu jak druga metoda. Czy słuszne byłoby stwierdzenie, że pierwsza ma złożoność przestrzeni pomocniczej O(n), a druga to O(1)? Jak mam je reprezentować, patrząc na złożoność przestrzeni pomocniczej metody?


title: Czy dobrzy czytelnicy kodu piszą zły kod?

text: Obserwowałem programistów, którzy są świetni w czytaniu obcego, niechlujnego i nieudokumentowanego kodu. Jednocześnie mają tendencję do pisania niechlujnego kodu bez dokumentowania go. Czy to powszechne, czy tylko zbieg okoliczności? Moja teoria jest taka, że ponieważ mogą zrozumieć prawie wszystko, nie widzą potrzeby tworzenia wysokiej jakości kodu. Chociaż nie jestem zbyt dobry w interpretacji obcego kodu, to kiedy piszę nowy, staram się pokazać intencję w kodzie i używać wielu komentarzy, aby sam mógł to później zrozumieć. Czy to ma sens?