title: Członkostwo ACM a bezpłatne artykuły online ACM (Stowarzyszenie Maszyn Komputerowych)

text: Jestem programistą. Rozważam dołączenie do ACM. Uważam jednak, że są bezpłatne artykuły na temat Biblioteki Ditial ACM, m.in. http://portal.acm.org/citation.cfm?doid=1953122.1953141 Oprócz tego dostępne są bezpłatne kanały RSS, które mogę subskrybować, m.in. http://cacm.acm.org/blogs/blog-cacm/109710-new-sql-an-alternative-to-nosql-and-old-sql-for-new-oltp-apps/fulltext Typ Memberhsip, który rozważam dołączenie to ACM Professional Membership PLUS ACM Digital Library 198 USD https://campus.acm.org/public/qj/ProfQJ/qjprof_control.cfm?form_type=Professional&promo=QJPUB **Jakie rzeczy są dostępne TYLKO dla płatnych członków ACM**? , poniżej lista, którą znam **1)** darmowe safari, biblioteka e-booków 24x7 Proszę podzielić się swoją opinią? Czy powinienem dołączyć do ACM, czy skorzystać z jego bezpłatnego dokumentu online? Moje zainteresowania to zaawansowane tematy dotyczące aplikacji webowych, aplikacji bazodanowych.


title: Oprogramowanie/narzędzie używane w niektórych prezentacjach (TechEd, PluralSight itp.)

text: Czy ktoś wie, jaka aplikacja jest używana w niektórych prezentacjach w TechEd, PluralSight itp.? Wygląda to tak: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/qGtHe.jpg), ale pozwala też rysować strzałki, aby podkreślić coś, prostokąty itp.?


title: Sprawdzanie, w której wersji pliku linia została dodana/zmieniona

text: Czy podczas korzystania z zarządzania kodem źródłowym jest ogólnie możliwe, aby dowiedzieć się, w jakiej wersji pliku została dodana konkretna linia? Jeśli tak, jakie systemy SCM to obsługują?


title: Lepszy sposób na czytanie XML

text: Przechowujemy pliki konfiguracyjne jako XML. Mając to na uwadze, czy podczas czytania pliku XML lepiej jest używać LINQ do wysyłania zapytań do pliku XML, czy lepiej używać klas `XMLDocument` i/lub `XMLNode`? Wydaje mi się, że w tym przypadku LINQ nie jest konieczny. Ale potem próbowałem wymyślić jakąkolwiek wartość jednej nad drugą, jeśli struktura XML miałaby się zmienić. Więc moje pytanie brzmi, czy jedna metoda czytania XML jest lepsza czy bardziej akceptowana w stosunku do drugiej?


title: Jakie są argumenty przeciwko używaniu artykułów w nazwie metody?

text: Czasami chcę używać artykułów w nazwach metod. Jak jakaś metoda serwisowa 'getStudentsOfATeacher()'. Jakie są argumenty przeciwko temu?


title: Jak zagwarantować unikalne identyfikatory, nawet w przypadku awarii systemu i przywrócenia z kopii zapasowej?

text: Podczas produkcji urządzenia każdy z nich musi otrzymać unikalny identyfikator. Jak na razie dobrze, można mieć plik zawierający ostatnio używany identyfikator na współdzielonym dysku lub usługę sieciową zarządzającą i przypisującą identyfikatory, aby wgrywanie identyfikatora do urządzenia nie ograniczało się do jednej stacji roboczej. Jednak w przypadku całkowitej awarii systemu i przywrócenia z kopii zapasowej można mieć kilka urządzeń o tym samym identyfikatorze, jeśli niektóre urządzenia zostały wyprodukowane po wykonaniu kopii zapasowej. Można by na każdej stacji roboczej zapisać największy używany identyfikator i sprawdzić, czy nie jest większy niż ten, który dostał z sieci, ale może się zdarzyć, że stacja z ostatnim wyprodukowanym urządzeniem nie zostanie włączona po awarii. Można wymagać od pracowników, aby po ich zmianie zapisali ostatnio używany identyfikator, ale to też nie wydaje się być niezawodne. Czy istnieje najlepsza praktyka oprócz posiadania wielu usług zarządzających identyfikatorami, z których co najmniej jeden znajduje się poza siedzibą? Identyfikatory są wystarczająco duże (32 bity) w porównaniu z liczbą urządzeń, które mają zostać wyprodukowane, aby umożliwić małe odstępy, ale nie są wystarczająco duże, aby przejść w prawdziwy sposób RNG. W ten sposób można zwiększyć największy identyfikator o liczbę znacznie większą niż ilość produkowana dziennie, ale jak utrzymać tę „praktykę firmową” wymuszaną prawdopodobnie przez dziesięciolecia?


title: Projektowanie oparte na domenie i architektura usług WCF

text: Próbuję wymyślić, jak zaprojektować swój projekt w paradygmacie DDD (zupełny początkujący w DDD) i natknąłem się na problem dotyczący implementacji usług internetowych... Oto kilka opcji, które widzę: **Gruby klient, Gruby serwer (opcja 1):** * Serwer: * Warstwa repozytoriów: komunikuje się z bazą danych i może zwracać obiekty domeny. * Warstwa domeny: zawiera obiekty domeny z logiką biznesową i walidacjami. * Warstwa usług: działa jak fasada dla warstwy domeny. * Warstwa WCF: udostępnia warstwę usługi metodom internetowym. Odwzorowuje obiekty domeny na odpowiednie obiekty DTO. * Klient: * Warstwa infrastruktury: komunikuje się z serwerem za pośrednictwem usług WCF. Odwzorowuje obiekty DTO z powrotem na obiekty domeny. * Warstwa domeny: zawiera obiekty domeny z logiką biznesową i walidacjami. * Warstwa usług: działa jak fasada dla warstwy domeny. * Warstwa interfejsu użytkownika (WinForms): używa warstwy usług do komunikacji z obiektami domeny. Dobrze: ponieważ warstwa domeny znajduje się zarówno na kliencie, jak i na serwerze, walidacje odbywają się na obu (dobre dla klientów - zmniejsza liczbę wywołań do serwera, dobre dla serwera - ponieważ 'nigdy nie ufaj danym użytkownika'). Źle: walidacja odbywa się dwa razy, potrzeba dużo mapowania (na przykład proste zapytanie do bazy danych: domena (zwracana przez repozytorium) -> DTO (wymagane dla WCF) -> domena (wymagane przez warstwę domeny na kliencie) -> DTO ( dla WinForms) Każda zmiana domeny powinna być wdrażana jednocześnie na serwerze i kliencie Skomplikowana? **Gruby klient, cienki serwer (opcja 2):** * Serwer: * Repozytorium: komunikuje się z bazą danych i zwraca obiekty DTO * Warstwa WCF: udostępnia wywołania bazy danych metodom webowym * Klient: Dokładnie tak samo jak w opcji 1. Dobrze: na kliencie mogę traktować usługi WCF jako zwykłe repozytorium, które zwraca obiekty DTO.Prostsze jak w opcji nr 1. Źle: czy to w porządku, że repozytorium działa na DTO-s zamiast na obiektach domeny?Ponadto - serwer nie wykonuje żadnej walidacji, więc musi ufać klientom co do danych. **Cienki klient, gruby serwer (opcja 3):* * * Serwer: dokładnie tak samo jak w opcji 1. * Klient: * Warstwa infrastruktury: komunikuje się z serwerem za pośrednictwem usług WCF * Warstwa interfejsu użytkownika (WinForms): używa prezenterów do komunikacji z serwerem za pośrednictwem wywołań WCF w warstwie infrastruktury. Dobrze: cała logika domeny znajduje się na serwerze. Źle: klient nie zawiera żadnej walidacji, więc może wykonywać wiele niepotrzebnych wywołań do serwera. * * * Skłaniam się ku mojej pierwszej opcji, ale wygląda na to, że zbytnio komplikuję sprawy... Jakieś rady lub inne opcje?


Dlaczego Python używa tablicy mieszającej do implementacji dict, ale nie Red-Black Tree? Jaki jest klucz? Wydajność?


title: Pytanie mojego pracodawcy, czy mogę otworzyć źródło projektu, nad którym pracuję dla firmy

text: Jestem praktykantem pracującym w firmie na lato. Zostałem ciepło przyjęty i udaje mi się zaimponować mojemu menedżerowi (chyba jestem bardziej doświadczony niż inni ludzie, z którymi rozmawiał). Ostatnio rozwijałem aplikację typu kiosk, która będzie generować proste menu GUI z tekstowego pliku konfiguracyjnego, który mógłby napisać 4-latek. Uwielbiam ten projekt i stał się moim dzieckiem. Jednak w świecie korporacji wszystko, co opracujesz dla swojego pracodawcy, staje się ich własnością (tak przynajmniej słyszałem). Bardzo chciałbym móc dalej pracować nad projektem po wakacjach, a także chciałbym go otworzyć. Jak mógłbym poprosić o to? Kod nie zawiera żadnych tajemnic firmowych, a większość ludzi tutaj opowiada się za oprogramowaniem open source.


title: Czy powinienem zgłaszać wyjątki strażnika, które i tak zostaną zgłoszone przez metody wewnętrzne?

text: Mam dość prosty kod (C#): /// <summary> /// Obcina ciąg do maksymalnej długości. /// </summary> /// <param name="value"> Ciąg do obcięcia. </param> /// <param name="maxLength"> Maksymalna długość ciągu. </param> /// <returns> /// Oryginalny ciąg, jeśli jego długość jest mniejsza lub równa maksymalnej długości, w przeciwnym razie /// obcięty ciąg o długości maxLength. /// </returns> public static string Truncate(string value, int maxLength) { if(maxLength <= 0) throw new ArgumentOutOfRangeException("maxLength"); if (string.IsNullOrEmpty(wartość)) zwraca wartość; zwracana wartość.Length <= maxLength ? wartość : wartość.Substring(0, maxLength); } Oczywiste jest, że jeśli `maxLength` jest mniejsze niż 0, nie mogę użyć go jako długości łańcucha, dlatego obecnie używam instrukcji guard, aby zapobiec nieprawidłowym wartościom `maxLength`. Moje pytanie brzmi: czy używanie tej instrukcji strażnika jest dobrą czy złą praktyką, kiedy `value.Substring` i tak wyrzuci ten sam wyjątek? Czy to tylko zmarnowany kod?


title: Czy istnieje kanoniczna książka na temat ogólnych abstrakcji i modelowania?

text: Próbowałem zrozumieć podstawy abstrakcji ogólnych i modelowania: jest sporo książek, kiedy szukasz abstrakcji, ale większość z nich wydaje się dotyczyć nauki programowania obiektowego w danym języku. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat ogólnych abstrakcji i modelowania? Co w tej książce czyni ją wyjątkową?


title: Baza danych działa wolno, nawet wszystkie tabele mają normalizację

text: Jeden z ankieterów zadał mi to pytanie: > Tabele są tworzone z odpowiednimi regułami normalizacji, jednak baza danych > działa wolno. [Tj.: Instrukcje select, insert zabierają > czas na wykonanie tej operacji.] Jakimi obszarami musimy szukać, aby poprawić wydajność bazy danych. Zrozumiałem, że to będzie niejasne pytanie. Proszę podać kilka sugestii. A także na jakie obszary musimy zwrócić uwagę w Query Execution plan?


title: doświadczenie: kodowanie na netbookach

text: Cześć, chcę kupić netbooka do robienia pewnych rzeczy w pociągu. Czy ktoś może zgłosić, jak to jest kodować proste rzeczy na netbooku? 10/12". Chciałem kupić bardzo tani. jak 1 GB RAM 1,6 GHz blabla. i uruchomić na nim linuxa z apache. będę kodować za pomocą JS / PHP. i jako IDE będę używał notepad ++. więc nic duże jak eclispe lub coś innego.może później eclipse dla javy, ale to nie ma znaczenia.więc najpierw, czy ta konfiguracja działa dobrze na takim netbooku i czy jest w porządku do kodowania?Nie stylizuję żadnych stron głównych na netbooka po prostu chcę kodować.było by miło, gdyby ktoś mógł się w tym podzielić swoim doświadczeniem.dzięki :)


title: Różnica między wyzwalaczem, obsługą i wywołaniem zwrotnym

text: Obecnie w niektórych dokumentacjach API pojawiają się terminy „callback”, „trigger” i „handler”. Jest po prostu synonimem, czy każdy termin odpowiada konkretnemu pojęciu? Kiedyś myślałem, że te terminy są po prostu synonimami, ale muszę się mylić ... Dzięki !


title: Czy powinienem szyfrować pliki zapisane przez mój program?

text: Próbuję zdecydować, w jakim formacie mam zapisywać dane i mam nadzieję, że to pytanie pomoże mi podjąć decyzję. Program, który piszę używa 'baz danych', w których `słowo=znaczenie` (nie słownik, to był tylko przykład). Naprawdę nie chcę, aby ludzie mogli łatwo ręcznie edytować te „bazy danych” bez mojego programu, ale jednocześnie szukam interoperacyjności między językami programowania (mianowicie C#, PHP, Java i Objective C) w tej chwili , głównymi rywalami są SQLite, XML i SQL Server CE (chociaż PHP nie obsługuje Server CE, ale to nie musi być zbyt duży problem). Naprawdę, moje pytanie brzmi, czy powinienem używać szyfrowania, ponieważ przeczytałem, że często jest ono równie łatwe do odszyfrowania? A jeśli obsługujesz szyfrowanie, jak radzisz sobie z kluczem szyfrowania - czy po prostu generuję długi, skomplikowany ciąg? A może wystarczy binarny? Nic w bazie danych nie jest zbyt krytyczne, jednak chciałbym mieć klucz `isEditable`, aby mój program wiedział, czy zezwolić na edycję, czy nie. Chciałbym też użyć własnego rozszerzenia pliku.


title: Jaki jest typowy pogląd Pythona na ponowne używanie modułów Pythona poza ich początkowym zamiarem?

text: **Krótkie pytanie** Czy ponowne użycie / zmiana przeznaczenia modułów Pythona dla projektów wykraczających poza ich intencje jest sprzeczne z poglądem Pythona? **Tło** Przez ostatnie kilka miesięcy pracowałem nad projektem, który wykorzystuje moduł testów jednostkowych Pythona do przeprowadzania ręcznych testów systemu. Proszę zapoznać się z pytaniami 1 2 i 3, aby uzyskać więcej szczegółów na temat mojego projektu i niektórych przeszkód, które musiałem pokonać. Chciałbym ogólnie wiedzieć, czy dopuszczalne jest ponowne wykorzystanie modułów do innych celów? Większość komentarzy, które otrzymałem, była w stylu „to nie jest test jednostkowy” lub „powinieneś napisać własnego testrunnera”. Odpieram to, jeśli moduł robi 90% tego, co potrzebujesz, aby zrobić z małymi modyfikacjami i zawiera dodatkowe (świadomie niepotrzebne) funkcje, po co, u licha, miałbyś napisać własny moduł?


title: Jakie magazyny programistyczne płacą za artykuły pisarzy gościnnych?

text: Czy jakieś magazyny programistyczne przyjmują datki i płacą za nie autorom? Jeśli tak, jakie to czasopisma lub jak mogę je znaleźć?


title: Czy muszę pisać dużo standardowego kodu, jeśli nadal pracuję w Javie?

text: Pracuję dla firmy piszącej aplikacje ERP. Mój problem polega na tym, że muszę napisać tony kodu standardowego. Wpadłem na pomysł zautomatyzowania/zapobiegania harówce, ale tylko niektóre z nich zostały zaakceptowane. Główny programista powiedział mi, że moje pomysły są bardzo odległe i że powinienem pisać kod, który każdy może zrozumieć. Dyskutowałem na ten temat ostatnio i wydaje mi się, że tego rodzaju rampa kodowa jest w filozofii java. Muszę pisać dużo kodu, aby osiągnąć proste rzeczy nie dlatego, że jest to konieczne, ale dlatego, że tak myśli większość ludzi w firmie. Czy ma to uniwersalne zastosowanie do większości firm korzystających z javy, czy jest to tylko pogląd mojej firmy? Czy muszę przyzwyczaić się do harówki, jeśli nadal pracuję dla firm opartych na Javie?


title: Jak uniknąć zapętlonych błędów? Błędy, które nie są wykrywane przez systemy

text: Miałem tę szaloną inicjalizację -- `documentList = new ArrayList<Map<String,Integer>>();`, którą zamierzałem przechowywać za każdym razem nową mapę w pętli, ale niestety włożyłem się w pętlę. I znasz spustoszenie. Jak wykrywasz takie błędy? Być może szukam sugestii dotyczących „zalecanych technik debugowania”, ale szukam też bardziej fachowych porad


title: Dlaczego nie ma kultury płacenia za frameworki?

text: Jednym ze skutków ubocznych niedawnego trendu „Lean” startupów i ery sklepów z aplikacjami jest to, że konsumenci są bardziej przyzwyczajeni do płacenia niskich cen za małe gry/produkty. Np.: * Online SAAS, który kosztuje ~5 USD / miesiąc (styl produktu Basecamp) * Gry, które są krótkie, zabawne i tanie (0,99 USD ze sklepu z aplikacjami Ten rynek został zdefiniowany przez „robienie jednej rzeczy dobrze i pobieranie opłat od ludzi za to." DHH of Rails / 37 Signals sława twierdzi, że jeśli Twoja witryna nie będzie zarabiać pieniędzy, nie zawracaj sobie głowy robieniem tego. Dlaczego ta sama zasada nie dotyczy frameworków? Istnieje wiele projektów dotyczących frameworków programowych istnieje wiele dojrzałych i bogatych w funkcje, które oferują programistom znaczną wartość, ale nie ma rynku ani kultury, aby za nie płacić.Wygląda na to, że projekty, które pobierają pieniądze, to często takie rzeczy, jak zestawy narzędzi komponentów interfejsu użytkownika , i często są marginalizowane na rzecz darmowych alternatyw.Dlaczego tak jest?Z pewnością programiści/firmy widzą wartość we wspieraniu projektów takich jak Ruby, Rails, Hibernate, Spring, Ant, Groovy, Gradle (lista jest długa). Nie sugeruję, że te frameworki powinny zacząć pobierać opłaty dla każdego, kto chce z nich korzystać, ale musi istnieć sensowny model biznesowy, który pozwoli programistom zarabiać pieniądze od czasu zainwestowania w rozwój frameworka. Jakieś myśli, dlaczego ten model się nie pojawił / nie odniósł sukcesu? **Edytuj** Żeby było jasne: nie jest to post o umniejszaniu znaczenia bezpłatnego oprogramowania o otwartym kodzie źródłowym. To jest post o pytaniu, dlaczego kultura płacenia za frameworki nie istnieje.


title: Jakich wzorców projektowych używasz w programowaniu na Androida?

text: Od kilku miesięcy rozwijam się na Androidzie i opierając się na jednym wewnętrznym programie, stwierdziłem, że brakuje mu skalowalności. Mam przeczucie, że gdybym zastosował kilka wzorców projektowych OO, otrzymałbym ogólnie lepszy program pod względem szybkości, skalowalności i czytelności. Czy któryś z was, SOdians, ma jakieś sposoby zastosowania wielu wzorców projektowych, które wydają się bardzo dobrze pasować do sposobu działania Androida?


title: Jak odnieść się do wielu kodowań znaków za pomocą ASCII OR UTFx?

text: Pracuję ze strukturą binarną, której celem jest indeksowanie znaczenia określonych bitów dla dowolnego kodowania znaków, abyśmy mogli wyzwalać zdarzenia podczas wykonywania określonych kontroli profilu. Każdy schemat kodowania znaków ma skojarzony rekord systemowy. Wiodąca wartość tego rekordu będzie wartością binarną „unsigned long long” w języku C++ i oznacza długość zakodowanych znaków w bitach. Po długości znajdują się trzy wartości, z których każda jest polem bitowym o tej długości. * offset_mask - określa występowanie znaków niedrukowalnych w zakresie min,max print_mask * range_mask - określa występowanie najpopularniejszych 50% znaków drukowalnych * print_mask - określa wartość występowania znaków drukowalnych Zmieniła się struktura profili od op tego pytania. Najprawdopodobniej postaram się rozłożyć na czynniki lub skompresować te wartości w dłuższej perspektywie, zamiast zaczynać od zakresów po przeczytaniu więcej. Z tych głównych powodów muszę napisać kilka podstawowych funkcji. * Musi pasować do konkretnej architektury zdarzeń, której używamy, * Lepsze zrozumienie kodowania znaków. Zaraz tego potrzebuję. * Integracja z projektowaniem nieliniowym wyklucza wiele bibliotek bez specjalnych zaczepów. Nie jestem pewien, czy istnieje już standardowy mechanizm kodowania krzyżowego do przekazywania takich danych. Dopiero zaczynam zastanawiać się, w jaki sposób Chardet może wykonywać profilowanie zgodnie z sugestią @amon. Unicode BOM byłby wystarczający (dla mojego obecnego projektu), gdyby wszystkie kodowania były Unicode. Oczywiście idealnie chciałoby się obsługiwać wszystkie kodowania, ale nie pytam o implementację - tylko ogólny przypadek. W jaki sposób można skutecznie wypełnić te profile, aby utworzyć zestaw masek bitowych, których możemy użyć do dopasowania ciągów o wspólnych znakach w wielu językach? Jeśli masz jakieś sugestie dotyczące edycji, nie krępuj się, jestem lekki, jeśli chodzi o lokalizację, dlatego staram się dotrzeć do bardziej doświadczonych. Wszelkie zastrzeżenia, w których możesz pomóc, zostaną docenione.


title: Hostowanie długotrwałego pracownika w usługach IIS

text: Czy możliwe jest hostowanie długotrwałego pracownika wewnątrz aplikacji ASP.NET? Proces roboczy (ponieważ jest to usługa systemu Windows) odczytuje z kolejki wysyłanie komunikatów do usługi WCF. Czy byłoby możliwe uruchomienie tego „lekkiego, długotrwałego pracownika” wewnątrz aplikacji ASP.NET? Czytałem o ustawieniu trybu uruchamiania puli na „zawsze uruchomiony”, a następnie użyciu klasy AppStart, która uruchamia proces roboczy. Chciałbym pozbyć się usługi Windows (problemy z wdrożeniami i debugowaniem) i osadzić tę pracę w IIS. Jakieś sugestie?


title: Czy jest jakaś różnica między return n i exit (n) w C?

text: Czy jest jakaś różnica między `return n` (w funkcji `main`) a `exit(n)` w C? Czy jest zdefiniowany przez standardy C lub POSIX, czy też zależy od systemu operacyjnego lub kompilatora?


title: Logowanie Efekt JSON na wydajność

text: Widzę coraz więcej artykułów o logowaniu w JSON. Możesz go również znaleźć na blogu NodeJS. Dlaczego wszyscy tak bardzo to lubią? Widzę tylko, że zaangażowane są kolejne operacje: * Tworzone jest kilka nowych obiektów. * Nadawanie ciągów obiektom, które polegają albo na obliczaniu długości ciągu, albo na wielu alokacjach ciągów. * GCing wszystkie bzdury, które zostały stworzone. Czy jest jakiś test wydajności podczas korzystania z rejestrowania JSON i zwykłego rejestrowania ciągów? Czy ludzie używają JSON (do logowania) w projektach korporacyjnych?


title: Jak oznaczyć testy jednostkowe/integracyjne, gdy nie dotyczą one aktualnej konfiguracji testu - Niejednoznaczne lub Zaliczone?

text: W moim środowisku testowym przeprowadzamy ten sam zestaw testów integracyjnych (a czasem jednostkowych) dla różnych systemów, które mają różne możliwości. Niektórych testów nie można wykonać na niektórych systemach, ponieważ brakuje funkcji umożliwiającej ten scenariusz lub potrzebujemy zupełnie innego zachowania. Obecnie używamy MSTest i mamy testy z następującym wzorcem: [TestMethod] public void TestMethod1() { if(targetSystem.SupportsFeatureX == false) Assert.Inconclusive("Nieobsługiwane przez podstawowy system"); // kod dla aktualnego testu następuje } Czy powinniśmy oznaczyć test jako `Niekonkluzywny` czy po prostu pozwolić mu `Zakończyć` jeśli sprawdzenie funkcji nie jest spełnione? Należy pamiętać, że `targetSystem` jest systemem innej firmy, nad którym nie mamy kontroli, więc po prostu żyjemy z obecnymi funkcjami.


title: Udostępnianie klas lub interfejsów między różnymi projektami

text: Szukałem odpowiedzi w SO lub tutaj, ale bez wyników, dlatego bym Cię pytał. Załóżmy, że mam dwa różne projekty - na przykład część serwerową i część kliencką aplikacji. Rozwijam swoją część, a koleżanka robi drugą. Ale oboje powinniśmy używać kilku popularnych interfejsów, takich jak `User`, `AccountInfo` czy `ChangableAccount`... cokolwiek, aby zapewnić kompatybilność. Na przykład, jeśli klienci wysyłają dane użytkownika do serwera, to serwer powinien działać na tej samej klasie. To samo z interfejsami itp. Ponadto, jeśli nastąpią jakieś zmiany we wspólnym interfejsie, oba projekty powinny dostosować swój kod do nowej sytuacji. Jedyne rozwiązanie, które teraz widzę, to stworzenie jednego dodatkowego projektu, w którym zdefiniowane są wszystkie wspólne rzeczy. My, ja i mój przyjaciel, powinniśmy dodać ten projekt jako zależność do głównego projektu (klienta lub serwera). Współdzielony projekt może być zarządzany przez jakiś system kontroli wersji, dzięki czemu mamy zawsze najbardziej aktualny stan. Jakie inne rozwiązanie byś zaproponował? Jak takie problemy rozwiązywane są w profesjonalnych aplikacjach?


title: Freelancer i GPL?

text: Czy niezależny programista może używać produktów Open Source na licencji GNU Public License i zarabiać pieniądze, biorąc pod uwagę, że nie może powstrzymać swoich klientów przed swobodną dystrybucją swoich produktów?


title: Niezdefiniowane zachowania w C

text: Ostatnio natknąłem się na szereg niezdefiniowanych funkcji w języku C, jedną z nich jest: http://stackoverflow.com/questions/8698048/behaviour-of-non-const-int-pointer-on-a-const-int Czy ktoś mógłby mi powiedzieć, co powinienem odpowiedzieć, gdy takie pytanie zostanie zadane podczas egzaminów online (a opcja **_None of These_** / **_Undefined_** jest niedostępna)? Czy mógłbyś również wskazać mi dokument określający najczęściej spotykane niezdefiniowane zachowania w C ? Dziękuję.


title: Metody testowania jednostkowego z nieokreśloną wydajnością

text: Mam klasę, która ma generować losowe hasło o długości, która jest również losowa, ale ograniczona do określonej długości minimalnej i maksymalnej. Konstruuję testy jednostkowe i natknąłem się na ciekawą małą szkołę z tą klasą. Cała idea testu jednostkowego polega na tym, aby był powtarzalny. Jeśli przeprowadzisz test sto razy, powinien dać te same wyniki sto razy. Jeśli jesteś zależny od jakiegoś zasobu, który może, ale nie musi, być w stanie początkowym, którego się spodziewasz, powinieneś wyśmiewać dany zasób, aby upewnić się, że twój test naprawdę jest zawsze powtarzalny. Ale co w przypadku, gdy SUT ma generować nieokreślony wynik? Jeśli ustawię minimalną i maksymalną długość na tę samą wartość, mogę łatwo sprawdzić, czy wygenerowane hasło ma oczekiwaną długość. Ale jeśli określę zakres dopuszczalnych długości (powiedzmy 15 - 20 znaków), to masz teraz problem polegający na tym, że możesz uruchomić test sto razy i uzyskać 100 przejść, ale przy 101. uruchomieniu możesz odzyskać 9-znakowy ciąg. W przypadku klasy haseł, która w swej istocie jest dość prosta, nie powinno to stanowić dużego problemu. Ale skłoniło mnie to do myślenia o ogólnym przypadku. Jaka strategia jest zwykle akceptowana jako najlepsza w przypadku SUT, które z założenia generują nieokreślone wyniki?


title: Jak skrypt pobiera film z YouTube?

text: Wiedząc, że Youtube używa Adobe Flash, który jest skompilowany po stronie serwera do dostarczania treści wideo, zastanawiam się, jak można znaleźć nazwę pliku wideo i lokalizację na serwerze? Jest to ogólne pytanie dotyczące bezpieczeństwa plików Adobe Flash i swf na serwerze. Jeśli Google nie może chronić plików wideo przed pobieraniem poza witryną za pomocą Flasha, dlaczego jest tak szeroko stosowany?


title: Członkowie instancji klas C# a enum

text: Jaka jest różnica między zmiennymi prywatnymi w typie clsClass a użyciem wyliczenia wyliczenia do utworzenia wystąpienia zmiennej. To pytanie pojawiło się, gdy szukałem kodu klasy C# dla portów szeregowych. przykład: private int SomeClassMember; i prywatne wyliczenie TransmissionType{TEXT,HEX} ? Gdzie w definicji klasy pojawiają się instrukcje enum?


title: Sugestie dotyczące projektów „Zrób to sam” w celu doskonalenia umiejętności programowania lub nauki nowego języka

text: Ponieważ najlepszym sposobem na naukę jest praca nad projektami, jakie jest dobre oprogramowanie do wypróbowania w celu wyostrzenia pewnych umiejętności programowania lub nauki nowego języka?


title: Czy można zostać dobrym programistą poprzez samouczenie się, czy potrzebny jest mentor?

text: Jestem programistą samoukiem. Mam tylko ponad rok doświadczenia w rozwoju. Większość mojej wiedzy zdobywam czytając książki, a po trosze ze studiów inżynierskich. Obecnie nie mam pójścia do faceta lub osoby, aby omówić pomysły/rozwiązania. Jestem ich facetem i nie są zainteresowani pomysłem rozwiązania, chcą tylko, aby zadziałało. Czy ludzie, którzy już tam są, mogą to robić na przykład za pomocą Internetu i książek, czy też zostali wykształceni w tej roli?


title: Pisanie zastrzeżonego i prawdopodobnie zamkniętego oprogramowania, przy jednoczesnym unikaniu naruszeń licencji

text: Rozpoczynam projekt oprogramowania, który chcę mieć możliwość zachowania własności. Jednakże, ponieważ generalnie używam środowiska Linux, chcę wiedzieć: Jak ludzie piszą zastrzeżone oprogramowanie w Linuksie i nie naruszają licencji GPL/LGPL/etc, które wydają się ograniczać użycie bibliotek potrzebnych do zbudowania projektu? Poza tym, czy użycie niezmodyfikowanej biblioteki LGPL w moim kodzie wymaga udostępnienia jej jako open-source (rozumiem, że open-source i zastrzeżone to różne bestie)? I wiem, że zostanę nazwany poganinem za pytanie, ale czy mogę używać niezmodyfikowanych bibliotek open source w moim projekcie, ale nadal zachować kod, który jest moim zamkniętym kodem źródłowym?


title: Co zrobić, jeśli ankieter nie da Ci wystarczająco dużo czasu na odpowiedź?

text: Miałem wywiad z dobrze znaną firmą. Po zakończeniu pierwszej rundy wywiadu byłem pewien, że zostanę zakwalifikowany do drugiej rundy. Ale nie wiedziałem, że moja druga runda będzie katastrofą. Rozpoczęła się druga runda i ankieter poprosił mnie o opowiedzenie mu o moim profilu. Kiedy to zrobił, powiedział mi, że dostanie długopis i papier (niestety miałem tylko długopis) i wrócił dopiero po 15 minutach. Kiedy wrócił, zaczął strzelać do mnie pytaniami, nie dając mi szansy na zastanowienie się nad pytaniem i odpowiedzią. Naprawdę tak, 5 sekund po pierwszym pytaniu zadawał mi kolejne pytanie, niezależnie od tego, czy odpowiadałem na pierwsze pytanie, czy nie. Powiedziałem mu też grzecznie w międzyczasie, żeby dał mi szansę na odpowiedź, ale bez powodzenia. Czułem, że po wywiadzie zrobił sobie 15-minutową przerwę, aby zapamiętać te pytania i emitował je przede mną, zanim zapomniał i zabrakło mu pytań. Co można zrobić w takim przypadku?


title: Czy istnieje dobry sposób na zespołowy rozwój przy użyciu różnych instancji MySQL?

text: To może być pytanie noob, ale kolega i ja pracujemy nad projektem. Oto kilka informacji na temat naszej sytuacji: * Kontrolujemy wersje za pomocą scentralizowanego serwera git w naszym biurze. * Programujemy w PHP, więc testujemy nasz kod offline w lokalnej instancji Apache. * W pracy używamy lokalnych instancji MySQL. Nasz klient jest nieco wymagającą osobą i zmieniał wymagania ponad dwukrotnie. Główny problem polega na tym, że jeśli musimy coś zmienić w bazie danych, musimy zrobić czyste zrzuty na innych serwerach (komputer innego członka zespołu, serwer centralny... i oczywiście serwer klienta), aby inne instancje działały, także. **Moje pytanie brzmi, czy istnieje sposób na synchronizację naszych lokalnych baz danych** (w tej chwili nie obchodzi mnie ta klienta) **z git lub innym narzędziem, aby mój kolega, serwer git i moja baza danych były na bieżąco, kiedy wprowadzamy zmiany?** Jeśli nie jest to możliwe, czy znasz lepszy sposób pracy z bazami danych MySQL przechowywanymi lokalnie? Z góry dziękuję. PS: Używanie tylko jednej centralnej bazy danych nie jest dla nas właściwym rozwiązaniem, ponieważ testujemy różne funkcje i przechowujemy w niej różne elementy.


title: Dlaczego SQL nie jest tak rozpowszechniony w dużych aplikacjach desktopowych?

text: Jako programista pracowałem nad projektami od małych domowych aplikacji po średniej wielkości aplikacje korporacyjne. **W prawie każdym projekcie korzystałem z bazy danych** lub żałowałem, że nie korzystałem z niej od początku. Zastanawiam się teraz nad kilkoma rzeczami na temat baz danych i ich wykorzystania w ogólnych aplikacjach: * Dlaczego sam Windows nie używa żadnej "centralnej" bazy danych SQL? Na przykład: * Dane raportowania błędów są przechowywane w kilku plikach, * Windows Update przechowuje wszystko w płaskich plikach, * Pamięć podręczna ikon jest przechowywana w bardzo dziwnym pojedynczym pliku, do którego nie można uzyskać dostępu przez SQL itp. * Dlaczego tak wiele dużych aplikacji unika korzystania z baz danych? Na przykład, czy Microsoft Outlook nie zyskałby dzięki wykorzystaniu prawdziwej bazy danych, zamiast odkrywać koło na nowo dzięki własnemu formatowi plików .pst i przechowywaniu niektórych danych w rejestrze? Jeśli baza danych dodaje dodatkową warstwę ogólnej złożoności i niewielką utratę wydajności, jest to cena ogromnej korzyści w postaci uproszczenia kodu w większości przypadków, zwłaszcza jeśli chodzi o przechowywanie małych zorganizowanych fragmentów danych zamiast dużych plików binarnych strumienie. Dlaczego więc tak niewiele produktów faktycznie korzysta z baz danych? Prawdopodobnie jedyną znaną mi aplikacją korzystającą z bazy danych Sqlite jest Firefox, a może Microsoft Exchange (ale ta ostatnia nie jest aplikacją desktopową)? Ponadto, czy _zestaw_ aplikacji, takich jak Microsoft Office lub Microsoft Expression, nie skorzystałby na posiadaniu _ujednoliconej bazy danych SQL_, ułatwiając wdrażanie aplikacji, aktualizowanie/uaktualnianie danych, udostępnianie danych między tymi aplikacjami, tworzenie kopii zapasowych itd.?


title: Routing podrzędny w witrynie SPA

text: Mam witrynę SPA, nad którą pracuję, mam wymaganie, abyś mógł mieć podtrasy dla modelu widoku strony. Obecnie używam tego „wzoru” dla witryny MyApp.FooViewModel = MyApp.define({ meta: { query: MyApp.Core.Contracts.Queries.FooQuery, title: „Foo” }, init: function (queryResult) { }, prototyp: { } }); W modelu widoku głównego mam tabelę tras this.navigation(new MyApp.RoutesViewModel({ Home: { model: MyApp.HomeViewModel, route: String.empty }, Foo: { model: MyApp.FooViewModel } })); Obiekt meta definiuje, które zapytanie powinno wypełnić model widoku najwyższego poziomu, gdy zostanie wywołane przez sammyjs, wszystko jest w porządku, ale nie obsługuje routingu podrzędnego Moim planem jest zmiana meta obiektu, aby mógł (opcjonalnie offcourse) wyglądać jak ten meta : { query: MyApp.Core.Contracts.Queries.FooQuery, title: "Foo", route: { barId: MyApp.BarViewModel } } Gdy sammyjs wykryje barId w ciągu zapytania, Barmodel zostanie wykonany i wypełniony przez własną meta obiekt. Czy to dobry projekt? **edit:** Hmm, właśnie zauważyłem, że powyższy projekt nie zawsze jest wystarczający, model widoku nadrzędnego może potrzebować trochę przetwarzania, gdy wyzwala się subRoute, więc dodałem obiekt do definicji przesłanej do MyApp.define jak meta: { query: MyApp.Core.Contracts.Queries.FooQuery, title: "Foo", route: { barId: MyApp.BarViewModel } }, onRoute: { barId: function(barViewModel) { //działaj na pasku route } }


title: Przepływ pracy zespołu na github - fork czy nie?

text: Jesteśmy małym zespołem programistów korzystających obecnie z subversion, ale wkrótce przechodzimy na github. Patrzę na różne typy przepływów pracy na githubie i nie jesteśmy pewni, czy cała koncepcja rozwidlenia w githubie dla każdego programisty jest dla nas tak dobrym pomysłem. Jeśli użyjemy forków, rozumiem, że każdy programista będzie miał swoje prywatne, zdalne i lokalne repozytoria. Obawiam się, że to sprawi, że forsowanie zestawów zmian będzie trudne i zbyt skomplikowane. Moim największym zmartwieniem jest również to, że zmusi to każdego programistę do posiadania 2 zdalnych: pochodzenia (który jest zdalnym rozwidleniem) i upstream (który służy do „synchronizowania” zmian z głównego repozytorium). Nie jestem pewien, czy to taki łatwy sposób na robienie rzeczy. Jest to podobne do opisanego tutaj przepływu pracy: https://github.com/usm-data- analysis/usm-data-analysis.github.com/wiki/Git-workflow Jeśli nie używamy forków, prawdopodobnie możemy uzyskać dobrze, używając centralnego repozytorium, tworząc gałąź dla każdego zadania, nad którym pracujemy, i łącząc je z gałęzią programistyczną w tym samym repozytorium. Oznacza to, że nie będziemy w stanie ograniczyć łączenia oddziałów i może być trochę bałaganu, gdy mamy wiele oddziałów w centralnym repozytorium. Jakieś sugestie od zespołów, które wypróbowały oba przepływy pracy?


title: Kupuj a buduj — usługa FTP

text: Potrzebujemy FTP plików generowanych przez nasz system, więc staramy się zdecydować, czy powinniśmy poświęcić czas na zbudowanie czegoś, co spełnia nasze kryteria (stosunkowo proste, .NET ma wbudowaną funkcjonalność FTP m.in. bardziej zaawansowaną libs od stron trzecich). Albo jeśli powinniśmy kupić coś z półki. Nasze wymagania są z grubsza następujące: * Musi być w stanie wyzwolić wysyłanie pliku programowo * Musi ponawiać _N_ liczbę razy (konfigurowalne) * Status żądań FTP, który można przeszukiwać * Oddzwanianie po zakończeniu lub niepowodzeniu żądania FTP Nie muszę być sprzedawany o względnej prostocie zbudowania czegoś takiego dla siebie. Jednak chcę dołożyć należytej staranności, aby zobaczyć, jakie produkty są dostępne ... ponieważ jeśli istnieje coś, co spełnia powyższe wymagania, nie miałbym nic przeciwko zapłaceniu za to :-) Wszelkie przemyślenia lub linki byłyby bardzo mile widziane. Dziękuję!


title: Czy powinienem utworzyć nową bazę danych dla publicznej witryny internetowej, gdy dane już istnieją?

text: Szukam porady, jak stworzyć schemat danych dla publicznej witryny sieci Web. Obecnie posiadamy stronę intranetową, na której nasi agenci tworzą dane potrzebne do rezerwacji. Dane obejmują tabele, takie jak zakłady, produkty, ceny za okresy i typową tabelę Użytkownicy. Ten intranet jest już w produkcji. Otrzymałem zadanie stworzenia publicznej strony internetowej, na której anonimowi Joe i Jane będą mogli zarezerwować rezerwację bez dzwonienia do jednego z naszych agentów. Witryna będzie oferować rejestrację i wyświetlać dane dostępne z Intranetu, aczkolwiek tylko do odczytu. Sama witryna publiczna będzie miała własne dane. Trochę niechętnie łączę dane ze strony publicznej do tej samej bazy danych co nasz intranet, ale większość informacji, które będą wyświetlane na stronie publicznej, będzie pochodzić z wcześniej wprowadzonych danych z intranetu. Czy istnieją jakieś najlepsze praktyki dotyczące rozdzielania i udostępniania informacji między witryną publiczną i prywatną?


title: Jak powinniśmy rozwijać projekt z różnymi członkami o różnym poziomie umiejętności?

text: Rozwijamy projekt z trzema członkami. Jestem stałym członkiem, zatrudniliśmy wykonawcę z firmy jako kierownika zespołu i jednego bardzo młodszego kodera. Teraz wykonawca zajmuje się kodowaniem po stronie serwera z klasami i modułami, podczas gdy młodszy członek i ja robimy klienta frontowego. Problem, przed którym stoimy, polega na tym, że młodszemu członkowi i mnie bardzo trudno jest zrozumieć kod wykonawcy. Nasze umiejętności nie są na jego poziomie, a on używa różnego rodzaju zaawansowanych funkcji i pisze bardzo zwięzły kod z bardzo małą ilością dokumentacji. Kiedy prosimy o pomoc, wpada w złość i mówi, że tego nie wiemy. Poruszyłem tę kwestię, ale pojawia się ona od czasu do czasu. Rozumiem tylko 50% jego kodu, a junior rozumie tylko 10%. Co należy zrobić w jego scenariuszu? Nie możemy go zmusić, ponieważ go potrzebujemy, ale jest nam trudno kontynuować. Co powinniśmy zrobić? A także za każdym razem, gdy wykonujemy naszą część kodowania, zawsze może wybrać błędy i powiedzieć, jak to zrobić lepiej. To dobrze, ale oznacza też, że musimy z nim sprawdzać każdą linijkę kodu. Byłem zdezorientowany, że jeśli mamy genialnego kodera w pięcioosobowej drużynie, to ten geniusz zawsze napisze lepszy kod. Czy to oznacza, że 1. musi sprawdzić kod dla każdego młodszego członka i go zmienić 2. zostawia pewne luki i ignoruje je, bo starszy członek zawsze będzie miał lepszy sposób na wykonanie pracy?


title: Ogólnie rzecz biorąc, czy etyczne jest wykonanie kopii kodu źródłowego pracy i zabranie go do domu jako odniesienie?

text: Czy etyczne jest tworzenie kopii kodu źródłowego mojej pracy wyłącznie w celu własnego odniesienia? Przez odniesienie mam na myśli odniesienie, w którym mogę odnieść się do tego, jak ja (i moi koledzy z zespołu) zaimplementowałem różne wzorce projektowe, architekturę itp. Nie zawiera żadnej tajemnicy handlowej, produktu, tajnego algorytmu ani niczego w tym rodzaju. Zwróć uwagę, że napisałem wiele części kodu źródłowego, a wartość dodana wynikająca ze studiowania kodu również pośrednio przyniesie korzyści firmie, nad którą pracuję.


title: Grafika komputerowa: zasady i praktyka w C (w Pythonie?)

text: Po wakacjach uczęszczam na kurs grafiki komputerowej. Przeczytałem wiele dobrych rzeczy o książce „Grafika komputerowa: zasady i praktyka w języku C” dla osób, które są chętne do pracy. Moja szkoła nie skupia się na C/C++ aż do przyszłego roku, więc zdecydowałem się uczyć Pythona tego lata, aw następnym roku stać się dobry w Pythonie. Jak ta książka jest zależna od języka? Czy mogę przez to pracować w Pythonie?


title: Patenty na oprogramowanie: czy mogę licencjonować wykorzystanie istniejącego patentu?

text: Wiem, że patent na oprogramowanie jest gorącym tematem i jest bardzo frustrujący. Ale ponieważ mieszkam w USA, myślę, że nie mam innego wyjścia, jak tylko sobie z tym poradzić. Zastanawiam się, czy rzeczywiście istnieją firmy lub strony, na których mogę sprawdzić, jakie patenty mogą dotyczyć mojego pomysłu. Następnie być w stanie licencjonować odpowiednie wykorzystanie pomysłu, nawet jeśli patent jest niejasny i niejednoznaczny. Wtedy, jeśli troll przyjdzie po mnie, mogę argumentować, że jestem chroniony na podstawie patentu#XYX.


title: Jak zarządzać i ulepszać aplikację internetową przy 50 klientach?

text: Przede wszystkim przepraszam za mój angielski. Opracowaliśmy aplikację internetową przy użyciu ASP.NET i SQL Server. Zaczęliśmy go sprzedawać i oczywiście wciąż go ulepszamy i rozwijamy. Pytanie brzmi, jak mamy zaktualizować wersję strony każdego klienta? Mamy może 50 klientów. 50 różnych folderów i 50 różnych baz danych brzmi jak zły pomysł. Czy jest jakaś znana metoda rozwiązania tego rodzaju scenariusza? `Dla wyjaśnienia:` Rozwijamy CRM dla 50 firm. Będą mieli może 10 użytkowników. Stwarza 500 użytkowników oraz ich klientów i produktów.


title: Czy uważasz, że F# i Python mogą rządzić przyszłym rynkiem?

text: Widzę, że Microsoft za bardzo koncentruje się na F#. Jaki to będzie język i czy zastąpi bazę użytkowników C#? W ciągu ostatnich kilku miesięcy zauważyłem, że posty Rubiego na niektórych forach spadają, podczas gdy fora Pythona rosną. Gdyby Microsoft nie wycofał się z IronPythona, czy myślisz, że Python rządził C#?


title: Jak zapewnić wartość?

text: Zanim zostałem konsultantem, zależało mi tylko na zostaniu wysoko wykwalifikowanym programistą. Teraz wierzę, że to, czego potrzebują moi klienci, nie jest świetnym hakerem, koderem, architektem... czy kimkolwiek. Z każdym dniem coraz bardziej przekonuję się, że jest coś o większej wartości. Wszędzie, gdzie pójdę, odkrywam praktyki, w których przewracałem oczami z rozpaczy. Widziałem branżę oprogramowania w różowych okularach i śmiałem się lub płakałem z nich w zależności od mojego nastroju. Byłem tak przekonany, że wszystko można zrobić lepiej. Teraz wierzę, że to, czego desperacko potrzebują moi klienci, to znalezienie równowagi między dobrymi praktykami inżynierskimi a rozpaczliwą realizacją projektów. Chociaż świetny projekt może sprawić, że projekt będzie tani, aby utrzymać go przez wiele lat, zwykle ważniejsze jest szybkie i tanie wykonanie, tylko po to, aby zobaczyć, czy projekt może się udać. Wcześniej nie ma większego znaczenia, czy projekt jest tani w utrzymaniu, po czym może być za późno na poprawę. Potrzebują ludzi, którzy się zaangażują, którzy wprowadzą potajemne ulepszenia w projekcie bez zgody/zgody/wiedzy kierownika… ponieważ nigdy nie mają czasu na niektóre zadania, o których wszyscy wiemy, że są ważne. Nie wszystkie dobre rzeczy można zrobić, niektóre z nich muszą pochodzić z wolnej woli, a niektóre z nich muszą być omówione, aby edukować współpracowników, menedżerów, klientów i nas samych. Teraz moje wielkie pytanie brzmi. Jakie dokładnie umiejętności i praktyki poza świetnym kodowaniem mogą zapewnić rzeczywistą wartość ekonomicznego sukcesu projektów oprogramowania? (a nie sama architektura oprogramowania)


title: Początkujący programista: opcje dla małych interfejsów programowych?

text: Jestem programistą Rails od roku i naprawdę chcę zacząć zanurzać się w Ruby i czyste programowanie bez użycia frameworka. Mam jednak problem z konceptualizacją małych programów, które mogę sam zbudować. Myślę, że to dlatego, że jestem tak przyzwyczajony do posiadania GUI (przeglądarki internetowej) do interakcji z klasami, które piszę, że tak naprawdę nie rozumiem, w jaki sposób mógłbym wchodzić w interakcje z klasami bez klikania, przechodzenia na różne strony itp. W jeśli chodzi o czysty Ruby (bez Railsów), zbudowałem tylko grę w blackjacka, w którą grasz za pomocą konsoli, wpisując T/N dla uderzenia i pozostania. Chciałbym wiedzieć, jakich typów interfejsów używacie do swoich małych programów? Czy wszystkie zostały uruchomione tylko raz z konsoli przy użyciu czegoś takiego jak `ruby myclass.rb`? Mam motywację, ale nie wiem, co bym zrobiła po napisaniu kilku zajęć. Wszystko, co robię, to osobny plik, który wymaga wszystkich moich innych klas, tworząc instancję moich klas w następujący sposób: mojaklasa = MojaKlasa.new mojaklasa.część = KlasaCzęść.new(1,2,3) mojaklasa.do_coś # umieszcza "wartość zmiennej_instancji = #{@instance_variable}” I co dalej? Program się kończy. To nie jest interaktywne. Niewiele to robi. Nie widzę siebie budującego coś fajnego/potężnego w ten sposób. Czy ktoś może mnie oświecić?


title: Jak ważna jest nauka plików makefile?

text: Pracuję w c++ głównie jako hobby (nadal chodzę do szkoły i dlatego nie mam prawdziwej pracy). IDE generują dla mnie plik makefile, więc zastanawiam się, czy warto nauczyć się, jak je tworzyć. Przez „warto się uczyć” mam na myśli, czy powinienem wszystko porzucić i nauczyć się pisać, zanim przejdziemy do nauki c++? Czy ich nauka będzie naprawdę konieczna? Jeśli tak, czy powinienem się o nich dowiedzieć (ogólna składnia i zrozumienie, jak działają itp.), czy naprawdę nauczyć się je pisać?


title: Czy możemy użyć `a <= x <= b`, aby sprawdzić, czy `x` jest pomiędzy `a` i `b`?

text: Jak podać warunki dla kierunków geograficznych na podstawie stopni? dla COMPASS API Reference... Próbowałem tego... ale nie działa, jeśli((0 <= a <= 22,4) || (337,6 <= a <= 360)){ alert("JESTEŚ W KIERUNKU PÓŁNOCNYM" ); } else if((22,5 <= a <= 44,9) || (45 <= a <= 67,4)){ alert("NORTH-NORTHEAST"); } else if((67,5 <= a <= 89,9) || (90 <= a <= 112,4)){ alert("Wschód"); } else if((112,5 <= a <= 134,9) || (135 <= a <= 157.4)){ alert("SouthEast"); } else if((157,5 <=a <= 179,9) || (180 <= a <= 202.4)){ alert("Południe"); } else if((202,5 <= a <= 224,9) || (225 <= a <= 247.4)){ alert("SouthWest"); } else if((247,5 <= a <= 269,9) || (270 <= a <= 292.4)){ alert("Zachód"); } else if((292,5 <= a <= 314,9) || (315 <= a <= 337.4)){ alert("Północny wschód"); } else if(337,5 <= a <= 360){ alert("Północ"); } else{} Czy to się zgadza?


title: Problem z projektowaniem systemu zarządzania zapasami

text: Jakie są konwencje dotyczące identyfikatorów partii towaru w systemach zarządzania zapasami? Na przykład: supermarket detaliczny może zamówić „Przedmiot X” od „Dostawcy A” lub „Dostawcy B”. Po sfinalizowaniu zamówienia na towar od któregokolwiek z dostawców, musi przechowywać zapis paragonu. Ilość zapasów towaru zwiększa się po otrzymaniu zamówienia. Wymagane jest jednak również przechowywanie dokumentacji dostawcy. W związku z tym wymagany jest pewien rodzaj identyfikatora partii. Ten identyfikator partii jednoznacznie identyfikuje otrzymany artykuł i dostawcę, od którego został otrzymany. Nowa partia jest tworzona za każdym razem, gdy towary są dostarczane na stan magazynowy (na przykład po zamówieniu). W związku z tym, dla celów księgowych / audytu, informacje dostępne do identyfikacji przedmiotu po jego sprzedaży składają się z `ITEM_CODE`, `ITEM_NAME`, `BATCH_CODE`. `BATCH_CODE` jest unikalny i powiązany z `DATE_RECEIVED`, `SUPPLIER_CODE`, `QTY_RECEIVED`. Czy jest to kompletna specyfikacja systemu dla powyższego scenariusza, czy pominięto coś istotnego?


title: Rola rozmiaru ekranu monitora dla inżyniera oprogramowania/programisty/programisty

text: > **Możliwe powielenie:** > Rozmiar ekranu monitora i łatwość programowania Czy rozmiar ekranu laptopa/komputera stacjonarnego jest wprost proporcjonalny do produktywności programisty? Jak? Czy to prawdziwy ekran (mniej przewijania, wiele aplikacji obok siebie, czy coś innego). Podobne pytanie


title: Jakie są wzorce i antywzorce logowania aplikacji?

text: Niedawno musiałem zbadać problem dotyczący naszej aplikacji dla dużych przedsiębiorstw. **Byłem przerażony dziennikami**, które musiałem przeszukać, próbując znaleźć problem i pod koniec dnia dzienniki wcale nie pomogły w identyfikacji/izolowaniu błędu. _Uwaga: rozumiem, że nie wszystkie błędy można wykryć za pomocą dzienników. Nie zmienia to faktu, że logi są okropne._ Są pewne oczywiste problemy z naszym logowaniem, które możemy już spróbować naprawić. Nie chcę ich tutaj wymieniać i nie mogę po prostu pokazać naszych plików dziennika, abyś mógł udzielić porady, co zrobić. Zamiast tego, aby ocenić, jak źle nam idzie na froncie logowania, chciałbym wiedzieć: 1. **Jakie są wytyczne** , jeśli w ogóle, **jeśli chodzi o logowanie** dla aplikacji, zwłaszcza duża aplikacja. 2. **Czy są jakieś wzorce**, których powinniśmy przestrzegać **lub antywzorce**, o których powinniśmy wiedzieć? 3. **Czy to ważna rzecz do naprawienia** czy **czy w ogóle można to naprawić** czy wszystkie pliki dziennika są po prostu ogromne i potrzebujesz dodatkowych skryptów do ich analizy? _Uwaga: używamy log4j._


title: Zobacz różnice w zdalnym repozytorium za pomocą narzędzia graficznego

text: Moje repozytorium GIT jest przechowywane na zdalnym serwerze Linux, do którego mam dostęp z mojego komputera z systemem Windows przez Netbeans. Po wprowadzeniu zmian chciałbym je szybko przejrzeć przed zatwierdzeniem. Serwer nie ma komponentów graficznych, więc nie mogę stamtąd uruchomić "gitka". Nie czuję się zbyt komfortowo z różnicą tekstową na serwerze za pomocą polecenia "git diff". Nie jest dla mnie wystarczająco czytelny. msysgit jest zainstalowany na moim komputerze z systemem Windows. Chciałbym uruchomić coś w rodzaju zdalnego polecenia „gitk” z mojego komputera, ale nie mogłem znaleźć sposobu, aby to zrobić. Nie znalazłem w sieci niczego na ten temat. Każdy inny „graficzny” sposób na zrobienie tego byłby wygodny. Masz pomysł, jak to zrobić? Z góry dziękuję **EDYTUJ** Aby wyjaśnić mój przepływ pracy (ponieważ moje pytanie wydaje się niejasne): 1. Pracuję nad swoim kodem za pomocą Netbeans IDE na lokalnej kopii mojego zdalnego repozytorium roboczego. Ta kopia nie ma wersji. Synchronizacja odbywa się przez SFTP. Oznacza to, że podczas tworzenia projektu Netbeans wykonuje SFTP GET całego repozytorium. Następnie, gdy zapisuję moje zmiany (w kopii lokalnej), Netbeans automatycznie tworzy SFTP PUT do zdalnego repozytorium przez SFTP, aby zachować synchronizację. 2. Działające repozytorium na serwerze WWW (bazujące na Linuksie) posiada wersjonowanie git. Stąd śledzenie tych samych zmian, które wprowadziłem w kopii Windows. 3. Dla uproszczenia (na razie pracuję sam nad tym projektem) nie chcę klonować działającego repozytorium ani tworzyć innej gałęzi niż master. Dlatego pracuję nad tym unikalnym repozytorium i bezpośrednio z gałęzią master. 4. Po zakończeniu i przetestowaniu rozwoju ( **moje zmiany nie są jeszcze przygotowane do zatwierdzenia** ) Chcę je po raz ostatni spojrzeć **przed zatwierdzeniem**. Aby to osiągnąć chciałbym skorzystać z narzędzia graficznego. Mam zainstalowany msysgit na komputerze z systemem Windows, ale nie znalazłem sposobu na załadowanie zdalnego repozytorium do mojego lokalnego gitka przez SSH (nie sądzę, że jest to możliwe). Wreszcie: szukam sposobu, aby to zrobić za pomocą gitka lub innego narzędzia. Do tej pory nie znalazłem. Na przykład git-cola nie proponuje niczego poza ładowaniem lokalnych repozytoriów. Proponowane rozwiązanie znalazłem tutaj: http://stackoverflow.com/questions/6810820/git-gui-when-on-a-remote-server Ale zastanawiam się, czy istnieje prostsze rozwiązanie. **EDIT2** Ideą tego pytania nie było rozpoczęcie debaty nad tym, które narzędzie jest lepsze dla moich obaw. To było: jak zrobić to najlepiej, JAKIEKOLWIEK to narzędzie jest. W każdym razie, oto przepływ pracy, którego w końcu używam dla zainteresowanych: 1. Działające repozytorium znajduje się na serwerze Linux. 2. Netbeans (lub cokolwiek to jest narzędzie) edytuje lokalną kopię tego zdalnego repozytorium roboczego w systemie Windows. „Pobieranie z” i „przesyłanie do” zdalnego repozytorium odbywa się za pośrednictwem połączenia ssh. Tak więc repozytorium zdalne i lokalne są zawsze zsynchronizowane. Najprostszym sposobem na przyjrzenie się temu, co zostało zrobione od ostatniego zatwierdzenia w repozytorium, jest uczynienie lokalnego repozytorium Windows repozytorium roboczym git i uruchomienie gitka z tego miejsca. Jedyną niedogodnością jest nie zapomnieć o zatwierdzeniu repozytorium lokalnego, gdy zatwierdzam repozytorium zdalne, aby uzyskać takie same różnice między ostatnim zatwierdzeniem a bieżącym. Mam nadzieję, że pomoże to innym osobom z tą samą troską.


title: strumieniowanie danych w agregacji pamięci

text: Mamy strumień danych, które agregujemy statystyki i umieszczamy w słowniku Pythona (wysyłane z kafki). Co X przedział czasu aktualizujemy naszą bazę danych o te zagregowane dane. Ten proces działa dobrze, ale nie jest całkowicie bezpieczny. Co się stanie, jeśli proces Pythona umrze i na przykład stracimy dane z tego przedziału czasowego? Jakie są zalecane metody/narzędzia/itp. do agregowania danych przesyłanych strumieniowo w pamięci, przy jednoczesnym zachowaniu funkcji awaryjnej, jeśli proces zostanie przerwany w połowie interwału czasu?


title: Czy ostatnie otwarte sourcing kompilatora MSFT C# oznacza, że może być wieloplatformowy?

text: Naprawdę lubię pracować z C#, ale jedną z jego największych wad jest to, że jest to rodzaj podzielonego mózgu między MSFT .NET i Mono. W praktyce nie jest to wielka sprawa przez większość czasu, ale jest to jedna z tych rzeczy, które sprawiają, że język trochę "śmierdzi". Podejrzewam, że byłoby to dużo bardziej popularne, gdyby można było odpowiedzieć " _Jeśli go skompiluję, czy będzie działać na każdej platformie [desktop]?_ " z " _Tak._ ". W tej chwili jest to " _Tak. Ale najpierw musisz go skompilować pod Mono. Niektóre obszary kodu mogą wymagać nieco przepisania._ ". Moje pytanie brzmi: „** Czy ostatnie otwarte źródło kompilatora C# firmy MSFT oznacza, że można go wykonać na wielu platformach?**”. To znaczy, czy C# .NET może działać na wielu platformach bez Mono z nowo wydanymi komponentami open source? A może jest coś więcej, czego nie widzę? Dalsza ekspozycja na to, co może przynieść przyszłość C# w świetle komponentów open source, nie jest wymagana, aby odpowiedzieć na to pytanie, ale jest zachęcana.


title: Stosowanie zatwierdzeń do innej gałęzi bez łączenia

text: Mam dwie gałęzie git z prawie tym samym kodem, ale z niewielkimi zmianami w celu obsługi różnych platform. Muszę zachować te zmiany, ponieważ potrzebuję ich do uruchamiania oprogramowania na różnych komputerach. Nie ma więc gałęzi master i development, oba są równie ważne. Niemniej jednak muszę „zsynchronizować” podstawową bazę kodu oddziałów. Więc chciałbym w jakiś sposób zastosować zmiany z jednej gałęzi w sposób łatkowy do drugiej gałęzi i vice versa, bez ich łączenia, aby zachować różne konfiguracje. Czy to możliwe z gitem? Jeśli tak, jak mogę to zrobić? Edycja: czy mogę scalić tylko niektóre pliki i pominąć inne, ale zachować dwie gałęzie?


title: Gdzieś umieścić różne pliki

text: Chcemy móc zaoferować użytkownikom naszego oprogramowania możliwość posiadania różnych folderów dla każdego z ich klientów. Wszystkie te foldery klienta byłyby przechowywane razem na przykład w innym folderze zwanym "różnymi danymi" Byłby dostępny za pośrednictwem ikony w oknie rekordu klienta w naszym oprogramowaniu i byłby miejscem po prostu upuszczania plików, które nie są przez nas obsługiwane . Naprawdę prostym rozwiązaniem jest po prostu wywołanie powłoki explorer.exe z adresem folderu. Wszystkie pliki będą miały poprawne ikony i będą wyglądały znajomo, a użytkownik będzie mógł je otworzyć za pomocą domyślnych programów Problem polega na tym, że pozwala to użytkownikowi na użycie eksploratora plików do nawigowania do folderu „różne dane” i prawdopodobnie zrobić coś niezamierzonego, na przykład usunąć kilka folderów klienta. Byłbym bardzo wdzięczny za sugestie dotyczące prostego, ale bezpieczniejszego projektu


title: Czy posiadanie FooObject i FooObjectSummary to zła praktyka?

text: Mam usługę, w której użytkownicy mogą przesyłać/pobierać/zamieniać/usuwać pliki. Pliki te mają kilkanaście atrybutów, które są zapisywane w bazie danych SQL. Okresowo w trakcie sesji będą musieli pobrać podsumowanie (Nazwa pliku, rozmiar 0 w KB i identyfikator) podzbioru plików. Pracując w serwisie tworzy obiekt tych atrybutów (FooObject) w DB. Ale gdy informacja jest wysyłana do użytkownika, tworzony jest obiekt podsumowania (FooObjectSummary). FooObjectSummary ma 3 atrybuty, FooObject ma 12 lub więcej (żaden z atrybutów nie jest niczym innym jak łańcuchami lub typami pierwotnymi). Zrobiłem to oryginalnie, aby jak najmniej dodatkowych informacji zostało przeniesionych. Żadne z tych dodatkowych danych w FooObject nie byłyby niebezpieczne dla użytkownika, ale i tak nie byłyby dla nich narażone? Czy piszę tylko dodatkowy kod? A może dobrą praktyką jest udostępnianie użytkownikowi tylko tyle informacji, ile potrzebuje, a nie trochę więcej?


title: Najlepsza metoda komunikacji między Twoją aplikacją a witryną? PHP, usługa internetowa itp.

text: Tworzę aplikację, która chciałabym komunikować się z moją stroną internetową. Aplikacja będzie musiała pobrać dane dla konkretnego użytkownika aplikacji z bazy danych witryny. Nie wiem, jak najlepiej to zrobić. Widziałem na przykład jeden ze sposobów na zrobienie tego, na przykład utworzenie strony logowania w aplikacji, która następnie trafia na logikę login.php w mojej witrynie. Jest to wygodne, ponieważ mogę używać jednej bazy kodu do obsługi logowania zarówno do strony internetowej, jak i do aplikacji. Innym rozwiązaniem, które widziałem, jest użycie żądań JSON do obsługi komunikacji między aplikacją a witryną. Jest to wygodne, ponieważ obiekty JSON można łatwo tworzyć i analizować. Zasadniczo chciałbym wiedzieć, jaki jest najlepszy/powszechny sposób na nawiązanie tej komunikacji, jakie są zalety i wady posiadania jednego nad drugim oraz inne kwestie bezpieczeństwa, które należy wziąć pod uwagę. Na przykład, czy istnieje ryzyko ujawnienia poufnych danych użytkownika podczas korzystania z jednej metody zamiast drugiej? Jeśli tak, jak można temu zapobiec? Jak i gdzie w grę wchodzi szyfrowanie i walidacja użytkowników?


title: Zajmuję się programowaniem hobbystycznym; jakie metodologie programowania (np. XP, Agile...) polecacie mi przeczytać?

text: Większość z was prawdopodobnie nazwałaby mnie po prostu dzieckiem (mam 15 lat). Zajmuję się programowaniem hobbystycznym (zacząłem bawić się ActionScript 2.0 we Flashu 8, gdy miałem 11 lat, teraz zajmuję się głównie C, Pythonem i Javą). Ponieważ mam 15 lat, przez długi czas nie dostanę pracy (wcześniej spędzę lata w środowisku akademickim), a zatem to pytanie _nie_ dotyczy tego, które metodologie programowania polecacie mi przeczytać. inżynier oprogramowania _praca_ , ale zamiast tego **o jakich metodologiach powinien przeczytać _hobby_ programista?** Czego programista-hobbysta nauczy się czytając o twoich rekomendacjach?


title: Jak sobie poradzić z tak dużą liczbą zapytań SQL?

text: Mam projekt MVC3, który używa programu SQL Server. Cały czas korzystam z danych z bazy SQL i często stwierdzam, że ponownie używam/duplikuję niektóre zapytania SQL. Pomyślałem, że rozwiążę ten problem, tworząc kilka statycznych klas „pomocników”, które zawierają tylko kilka statycznych metod do pobierania typowych rzeczy. GetAllUsers(database As MyEntity) GetAllNonActivatedUsers(database As MyEntity) GetUser(database As MyEntity, userId As Integer) Problem polega na tym, że to trochę pogorszyło sytuację. Teraz zamiast mieć zapytania SQL w moich akcjach kontrolera, w tych klasach pomocniczych jest ich duża liczba. Nazwy tych metod stają się głupie. GetPendingUserApplicationByApplicationId(baza danych jako MyEntity, applicationId As Integer, userId As Integer) Na tym etapie myślę o pozbyciu się klas pomocniczych i powrocie do losowych zapytań SQL przez moje akcje kontrolera. Gdzie popełniłem błąd i jak ludzie zarządzają swoimi zapytaniami SQL? Czy można powielać zapytania SQL?


title: Minimalne wyrównanie konkatenacji kosztów

text: Robię projekt dotyczący eksploracji danych. Mam bardzo duży ciąg o rozmiarze, powiedzmy „n” i wiele małych ciągów, „l_1,l_2..”, każdy o rozmiarze najwyżej „m”. Chcę znaleźć sekwencję małych ciągów tak, aby ich konkatenacja miała minimalny koszt wyrównania (koszty mogą obejmować wstawianie, usuwanie i zastępowanie) z moim dużym ciągiem o rozmiarze „n”. Mogę użyć jednego ciągu więcej niż raz i nie jest obowiązkowe użycie wszystkich ciągów. Zauważ, że `m << n` Moja chciwa implementacja daje bardzo złe rezultaty nawet dla małych łańcuchów. Nie mogę znaleźć skutecznego rozwiązania tego problemu. Czy ktoś może pomóc? Wygląda na to, że programowanie dynamiczne może pomóc, ale nie jestem pewien.


title: Piękny kod Erlanga

text: Staram się dowiedzieć więcej o Erlangu niż o projektach z zabawkami, którymi się bawię. W tym celu czytam programowanie Erlanga i niektóre archiwa firmy Armstrong on Software. Chciałbym również przeczytać przykładowy (najlepiej produkcyjny) kod, który pokazuje rodzaje rzeczy, które można zbudować za pomocą Erlanga, a które byłyby nieproporcjonalnie trudne w innych językach. Oprócz (zakładam) odchyleń, czy są jakieś publicznie dostępne przykłady pięknego kodu Erlanga, które mógłbym przeczytać, aby lepiej zrozumieć język i/lub zobaczyć idiomatyczne zastosowania różnych konstrukcji językowych? W szczególności **nie** szukam kodu, który „wykona pracę”, ale używa wątpliwych praktyk lub przykładów w stylu „oto jak piszesz „silnia” w Erlangu”. W tym samym duchu, czy ktoś może polecić jakąś dobrą literaturę do nauki tego języka (poza wspomnianym „Programming Erlang”)? Przede wszystkim coś, czego sam się nauczyłeś, ale jeśli są na to jakieś standardowe książki społeczności, wrzuć je również.


title: Jak uniknąć gigantycznych metod klejenia?

text: W mojej obecnej pracy kilka razy otrzymałem zadanie wyczyszczenia starego kodu. Często kod jest labiryntem, a dane za nim są jeszcze bardziej splątane. Przeczesuję rzeczy w ładne, schludne, modułowe metody. Każda metoda robi jedną rzecz i robi to dobrze. Wtedy wszystko zaczyna się psuć... Niezmiennie kończę z czystym API i nie ma realnego sposobu na powiązanie tego wszystkiego w całość. Rozwiązaniem było napisanie dużej brzydkiej metody „kleju” (zazwyczaj pełnej instrukcji warunkowych), która ostatecznie wywołuje wszystkie moje „czyste” metody. Metoda klejenia zwykle kończy się zwięzłą wersją plątaniny kodu / danych, którą próbowałem wyczyścić. Jest ogólnie bardziej czytelny, ale nadal jest denerwujący. Jak mogę uniknąć takich metod? Czy to objaw splątanych danych, czy odzwierciedlenie czegoś, co robię źle?


title: Jaką mapę klawiszy preferujesz w ReSharper?

text: Używam ReSharpera od wersji 3 i zawsze używałem schematu mapy klawiszy InteliJ Idea/Resharper 2.x. Ostatnio poznałem mapę klawiszy Visual Studio Ilyi. Każdy z nich ma zalety. **Jakiej mapy klawiszy używasz/preferujesz w ReSharper?**


title: Jakie części komputera należy najpierw zaktualizować, aby przyspieszyć programowanie?

text: Używam Eclipse, a dwa najbardziej zauważalne spowolnienia spowodowane przez mój komputer czekają na kompilację i czekają na intellisense. Mam już szybki dysk SSD i 3 GB pamięci RAM. Zgaduję, że następną najlepszą rzeczą do zrobienia byłaby aktualizacja mojego procesora. Czy to miałoby znaczący wpływ? Jakieś zalecenia dotyczące tego, jaki procesor kupić? Mój obecny procesor to AMD Athlon 64 X2 Dual Core 1,91 GHz.


title: Kiedy należy nie przeprowadzać testów jednostkowych?

text: Pracuję w małej firmie jako samodzielny programista. W zasadzie jestem jedynym programistą w firmie. Mam kilka (stosunkowo) dużych projektów, które napisałem i regularnie prowadzę, a żaden z nich nie ma testów, które by je wspierały. Rozpoczynając nowe projekty, często zastanawiam się, czy powinienem spróbować podejścia TDD. Brzmi to jak dobry pomysł, ale szczerze mówiąc, nigdy nie mogę uzasadnić dodatkowej pracy. Ciężko pracuję, aby w swoim projekcie myśleć przyszłościowo. Zdaję sobie sprawę, że z pewnością pewnego dnia inny programista będzie musiał dbać o mój kod, a przynajmniej go rozwiązywać. Utrzymuję rzeczy tak proste, jak to tylko możliwe, komentuję i dokumentuję rzeczy, które byłyby trudne do uchwycenia. A faktem jest, że te projekty nie są tak duże ani skomplikowane, żeby przyzwoity programista miał trudności ze zrozumieniem ich. Wiele przykładów testów, które widziałem, sprowadza się do najdrobniejszych szczegółów, obejmujących wszystkie aspekty kodu. Ponieważ jestem jedynym programistą i jestem bardzo blisko kodu w całym projekcie, znacznie wydajniej jest postępować zgodnie ze wzorcem zapisu, a następnie ręcznego testowania. Uważam również, że wymagania i funkcje zmieniają się na tyle często, że utrzymywanie testów znacznie obciążałoby projekt. Czas, który w innym przypadku można by poświęcić na rozwiązywanie potrzeb biznesowych. Więc za każdym razem dochodzę do tego samego wniosku. Zwrot z inwestycji jest zbyt niski. Od czasu do czasu ustawiam kilka testów, aby upewnić się, że napisałem poprawnie algorytm, na przykład obliczanie liczby lat, które ktoś przepracował w firmie na podstawie daty zatrudnienia. Ale z punktu widzenia pokrycia kodu, omówiłem około 1% mojego kodu. W mojej sytuacji, czy nadal znalazłbyś sposób, aby testy jednostkowe stały się regularną praktyką, czy też jestem usprawiedliwiony unikaniem tego narzutu? **AKTUALIZACJA:** Kilka rzeczy o mojej sytuacji, które pominąłem: Wszystkie moje projekty to aplikacje internetowe. Aby objąć cały mój kod, musiałbym użyć automatycznych testów interfejsu użytkownika, a jest to obszar, w którym nadal nie widzę dużej korzyści w porównaniu z testowaniem ręcznym.


title: Kiedy testowanie jednostkowe jest niewłaściwe lub niepotrzebne?

text: Wydaje się, że ogólnie zakłada się (przynajmniej na Stack Overflow), że zawsze powinny istnieć testy jednostkowe i powinny być aktualizowane. Podejrzewam jednak, że programiści tworzący te twierdzenia pracują nad różnymi rodzajami projektów ode mnie - pracują na wysokiej jakości, długowiecznym, dostarczanym oprogramowaniu, w którym błędy są naprawdę złą rzeczą. Jeśli to koniec spektrum, w którym testowanie jednostkowe jest najbardziej wartościowe, to jaki jest drugi koniec? Gdzie testy jednostkowe są najmniej wartościowe? W jakich sytuacjach byś nie zawracał sobie głowy? Gdzie wysiłek związany z utrzymaniem testów nie byłby wart kosztów?


title: Jakie są wady programowania „test-first”?

text: To cała wściekłość w dzisiejszych czasach. „Wszyscy” to polecają. To samo w sobie budzi podejrzenia. Jakie są pewne wady, które znalazłeś podczas tworzenia najpierw testowego (sterowanego testem)? Szukam osobistych doświadczeń od doświadczonych praktyków – mogę przeczytać hipotetyczne przemyślenia setki kandydatów w innym miejscu w Internecie. Pytam nie dlatego, że chcę nienawidzić TDD, ale dlatego, że moim zadaniem jest ulepszanie procesu tworzenia oprogramowania, a im więcej możemy dowiedzieć się o problemach, z jakimi spotykają się ludzie, tym większe mamy szanse na ulepszenie tego procesu.


title: Kiedy, gdzie i jak przeprowadzać testy jednostkowe

text: Bardzo dobrze znam się na frameworkach xUnit i staram się wdrażać testy jednostkowe na każdym rozpoczynanym przeze mnie projekcie. Gdzieś po drodze zdaję sobie sprawę, że piszę w kółko te same testy, a potem trafiam na naprawdę trudną do przetestowania metodę lub test z wykorzystaniem zdalnych zasobów, a potem na chwilę się poddaję. W końcu chętnie wracam, kiedy tylko mogę, aby przetestować proste rzeczy, ale jak tylko wpadnę na trudniejsze rzeczy do przetestowania, biegnę na wzgórza z ogonem między nogami. Wrzućmy kilka przykładów. 1. Długi przepływ rzeczy do zrobienia w metodzie. (Jak to przetestować? Czy po prostu upewniam się, że kod jest wywoływany przez zatykanie rzeczy? Jak powinienem przepisać kod, aby ułatwić testowanie?) public void doSomething() { Object1 value1 = doSomething1(this.getName() ); if (value1.isError()) { sendError(new Object1Error(value1.getError().getMessage())); zwrócić; } Obiekt2 wartość2 = zróbCoś2(wartość1, this.getName()); if (value2.isError()) { sendError(new Object2Error(value2.getError().getMessage())); zwrócić; } /* ad infinitum... */ } 2. Przeciążone metody i konstruktory. public String toJSON() { return toJSON (prawda); } public String toJSON(boolean prettyPrint) { /* wykonaj pracę */ zwróć wynik; } /* test */ @Test public void testToJSON() { ... }; @Test public void testToJSONBoolean() { /* nadmiarowy podobny kod testu... */ } 3. Zdalne zasoby. Jak mogę sprawdzić, czy mój interfejs API przesyłania działa (tj. właściwa metoda żądania, host, typ treści żądania, ładunek itp.) bez faktycznego przesyłania? Przesyłane pliki trafiają na serwery poza moją kontrolą. public void doUpload() wyrzuca IOException { Klient HttpClient = new HttpClient(); PutMethod putMethod = new PutMethod(...); putMethod.setRequestHeader(...); putMethod.setRequestEntity(nowy FileInputStreamRequestEntity(...)); /* itd. */ final int responseCode = client.executeMethod(putMethod); } 4. Testowanie interakcji serwera z klientami. /* zanim tu dotrzemy, inne interakcje muszą mieć miejsce */ public void updateClientProfile(UserProfile profile) { // 1. zweryfikuj dane wejściowe // 2. zaktualizuj użytkownika w bazie danych // 3. wygeneruj e-mail w HTML // 4. wyślij e-mail // 5. udostępnij widok } Testowanie na pierwszy rzut oka wydaje się łatwe, dopóki nie dojdę do tego typu sytuacji. Jak utrzymać motywację do testowania i napisać kod, aby był bardziej testowalny? Wydaje się, że im więcej rzeczy, które metoda musi zrobić, tym wykładniczo trudniejsze i frustrujące są testy jednostkowe. Czy testuję po prostu, czy kod wywołuje odpowiednie usługi i metody? Czy piszę testy jednostkowe tylko po to, aby udowodnić sobie, że mój kod wywołuje metody, które kazałem mu wywołać, czy też aby ustalić, czy logika jest poprawna? Pomoc!


title: Kiedy NIE przeprowadzać testów jednostkowych?

text: Uderzam w przeszkodę z przepływem TDD. Używamy PHPUnit+FuelPHP i utknąłem na tym, jak napisać test jednostkowy dla naszej funkcji przesyłania/kadrowania obrazu. FuelPHP jest notorycznie trudny do testowania jednostkowego (zobacz mój post na forum tutaj i trudno jest (ale nie niemożliwe) wykpić/stubować kontrolery, które zajmują się FILESYSTEM. Zdecydowałem się nie pisać testów jednostkowych tej konkretnej funkcji, ponieważ czuję, że nie byłoby warte wysiłku, aby sfałszować pliki binarne.Napisałbym zbyt dużo kodu testowego (i za mało kodu aplikacji), aby obejść FuelPHP.Ale martwię się, że nie będziemy mieli 100% pokrycia kodu.Więc ja zastanawiałeś się, czy podchodziłem do TDD niepoprawnie (lub nie starałem się wystarczająco mocno), czy też był to uzasadniony przypadek, kiedy NIE pisać testu jednostkowego?


title: Czy są przypadki, w których nie należy używać Test Driven Development?

text: Czy zaleca się, aby TDD było zawsze praktykowane w projekcie, czy są przypadki, w których należy tego unikać? Czy wszyscy powinniśmy przyjąć TDD? Czy jest to standardowa praktyka w dużych firmach programistycznych?


title: Raportowanie ad-hoc podobne do Microstrategy/Pentaho – czy OLAP naprawdę jest jedynym wyborem (czy OLAP jest w ogóle wystarczający)?

text: Przygotowuję się więc do opracowania API w Javie, które zapewni użytkownikowi wszystkie wymiary, metryki, hierarchie itp., tak aby mógł wybrać to, czego chce (powiedzmy np. wymiary Lokalizacja (sklep) i Tygodnik , a metryka Sprzedaż produktu $), podaj swoje wybory do interfejsu API i poproś go, aby wypluło obiekt zawierający odpowiedź na ich pytanie (obiekt byłby prawdopodobnie zbiorem komórek). Nawet nie wierzę, że będzie dużo drążenia w górę/w dół. Hurtownia danych, z którą interfejs API będzie się łączyć, ma standardową formę (tabele FACT, wymiary, format schematu gwiazdy). Moje pytanie brzmi, czy ramy OLAP, takie jak Mondrian, to jedyny sposób na osiągnięcie czegoś zbliżonego do raportowania ad hoc? Mogę sobie wyobrazić naprawdę dużą kostkę (lub kostkę wirtualną), która zawiera większość wymiarów i danych, jakich użytkownik może kiedykolwiek chcieć, co dałoby złudzenie raportowania ad hoc. Problem polega na tym, że trzeba wykonać mnóstwo konfiguracji (tak dużo XML), aby platforma działała z danymi. Ponadto wymaga specyficznej wiedzy, takiej jak MDX, a nawet więcej znajomości specyfiki frameworka (Mondrian API). Wreszcie nie jestem przekonany, że skala będzie znacznie lepsza niż zwykłe wykonywanie zapytań w bazie danych SQL. OLAP wydaje mi się bardzo starą technologią. Czy wydajność naprawdę jest już problemem? Alternatywą, o której mogę pomyśleć, byłby dynamiczny SQL. Jeśli istniejące tabele w hurtowni danych są zgodne ze schematem nazewnictwa (FACT_, DIM_ itp.) lub jeśli istniał bardzo prosty plik konfiguracyjny/tabela bazy danych zawierająca informacje konfiguracyjne, w której przechowywano, które tabele są tabelami faktów, które są wymiarami i jakie metryki są dostępne, to czy api nie może odczytać z tego i złożyć odpowiedniego zapytania sql? Czy byłoby to koniecznie trudniejsze niż uczenie się MDX, Mondriana (lub innego frameworka OLAP) i tworzenie wszystkich kostek? Ogólnie uważam, że OLAP jest jednocześnie zbyt potężny (obsługuje drążenie w górę/w dół, złożone funkcje) i przestarzały i niechętnie opieram na nim swoją architekturę. Nie jestem jednak pewien, czy alternatywy, takie jak rozwijanie własnego środowiska raportowania ad hoc za pomocą dynamicznego SQL, usunęłyby wszelkie złożoność, jednocześnie spełniając wymagania, zarówno funkcjonalne, jak i niefunkcjonalne (np. skalowalność; niektóre tabele FACT mają wiele miliony wierszy). Zastanawiam się też nad innymi technikami (np. ula). Czy ktoś tutaj próbował zgłaszać ad hoc? Jakakolwiek rada? Spodziewam się, że ten projekt zajmie dość dużo czasu (3 miesiące min, ale prawdopodobnie dłużej), więc po prostu nie chcę angażować się w architekturę bez całkowitej pewności co do jej zalet i wad. Dzięki wielkie.


title: W C++ Dobre powody, aby NIE używać symetrycznego zarządzania pamięcią (tj. Nowe i usunięte)

text: _Staram się nauczyć C++ i programowania w ogóle. Obecnie studiuję open source z pomocą UML. Uczenie się to moje hobby i też świetne._ Rozumiem, że alokacja pamięci w C++ powinna być symetryczna. Klasa odpowiada za swoje zasoby. Jeśli pamięć jest alokowana za pomocą new, powinna zostać zwrócona za pomocą delete w tej samej klasie. To tak, jak w bibliotece, ty, klasa, jesteś odpowiedzialny za wypożyczone książki i zwracasz je, a potem gotowe. Moim zdaniem ma to sens. To sprawia, że zarządzanie pamięcią jest łatwiejsze do opanowania, że tak powiem. Na razie w porządku. Problem w tym, że tak nie działa w prawdziwym świecie. Na przykład w Qt tworzysz obiekty QtObjects z nowym, a następnie przekazujesz własność obiektu do Qt. Innymi słowy, tworzysz obiekty QtObject, a Qt niszczy je dla ciebie. W ten sposób niesymetryczne zarządzanie pamięcią. Oczywiście ludzie stojący za Qt muszą mieć ku temu dobry powód. To musi być w jakiś sposób korzystne, ### Moje pytania brzmią: * Jaki jest problem z pomysłem Bjarne Stroustrups o symetrycznym zarządzaniu pamięcią zawartym w klasie? * Co zyskujesz dzieląc nowe i usuwając, dzięki czemu tworzysz obiekt i niszczysz go w różnych klasach, tak jak robisz to w Qt. * Czy powszechne jest dzielenie nowego i usuwanie i dlaczego w takim przypadku w innych projektach nie obejmujących Qt? **Dziękujemy za wszelką pomoc w rzuceniu światła na tę tajemnicę!**


title: C vs C++ dla programisty Java (i prawdopodobnie Pythona)

text: Jestem hobbystycznym programistą Java i chciałbym pogłębić swoje umiejętności programowania, ucząc się C lub C++ i Pythona. Przeczytałem wiele artykułów C vs C++, ale żaden z nich nie zawiera informacji, których szukam. Chciałbym wiedzieć, czy lepiej uczyć się C czy C++. W większości artykułów, które czytam, większość ludzi poleca C++, mówiąc, że jest lepszy, ponieważ jest OO i łatwiej jest w nim pisać GUI lub nie poleca C, mówiąc, że nauczysz się złych nawyków FO. Ale mogę programować w Javie, która jest OO, więc nawyki FO się nie utrzymają. Jeśli chodzi o GUI, myślę, że python może lepiej sobie z tym poradzić. Chciałbym również wiedzieć, co jest lepsze dla Pythona. tj. który działa lepiej z pythonem lub który działa szybciej z pythonem itp. Więc polecasz C i python i java lub C ++ i Python i Java PS Większość mojego programowania robię na linuksie.


title: Programista jako IT Manager: porady?

text: Tydzień po tym, jak mój szef, kierownik IT wysoce zautomatyzowanego zakładu produkcyjnego, i rozmawiałem o przyszłych planach Działu Rozwoju Oprogramowania (mnie) w zakresie szkoleń, zatrudniania junior dev itp., ogłosił rezygnację z niebieski, z 4-dniowym wypowiedzeniem, a Zarząd niespodziewanie wyznaczył mnie na jego miejsce na poziomie zbliżonym do menedżera, zamiast oferować stanowisko Inżyniera Infrastruktury (jedynego innego pracownika w Zakładowym IT). Po trzech miesiącach pełnienia tej roli mam mieszane uczucia co do stanowiska. Jako programista czuję się przytłoczony ilością problemów technicznych niezwiązanych z programowaniem, które muszę nadzorować, takich jak infrastruktura sieciowa, serwerowa i telekomunikacyjna. Nie trzeba dodawać, że 4-dniowy transfer wiedzy był niczym w porównaniu z ilością wiedzy wymaganej do utrzymania wszystkiego w ruchu. Dodajmy do tego, że obowiązki tego stanowiska „menedżera/quasi-menedżera” obejmują około 60% praktycznej obsługi aplikacji 7x24x365 na wysokim poziomie (tj. Zgadnij, która z ponad 3000 aplikacji opracowanych przez firmę nie działa poprawnie), za czym gardzę zrobić, a perspektywy nie są zbyt jasne. Nigdy wcześniej nie słyszałem o awansie programisty na kierownika IT. Czy ktoś miał podobne doświadczenie? Czy kiedykolwiek wróciłeś do rozwoju, czy było to trudne? Co zrobiłeś, aby ułatwić to przejście? Notatki, blogi, książki, które polecasz?


title: Jaka jest różnica między stanowym a bezpaństwowym?

text: Książki i dokumentacja dotyczące MVC po prostu stosują warunki stanowe i bezstanowe. Szczerze mówiąc, po prostu nie jestem w stanie uchwycić idei tego, o czym mówią książki. Nie dają przykładu, aby zrozumieć którykolwiek ze stanów, a nie tylko powiedzieć, że HTTP jest bezstanowy, a Microsoft MVC z ASP.NET się z tym zgadza. Czy brakuje mi jakiejś podstawowej wiedzy, ponieważ nie rozumiem, co jest stanowe i dlaczego jest stanowe i to samo dotyczy bezpaństwowców. Prosty i krótki przykład, który mówi o kontrolce, takiej jak przycisk lub pole tekstowe, może uprościć zrozumienie, jak sądzę.


title: Tworzenie składni konfiguracji - najlepsze praktyki/zasady/metody?

text: Obecnie rozwijam małą aplikację, która sprawdza, czy podane dane spełniają określone wymagania. Wymagania są w rzeczywistości długą listą i mogą się zmieniać, więc zdefiniowałem składnię, która pozwala mi na krótkie określenie wszystkich wymagań w osobnym pliku. Teraz zmieniły się ogólne wymagania dla aplikacji i muszę zmienić składnię konfiguracji. Co skłania mnie do zastanowienia się, czy istnieje metodologia lub najlepsza praktyka tworzenia takich składni. Obecnie to, co robię, to * myślę o wymaganiach i wymyślam wstępną składnię, * zaczynam konfigurować kilka pierwszych elementów i sprawdzam, jak to działa. * Jeśli natrafię na coś, co nie działa dobrze lub wcale z obecną składnią, zmieniam składnię, jeśli to możliwe, w sposób zgodny z poprzednimi wersjami. To jakoś działa na mnie, ale czuję się trochę jak łowienie w niespokojnej wodzie. Czuję też, że niekoniecznie prowadzi to do najbardziej zwięzłej i łatwej do zrozumienia/używania składni. Zastanawiałem się więc, co robią inni ludzie, zwłaszcza jeśli istnieje lepsze podejście do tego.


title: Odwołanie pracodawcy; Wykorzystanie OOP w głównym nurcie; rozwiązania, które rozkwitają dzięki OOP

text: Obecnie jestem w trakcie, mam nadzieję, zmiany kariery w kierunku programowania. Pomimo mojego szerokiego zakresu wiedzy w tej dziedzinie i dodatkowego kontaktu z pojęciami na studiach (co ostatecznie pozostawiało wiele do życzenia), czuję, że mogę przeoczyć to, co naprawdę ma znaczenie, gdy zwracam się do pracodawców. Uważam, że ten post http://stackoverflow.com/a/1991453 jest specyficzny dla mojego kłopotliwego położenia. Co ważne: > _Widziałem dużo okropnego kodu C++ i to nie tylko od ludzi, którzy > nie rozumieją pojęć. Widziałem wielu programistów, którzy dokładnie wiedzą > czym jest obiekt i potrafią doskonale wyjaśnić polimorfizm i wszystkie te techniczne terminy OOP >. Ale jeśli nie wiedzą, kiedy go użyć, nigdy nie będą w stanie > w pełni z niego skorzystać. Wiem, bo sam taki byłem. Przeczytałem książkę o OOP w liceum, w której wyjaśniono wszystkie koncepcje, ale > spędziłem lata, zanim faktycznie ich użyłem, ponieważ nie widziałem, kiedy > faktycznie przyniosą korzyści mojemu kodowi._ Jestem zadowolony z koncepcji OOP ale trochę zardzewiały z obsługą języków takich jak Java, C# (mój ulubiony do OO), a nawet C++. Powodem, dla którego nie mogę twierdzić, że jestem przynajmniej biegły w tej dziedzinie, jest to, że tak naprawdę nie jestem sprzedany w zakresie projektowania OO; za każdym razem, gdy staram się rozwiązać problem, który można zrobić w OOP, zmuszam się do jego użycia i kończę tworzeniem proceduralnego rozwiązania w C, które uważam za znacznie bardziej elegancki program. Wydaje mi się, że wiąże się to z trzema pytaniami: Czy nadal (szczerze) mogę sprzedać się jako wartościowy dla pracodawcy, biorąc pod uwagę moje mocne i słabe strony umiejętności, jak wyjaśniono powyżej? Czy są jakieś projekty lub problemy, które mogę rozwiązać solo (dla praktyki), które są po prostu mądrzejsze do zrobienia z OOP? A biorąc pod uwagę projekt silny obiektowo, na jakim języku powinienem się skoncentrować?


title: Projekt zorientowany obiektowo i właściwa architektura Java dla mojego programu

text: Myślę, że po raz pierwszy chcę stworzyć program, który naprawdę wykorzystuje zasady OOP i chcę to zrobić w najbardziej efektywny i wydajny sposób. Przede wszystkim otrzymujemy tę (wielką) zagadkę: > 100 więźniów przebywa w izolatkach. Każda cela jest pozbawiona okien i > dźwiękoszczelna. Jest centralny salon z jedną żarówką; żarówka jest > początkowo wyłączona. Żaden więzień nie widzi żarówki z własnej celi. > Każdego dnia naczelnik losowo wybiera więźnia, który > odwiedza centralny salon; na koniec dnia więzień > wraca do celi. W salonie więzień może, jeśli chce, włączyć > żarówkę. Ponadto więzień ma możliwość dochodzenia > twierdzenia, że wszystkich 100 więźniów było w salonie. Jeśli to twierdzenie > jest fałszywe (to znaczy niektórzy więźniowie nadal nie byli w salonie), > wszystkich 100 więźniów zostanie rozstrzelanych za ich głupotę. Jednakże, jeśli to prawda, > wszyscy więźniowie zostają uwolnieni i wprowadzeni do MENSY, ponieważ świat > zawsze może użyć bardziej inteligentnych ludzi. A zatem twierdzenie powinno być dokonane tylko wtedy, gdy > więzień jest w 100% pewien jego słuszności. > > Zanim ta cała procedura się rozpocznie, więźniowie mogą > zebrać się razem na dziedzińcu, aby omówić plan. Jaki jest optymalny plan, który > mogą uzgodnić, aby w końcu ktoś dokonał poprawnego stwierdzenia? Mam więc rozwiązanie i chcę stworzyć program do jego uruchomienia. Chcę, aby mój program był jak najbardziej modułowy, co oznacza, że jeśli znajdę lepsze rozwiązanie, nie będę musiał przepisywać całego kodu. Myślę, że OOP naprawdę się do tego nadaje. Oto, co zrobiłem do tej pory: * Klasa **Główna**: uruchamiam tylko kilka gier, aby przetestować rozwiązania. * Klasa **Gry**: uruchamia tylko jedną 'próbę'. Ma „więzienie” (które jest tylko szeregiem więźniów), licznik dzienny i inne przydatne rzeczy. * Oraz klasa **Więzień**: reprezentująca tylko jednego więźnia. Po przemyśleniu tego jedyne rzeczy, które jeden więzień może zrobić, to _zmienić światło w miejscu, w którym jest wybierany_ i _stwierdzenie (lub nie), że wszyscy weszli do pokoju_. W rozwiązaniu, które wymyśliłem, mam dwa typy na Prisoner. To, co zrobiłem, to to, że właśnie zaimplementowałem moją klasę Prisoner z najbardziej klasycznym typem Prisoner i stworzyłem podklasę, która po prostu nadpisuje metody z klasy Prisoner. W tej chwili widzę dwie możliwe ulepszenia, jeśli chcę ponownie użyć mojego kodu: * uczynić klasę **Prisoner** interfejsem Java, tak aby kiedy chcę utworzyć nowy typ, musiałbym po prostu zaimplementować Prisoner. Ale głównym problemem jest to, że mam głównie „typowych więźniów”, wielu ludzi ma ten sam wzorzec. Czy mam po prostu utworzyć implementację 'Classic_Prisoner'? * tworzenie klasy **Zachowanie**, która zajmuje się zachowaniem jednego więźnia w pojedynczej sytuacji. Ale czy to nie ten sam problem? Chodzi mi o to, że musiałbym również stworzyć jedną podklasę Zachowania dla każdego typu Więźnia, którego rozważam. Co zrobić, aby mieć tam najczystszy kod i móc go ponownie wykorzystać, gdy nadejdzie czas?


title: Jakimi algorytmami muszę się przyjrzeć?

text: Po pierwsze: muszę z góry przeprosić za zły wybór tytułu na to pytanie, ale naprawdę nie mogłem wymyślić czegoś sensownego. Właściwie szukam sugestii, jak nazywa się ten problem, abym mógł sam przeprowadzić badania. Chętnie zmienię tytuł, gdy pojawią się sugestie. To nawet nie jest prawdziwy problem, to tylko ćwiczenie, które wymyśliłem, aby zbadać algorytmy, z którymi nigdy nie miałem okazji się zmierzyć. Powiedzmy, że chcemy napisać program, który pomoże nam zoptymalizować logistykę dowolnej liczby zespołów muzycznych, które muszą występować jeden po drugim na tej samej scenie tej samej nocy. Oto problem: zespoły dzielą się graczami, co oznacza, że każdy gracz może grać w więcej niż jednym zespole. Gdyby wszystkie zespoły składały się z różnych muzyków, w ogóle nie potrzebowalibyśmy programu, ale ponieważ wszyscy muzycy się znają, stworzą wiele zespołów z różnymi ich kombinacjami. To, co chcemy zrobić, to ułożyć wszystkie zespoły w taki sposób, aby grupy o największej liczbie członków „zbijały się” razem i grały jeden po drugim, abyśmy mogli zminimalizować liczbę muzyków zaangażowanych przy każdej zmianie pasmo. Innymi słowy, za każdym razem, gdy zespół kończy swój występ, a na scenę pojawia się następny, na scenie powinna być już jak największa liczba muzyków. Czy to tylko kolejna forma słynnego problemu ze składowaniem/planowaniem personelu? Czy jest to prostsze? Muszę przyznać, że nie zastanawiałem się jeszcze, jak można go rozwiązać, to tylko problem, o którym myślałem dzisiaj. Gdybym miał się temu przyjrzeć, wygląda na to, że problem sprowadza się do ustalenia, które zespoły mają najwięcej wspólnych członków i odpowiednio je posortować. Ale jak to się nazywa w mowie CS? I czy to wszystko? Jedyny wymóg jaki mamy to ułożenie zespołów według ilości muzyków. Wyczuwam, że gdybyśmy musieli wziąć pod uwagę inne rodzaje ograniczeń, jak powiedzmy, że jeden konkretny zespół naprawdę wolałby grać na początku, a drugi w samym środku, mogłoby to przekształcić się w pełnoprawny problem z harmonogramem. W swojej najprostszej postaci wydaje się to jednak być prostym problemem, ale, jak powiedziałem, nie znam rodziny algorytmów, które pozwoliłyby mi określić, które zespoły mają najwięcej wspólnych muzyków.


title: Jakie licencje open source pozwalają na łączenie kodu, który kompiluje się w jeden zestaw?

text: Staram się stworzyć bibliotekę, która będzie używana przez innych programistów. Chcę przestrzegać zasady „nie wymyślaj ponownie koła”, a także chcę, aby wdrożenie było kwestią upuszczenia jednego pliku .dll do folderu bin. Do tej pory wybrałem podwójną licencję MIT/MS-PL. Czy jest coś, co powstrzymuje mnie przed kompilacją innego kodu na licencji MSPL/MIT bezpośrednio do tego samego zestawu, co mój własny? Czy o nic się nie martwię? Jeśli jest to uzasadnione, czy powinienem dodać nagłówek licencji/prawa autorskiego do każdego pliku, zanim dodam inny kod do mojej bazy kodu, ponieważ nie będzie ładnego, uporządkowanego zestawu, który określiłby, skąd pochodzi kod? Ponadto dodam dla Ciebie nagłówek, abyś mógł szybciej napisać odpowiedź: „Nie jesteś prawnikiem, nie udzielasz porad prawnych, powinienem przerzucić moje ciężko zarobione pieniądze na zawód, którego nie cierpię, aby rozwiązać takie pytania jak to zamiast prosić o darmową poradę"


title: Logiczne progresje na rynku pracy

text: Jestem 5 lat z nierozpoznanej uczelni, na której studiowałem inżynierię oprogramowania. Pierwsza praca to VB.NET, jedna praca to Python, Linux i tworzenie stron internetowych. Czuję się obsadą jako web developer. Chciałbym zagrać rolę w C, ale nikt nie jest zainteresowany juniorami, jeśli kandydat nie ma jeszcze 3 lat doświadczenia w programowaniu C. Zrobiłem trochę C i trochę kodowania open source, ale nigdy nie będę miał pewności, by przekonać kogoś, kogo doskonale wiem, co robię. Czy po prostu spędzam coraz więcej czasu, pozwalając, by życie mijało mnie, gdy siedzę w swoim pokoju w piątek wieczorem, pisząc zadanie w języku C „w celu uczenia się więcej C” Zasadniczo po prostu nie jestem pewien, czy chcę kontynuować karierę, jeśli będzie to obejmować wyłącznie wysoki poziom, abstrakcję maszynową, logikę biznesową i jestem zainteresowany rozwojem na niskim poziomie i czytaniem książek Taunembauma. dostał pracę w kawiarni w Amsterdamie tocząc spliffy dla klientów. Moja idealna praca, bycie płatnym członkiem zespołu programistów Fedory, wydaje się tak odległa, bez nikogo, kto zapłaciłby mi za nauczenie się umiejętności, aby się tam dostać, a jedynym sposobem byłoby dosłownie spędzenie tygodni i tygodni mojego życia na tworzeniu kodu bez uznania za darmo i bez żadnych gwarancji na koniec. Nie żebym do tej pory w ogóle coś przyczynił. Czy są jakieś ścieżki kariery, które są logicznie określone, aby przeskakiwanie między rolami było „poprawnie” przyrostowe i gdzie ciężka praca i nauka ostatecznie prowadzą do takich miejsc, w których mógłbym chcieć iść? [ i jednocześnie zarabiać? ]


title: Aplikacja Android (klient) i komunikacja z serwerem (C#.Net)

text: Jestem zdezorientowany, które podejście wybrać - ankieta (która zużyta bateria), GCM czy jakiekolwiek inne podejście, które najlepiej pasuje? **Scenariusz to:** mój klient to **Android**, a serwer to **C#.Net**. Serwer wysyła zaproszenie do klienta. Serwer może wybrać, kogo wysłać (Regionalne, Poszczególne, Do wszystkich). Klient może zaakceptować lub odrzucić zaproszenie, które odsyła wynik z powrotem do serwera


title: Wydajny algorytm konsolidacji maszyn wirtualnych (VM) w chmurze

text: **_PROBLEM:_** Mamy **N** fizycznych maszyn (PM) każda z pamięcią RAM **R** i, procesorem **C** i oraz zestawem aktualnie zaplanowanych maszyn wirtualnych, każda z wymaganiami pamięci RAM **r ** i oraz **c** i odpowiednio Przenoszenie (migracja) dowolnej maszyny wirtualnej z jednego PM do drugiego wiąże się z kosztem, który zależy od jej pamięci RAM **r** i. PM bez maszyn wirtualnych jest wyłączany w celu oszczędzania energii. Naszym celem jest zminimalizowanie sumy ważonej (N,koszt migracji) poprzez migrację niektórych maszyn wirtualnych, tj. zminimalizowanie liczby pracujących PM, a także nie degradacja poziomu usług z powodu nadmiernych migracji. **_Moje podejście:_** Podejście Brute Force polega na wybraniu minimalnie załadowanego PM i próbie dopasowania swoich maszyn wirtualnych do innych PM za pomocą algorytmu First Fit Decreasing lub możemy wybrać PM ofiar i docelowe PM w oparciu o ich poziom załadowania i wyłączyć ofiary jeśli to możliwe, przenosząc ich maszyny wirtualne do celów. Próbowałem tego podejścia Greedy na danych _Baadal_ (chmura IIT-D), ale nie daje to obiecujących wyników. Próbowałem również zbadać optymalizację kolonii Ant pod kątem dynamicznej konsolidacji maszyn wirtualnych, ale nie byłem w stanie zbyt wiele zrozumieć. Użyłem linków. http://dumas.ccsd.cnrs.fr/docs/00/72/52/15/PDF/Esnault.pdf http://hal.archives-ouvertes.fr/docs/00/72/38/56/PDF /RR-8032.pdf Czy ktoś mógłby wyjaśnić rozwiązanie lub zaproponować nowe podejście/zasoby dla lepszej wydajności. Zasadniczo szukam algorytmów, a nie fizycznych optymalizacji i wiem również, że wiele organizacji komercyjnych dostarczyło takie rozwiązanie, ale chciałem tylko dowiedzieć się więcej o podstawowych algorytmach. Z góry dziękuję.


title: Dzielenie dużego żądania na wiele małych żądań ajax

text: Nie mam pewności co do skalowalności poniższego modelu. Mam niewielkie doświadczenie z dużymi systemami, dużą liczbą żądań i tak dalej, ale najpierw staram się zbudować kilka funkcji uwzględniających skalowalność. W moim scenariuszu istnieje strona **użytkownik**, która zawiera dane dla: 1. Dane użytkownika (nazwa, lokalizacja, miejsce pracy...) 2. Aktywność użytkownika (posty na blogu, komentarze...) 3. Statystyki użytkownika (ocena , liczba znajomych...) Aby pokazać to wszystko na tej samej stronie, na żądanie będą co najmniej 3 różne zapytania do bazy danych na zapleczu. W niektórych przypadkach wyobrażam sobie, że te zapytania będą działać dość sprawnie, dlatego doświadczenie użytkownika może ucierpieć podczas oczekiwania między żądaniami. Dlatego zdecydowałem się uruchomić tylko krok 1 (Dane użytkownika) jako normalne żądanie. Po otrzymaniu odpowiedzi wysyłane są dwa żądania ajax dla kroków 2 i 3. Po otrzymaniu tych odpowiedzi umieszczam dane tylko w przeznaczonych opakowaniach. Dla mnie przynajmniej to ma więcej sensu. Jednak są 3 żądania zamiast jednego dla każdego wyświetlenia strony użytkownika. Czy w dłuższej perspektywie wpłynie to na system? Zakładam, że tego rodzaju podejście wymaga więcej zasobów, ale czy ta wymiana UX na zasoby to dobra tarcza, czy powinienem trzymać się jednego zwykłego dużego żądania?


title: Jaka będzie prawidłowa odpowiedź na pytanie "dlaczego NoSQL jest szybszy od SQL" podczas rozmowy kwalifikacyjnej?

text: To po prostu nonsens dla mnie osobiście. Nie widzę żadnego wzrostu wydajności przy użyciu NoSQL zamiast SQL. Może SQL przez NoSQL, tak, ale nie w ten sposób. Myślę, że jeśli odpowiem „nie mam pojęcia” lub coś w tym rodzaju, to będzie to zła odpowiedź, bo tak naprawdę nie wygląda to na fałszywe pytanie, to poważne pytanie na rozmowie kwalifikacyjnej, ale jak powinna wyglądać prawidłowa odpowiedź na to pytanie ? A może brakuje mi czegoś o NoSQL?


title: Jaki jest najlepszy sposób pracy z listami mailingowymi?

text: Wiele projektów open source ma listy mailingowe jako preferowany sposób komunikacji. Jeśli po prostu zaloguję się na listę mailingową przez moje konto g-mail, zobaczę około 100 wiadomości dziennie, które nie są wątkami, ale zwykłą listą. Jaki jest preferowany sposób pracy z listami dyskusyjnymi, abym mógł zobaczyć widok drzewa wątków i odpowiedzi?


title: Opcje kontroli wersji dla współdzielonego folderu sieciowego

text: Firma, w której pracuję, nie ma kontroli wersji. Nigdy nie będzie miał kontroli wersji, więc rozwiązanie oparte na serwerze nie wchodzi w rachubę. Ponadto nasza sieć działa bardzo wolno. Często zapisanie małego pliku zajmuje kilka sekund. Pracuję z małym zespołem. Czy są jakieś opcje kontroli wersji dla udostępnionego folderu sieciowego? Szukam czegoś, w czym mogę iść do pracy, pojeździć, odpracować C: jeździć cały dzień, a pod koniec dnia pchać. Zasadniczo to samo co GitHub, chyba z dyskiem sieciowym.


title: Emuluj środowisko lokalnie lub akceptuj użycie środowiska deweloperskiego

text: Jestem w nowej pracy i _naprawdę_ chcę skonfigurować moją maszynę wirtualną, aby była w stanie emulować niektóre lub całe środowisko lokalnie. Powiedziano mi, że to niemożliwe, ale nienawidzę tego akceptować. Aby dać trochę kontekstu, jestem bardzo nowy w projekcie, który ma wiele lat, ale częściowo (około roku) odziedziczył go zupełnie nowy zespół, który wciąż nie rozumie w pełni podstawy kodu, którą odziedziczył. Kod jest ogromny z dziesiątkami projektów maven i jest napisany z zamiarem, aby części działały na różnych serwerach, w tym logika do synchronizacji wersji bazy danych po obu stronach zapory. Obecnie zespół kopiuje swój kod do środowiska deweloperskiego, uruchamia go i przegląda pliki dziennika w celu testowania integracji. Wszyscy korzystają z tego samego środowiska deweloperskiego i komunikują się, aby uniknąć kolizji, w kilkunastu dużym zespole. To po prostu wydaje się nieskuteczny ból. Powiedziano mi, że środowisko jest zbyt złożone, by je naśladować. Kiedy pytam o emulację połówki GUI/frontendu, słyszę, że integracja z tomcatem jest zbyt trudna, a inni próbowali i zawiedli. Nikt nie potrafi jednak dokładnie wyjaśnić „dlaczego” im się nie udało i wygląda na to, że nie próbowali alternatywnych metod, aby tak się stało. Więc... czy powinienem kołysać łodzią? Wydaje się szalenie nieefektywny sposób, w jaki robią rzeczy, zwłaszcza w tak dużym zespole. Jeśli _mógłbym_ stworzyć łatwy sposób emulacji na lokalnych maszynach i pokazać innym, jak to zrobią, myślę, że byłby to duży zysk. Jednakże, jeśli inni mają rację, a ja nie, tracę czas, myśląc, że jestem mądrzejszy od innych, nie wspominając już o tym, że w pierwszym miesiącu w pracy wyglądałem na dość niekompetentnego, nie robiąc nic poza udowodnieniem tego, co powiedzieli mi inni. Czy korzyści płynące z możliwości uruchamiania debugerów i lokalnego testowania są warte walki?


title: Strategia wysokiego poziomu do rozróżniania zwykłego ciągu znaków od nieprawidłowego JSON (tj. wykrywanie ciągów podobnych do JSON)

text: **Zastrzeżenie dotyczące braku kodu:** Nie mam kodu do opublikowania, ponieważ nie zacząłem pisać; szukałem bardziej teoretycznych wskazówek, ponieważ wątpię, czy będę miał problem z kodowaniem, ale jestem dość zdezorientowany, jakie podejście (podejścia) przyniesie najlepsze wyniki. Nie szukam też żadnego kodu; tylko kierunek. **Dylemat** Bawię się dodaniem funkcji w stylu „magicznej metody” do interfejsu użytkownika, który tworzę dla klienta, i wymagałoby to inteligentnego wykrycia, czy ciąg miał być JSON, czy nie, w porównaniu z prostym strunowy. Rozważałem te ogólne pomysły: 1. Poszukaj pewnego rodzaju arbitralnie określonego akceptowalnego współczynnika częstotliwości składni podobnej do JSON (tj. regex, aby znaleźć ciągi oddzielone dwukropkami; szukaj dwukropków między nawiasami klamrowymi itp.) do liczba ciągów w cudzysłowie + „null”, „bool” i „int`s/”float`s. Ale im mniejszy zestaw danych, tym bardziej będzie to niestabilne 2. poszukaj kluczowych identyfikatorów, takich jak otwieranie i zamykanie nawiasów klamrowych... nie jestem pewien, czy istnieją nawet _są_ prostsze identyfikatory, a to i tak nie jest atrakcyjne, ponieważ jest to tak nakazowe rodzaje błędów, które może znaleźć 3. spróbuj stopniowo analizować fragmenty, takie jak te między nawiasami klamrowymi, i zobacz, jaka część tych instrukcji ułamkowych okaże się prawidłowymi JSON; wygląda na to, że ucierpiałby mniej niż (1) z mniejszych zbiorów danych, ale prawdopodobnie byłby znacznie bardziej intensywny w przetwarzaniu i bardzo podatny na brakujące lub odwrócone nawiasy klamrowe. Ciekawe, czy ludzie zajmujący się obliczeniami lub specjaliści od algorytmów mieliby jakieś podejście że mój zorientowany na semantykę mózg mógł przeoczyć. PS: Przyszło mi do głowy, że przetwarzanie języka naturalnego, o którym zupełnie nie wiem, może być fajnym podejściem; ale _jeśli_ NLP jest tutaj dobrą strategią, to trochę nie ma znaczenia, ponieważ nie mam z tym żadnego doświadczenia i nie mam czasu na naukę, a następnie wdrożenie / ta funkcja nie jest tego warta dla klienta.


title: Zmiana licencji oryginalnego źródła z Apache 2.0 na LGPL

text: Mniej więcej rok temu rozwinąłem projekt na licencji Apache 2.0 i wprowadziłem obszerne zmiany i uzupełnienia do kodu, z których dużą część oddałem swobodnie społeczności. Ostatnio moderator kodu zmienił licencję na LGPLv3 i chciałem się dowiedzieć, czy mam rację, uważając, że ta zmiana licencji nie dotyczy kodu, który sprawdziłem ponad rok temu, a konkretnie nie zmuszając mnie do przestrzegania LGPL i pozostawienie mi swobody działania w ramach Apache 2.0, o ile nie „skażę” swojego widelca nowym kodem z oryginalnego projektu, który został napisany w ramach nowego schematu licencjonowania. A może się mylę?