title: Jak mogę zrozumieć słowo „funktor” z semantycznego punktu widzenia?

text: Kiedy spotykam się z nowymi słowami w żargonie programistycznym, najpierw staram się rozumować o nich z semantycznego i etymologicznego punktu widzenia, jeśli to możliwe (to znaczy, gdy nie są one niejasnymi akronimami). Na przykład, możesz uzyskać początek wskazówki, o co chodzi w takich rzeczach jak polimorfizm, a nawet monada, z pomocą małej greki/łaciny. Przynajmniej, kiedy już nauczysz się tego pojęcia, samo słowo wydaje się dobrze do niego pasować. Myślę, że jest to jeden z powodów, dla których nazywamy rzeczy nazwami, aby zapewnić płynniejszą reprezentację i skojarzenia. Uważam, że Functor jest trudniejszym orzechem do zgryzienia. Nie tyle znaczenie C++ – obiekt, który działa ( _-lub_ ) jako funkcja ( _funct-_ ), ale różne znaczenia funkcjonalne (w ML, Haskell) zdecydowanie mnie zaskoczyły. Z (matematycznego) artykułu Functor Wikipedia wydaje się, że słowo to zostało zapożyczone z językoznawstwa. Myślę, że rozumiem, co oznacza „słowo funkcyjne” lub „funktor” w tym kontekście – słowo, które „sprawia, że działa” w przeciwieństwie do słowa, które „ma sens”. Ale tak naprawdę nie mogę odnieść tego do pojęcia Functora w teorii kategorii, nie mówiąc już o programowaniu funkcjonalnym. Wyobraziłem sobie, że _Functor_ to coś, co tworzy funkcje, zachowuje się jak funkcja lub skrót od „konstruktora funkcjonalnego”, ale żaden z nich nie wydaje się pasować... Jak rozumują to doświadczeni programiści funkcjonalni? Czy po prostu potrzebują jakiejś etykiety, aby umieścić ją przed koncepcją i mieć z nią w porządku? Ogólnie rzecz biorąc, czy nie jest to częściowo powodem, dla którego zaawansowane programowanie funkcjonalne jest trudne do uchwycenia dla zwykłych śmiertelników w porównaniu z, powiedzmy, OO – bardzo abstrakcyjnym, ponieważ nie można go odnieść do niczego znajomego? Zauważ, że nie potrzebuję definicji Functora, tylko wyjaśnienie, które pozwoliłoby mi odnieść go do czegoś bardziej namacalnego, jeśli takowe istnieje.


title: Czy istnieje sposób na wykorzystanie technik RAII w COM?

text: Wpadłam między dwa modele koncepcyjne konstruowania obiektów i mam problem z ustaleniem, jaki standard chcę przyjąć. Wolę programować w .NET i często próbuję używać właściwości RAII i tylko do odczytu, aby tworzyć niezmienne obiekty z ich danymi przekazywanymi przez parametry konstruktora. Był to duży postęp w porównaniu do czasów VB6, kiedy musieliśmy symulować konstruktory i zgodnie z konwencją wywoływać „Init” lub „Factory.Create”, aby uzyskać dobry stan obiektów. Jednak często tworzę wrappery wywoływane przez COM, aby umożliwić mi wywoływanie funkcji za pośrednictwem automatyzacji z innych aplikacji. Jak zapewne wiecie, COM chce, aby obiekty miały konstruktor bez żadnych parametrów. Jest to dysonans ze schematem RAII/niezmienności, którego używałem z takim sukcesem w świecie .NET. Pamiętam starsze modele obiektów, takie jak ADO, w których zwykle tworzysz instancję obiektu, ustawiasz właściwości, takie jak ConnectionString, a następnie wywołujesz Open. Obiekt może być niezmienny nie za pomocą deklaracji ReadOnly, ale przez zgłoszenie wyjątku „Nie można zmienić podczas otwierania” w ustawiaczu właściwości. Czy to najlepszy wzorzec do użycia dla COM? Czy brakuje mi lepszego sposobu na oskórowanie tego kota? Ponieważ RAII wyszedł ze społeczności C++, jak radzą sobie z COM opartym na innym schemacie inicjalizacji?


title: Oszacowanie nakładu pracy i harmonogramu dla projektu prawie bez znanych elementów

text: Zgodnie z moim najlepszym zrozumieniem harmonogram projektu jest ustalany na podstawie szacunkowego nakładu pracy dla poszczególnych zadań (w osobogodzinach) oraz liczby odpowiednich zasobów wykorzystywanych do konkretnego zadania. Jak omówiono w tym pytaniu, rozpoczynamy projekt przy użyciu nowej platformy, wyposażonej w zupełnie nowy interfejs API i zestaw funkcji. Jak oszacować harmonogram zadań biorących udział w projekcie, znając tylko podział zadań najwyższego poziomu? Ponadto, jeśli część wysiłków zostanie przeznaczona na zadania, estymacje będą miały szeroki rozkład prawdopodobieństwa. Jak najlepiej przekazać to samo kierownictwu?


title: Metoda fabryczna a wzorzec projektowy fabryczny

text: Znam wzorce Simple Factory Idiom, Factory Method i Abstract Factory Design. Ale mam dwie sytuacje, których nie jestem pewien, jak wywołać (przykład kodu PHP): class User { public static function LoadUserById($id) { $objUser = new User(); //załaduj szczegóły z bazy danych return $objUser; } } class UserFactory { public function Create($id) { $objUser = new User(); //załaduj szczegóły z bazy danych return $objUser; } } Jakie są te dwie sytuacje? Proste Fabryki (idiom programowania) czy nazywają się inaczej? Czy dobrą praktyką jest nazwanie klasy UserFactory? Czy nie jest to coś, co można pomylić z wzorcem projektowym fabryki A? Czy powinienem użyć innej nazwy, np. UserFinder? Kiedy myślę o wzorcu Factory Design, zawsze myślę o przykładach, w których istnieją rodziny komponentów pochodzące z klasy nadrzędnej, ale tutaj wyraźnie tak nie jest.


title: Kiedy zrezygnować z kompatybilności wstecznej na rzecz nowej, ulepszonej implementacji interfejsu?

text: Pracuję w tej samej firmie programistycznej od ponad dziesięciu lat. W rezultacie zaimplementowałem dużą bazę kodu przy użyciu różnych języków programowania obiektowego. Byłem początkującym programistą, kiedy zaczynałem swoją karierę i niewiele wiedziałem o dobrym interfejsie i zasadach projektowania klas. Chciałbym myśleć, że moje umiejętności projektowania poprawiły się z biegiem czasu, ale teraz napotykam coraz większe trudności w ulepszaniu mojego wcześniejszego kodu z powodu problemów z kompatybilnością wsteczną. Mój kod jest używany przez dużą liczbę klientów w ramach produktów sprzedawanych przez moją firmę. Moje pytanie brzmi: kiedy należy przestać starać się zachować wsteczną kompatybilność starych interfejsów i ugryźć kulę na rzecz wdrożenia zupełnie nowego projektu? Myślę, że nadchodzi moment, w którym zachowanie kompatybilności wstecznej staje się tak dużym obciążeniem, że przydatne zmiany w interfejsach stają się niemożliwe. Czy ktoś miał podobne obawy, kto może przekazać opinię?


title: Przyrostowe i częściowe rysowanie dużych wykresów

text: Mam następujący problem: Tworzę oprogramowanie do wizualizacji danych, gdzie otrzymuję strukturę wykresu i reprezentuję ją w przestrzeni 3D. Do tej pory używałem algorytmów opartych na siłach do rysowania wykresów i działały dobrze, dopóki nie otrzymałem wymagania, aby moje oprogramowanie reprezentowało bardzo dużą liczbę wierzchołków i krawędzi (kilka milionów). Przechowywanie tych wszystkich w pamięci byłoby bardzo niepraktyczne, więc szukam algorytmu, który umożliwi mi przesyłanie strumieniowe małych fragmentów wykresu, gdy „chodzę” po przestrzeni. Jednak główny problem polega na pokazywaniu i dynamicznej repozycjonowaniu wierzchołków, ponieważ nie mam jeszcze predefiniowanych pozycji i muszę je obliczyć. Czy możesz wskazać mi jakieś algorytmy do przyrostowego rysowania i przesyłania strumieniowego wykresu? Z góry dziękuję!


title: programowanie pętli PID w C

text: Jestem inżynierem elektrykiem, który został wepchnięty w cyfrowy świat i uczył się na bieżąco. Programuję procesor TI, aby wykonać pętlę PID (proportional-integral-derivative), zilustrowaną na poniższym diagramie: ![Obraz pętli PID z Wikipedii](http://i.stack.imgur.com/g7Rsk.png) Opiszę to również: Wzmacniacz operacyjny z ujemnym sprzężeniem zwrotnym, z uziemionym zaciskiem nieodwracającym. Wejście przez ujemny zacisk. Pętla sprzężenia zwrotnego to obwód serii RE połączony równolegle z rezystorem, a wszystko to równolegle z nasadką. Czy ktoś ma jakiś pomysł, jak przekonwertować ten obwód do kodu C? Jestem w tym trochę poza moim żywiołem i przydałaby mi się pomoc.


title: Anonimowa licencja na oprogramowanie

text: Zdaję sobie sprawę z niektórych problemów związanych z pojęciem „udostępnienia dzieła do domeny publicznej” (o czym tu i tu wspominam; tej konkretnej dyskusji jeszcze nie słuchałem). IANAL, ale główne problemy wydają się być następujące: 1. Udostępnienie do domeny publicznej nie istnieje w wielu jurysdykcjach; raczej utwór staje się domeną publiczną po _wygaśnięciu_ praw autorskich. 2. Niektóre autorskie prawa osobiste są niezbywalne ze względu na (pewne ratyfikacje) art. 6bis Konwencji Berneńskiej. Czy jednak nadal nie możesz publikować pracy anonimowo? Jeśli anonimowo publikujesz pracę, w taki sposób, że autora nie można udowodnić ani nawet odróżnić, czy nie byłoby to skuteczne „unieważnienie” twojego kodu? Myślę, że tak: od tego czasu żadne roszczenie dotyczące autorstwa nie może zostać potwierdzone, prawa wynikające z autorstwa nie mogą być egzekwowane, nawet przez pierwotnego autora. Jeśli tak, to bardzo chciałbym wiedzieć, jaka licencja zezwalająca (w stylu ISC/MIT/BSD) byłaby odpowiednia dla takich publikacji. (Zwłaszcza, gdy udało im się pozbyć długiego „TO OPROGRAMOWANIE JEST DOSTARCZANE W Zrzeczeniu się odpowiedzialności w stylu „KRZYCZĄCYCH KAPSUŁEK”). Jeśli taka licencja jeszcze nie istnieje, w jaki sposób można zmodyfikować istniejącą licencję, aby była odpowiednia dla anonimowego publikacja?


title: Dlaczego tak trudno jest skłonić ludzi do płacenia za oprogramowanie?

text: Tam, skąd pochodzę, oprogramowanie jest uważane za coś, co można dostać za darmo (to samo dotyczy filmów itp.). Chęć niepłacenia za oprogramowanie jest dość silna. Zniechęca mnie to, że ludzie wolą raczej przechodzić przez obręcze i ryzykować kwestie prawne niż płacić niewielką sumę pieniędzy za oprogramowanie. Ta postawa jest niejako osadzona w społeczeństwie. Po prostu próbuję zrozumieć sytuację. Jak myślisz, co to powoduje? Dlaczego niektórzy ludzie nie płacą za oprogramowanie, nawet jeśli jest tanie i używają go na co dzień?


title: Jak pisać mniej kodu

text: Jakość, którą chciałbym rozwinąć, to pisanie bardziej zwięzłego kodu. Pisząc bardziej zwięźle, przynajmniej moim zdaniem, możliwość dodawania błędów do kodu jest mniejsza. Łatwiej jest odczytać kod dla innych. Moje pytanie brzmi, czy jest to coś, co pochodzi z doświadczenia, czy jest to coś, co możesz zrobić wyraźnie, aby rozwinąć tę jakość?


title: Jak spakować statyczną zawartość poza aplikacją webową?

text: Nasza aplikacja internetowa zawiera zawartość statyczną spakowaną w ramach WAR. Planowaliśmy przenieść go z projektu i hostować bezpośrednio na Apache, aby osiągnąć następujące cele. * Staje się zbyt duży i powiększa rozmiar EAR, co powoduje wolniejsze wdrażanie w węzłach. Szybsze czasy wdrażania. * Przejmij obciążenie serwera aplikacji * Hostuj zawartość statyczną w subdomenie, umożliwiając niektórym przeglądarkom (IE) jednoczesne ładowanie zasobów * Daj nam możliwość korzystania z dalszego buforowania, takiego jak Apache mod_cache, oprócz nagłówków pamięci podręcznej, które wysyłamy do przeglądarek. Używamy wtyczki yuicompressor-maven do agregowania i minimalizowania pliku JS. _Moje pytanie brzmi, jak spakować i zarządzać tą statyczną zawartością poza aplikacją internetową?_ Moje obecne opcje są takie. * Nowy projekt wojenny maven. Nadal używaj tej samej wtyczki do agregacji i kompresji. * Po prostu zwykły katalog w SVN i użyj bezpośrednio kompresora YUI/Google. A może istnieje lepsza technologia do zarządzania treściami statycznymi jako projektem?


title: powiązanie modelu czy kontroler?

text: Próbuję stworzyć aplikację rails, która pozwala użytkownikom przesyłać informacje o swoich zwierzakach. Doszedłem do punktu, w którym moja wiedza jest ograniczona i nie wiem wystarczająco, co/jak można to zrobić, więc mam nadzieję, że odpowiedź będzie stosunkowo łatwa. W tej chwili mam model o nazwie Pet, który obecnie przechowuje podstawowe informacje, takie jak imię, zdjęcie itp., ale zawiera również bardziej szczegółowe dane, takie jak typ, rasa, data urodzenia itp. Chciałbym móc stworzyć model strona, która może dopasować różne rekordy bez konieczności ręcznego kategoryzowania, jeśli ma to sens, aby zwierzę użytkownika mogło być dopasowane do innych zwierząt tej samej rasy, wieku itp. Czytałem o modelach zagnieżdżonych, ponieważ rozumiem, że te informacje można przesłać do 2 modele w jednej formie, ale nie jestem pewien, czy można to zrobić bezpośrednio w osobnym kontrolerze, który byłby widoczny tylko dla użytkowników ze zwierzętami w tych dopasowanych „grupach”, jeśli ma to sens. Więc w istocie najlepszą praktyką jest użycie 1 tabeli do przechowywania wszystkich informacji i po prostu użycie kontrolera do dopasowywania zwierząt na podstawie wierszy o tych samych wartościach, czy też byłoby o wiele prościej mieć formularz z modelem zagnieżdżonym i połączyć 2 tabele ? Główną cechą musi być dopasowanie bez konieczności tworzenia przez użytkownika grupy lub kategoryzowania zwierząt, więc drugi model musiałby dodać identyfikatory do tablicy, zamiast tworzyć coraz więcej wierszy.


title: Języki obsługujące operatory logiczne Unicode

text: Czy istnieją języki programowania, które obsługują użycie operatorów logicznych Unicode? Na przykład, wiele języków programowania używa " **!=** " ponieważ operator _"nie równa się"_, ale w matematyce symbol to " **≠** ". Ponieważ Unicode jest teraz bardziej ustandaryzowany, dlaczego języki programowania nie obsługują ich użycia jako operatorów logicznych? Wiele symboli jest na mojej klawiaturze, po prostu wciskam przycisk `alt`.


title: Gdzie (jeśli istnieje) jest glosariusz IEEE nowszy niż 1990?

text: Szukałem pewnych formalnych definicji, ale nie mogłem znaleźć żadnego IEEE nowszego niż 610, który pochodzi z 1990 roku. Czy mógłbyś mi pomóc?


title: Jakie darmowe systemy śledzenia błędów bardzo dobrze integrują się z gitem?

text: Jaki system śledzenia błędów współpracuje z git i ma takie wymagania? Wymagania: * Pokazuje git commit log * Ukrywa kod źródłowy git Jakie są jego mocne i słabe strony dla proponowanego systemu?


title: Jak wytłumaczyć „zwinnemu” zespołowi, że nadal muszą planować oprogramowanie, które napiszą?

text: W tym tygodniu w pracy znowu dostałem **_agiled_**. Po przejściu przez standardową agile, TDD, współwłasność, metodologię tworzenia ad hoc, w której nigdy nie planujemy niczego poza kilkoma historyjkami użytkowników na kartce, werbalnie przeżuwam techniczne szczegóły integracji z innymi firmami bez robienia naprawdę myślenie lub due dilligence i architektoniczne łączenie całego kodu produkcyjnego z pierwszym testem, który przychodzi komukolwiek do głowy w ciągu ostatnich kilku miesięcy, dochodzimy do końca cyklu wydawniczego i widzimy, że główna widoczna z zewnątrz funkcja, którą rozwijaliśmy, jest zbyt powolna, aby użytkowania, buggy, stając się labiryntowo skomplikowane i całkowicie nieelastyczne. Podczas tego procesu robiono „kolce”, ale nigdy nie udokumentowano i nigdy nie powstał ani jeden projekt architektoniczny (nie było FS, więc co do cholery, jeśli nie wiesz, co rozwijasz, jak możesz to zaplanować lub zbadać ?) - projekt przechodził od pary do pary, z których każda skupiała się tylko na jednej historyjce użytkownika na raz, a wynik był nieunikniony. Aby rozwiązać ten problem, wyszedłem z radaru, przeszedłem (przerażający) wodospad, zaplanowałem, zakodowałem i zasadniczo nie zamieniłem pary i próbowałem jak najwięcej pracować sam - skupiając się na solidnej architekturze i specyfikacjach, a nie na testach jednostkowych, które nadejdzie później, gdy wszystko zostanie przypięte. Kod jest teraz znacznie lepszy i jest całkowicie użyteczny, elastyczny i szybki. Wydaje się, że niektórzy ludzie naprawdę nienawidzili mnie robiąc to i robili wszystko, aby sabotować moje wysiłki (być może nieświadomie), ponieważ jest to sprzeczne ze świętym procesem zwinności. Jak więc jako programista wytłumaczysz zespołowi, że planowanie ich pracy nie jest „niezwinne” i jak wpasowujesz planowanie w proces zwinny? (Nie mówię o IPM; mówię o siadaniu z problemem i naszkicowaniu kompleksowego projektu, który mówi, jak problem powinien być rozwiązany, w sposób wystarczająco szczegółowy, aby każdy, kto nad nim pracuje, wiedział co architektura i wzorce, których powinni używać i gdzie nowy kod powinien zostać zintegrowany z istniejącym kodem)


title: Jakie mam wybory do tworzenia skryptów w trybie piaskownicy po stronie serwera?

text: Tworzę publiczną witrynę internetową, na której użytkownicy udostępniają dane i skrypty, aby przeglądać niektóre dane. Skrypty są uruchamiane po stronie serwera w jakimś rodzaju piaskownicy bez innej interakcji w tym cyklu: mój program Perl odczytuje z bazy danych skrypt stworzony przez użytkownika, dodaje dane do przetworzenia w skrypcie (tj.: dokument JSON), a następnie wywołuje interpreter, zwraca odpowiedź (dokument JSON lub zwykły tekst), zapisuję go w bazie danych za pomocą mojego skryptu perl. Skrypt powinien mieć dostęp do wbudowanych funkcji dodanych przeze mnie do języka skryptowego, ale nic więcej. Więc natknąłem się na node.js jako interpreter javascript i godzinę temu z Google V8 (czy v8 ma sens dla tego rodzaju rzeczy?). Przyszedł mi do głowy również CoffeeScript, ponieważ wygląda ładnie i wciąż jest JavaScriptem. Myślę, że javascript jest wystarczająco rozpowszechniony i bardziej "piaskownica", ponieważ nie ma wywołań systemu operacyjnego ani niczego zdalnie niezabezpieczonego (chyba). nawiasem mówiąc, piszę system na Perlu i PHP dla frontendu. Aby poprawić pytanie: wybieram Javascript, ponieważ uważam, że jest wystarczająco bezpieczny i prosty do wdrożenia za pomocą node.js, ale jakie są inne alternatywy dla osiągnięcia tego rodzaju zadania? Lua? Pyton? Po prostu nie mogę znaleźć informacji o tym, jak poprawnie uruchomić interpreter w piaskownicy.


title: Czy jako architekt oprogramowania mam koncentrować się tak bardzo na analizie logów i naprawianiu błędów innych osób?

text: Od ukończenia studiów (koniec 2005) pracowałem dla tej samej firmy jako inżynier oprogramowania c++. Rok temu awansowałem na architekta oprogramowania, ale coraz bardziej angażowałem się w kwalifikację i naprawianie błędów, wsparcie na poziomie 2. 50% mojego czasu spędziłem w Notepad ++, analizując logi oprogramowania i próbując dowiedzieć się, co poszło nie tak. 30% naprawia błędy innych, a pozostałe (jeśli są) przeglądają kod spaghetti programistów. Zacząłem nienawidzić tego produktu i myśleć o strategii wyjścia z tej firmy. Jak myślisz, co mogę zrobić w tej sytuacji? czy inny architekt oprogramowania wciąż naprawia błędy w kodzie?


title: Czy zautomatyzowany kod ASP.NET MVC jest wystarczająco dobry, aby można go było używać w rzeczywistych aplikacjach?

text: Próbowałem ubrudzić sobie ręce za pomocą ASP.NET MVC, który wygląda całkiem nieźle (nie jestem pewien, ale niektórzy użytkownicy twierdzą, że nawet StackOverflow i inne strony StackExchange z niego skorzystały). Samouczek, który śledzę, pochodzi z witryny asp.net o nazwie MVC Music Store. To dość szybki samouczek i też dobry. Pytanie, które nurtuje mnie podczas przeglądania różnych samouczków dostępnych na tej stronie, w tym MVC Music Store, to zautomatyzowany kod używany do ich tworzenia. Podobnie jak ten samouczek korzysta z Entity Framework 4, który obsługuje paradygmat programistyczny o nazwie „najpierw kod”. Dodajesz klasę Entity dziedziczącą z kontekstu bazy danych Entity Framework , dodajesz dwa wiersze kodu i obsłuży ona nasze operacje tworzenia, odczytu, aktualizacji i usuwania. public class MusicStoreEntities: DbContext { public DbSet<Album> Albumy { get; ustawić; } public DbSet<Gatunek> Gatunki { get; ustawić; } } Podobnie, gdy użyłem funkcji Scaffolding podczas dodawania kontrolera, na przykład : ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/RVt1x.jpg) Robi to cholernie dużo pracy nad własne : * Tworzy nowy StoreManagerController z lokalną zmienną Entity Framework * Dodaje folder StoreManager do folderu Views projektu * Dodaje widok Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml i Index.cshtml , silnie wpisany do klasy Album. Jak widać, życie dewelopera znacznie ułatwiło tę automatyzację, ale pozostaje pytanie, czy ten automatyczny kod jest wystarczająco dobry do rozwoju produkcyjnego? Czy ktoś używa (Czy TAK) używa ich. Czy są jakieś wady związane z tymi kodami, czy należy zachęcać do ich używania?


title: Czym różni się IETF od W3C?

text: Śledzę te organizacje (instytuty, podmioty, cokolwiek) od prawie 3 miesięcy i obie twierdzą, że starają się uczynić Internet lepszym miejscem. Tworzą dokumenty pod nazwą RFC (dla IETF) i Rekomendacja (dla W3C), aby kierować innymi. Kolejna organizacja o nazwie WHATWG rozpoczęła kolejną drogę do rozwoju sieci, a inna społeczność działa pod nazwą Społeczeństwo Internetowe. Nie wiem, dlaczego wiele organizacji? To znaczy, czy nie mogą się po prostu połączyć? Czy naprawdę są różne? Jak?


title: Języki uzupełniające C++

text: Pracuję głównie w C++. Moje pytanie dotyczy programisty C++, jakich języków warto się uczyć z punktu widzenia profilu zawodowego. Na przykład w dzisiejszych czasach widzę dużo pracy przy łączeniu C++ i Php. I odwrotnie, nie widzę dużo pracy przy łączeniu Rubiego i C++ (niestety). Oczywiście nauka innego języka jest korzystna, niezależnie od tego, czy stanowi komplement.


title: Jaki jest dobry, zwięzły sposób wyjaśnienia niebezpieczeństw związanych z programowaniem kopiuj-wklej osobom niebędącym programistami?

text: Szukam dobrej analogii lub metafory, która mogłaby zilustrować problemy programowania kopiuj-wklej dla nie-programistów. Od czasu do czasu robię przeglądy kodu/systemu dla potencjalnych klientów, a jednym z typowych problemów, które widzę, są ogromne ilości kodu kopiuj i wklej w całym ich kodzie. Jest to coś, co rutynowo przywołuję w recenzjach i za każdym razem muszę wyjaśnić, dlaczego jest to problem (jest to szczególnie trudne w przypadku klientów, którzy wiedzą o programowaniu wystarczająco dużo, aby zrozumieć, że ponowne użycie jest dobrą rzeczą, ale nie wystarczy, aby zrozumieć, dlaczego kopiuj-wklej nie jest dobrą formą ponownego wykorzystania). Oczywiście potrafię (i robię) wyjaśnić problem w kategoriach utrzymania kodu, ale byłoby miło mieć dobrą, zwięzłą analogię do tego problemu, która trafiłaby do domu nie-programistów. Premia, jeśli analogia ilustruje, dlaczego wyszukiwanie i zastępowanie nie jest skutecznym rozwiązaniem tego problemu. Jakieś sugestie? Dla wyjaśnienia (na podstawie odpowiedzi Jaroslava poniżej) - nie mówię tutaj o używaniu fragmentów kodu; to, co widzę (niespokojnie często) to kopiowanie i wklejanie ogromnych fragmentów kodu lub dziesięciowierszowy fragment kodu, aby wkleić pewne dane użytkownika (wraz z wbudowanym zapytaniem SQL) do dziesiątek stron PHP lub ASP.NET. Zduplikuj kod z innego miejsca w tym samym projekcie. Aktualizacja: Jest tu kilka naprawdę dobrych odpowiedzi; Wyjaśniłem w komentarzach, dlaczego wybrałem odpowiedź Scotta Whitlocka, ale bardzo, bardzo polecam odpowiedź whatsisname, jeśli masz do czynienia z klientami, którzy w ogóle są zaznajomieni z produkcją.


title: Jak poradzić sobie z tą intensywną sytuacją klienta?

text: Od dwóch tygodni współpracuję z klientem, który nic nie wie o złożoności programowania CMS. Po dwóch tygodniach nasz związek przeszedł od łagodnego dyskomfortu do punktu, w którym powiedziałem „zapomnij o tym, rzucam, jeśli masz zamiar się tak zachowywać”. Problem w tym, że mamy napisany kod na dwa tygodnie (na szczęście na moim serwerze). Wysłałem mu e-maila i powiedziałem, że powinienem zatrzymać zaliczkę, a on może dostać kod. Myślę, że może znaleźć kogoś za granicą, aby dokończyć moje zadania w ciągu kilku dni, ponieważ projekt jest skończony w około 80%. Wydaje się, że uważa to za niesprawiedliwe i chce zwrotu kodu ORAZ zaliczki. Jakie prawa lub jakie drogi powinienem podjąć, aby rozwiązać ten problem? Co byś zrobił? Nie chciałbym oddawać kodu, ponieważ nie uważam, że powinien otrzymać za darmo coś, nad czym pracowałem przez dwa tygodnie. Czuję, że jeśli otrzyma zwrot zaliczki, mam pełne prawo zatrzymać kod i go zniszczyć. Szukam uczciwych odpowiedzi od kolegów programistów. Każda pomoc jest bardzo ceniona.


title: Klient i serwer AJAX IRCX

text: Obecnie pracuję nad systemem IRCX AJAX Chat Based i mam kilka pytań dotyczących implementacji serwera i klienta. Wszelkie sugestie są mile widziane: **Serwer:** Czy powinno to być zaimplementowane jako usługa sieci Web czy aplikacja Windows Form? Mam doświadczenie w tworzeniu serwerów opartych na formularzach Windows, ale zastanawiam się, czy byłoby to lepiej zaimplementowane jako usługa sieciowa, jeśli tak, dlaczego? **Klient:** W jaki sposób są obecnie wdrażane klienty internetowe i jaki jest preferowany sposób implementacji klienta internetowego? Moje dotychczasowe rozwiązanie to: * Formularze internetowe ASP.NET z panelem aktualizacji AJAX (wydaje się to najbardziej opłacalne) * Używanie jQuery łączące się z usługą internetową z limitem czasu JavaScript **Odpytywanie:** Jak często serwer powinien być odpytywany nowe wiadomości? 0,5 sekundy wydaje się trochę za dużo, a wszystko między 2 a 3 sekundami wydaje się powolne? Dzięki za wkład


title: Projekty oprogramowania i/(x) lub sprzętu dla dzieci w wieku przedszkolnym

text: Zaproponowałem udział w przedszkolu mojego dziecka na różne zajęcia (tak, jestem taki szalony), a jednym z nich jest pomoc w odkrywaniu zajęć pozalekcyjnych (duże słowo na przedszkole, ale z braku lepszy... :)) hobby, które mogą, ale nie muszą wiązać się z działalnością zawodową. Na początku myślałem, że nie będzie łatwo, aby przedszkolaki odnosiły się do programowania lub ogólnie wewnętrznego funkcjonowania systemu komputerowego (a jestem bardziej przyzwyczajony do nauczania uczniów gimnazjum na poziomie uniwersyteckim), ale wtedy pomyślałem, że musi być jakiś sposób. Dlatego staram się znaleźć sposoby na wprowadzenie bardzo małych dzieci (3 lata) do systemów komputerowych w zabawny i najlepiej edukacyjny sposób. Oczywiście nie oczekuję, że od razu zaczną rozbijać stosy dla zabawy i zysku (a przynajmniej nie dobrowolnie, chociaż mógłbym wykorzystać okazję do testów dla małych dzieci…), ale jestem przekonany, że musi być sposoby, aby zainteresować ich zarówno: * korzystaniem z systemów, * ciekawością zrozumienia tego, co robią, * interakcją z systemami w celu ich modyfikacji. Myślę, że to ustawienie nie jest tak naprawdę istotne, jest prawie takie samo, jak gdybyś chciał osiągnąć to samo dla własnych dzieci w domu. ## Pomysły Biorąc pod uwagę, że mówimy tutaj o 3-letnich przedszkolakach i że w tym wieku niektóre dzieci są już całkiem pewne w używaniu myszy (niektóre nawet klawiatury, jeśli nie do pisania, to przynajmniej do naciskania niektórych przycisków, do których przyszły kojarzyć się z działaniami), podczas gdy inni nie mieli jeszcze żadnej interakcji z jakimkolwiek komputerem, musi to być: * raczej podstawowe, * zademonstrowane i zagrane w mniej niż 5 lub 10 minut, * możliwe do wykonania w grupie lub w pojedynkę, * skalowalne i rozszerzalne w złożoności, aby dostosować się do ich różnych zdolności. Oczywiste opcje to: * podstawowe, małe gry do zabawy, * interaktywne systemy, takie jak LOGO, Kojo, Squeak i klony (być może nawet prostsze) lub rzeczy, takie jak Lego Systems. Sądzę, że warto zastanowić się zarówno na poziomie oprogramowania, jak i sprzętu: można to zrobić za pomocą komputera stacjonarnego lub laptopa, tabletu, smartfona (lub crap-telefonu, jeśli o to chodzi, o ile może to modyfikować), a nawet zabrać się za zbudowanie czegoś od podstaw (obecnie popularne opcje to Raspberry Pi i Arduino). Prawdopodobnie mogę być w formie gier, zabawnych wizualizacji (które są w dużej mierze grami) z prototypem, wirtualnych światów do odkrycia. Pomyślałem też w tej chwili (i mam nadzieję, że nikogo to nie obrazi), że niektóre podejścia do nauczania zwierząt domowych mogą działać (systemy nagradzania, dotykowa informacja zwrotna i takie rzeczy mogą szybko wskazać dziecku właściwy kierunek, aby zrozumieć, jak to działa, w podobny fason - nie sugeruję szokować dzieciaków!). ## Hmm, czy jest tam prawdziwe pytanie? * Jaki typ systemów może być Twoim zdaniem dobrze dopasowany, zarówno pod względem sprzętu, jak i oprogramowania? * Czy widziałeś takie systemy lub masz coś do zrobienia? * Czy znasz jakieś badania w tej dziedzinie, z wymiernymi wynikami? Każdy wkład jest mile widziany. Nie chodzi o to, że nie widzę opcji: jest ich mnóstwo, ale trudniej jest mi wskazać bardziej konkretny i określony rodzaj projektu/działania, więc myślę, że niektórzy mają wartościowe pomysły lub już istniejące. * * * **Uwaga:** Nie opowiadam się za tym, aby każde dziecko uczyło się programowania, interesowało się systemami komputerowymi, ani żeby wszystkie w klasie zainteresowały się tym wprowadzeniem z czymś więcej niż pustym spojrzeniem . Nie zgadzam się z tym, że „wszyscy skorzystaliby na nauce programowania”. Nie zaszkodzi, ale w żaden sposób nie będzie konieczne. Ale jeśli mógłbym wyjść stamtąd, gdy kilku z nich uśmiechnęło się, używając tej rzeczy (albo do diabła, płakało, ponieważ inni ich odebrali), to wystarczy. * * * ### Podobne pytania, które widziałem i które wydają się uzupełniać to, czego szukam, ale nie dokładnie dla tych samych grup wiekowych lub z tymi samymi celami: * Nauczanie programowania dzieci * Zalecenia dotyczące nauczania dzieci pojęć matematycznych i umiejętności programowania?


title: Asynchroniczne zwracanie danych hierarchicznych przy użyciu .NET TPL... jak powinien wyglądać mój zwracany obiekt?

text: Chcę użyć .NET TPL, aby asynchronicznie wykonać `DIR /S` i przeszukać każdy podkatalog na dysku twardym i chcę wyszukać słowo w każdym pliku... jak powinien wyglądać mój interfejs API? W tym scenariuszu wiem, że każdy podkatalog będzie miał 0..10000 plików lub 0...10000 katalogów. Wiem, że drzewo jest niezrównoważone i chcę zwrócić dane (w odniesieniu do jego pozycji w hierarchii), gdy tylko będą dostępne. Interesuje mnie jak najszybsze uzyskanie danych, ale chcę również zaktualizować ten wynik, jeśli zostaną znalezione "lepsze" dane (lepsze znaczy bliżej korzenia c :) Mogę również być zainteresowany znalezieniem wszystkich dopasowań w odniesieniu do jego pozycji w hierarchii. (zbliżony do raportu) > **Pytanie:** > > Jak mam zwrócić dane dzwoniącemu? Moje pierwsze przypuszczenie jest takie, że myślę, że potrzebuję **obiektu współdzielonego**, który utrzyma bieżący "stan" przechodzenia (started | notstarted | complete ) i może opierać się na `System.Collections.Concurrent`. Innym pomysłem, który rozważam, jest **wzorzec konsumenta/producenta** (który może obsłużyć ConcurrentCollections), jednak nie jestem pewien, jak „wyglądają” obiekty. Opcjonalne ograniczenie logiczne: API nie musi się tym zająć, ale w moim projekcie „rzeczywistym”, jeśli katalog zawiera pliki, tylko jeden plik będzie zawierał słowo, którego szukam. Gdyby ktoś dosłownie wykonał `DIR /S` jak opisano powyżej, musiałby uwzględnić więcej niż jeden pasujący plik w podkatalogu. * * * **Więcej informacji** : Używam Azure Tables do przechowywania hierarchii danych przy użyciu tych metod rozszerzenia TPL. „Węzeł” to tabela. Nie tylko każdy węzeł w hierarchii ma relację z dowolną liczbą węzłów, ale każdy węzeł może mieć wzajemne łącze z powrotem do dowolnego innego węzła. Może to mieć problemy z rekurencją, ale zajmuję się tym za pomocą obiektu udostępnionego w mojej pętli rekurencji. Zauważ, że każdy „węzeł” ma również możliwość przechowywania danych lokalnych, unikalnych dla tego węzła. Właśnie tych informacji szukam. Innymi słowy, szukam określonego stałego RowKey w hierarchii węzłów. Kiedy szukam stałego RowKey w hierarchii, jestem zainteresowany uzyskaniem wyników SZYBKO (pierwszy znaleziony węzeł), ale wolę dane, które są "bliżej" punktu początkowego hierarchii. Ponieważ wiele węzłów może mieć konkretny RowKey, którym jestem zainteresowany, czasami mogę chcieć uzyskać raport o WSZYSTKICH węzłach, które zawierają ten RowKey.


title: Od czego zacząć naukę korzystania z bibliotek Boost?

text: Boost od niedawna jest dostępny w projekcie, nad którym pracuję i nie mam z nim dużego doświadczenia. Biblioteka ma tak wiele części i funkcji, że trudno jest wiedzieć, od czego zacząć jej naukę - zwłaszcza, że będę się jej uczyć podczas tworzenia kodu produkcyjnego (więc nie może mnie to zbytnio spowolnić). Byłbym bardzo wdzięczny, gdyby ktoś mógł wymienić około 3 do 5 funkcji, które są bardzo przydatne w ogólnym, codziennym programowaniu i wyjaśnić, dlaczego są przydatne. Wtedy będę mógł zacząć się ich uczyć i korzystać z nich - to przynajmniej da mi przyczółek w bibliotece i przyjazne miejsce do rozpoczęcia nauki / stosowania :) Z góry dziękuję!


title: Czy dwóch programistów może stworzyć zwinny zespół?

text: W tej chwili pracuję sam nad projektem firmy, ale wkrótce firma otrzyma młodszego programistę, którego będę mentorem. Biorąc pod uwagę, że przez kilka pierwszych dni będzie się dużo uczył, planuję używać programowania w parach przez pierwsze kilka tygodni. Wierzę, że programowanie w parach sprawiłoby, że codzienny stój byłby zbędną praktyką. Na pewno zachowam retrospektywę tak samo jak tdd. Chciałem zapytać, czy zasugerowałbyś jakieś inne zwinne praktyki, które przyniosłyby korzyści naszemu małemu zespołowi dwóch programistów? Co ci się udało?


title: Profesjonalizm nazwy użytkownika/uchwytu online

text: W przeszłości używałem i nadal używam nazwy „thanatos” na wielu stronach internetowych, a jeśli nie jest ona dostępna (co zdarza się w około 50% przypadków), „deathanatos”. „Thanatos” to imię greckiego boga lub personifikacji śmierci (nie mylić z Hadesem, greckim bogiem podziemi). „Dea” to naturalna gra słów, która sprawia, że uchwyt działa w sytuacjach, gdy preferowany uchwyt jest już zajęty, bez konieczności uciekania się do liczb i pozostawania wymawialnym. Przyjąłem tę rączkę wiele lat temu — w tym czasie czytałem „Mitologię” Edith Hamilton i „Na bladym koniu” Piersa Anthony'ego, obydwa nadal moje ulubione, i właśnie z tego narodziła się nazwa. Kiedy stworzyłem ten uchwyt, byłem dość młody i ceniłem prywatność w Internecie, nie podając swojego imienia. Ponieważ stałem się bardziej kompetentnym programistą, zaczynam chcieć wydawać niektóre moje prywatne prace na licencjach FOSS itp., a czasem pod własnym nazwiskiem. To zaczęło wiązać ten uchwyt z moim prawdziwym imieniem. Stałem się coraz bardziej świadomy swojego „wizerunku internetowego” w ciągu ostatnich kilku lat, ponieważ szukałem pracy. Jako programista mam więcej niż przeciętną obecność w sieci i zacząłem się zastanawiać: czy ta nazwa uchwytu jest profesjonalna? Czy nazwa uchwytu ma znaczenie zawodowe? Czy powinienem „rebranding”? (Chociaż ktoś oczywiście chce uniknąć nienawistnych lub w inny sposób niesmacznych imion, czy temat taki jak „śmierć” (z którą moje nazwisko jest związane) jest właściwy? Na co można by się krzywić?) * * * Aby uczynić to trochę bardziej programistycznym specyficzne: Programiści są online — dużo — a niektórzy z nas (i niektórzy, którzy nie są nami) mają tendencję do kładzenia nacisku na „obecność w sieci”. Twierdzę, że rozsądny programista (lub ktokolwiek w zawodzie, który często wchodzi w interakcję online) byłby świadomy ich obecności w sieci. Chociaż nie ogranicza się wyłącznie do programistów, na dobre lub na złe, jest częścią naszego świata.


title: Jak zaprojektowałbyś ogólną warstwę dla okien OpenGL, która nie dba o to, jak faktycznie wygląda program pod spodem?

text: Rodzaje okien OpenGL, do których się odnoszę, to GLFW, GLUT, SDL itp. Wyobraź sobie trzy programy C++: (ignoruj składnię) Gra A: class Gra resize() keyEvent() Gra B: resize() keyEvent() Gra C : class Key event() class Display resize() W A wszystko jest w jednej klasie, w B nic nie jest w klasie, aw C dwa zdarzenia mają swoje własne klasy. Innym, czego nie pokazano, jest podklasa dostarczonej klasy „Game”, która ma przeciążone predefiniowane funkcje. Chciałbym rozsądnych środków, które umożliwiłyby głównej bibliotece delegowanie zadań do każdego z tych trzech przypadków. Rozwiązanie nie powinno wymagać oddzielnego przechowywania „tego” parametru. Wymyśliłem kilka pomysłów, jeden to sposób odwzorowania funkcji w funktorze. Innym były lambdy. Lambdy nie są w porządku, ponieważ nie są jeszcze szeroko zaimplementowane. (Wybrane kompilatory to VC 2010, gcc (najnowsza stabilna) i clang firmy Apple). Wszelkie nowe funkcje C++ 2011, które są szeroko zaimplementowane, to rozsądne przemyślenia. Pan z miejscowej uczelni zasugerował coś podobnego do funktora, ale nie pamiętam funkcji, o której mówił.


title: Jak nazywasz klienta klienta w dokumencie specyfikacji, przypadku użycia lub scenariuszu?

text: Mój zespół i ja opracowujemy oprogramowanie, którego nasi klienci będą używać do interakcji z klientami. Ponadto jemy również własne dogfood i sami używamy oprogramowania do interakcji z naszymi klientami. Dlatego czasami może być trudno wyjaśnić przypadki użycia i scenariusze, ponieważ nasi pracownicy mogą być operatorami, nasi klienci mogą być operatorami, a klienci naszych klientów mogą być gośćmi. Jednak nasi klienci mogą być również gośćmi wchodzącymi w interakcję z pracownikami naszego operatora, klienci naszych klientów mogą być gośćmi wchodzącymi w interakcję z naszym klientem lub naszym pracownikiem. Oto model, w którym: A to pracownik B to klient C to klient naszych klientów X wchodzi w interakcję z Y Operator --> Gość A --> B A --> C B --> C Ponieważ czasami nasi klienci mogą odgrywać różne role , czasami konieczne jest odniesienie się do konkretnej roli, Operatora lub Gościa, zamiast Pracownika i Klienta. Dużo jest też mówienia przez cały czas „klient klienta”. Zastanawiałem się, jak inne sklepy programistyczne radzą sobie z tymi szczegółami semantycznymi podczas pisania swoich przypadków użycia i scenariuszy. * Czy istnieją jednowyrazowe, ogólne terminy, które mogą odnosić się do dowolnego produktu, w którym występuje aktor trzeciego poziomu? * Oprócz używania określonych ról, Operatora i Gościa, jakich słów można użyć do identyfikacji klienta lub klienta? Słowo musiałoby być na tyle krótkie, aby mogło zostać przyjęte w organizacji. Jeśli jest dłuższy niż kilka sylab, jego skrócona forma musi nadal odróżniać go od innych aktorów.


title: Algorytm tworzenia grup klastrów na dwóch kryteriach

text: Chciałbym pogrupować populację na podstawie dwóch kryteriów. Posłużę się analogią, aby uprościć moje pytanie. Powiedzmy, że chcę mieć _n_ liczbę grup. Chcę wypełnić te grupy w oparciu o wiek i wagę osoby, tak aby wszystkie grupy zawierały mniej więcej ten sam całkowity wiek i były równomiernie rozłożone pod względem masy (tak, aby w każdej grupie było mniej więcej tyle samo ciężkich i lekkich osób). Jakiego algorytmu mogę użyć do zautomatyzowania tego procesu? Czy istnieje prosta formuła Excela lub inna metoda? **AKTUALIZACJA** Oto motywacja tej analizy statystycznej. Chciałbym ustawić partycjonowanie w bazie danych, która będzie miała najlepszą wydajność. Potrzebuję przechowywać dużo danych pogrupowanych według powiatów. Nie wiem z góry, jaka byłaby najlepsza liczba partycji. Partycje powinny być jednolite, tak aby zawierały mniej więcej taką samą liczbę wierszy. Partycja powinna zawierać wiersze danych dla co najmniej jednego hrabstwa. Każdy powiat zostanie uszeregowany według częstotliwości i ewentualnie ilości aktualizacji. Partycje powinny być budowane w taki sposób, aby często aktualizowane dane powiatowe były równomiernie rozprowadzane. Wydaje się, że nie ma na to prostego sposobu. Więc jaki algorytm by do tego działał? Prawdopodobnie nie używałbym VBA do kodowania, zamiast tego najprawdopodobniej użyłbym perla do napisania programu do przeprowadzania analizy. Czy istnieją gotowe narzędzia statystyczne, które przeprowadzają tego typu analizy? Pozwólcie, że wyjaśnię, co mam na myśli, mówiąc _n_ liczba grup. Zasadniczo wybiorę kilka grup (partycji), podłączę je do narzędzia do formułowania lub analizy lub niestandardowego programu. Następnie powtórzę ten proces dla innej liczby grup (partycji), aż znajdę metodą prób i błędów liczbę partycji, która zapewnia najlepszą wydajność. Może jest nazwa dla tego typu analiz? Coś, co mógłbym spróbować znaleźć w wyszukiwarce?


title: Jak przekonać programistów do przestrzegania podstawowych zasad

text: Jest kilka zasad, o których przestrzeganie bardzo często muszę prosić programistów. Piszą kod i jeśli to działa, praca jest dla nich po prostu skończona. Najbardziej podstawowe zasady to: * Zatwierdzanie zmian * Niezapisywanie problemów z modelami w widoku lub kontrolerach * Unikanie twardego kodowania Czy możesz mi opowiedzieć o swoich doświadczeniach? Jak sobie z tym radzisz?


title: C++ - Najlepszy sposób na centralne repozytorium danych

text: Koduję w C++. Mam serwer, z którym będą się łączyć klienci, a każdy klient zostaje wydzielony do własnego wątku do komunikacji. Ten serwer obsługuje grę, więc istnieją informacje, które muszą być dzielone między wszystkimi wątkami klienta, a także innymi wątkami, które zdecyduję się odrodzić. Te dane są jak dane poziomu, gracze online itp., więc wszystkie możliwe wątki mogą mieć dostęp do dowolnych danych w dowolnym momencie. Kiedy robiłem to w C#, miałem po prostu statyczne statyczne ze wszystkimi polami statycznymi. Czy istnieje lepszy sposób na zrobienie tego? Naprawdę nie chcę mieć do czynienia z przekazywaniem wszędzie referencji do określonego obiektu, ale myślę, że moja obecna implementacja jest sprzeczna z OOP itp. Czy byłby to dobry przypadek do użycia wzorca projektowego singleton? Wszelkie inne pomysły są mile widziane!


title: Co to jest oprogramowanie do zarządzania procesami biznesowymi?

text: Jestem w stanie napisać coś w stylu oprogramowania do zarządzania procesami biznesowymi (BPM) dla małej lub średniej firmy, ale nie mam pojęcia o celach projektowych i wzorcach, które mogę dostosować do typowego BPM. Co definiuje BPM i czy istnieją do niego typowe podejścia? Jak mogę dowiedzieć się więcej na ten temat?


title: Najlepsze praktyki zastępowania licencjonowanego oprogramowania rozwiązaniem wewnętrznym

text: Moja firma od kilku lat udziela licencji na aplikację komercyjną, aby zaspokoić nasze potrzeby. Programiści (w tym ja) modyfikują (za pozwoleniem) oprogramowanie, aby lepiej odpowiadało naszym potrzebom. Teraz mówimy o zastąpieniu licencjonowanego oprogramowania rozwiązaniem własnym, które sami tworzymy. Chcemy być uczciwi (i legalni) w naszych działaniach, ale wszyscy byliśmy pod wpływem pomysłów, które mieliśmy podczas hakowania. Jestem pewien, że to nie pierwszy raz, kiedy to się zdarzyło i zastanawiałem się, czy istnieją wspólne praktyki lub wzorce rozwoju, które są stosowane w takich sytuacjach?


title: Wydrukuj listę o stałej szerokości posortowaną według kolumn

text: Mam listę o różnej długości, gdzie przedmioty to sznurki o różnej długości. Chcę je wydrukować według (dublowanego N)/kolejności według kolumny. Główne punkty to: * Kolumny powinny mieć stałą szerokość == najszersze dane w tej kolumnie. * Powinien być jak najbardziej zwarty. * Liczba kolumn zależy od dostępnej szerokości płótna. * Kolejność elementów **nie** powinna być zmieniana. * _(Lista pozycji drukowanych kolumnowo w porządku poziomym mnie obrzydza.)_ Opcjonalnie: * Dystrybucja powinna faworyzować lewy dolny lub prawy górny. Obecnie używam tego w terminalu przez bash, C itp., ale inne zastosowania nie są trudne do wyobrażenia. Wynikiem obliczeń powinny być: * kolumny * wiersze * szerokość każdej kolumny Dzięki temu można dość łatwo wydrukować dane w stałej tabeli z kolumnami. **Główne pytanie** : Czy jest na to jakiś sprytny sposób. _(Inspiruje mnie myśl komputerowa Knutha.)_ Moje obecne podejście jest raczej proste. Trudno sprecyzować pytanie bez kilku krwawych szczegółów, więc zaczynamy: * * * ## Przykładowe dane Np. (według indeksu tablicy ciągów): 0 4 8 12 lub 0 4 8 12 lub 0 3 6 9 12 15 1 5 9 13 1 5 9 13 1 4 7 10 13 2 6 10 14 2 6 10 2 5 8 11 14 3 7 11 15 3 7 11 faworyzując dolną lewą faworyzując górną prawą 0 4 8 12 0 4 8 11 1 5 9 13 1 5 9 12 2 6 10 2 6 10 13 3 7 11 3 7 Np. (według danych - rzeczywistych wyników): 0) Numer pozycji 00000 4) Numer pozycji 04 8) Numer pozycji 008 12) Numer pozycji 00012 1) Numer pozycji 00001 5) Numer pozycji 5 9) Numer pozycji 00009 13) Numer pozycji 0013 2) numer pozycji 02 6) numer pozycji 00000006 10) numer pozycji 10 3) numer pozycji 003 7) numer pozycji 7 11) numer pozycji 11 * * * ## Aktualna realizacja Na dzień dzisiejszy robię to poprzez (w przybliżeniu) m.in. w bash: 1. Dodanie długości każdego elementu do tablicy „soczewki” i śledzenie „najdłuższego” elementu. 2. Dodaj szerokość dla liczby + 1 dla `)` \+ 1 dla `spacji` do `najdłuższego` elementu. 3. Oblicz maksymalne kolumny przy danej szerokości. 4. Ponowne obliczenie szerokości numeru pozycji (ten przed `')'' w druku.) dla każdej kolumny. 5. Obliczanie rzeczywistej najdłuższej szerokości elementów w każdej kolumnie. 6. Przeliczanie: while `lines` > 1 ; do * Dostępna szerokość = Szerokość kanwy - całkowita szerokość wydruku * Test: Znajdź najdłuższy element w ostatniej kolumnie tak, jakby kolumny zostały powiększone o 1. * Jeśli najdłuższa_w_ostatniej_teście_kolumny < dostępna szerokość, zwiększ kolumny o 1. przelicz wszystkie szerokości kolumn. Przerwa w przeciwnym razie Koniec Jeśli zrobione 7. Wydrukuj listę. * * * ## Myśli Nie mogę pomóc, ale zastanawiam się, czy istnieje jakiś sposób na obliczenie tego innymi sposobami. Np. za pomocą matematyki macierzowej, albo może jakiegoś fajnego algorytmu. Być może trudne w bashu, ale w C przez wskaźniki do struktur lub języków obiektowych. Przykład gratia: struct item { int len; char *val; } struct item items = {{5, "Hello"}, {3, "You"}, ...} Co dałoby macierz typowo # index:length 0:5 1:2 2:1 3:3 4 :5 5:2 6:6 7:9 8:1 9:6 Następnie przez ograniczenie sumy każdego wiersza <= dostępnej szerokości, np. 25, zmień macierz. najdłuższy: 5 5 9 6 => suma 25 -------------------------- 5 3 6 1 => suma 15 5 5 9 6 => suma 25 1 2 1 => suma 4


title: Tworzenie grupy badawczej

text: Czy ktoś miał wcześniej doświadczenie w tworzeniu grupy analitycznej, aby umożliwić osobom (pracownikom) pracę nad uzyskaniem certyfikatu podczas pracy. Istnieje wiele przebojów Google na ten temat, ale byłbym szczególnie zainteresowany anegdotycznymi doświadczeniami ludzi na tym forum. W szczególności: 1. Jaki był format? 2. Jaki rodzaj zaangażowania jest wymagany, zarówno indywidualny, jak i pracodawca 3. Optymalna wielkość grupy 4. Długość i częstotliwość spotkań 5. Absolutnie wszystko inne, co ma znaczenie.


title: Mam parowanie adresów URL i identyfikatorów i wysyłam adresy URL do interfejsu API, który zwraca w dowolnej kolejności. Jak mam je sparować?

text: Jest to problem programistyczny, z którym jeszcze się nie spotkałem i chcę się upewnić, że radzę sobie z nim w efektywny sposób. Mam tablicę słowników, z których każdy składa się z klucza „url” i klucza „id” z odpowiadającymi im wartościami. Następnie iteruję po tej tablicy i wrzucam każdą wartość adresu URL do obiektu żądania, który następnie wysyłam do interfejsu API w celu przetworzenia. API odsyła je wszystkie na raz, niekoniecznie w kolejności, w jakiej je wysłałem z innymi atrybutami, których używam do zbierania. **Moje pytanie brzmi:** Teraz, gdy mam już wszystkie te adresy URL i ich dane, w jaki sposób mogę dopasować je z powrotem do identyfikatorów, którym odpowiadały, aby dodać wszystkie te atrybuty (identyfikator + nowe atrybuty zwrócone przez interfejs API) do bazy danych? **Moje rozwiązanie:** utwórz _jeden_ słownik z adresem URL każdego elementu jako _klucz_ i identyfikatorem jako _wartość_ klucza, a gdy odzyskam adresy URL, po prostu znajdź wartość, która odpowiada na ten klucz adresu URL. Czy istnieje lepsze rozwiązanie tego problemu? Może pod względem architektonicznym powinienem to wszystko zrobić inaczej, w sposób, który ułatwi odpowiedź?


title: Łączenie się z OAuth, radzenie sobie z wylogowaniem i sesjami przeglądarki

text: Pracuję nad aplikacją internetową typu open source (Moodle), która łączy się z wieloma zewnętrznymi usługami, takimi jak Dysk Google, Dropbox itp., aby umożliwić użytkownikom wymianę plików z tymi usługami. Do łączenia się z tymi usługami używamy przede wszystkim interfejsów API opartych na protokole OAuth. Jednym z problemów _interakcji użytkownika, z jakimi mamy do czynienia, jest to, że nasi użytkownicy nie oczekują, że po zalogowaniu się do usługi zewnętrznej pozostaną w niej zalogowani. Brzmi to głupio, ale scenariusz jest następujący: 1. Użytkownik chce pobrać plik ze swojego konta Dysku Google 2. Moodle prosi o token oauth2 od Google, aby przeglądać dysk Google 3. Użytkownik nie jest zalogowany do Google, więc musi się zalogować do Google 4. Moodle otrzymuje token, a użytkownik prowadzi swoją działalność w Moodle 5. Użytkownik wylogowuje się z Moodle i nie spodziewa się, że jest nadal zalogowany w Google Mój _punkt widzenia programisty_ polega na tym, że za sesję przeglądarki odpowiada wyłącznie użytkownik i nasza aplikacja powinna nie angażuj się. Ale cały czas słyszymy od naszych użytkowników o tym błędnym przekonaniu. Jest to szczególnie problem, ponieważ nasza aplikacja jest często używana w środowiskach współdzielonych. Czy istnieje dobry wzorzec radzenia sobie z tym problemem, którego używają inne aplikacje?


title: Argumenty za programowaniem funkcjonalnym

text: Niedawno uczę się F# dla zabawy (jestem programistą VB.NET/C#) i naprawdę podoba mi się to, co ma do zaoferowania. Teoretycznie tak jest. Ale mam problem z wymyślaniem scenariuszy, w których wybrałbym kodowanie w języku F#, a nie w C#. Jakieś pomysły?


title: Darmowe licencje na aplikacje — czy to może być Creative Commons?

text: Tworzę darmową aplikację Nokia, do której zamierzam wykorzystać obrazy ze wspólnej kreatywnej strony internetowej. Teraz moje pytanie brzmi, czy darmowa aplikacja jest objęta Creative Commons, ponieważ nie jest płatna? Z góry dziękuję.


title: Jakie zmiany są zbyt duże, aby można je było ułatwić odpowiednim projektem?

text: To dość niejasne pytanie, ale jest to coś, na co nigdy nie czułem, aby odpowiedź była zadowalająca, czytając o odpowiednim projekcie. Ogólnie rzecz biorąc, podczas nauki programowania obiektowego, abstrakcji, rozkładania na czynniki itp. Święty Graal projektowania – i powód, dla którego zawsze twierdzą, że używasz omawianych technik programistycznych – jest taki, że sprawi to, że Twój program będzie „łatwy do zmiany” , „utrzymywalny”, „elastyczny” lub dowolny z synonimów używanych do wyrażenia takiej produktywnie brzmiącej koncepcji. Oznaczając ivary jako prywatne, dzieląc kod na wiele małych, samodzielnych metod, utrzymując ogólny interfejs, podobno zyskujesz możliwość modyfikowania swojego programu z całkowitą łatwością i gracją. W przypadku stosunkowo niewielkich zmian działało to dla mnie dobrze. Zmiany w wewnętrznych strukturach danych używanych przez klasę w celu zwiększenia wydajności nigdy nie były główną trudnością, podobnie jak zmiany w interfejsie użytkownika, niezależne od interfejsu API, takie jak przeprojektowanie systemu wprowadzania tekstu lub przeróbka grafiki elementu rozgrywki . Wszystkie te zmiany wydają się z natury niezależne. Żadna z nich nie pociąga za sobą żadnych zmian w zachowaniu lub projekcie komponentu twojego programu, który jest modyfikowany, o ile dotyczy to kodu zewnętrznego. Niezależnie od tego, czy piszesz proceduralnie, czy w stylu OO, z dużymi lub małymi funkcjami, są to łatwe zmiany, nawet jeśli masz tylko umiarkowanie dobry projekt. Jednak za każdym razem, gdy zmiany stają się duże i włochate – to znaczy zmiany w API – żaden z moich cennych „wzorów” nigdy nie przychodzi na ratunek. Duża zmiana pozostaje duża, kod, którego dotyczy problem, pozostaje naruszony, a przede mną wiele godzin pracy nad generowaniem błędów. Więc moje pytanie jest takie. Jak dużą zmianę może ułatwić właściwy projekt? Czy istnieje jakaś dalsza technika projektowania, albo nieznana mi, albo której nie udało mi się wdrożyć, która naprawdę sprawia, że lepko brzmiąca modyfikacja jest prosta, czy też ta obietnica (którą słyszałem składaną przez tak wiele różnych paradygmatów) jest tylko fajnym pomysłem, całkowicie oderwany od niezmiennych prawd tworzenia oprogramowania? Czy istnieje „narzędzie do zmiany”, które mogę dodać do mojego paska narzędzi? Konkretnie, problem, z którym się zmagam, który doprowadził mnie na fora, jest następujący: pracowałem nad implementacją interpretowanego języka programowania (zaimplementowanego w D, ale to nie jest istotne) i zdecydowałem, że argumenty moich zamknięć powinny być oparte na słowach kluczowych, a nie pozycyjne, jak to jest obecnie. Wymaga to zmodyfikowania całego istniejącego kodu, który wywołuje funkcje anonimowe, co na szczęście jest dość małe, ponieważ jestem na wczesnym etapie rozwoju mojego języka (< 2000 linii), ale byłoby ogromne, gdybym podjął tę decyzję na późniejszym etapie. Czy w takiej sytuacji jest jakiś sposób, aby poprzez odpowiednie przewidywanie w projektowaniu ułatwić tę modyfikację, czy też niektóre (większość) zmian są z natury daleko idące? Jestem ciekaw, czy jest to w jakikolwiek sposób porażka moich własnych umiejętności projektowych - jeśli tak, bardzo chętnie poprawiłbym je o niezbędny materiał do czytania, jeśli istnieje sposób na złagodzenie powagi problemu. Żeby było jasne, nie jestem w żaden sposób sceptyczny wobec OOP ani innych powszechnie używanych wzorców. Dla mnie jednak ich zalety tkwią w oryginalnym pisaniu, a nie utrzymywaniu podstaw kodu. Dziedziczenie pozwala dobrze wyabstrahować powtarzające się wzorce, polimorfizm pozwala na oddzielenie kodu według funkcji rozumianej przez człowieka (która klasa) zamiast efektu rozumianego przez maszynę (która gałąź instrukcji `switch`) i małych, samodzielnych funkcji pozwalają pisać w bardzo przyjemnym stylu „od dołu do góry”. Jednak sceptycznie podchodzę do ich twierdzeń o elastyczności.


title: Jak najlepiej rozpowszechniać ustawienia konfiguracyjne specyficzne dla klienta

text: Piszę aplikację komputerową WinForms, która zostanie wysłana do kilku różnych klientów i zastanawiam się, jaki jest najlepszy sposób na zaimplementowanie pliku konfiguracyjnego użytkownika. Normalnie używałbym wbudowanego `Settings.settings` lub `app.config` do przechowywania ustawień użytkownika, ale w tym przypadku to, co chcę zapisać, jest unikalne dla każdego klienta, chcę, aby zostało skonfigurowane przed wysłaniem i chcę aby uniknąć ponownej kompilacji za każdym razem, gdy wysyłamy do nowego klienta. To, co chcę, aby mój plik konfiguracyjny robił, to przechowywanie informacji o grafice specyficznej dla klienta używanej w programie i niektórych (zaszyfrowanych) haseł. Nie podejrzewamy, że użytkownicy będą włamywać się do czegokolwiek w programie; po prostu staramy się, aby zwykli użytkownicy na poziomie technicznym nie mogli wprowadzać zmian lub uzyskiwać dostępu do niektórych modułów, które menedżer powinien zmienić. Do tej pory hasło było zakodowane na sztywno i przez kilka lat użytkowania wszyscy dowiedzieli się, co to jest. Chcielibyśmy mieć większą kontrolę nad tym, gdzie trafiają hasła, ale niekoniecznie dawać klientom kontrolę nad zmianami haseł. Napisałem osobny program, który (de)serializuje klasę konfiguracyjną do pliku XML, który zostanie umieszczony w odpowiednim katalogu podczas instalacji, aby wszyscy ludzie musieli (po tym jak zniknę z obrazu) mieć plik `.msi ` programu, utwórz plik konfiguracyjny xml za pomocą tego oddzielnego programu, umieść żądaną grafikę w podkatalogu i spakuj wszystko. Następnie, gdy użytkownik rozpakuje i zainstaluje, wszystko zostanie umieszczone we właściwym miejscu. Kiedy mój program się ładuje, szuka mojego pliku konfiguracyjnego, aby zakończyć ładowanie. Jeśli nie może go znaleźć, daje użytkownikowi możliwość zlokalizowania go, w przeciwnym razie program się nie otworzy. Czytałem o klasie `ConfigurationManager`, ale nie wiem, jak najlepiej ją wykorzystać. Nie znalazłem zbyt wiele na ludziach używających zewnętrznych plików konfiguracyjnych i nie jestem pewien, czy moja sytuacja jest naprawdę wyjątkowa, czy też nie myślę wystarczająco wewnątrz pudełka. Czy to dobry projekt? Czy powinienem robić to inaczej? Jeśli miałeś podobną sytuację, jak ją rozwiązałeś?


title: Czy certyfikaty programisty mogą zastąpić wymagania dotyczące stopnia naukowego?

text: Jestem technikiem komputerowym bez wykształcenia informatycznego i planuję zostać programistą Java. Moje pytanie brzmi, czy jeśli zdam certyfikat Java, czy to wystarczy, aby dostać pracę, ponieważ nie mam tytułu licencjata z informatyki? Mówiąc bardziej ogólnie, czy certyfikaty programisty mogą zastąpić określony wymóg dyplomu w ogłoszeniu o pracę?


title: Pytanie kompozytora PHP

text: dopiero zaczynam pracę z kompozytorem i mam kilka pytań. Kiedy używam kompozytora do dodania zależności, zależność zostaje dodana do katalogu Vendor mojego folderu. Nowo dodany pakiet zawiera nie tylko kod źródłowy tego pakietu, ale wszystkie pliki wymagane przez programistę packagist do przetestowania i dodania tego pakietu do repozytorium packagist (composer.json, .travis.yaml, license, readme.md, itp.) . Czy w przypadku mojego projektu muszę przechowywać wymagane przez dostawcę pliki pakietowe w moim projekcie? Czy mogę trochę uporządkować strukturę folderów pakietów? Dodałem pakiet, Slim micro framework, który po instalacji umieszcza pliki źródłowe w trzech katalogach głęboko, `../vendor/slim/slim/Slim/(source Files)`. Czy warto przenieść te pliki do górnego katalogu Slim, np. `../vendor/Slim/(pliki źródłowe)`? Czy może to zrujnuje integralność pakietu?


title: Czy programowanie mobilne (Android) korzysta z programowania obiektowego?

text: Mój rozwój na Androidzie opiera się na programach naukowych i podczas ich tworzenia większość kodu jest w jednej lub dwóch długich klasach. Kiedy przychodzę do wdrażania tych programów, staram się wszystko rozdzielić i używać klas i obiektów tak, jak w przypadku aplikacji komputerowej Java. Jednak czytanie poradnika Projektowanie pod kątem wydajności | Programiści Androida o wewnętrznych Getters/Setters wydaje się, że OO nie jest dobrym podejściem. Moje pytanie brzmi, jakie jest najlepsze podejście do projektowania aplikacji na Androida, czy nadal powinienem używać wielu klas z getterami/setterami i dużą ilością obiektów przechodzących. Wydaje się to sprzeczne z intuicją myślenie o architekturze Androida, ale również nie wydaje się właściwe, aby mieć dużo kodu w długich klasach. Przyjrzałem się kodom źródłowym z innych projektów i wydaje się, że są one zgodne z podejściem OO. Moje aplikacje wymagają intensywnego przetwarzania obrazu, a czas i wydajność są ważne. Jestem bardziej naukowcem niż programistą, więc z góry dziękuję za wszelką pomoc.


Czy powinienem uzyskać patent, zanim poproszę o pomoc w rozwoju? Myślę, że mam świetny pomysł, ale nie mam technicznej wiedzy, jak kontynuować. Po prostu nie chcę zdradzać mojego pomysłu


title: Właściwa terminologia dla małego zestawu ściśle powiązanych klas?

text: Jaka jest właściwa terminologia dla małego (2-4) zestawu ściśle powiązanych klas? Te zajęcia nie mogą działać niezależnie. Myślałem _system_ , ale po trochę googlowaniu stwierdziłem, że to słowo jest zwykle używane do opisu oprogramowania jako całości. Potem pomyślałem o _podsystemie_ , ale nie wiem, czy termin ma zastosowanie, jeśli liczba klas w podsystemie jest niewielka. Co myślicie? To jest prezentacja dla profesora, który chce, żebym wszystko zdefiniował. **Edycja:** Zasadniczo opisuję różne sposoby projektowania obiektów gry _systemy_ , które można znaleźć w silnikach gier. Używam terminu _system_ jako sposobu na uwzględnienie wszystkich klas zaangażowanych w aparat obiektu gry. Nazywanie tego _systemem obiektów gry_ wydaje mi się słuszne, ale nie jestem pewien, czy to właściwa terminologia. Nie oglądam obiektów gry jako _warstwy_ , ponieważ tak naprawdę nie działa ona jako warstwa w silniku gry. Wydaje mi się, że _moduł_ lub _pakiet_ jest bardziej odpowiedni dla grupy klas czysto funkcjonalnych lub bezstanowych. Jeśli nie mam sensu, daj mi znać!


title: Gdzie powinny być enkapsulowane zapytania SQL/DB w systemie oprogramowania?

text: Często piszę małe aplikacje (zarówno internetowe, jak i inne), które wymagają intensywnego użycia bazy danych. Próbowałem różnych sposobów obsługi, gdzie umieścić rzeczywiste zapytania sql (rodzaj systemów ORM ad-hoc). Należą do nich: * Modele, które same się budują - i tylko zezwalają na to, aby SQL był wewnątrz modelu. * Rodzaj metody stylu fabryki, w której modele są budowane przez klasę fabryki, która może znać SQL. * Trzecia jednostka, która mapuje modele na podstawie ich pól/kluczy do bazy danych i na tej podstawie generuje kod SQL w locie. Czy istnieje powszechna wiedza, która metoda jest najlepsza? Albo inny sposób, który przegapiłem? Najwyraźniej dużo z tego będzie opierać się na kontekście samego systemu, którym zazwyczaj jest dla mnie tworzenie lekkich narzędzi lub frameworków użytkowych. Eksperymentując, nigdy nie znalazłem żadnego z nich, które intuicyjnie wydaje się „właściwe” i nie jest niezgrabne, ale nie chcę też sięgać po pełny framework, taki jak Django czy Ruby – oba, ponieważ tworzone przeze mnie narzędzia są w różnych języki i dlatego, że zwykle nie gwarantują takiego poziomu otaczającego śladu.


title: Strategie unikania SQL w kontrolerach... lub ile metod powinienem mieć w moich modelach?

text: Tak więc sytuacja, z którą spotykam się dość często, to taka, w której moje modele zaczynają: * Rozrastać się w potwory z tonami metod LUB * Pozwalać na przekazywanie im fragmentów SQL, tak aby były wystarczająco elastyczne, aby nie wymagały miliona różne metody Powiedzmy na przykład, że mamy model „widżetu”. Zaczynamy od kilku podstawowych metod: * get($id) * insert($record) * update($id, $record) * delete($id) * getList() // pobierz listę widżetów Wszystko w porządku i elegancko , ale potem potrzebujemy raportowania: * listCreatedBetween($start_date, $end_date) * listPurchasedBetween($start_date, $end_date) * listOfPending() I wtedy raportowanie staje się skomplikowane: * listPendingCreatedBetween($start_date, $end_date) * listForCustomer ($customer_id) * listPendingCreatedBetweenForCustomer($customer_id, $start_date, $end_date) Możesz zobaczyć, gdzie to się rozwija... w końcu mamy tak wiele specyficznych wymagań dotyczących zapytań, że albo muszę zaimplementować mnóstwo metod, albo coś w rodzaju obiekt "query", który mogę przekazać do pojedynczej metody ->query(query $query)... ... lub po prostu ugryź punktor i zacznij robić coś takiego: * list = MyModel->query(" start_date > X AND end_date < Y AND pending = 1 AND customer_id = Z ") Istnieje pewna atrakcyjność tylko jednej metody, takiej jak t hat zamiast 50 milionów innych, bardziej szczegółowych metod... ale czasami wydaje się, że "niewłaściwe" jest wpychanie stosu tego, co w zasadzie jest SQL do kontrolera. Czy istnieje „właściwy” sposób radzenia sobie z takimi sytuacjami? Czy upychanie takich zapytań do ogólnej metody ->query() wydaje się akceptowalne? Czy istnieją lepsze strategie?


title: Jaka powinna być „głębokość projektu”?

text: Wszyscy wiemy, że proces tworzenia projektu i całej architektury oprogramowania jest bardzo ważny przed napisaniem kodu. Ale jak głęboko należy zagłębić się w projektowanie - powinniśmy zacząć od ogólnej architektury i zejść do nazw klas, czy po prostu wyznaczyć wspólne części i zacząć kodować?


title: Jak wyjaśniłbyś, że inżynieria oprogramowania jest bardziej wyspecjalizowana niż inne dziedziny inżynierii?

text: Pracuję z kimś, kto upiera się, że każdy dobry inżynier oprogramowania może rozwijać się w dowolnej technologii oprogramowania, a doświadczenie w konkretnej technologii nie ma znaczenia przy tworzeniu dobrego oprogramowania. Jego analogią było to, że nie trzeba mieć wiedzy o budowanym produkcie, aby wiedzieć, jak zbudować linię montażową, która wytwarza ten produkt. W pewnym sensie jest to komplement, gdy patrzy się na niego takim okiem, że "jak jesteś dobry, to jesteś dobry we wszystkim", ale w pewnym sensie też trywializuje zawód, jak w "Codemonkey, go sling code". Bez doświadczenia w pewnych strukturach oprogramowania możesz szybko wpaść w kłopoty, a to jest ważne. Próbowałem to wyjaśnić, ale nie kupił tego. Jakieś inne poglądy lub przemyślenia na ten temat, które pomogą wyjaśnić, że moje doświadczenie w jednej rzeczy nie przekłada się na wszystkie rzeczy?


title: „Integrowalna”, ale nie „zintegrowana” GPL

text: Odbyło się wiele dyskusji na temat tego, czy samo powiązanie z fragmentem kodu czyni go pracą pochodną. Wiem, że FSF mówi „tak”, więc zgodnie z nimi nie mogę dynamicznie dołączyć programu niezgodnego z GPL do biblioteki GPL i rozpowszechniać całości. Ale mógłbym to zrobić do użytku prywatnego, o ile żaden kod nie zostanie udostępniony publicznie. To sprawiło, że zacząłem się zastanawiać: co, jeśli w ogóle nie będę redystrybuować kodu GPL? Jeśli mój program może działać sam (potwierdzając moje twierdzenie, że jest **nie** dziełem pochodnym), ale może zrobić więcej, jeśli biblioteka GPL jest również zainstalowana w systemie, czy nie mogę po prostu wydać mojej aplikacji na moich własnych warunkach licencyjnych - bez dołączania żadnego kodu GPL - i opublikuj instrukcje dla wszystkich zainteresowanych, aby osobno pobrać kod GPL i wykonać integrację "na własny użytek"? Wiem, że jest to sprzeczne z „duchem” GPL, więc nie sugeruję, że to dobry pomysł. Jednak to pytanie przeszkadza mi od jakiegoś czasu, szczególnie ze względu na implikacje każdej odpowiedzi: Jeśli **nie mogę** tego zrobić: * czy mogę napisać inną bibliotekę z podobnym API? (zanim odpowiesz "oczywiście, że możesz", pamiętaj, że posiadanie tego samego API pozwoliłoby moim klientom na dowolną wymianę obu bibliotek - więc nie muszę zbyt ciężko pracować nad moją biblioteką, ani nawet sprawić, by "działała". Jak ustalić, czy podobny program jest po prostu podobny, czy jest próbą obejścia?) * (Edytuj: jak zauważył @Karl Bielefeldt, ta biblioteka byłaby pracą pochodną, więc ten punkt jest dyskusyjny) Jeśli **mogę** zrobić że: * czy mogę również otrzymać wynagrodzenie za wykonanie **usługi** instalacji biblioteki GPL dla klienta? (Sprzedam im mój program, instaluję go na ich maszynach, pobieram i instaluję też bibliotekę GPL) * (Edycja: ta praktyka byłaby dowodem mojego **zamiaru** połączenia obu programów, wzmacniając twierdzenie, że mój został stworzony z cel jest połączony - a więc jest dziełem pochodnym) * czy mogę umieścić oba programy na tej samej stronie? Na dwóch różnych płytach CD? (Wiem, że powiedziałem, że pomysł polegał na **nie** redystrybucji kodu GPL, myślę tylko o wymówkach, których ludzie mogliby użyć, aby twierdzić, że nie redystrybuują, mimo że są) * (Edytuj: to byłoby „ zagregowane", więc nie ma z tym problemu) * * * **Aktualizacja:** po przeanalizowaniu odpowiedzi i linków @Eli Rosencruft i @Karl Bielefeldt oraz zapoznaniu się z niektórymi źródłami zewnętrznymi, zbliżam się do konkluzji. Dokonałem pewnych zmian w pytaniu zgodnie z opiniami, a poniżej zamieszczę kilka moich dotychczasowych ustaleń: * Wewnętrzne cechy obu programów są bardziej decydującym czynnikiem przy podejmowaniu decyzji, czy jeden z nich pochodzi od innego niż technologia środki do osiągnięcia ich integracji. Intencja autorów osiągnięcia jakiegoś celu jest równie istotna, jak środki, których użyli do jego osiągnięcia (w tym scenariuszu). Cytując post na blogu, który – choć nie jest autorytatywny na ten temat – uważam, że ma związek z pytaniem (podkreślenie moje): > Ponieważ na GPL użytkownik końcowy może robić z kodem, co chce > (brak ograniczeń redystrybucyjnych), użytkownik końcowy może zawsze WYCIĄGAĆ różne > oprogramowanie w sieci i łączyć je i używać w dowolny sposób > (zakładając oczywiście, że wszystkie części są legalne i uzyskane zgodnie z prawem). (...) > NIE oznacza to, że mogę zaoferować (PUSH) użytkownikowi oprogramowanie własnościowe > **które zostało pomyślane z zamiarem połączenia** z oprogramowaniem > GPL ( **czy to uważa się za połączone przed lub po > dystrybucji** ). * Niezależnie od tego, czy ma to znaczenie prawne, czy nie, teraz rozumiem motywację stojącą za naciskiem FSF na łączenie statyczne i dynamiczne: niewolny program, który łączy się z wolnym w skomplikowany sposób, _de facto_ ogranicza swobodę użytkowników w stosunku do tego drugiego, ponieważ mogą nie modyfikuj go znacząco bez przerywania integracji (umożliwia to również EEE, w przypadku, gdy wolna część zostanie również zmodyfikowana tak, aby pasowała do niewolnej). Tak więc, jeśli ktoś dba o ruch wolnego oprogramowania, powinien przestrzegać jego warunków lub przynajmniej podjąć niezbędne środki w celu ochrony wolności odbiorcy.


title: Dlaczego nie powinienem zawsze przekazywać kontekstu żądania Django w widoku?

text: Zgodnie z odpowiednią dokumentacją Django, kontekst żądania oferuje więcej niż zwykły kontekst, ponieważ łączy dane żądania z kontekstem. Niezbędne jest zatem dla widoków, które wykonują przesyłanie formularzy w Django. Zastanawiam się jednak, dlaczego nie można po prostu zawsze przekazać kontekstu żądania dla każdego widoku. W końcu kontekst żądania oferuje więcej niż zwykły kontekst. Dlaczego nie stworzyć funkcji pomocniczej o nazwie, powiedzmy, „render()”, która automatycznie przekazuje kontekst żądania? Czy jest jakaś wada wydajności?


title: Jakie są standardowe praktyki dotyczące dostępu do bazy danych w .net?

text: Widziałem dziwne praktyki dostępu do bazy danych w .net. Widziałem procedury składowane dla każdego zadania bazy danych. Widziałem, że każda nazwa właściwości bazy danych jest poprzedzona nazwą tabeli. Widziałem w pełni oddzielną warstwę/.dll dla bardzo niewielu lub żadnej logiki biznesowej. Widziałem, że wraz z ORM-ami istnieje oddzielna warstwa dostępu do danych, która odgrywa tę samą rolę. A wraz z nimi zawsze słyszałem: „To są standardy, które musisz utrzymać”. Więc jakie są prawdziwe standardy dostępu do danych w .net? Jakie są zasady, których przestrzegasz?


title: Lepiej używać jednej dużej plisty lub wielu małych plistów podczas programowania na iOS?

text: Tworzę prostą aplikację "Znajdź jedną z naszych lokalizacji" na iOS 4, dla której mam listę >70 miejsc wraz z adresami, godzinami pracy itp. Czy lepiej umieścić wszystkie te dane w jednym dużym plist czy wiele małych?


title: Urządzenia odpytujące i sterujące

text: Jestem na wczesnym etapie planowania urządzenia wejściowego, które będzie składało się z kilku fizycznych elementów sterujących, których liczba nie została jeszcze określona. Z wcześniejszych doświadczeń z takimi urządzeniami stwierdziłem, że byłoby niezwykle korzystne, gdyby urządzenie zwracało dane o stanie wszystkich elementów sterujących w odpowiedzi na zapytanie z systemu, w przeciwieństwie do zgłaszania zmian w miarę ich pojawiania się. Zakładając akceptowalną częstotliwość odpytywania wynoszącą 1000 zapytań na sekundę lub wyższą, czy wbudowany sprzęt jest wystarczająco zaawansowany, aby to obsłużyć? Czy sterownik takiego urządzenia byłby nadmiernie zasobożerny? Jakie byłoby dobre oszacowanie pola gry dla pamięci RAM/procesora wymaganego zarówno na „serwerze”, jak i „kliencie”?


title: Wysyłasz zapytania do oficjalnego źródła NuGet asynchronicznie?

text: Bawiłem się pakietem NuGet.Core, aby sprawdzić, czy mogę przeszukać repozytorium NuGet w poszukiwaniu określonych pakietów. Zacząłem od przykładowego kodu: //ID pakietu do wyszukania string packageID = "EntityFramework"; //Połącz z oficjalnym repozytorium pakietów IPackageRepository repozytorium = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2"); //Pobierz listę wszystkich pakietów NuGet o identyfikatorze 'EntityFramework' List<IPackage> packages = repo.FindPackagesById(packageID).ToList(); //Przefiltruj listę pakietów, które nie są wersjami wydania (stabilnymi) packages = packages.Where (item => (item.IsReleaseVersion() == false)).ToList(); //Przejdź po liście i wydrukuj pełną nazwę pakietów w wersji wstępnej do konsoli foreach (IPPackage p w pakietach) { Console.WriteLine(p.GetFullName()); } Problem polega na tym, że wszystko to odbywa się synchronicznie, a nie asynchronicznie. Nie mogłem znaleźć żadnych metod asynchronicznych w NuGet.Core, więc zastanawiałem się nad wdrożeniem własnego sposobu wysyłania zapytań do oficjalnego źródła NuGet. Problem polega na tym, że w ogóle nie mam pojęcia, jak odpytać nawet oficjalny kanał, więc nie mam pojęcia, jakich klas lub metod muszę użyć. Czy istnieje sposób na użycie części interfejsów NuGet.Core, ale po prostu wykonanie zapytania asynchronicznego?


title: Identyfikacja algorytmu [ Ciąg i słownik ]

text: Niedawno słyszałem o pytaniu z wywiadu: Dany ciąg i słownik. Podziel ciąg na znaczące słowa i pamiętam, że rozwiązywałem to wcześniej za pomocą programowania dynamicznego dość szybko (może w czasie O(n)? ) w jednej z moich starych klas algorytmów, ale nie pamiętam nazwy algorytmu. Czy ktoś mógłby wskazać mi właściwy kierunek?


title: Kiedy wydać uproszczoną wersję aplikacji na iOS?

text: Stworzyłem aplikację na iPhone'a i przesłałem ją do Apple, która obecnie czeka na recenzję i przez ostatnie pół godziny debatowałam ze sobą, czy powinienem wydać wersję Lite aplikacji. Zastanawiałem się, kiedy należy wydać wersję Lite aplikacji, gdy pełna aplikacja znajdzie się w App Store?


title: Porównanie nadużyć przeciążających operatora w różnych językach

text: Częstym argumentem przeciwko przeciążaniu operatorów jest to, że może być i jest nadużywane, m.in. `A+B` robi coś zupełnie innego niż dodawanie. Przykłady są często cytowane we fragmentach C++, gdzie funkcje przeciążające operatory nie nazywają operatorów (np. `operator+()`). Porównaj to z Pythonem, gdzie operatory _są_ nazwane (np. `__add__`). Czy to pomaga zniechęcić programistów do nadużywania przeciążania w wyżej wymieniony sposób? Czy ktoś ma jakieś doświadczenia z nadużywaniem przeciążania operatorów Pythona?


title: kod kowboja w zespole

text: Jak radzisz sobie z członkiem zespołu, który jest starszy od ciebie i zawsze wskakuje na projekty innych ludzi i kończy je w ciągu nocy lub w weekend? Wydaje się, że pracuje 80 godzin tygodniowo bez względu na to, czy jest to nagły wypadek, czy nie, i dość trudno jest przewidzieć, w którą część listy rzeczy do zrobienia ma zamiar uderzyć w następnej kolejności. Czasami dni pracy są zmarnowane, ponieważ w poniedziałek rano znajdujesz checkin kończący projekt, nad którym spędziłeś większość poprzedniego tygodnia. Do ludzi pytających o jakość: Zwykle jest całkiem dobra, ale: jest też dużo refaktoryzacji kodu, w tym kodu 'własności' innych członków zespołu, bez uwzględnienia pokrycia testami, z oczywistymi wynikami.


title: Rozłóż obciążenie równomiernie na wiele cykli

text: Szukam rozwiązania, które jest szybkie i czytelne. Muszę to zrobić w C, ale ostatecznie kod będzie statyczny, co oznacza, że mogę użyć dowolnego narzędzia do jego wygenerowania. Mam zadanie, które działa cyklicznie i również cyklicznie wywołuje różne funkcje > Cykl funkcji głównych to 1. > > Funkcja a ma również cykl 1. Więc funkcja główna wywołuje ją za każdym razem > > Funkcja b ma cykl 2. Funkcja główna wywołuje ją za każdym razem drugi cykl. > > Funkcja c ma cykl 2. > > Funkcja d ma cykl 4. > > Funkcja e ma cykl 4. > > Funkcja f ma cykl 4. > > Funkcja g ma cykl 4. > > ... wiele więcej ... >> Funkcja X ma cykl 500. Jeśli mamy wiele funkcji działających w tym samym cyklu, staramy się je rozdzielić. Więc dla funkcji b nazwiemy ją w jednym cyklu, a cw drugim. Równomierne rozłożenie obciążenia. Podobnie dla d do g. Każdy zostaje wezwany w innym cyklu. Moja obecna implementacja jest bardzo zła. Każdy programista, który musiał dodać swoje zadanie do funkcji main, oblicza je na modulo i wywołuje je w razie potrzeby. Prowadzi to do bardzo nieczytelnego kodu. Myślałem o zrobieniu czegoś takiego: uint32 mod4 = timer % 4; bool czwarty_1 = mod4 == 0; bool czwarta_2 = mod4 == 1; bool czwarty_3 = mod4 == 2; bool czwarty_4 = mod4 == 3; logiczny sekunda_1 = czwarty_1 || czwarty_3; bool sekunda_2 = czwarta_2 || czwarty_4; /* i tak dalej*/ Ale wydaje się to kłopotliwe i zbyt podatne na błędy, zwłaszcza że najwyższy czas cyklu jest zbyt długi. Jak podejść do tego rodzaju problemu? -Edytuj- Zgodnie z prośbą skompilowałem kilka informacji o liczbie funkcji, które posiadam: * 32 funkcje, cykl 1 * 9 funkcji, cykl 2 * 14 funkcji, cykl 4 * 3 funkcje, cykl 8 * 3 funkcje, cykl 32 * 3 funkcje, cykl 40 * Cykl 2-funkcyjny 200 * Cykl 2-funkcyjny 400


title: Czy powinienem zawrzeć umowę o pracę przed ukończeniem szkoły?

text: Został mi rok od ukończenia studiów podyplomowych, a jazda na kampusie w mojej uczelni zaraz się rozpocznie. Na kampus przyjeżdżają głównie wielkie nazwiska, ale naprawdę interesuje mnie konkretna mała firma. Zgłosiłem się, a potem po serii wywiadów telefonicznych i testów online wydają się być mną zainteresowani. Ale nie chcę zaczynać pracy przed ukończeniem studiów. Jednak w międzyczasie, jeśli zobowiążę się do nich dołączyć, planują zapewnić pomoc szkoleniową i kilka drobnych zadań w zamian za trzymanie się z dala od przyszłych rekrutacji. Chcą ode mnie pisemnego zapewnienia, że dołączę do ich firmy, ale jak mogę mieć pewność, że po ukończeniu studiów nadal będzie dla mnie praca? Na przykład, jeśli zdecydują, że nie potrzebują już mojej wiedzy lub jeśli się zamkną. Czy rozsądne jest zawarcie takiej umowy z firmą przed faktycznym zatrudnieniem?


title: Ćwiczenia na niskim poziomie

text: Jestem całkiem zadowolony z języków wysokiego poziomu i tworzenia aplikacji. Jednak chociaż nauczyłem się o tematach niskiego poziomu, takich jak te wymienione poniżej, nigdy nie robiłem niczego z tą wiedzą poza szkołą. Kilka przykładów: * bit twiddling * radzenie sobie z little vs big endian * zarządzanie pamięcią (rzeczy związane ze stosem/stertą/malloc itp.) * wielowątkowość z muteksami i semaforami W jaki sposób mogę je ćwiczyć w wolnym czasie , pracując w firmie zajmującej się pisaniem kodu zarządzanego?


Jaki byłby dobry pierwszy projekt programowania funkcjonalnego? Chcę skończyć z przytupem mój projekt licencjacki i chcę go zakończyć funkcjonalnym projektem programistycznym. Nie uczyliśmy się tego w szkole, ale zachęca się nas do samodzielnego uczenia się nowych rzeczy i pomyślałem, że nauka nowego paradygmatu nie tylko nowego języka będzie dla mnie świetnym ćwiczeniem, ale prawdopodobnie też czymś interesującym dla nauczycieli . Problem polega na tym, że chcę rozpocząć projekt nieco wcześniej, aby skorzystać z wakacji i lepiej zrozumieć programowanie funkcjonalne i zapoznać się z jednym językiem. Co powiedziałbyś, że byłby to projekt dobrej praktyki, który jest trochę trudny, ale także pozwala mi nauczyć się języka, paradygmatu itp. A potem, jaki byłby twoim zdaniem dobry projekt (bardziej zaawansowany) dla mojego projektu licencjackiego? Sugestie dotyczące najlepszego języka, od którego można zacząć programowanie funkcjonalne, również będą mile widziane.


title: Dlaczego powinienem używać List<T> przez IEnumerable<T>?

text: W mojej aplikacji internetowej ASP.net MVC4 używam IEnumerables, starając się podążać za mantrą do programowania interfejsu, a nie implementacji. Return IEnumerable(Ucznia) vs Return New List(Ucznia) Ludzie mówią mi, żebym używał List, a nie IEnumerable, ponieważ listy wymuszają wykonanie zapytania, a IEumerable nie. Czy to naprawdę najlepsza praktyka? Czy jest jakaś alternatywa? Dziwnie czuję się używając betonowych obiektów, w których można użyć interfejsu. Czy moje dziwne uczucie jest uzasadnione?


title: Jak nazywa się ten wzorzec projektowy?

text: Mam trochę kodu: /// <summary> /// Reprezentuje klasę lokalizatora rekordów /// </summary> public class RecordLocator : IRecordLocator { /// <summary> /// Ciąg lokalizatora rekordów, na przykład: ZT8C4O / // </summary> ciąg publiczny Nazwa { get; zestaw prywatny; } /// <summary> /// Inicjuje nową instancję klasy <see cref="RecordLocator"/>. /// </summary> /// <param name="recordLocator">Ciąg lokalizatora rekordów.</param> private RecordLocator(string recordLocator) { Name = recordLocator; } /// <summary> /// Analizuje określony lokalizator rekordów. /// </summary> /// <param name="recordLocator">Ciąg lokalizatora rekordów.</param> /// <returns></returns> public static IRecordLocator Parse(string recordLocator) { if (ciąg. IsNullOrEmpty(recordLocator)) wyrzuć nowy ArgumentNullException("recordLocator"); if (recordLocator.Length != 6) wyrzuć nowy ArgumentException("recordLocator.Length != 6"); zwróć nowy RecordLocator(recordLocator); } } /// <summary> /// Reprezentuje interfejs lokalizatora rekordów /// </summary> public interface IRecordLocator : IHideObjectMembers { /// <summary> /// Ciąg lokalizatora rekordów, na przykład: ZT8C4O /// < /summary> string Nazwa { get; } } 1. Jak nazywa się ten wzorzec projektowy? Kiedy masz klasę, która sama się tworzy (i prawdopodobnie masz prywatnego konstruktora)? Innym przykładem jest klasa `System.DateTime` frameworka .NET. 2. Czy można to zrobić w ten sposób?


title: Separacja obaw podczas tworzenia ogólnej koncepcji „przedmiotu koszyka”

text: Całkiem prosta konfiguracja: mam „Koszyk”, a koszyk zawiera „Przedmioty”. Mam wiele różnych rodzajów „produktów”, których nie można sprowadzić do jednej rzeczy ani nawet wspólnego przodka, więc zamiast tego zdecydowałem się po prostu stworzyć reprezentację produktu jako `CartItem`, która zawiera wszystkie informacje z produktu potrzebne do sprzedaży. I tu pojawia się pytanie. Mogę sobie z tym poradzić na trzy sposoby, które widzę. W przypadku tych przykładów powiemy, że mam dwa rodzaje „produktów”: „Widget” i „Gizmo”. Ponownie, te dwie rzeczy są tak bardzo różne, że nie ma sensu dziedziczyć z jakiejkolwiek klasy bazowej. 1) Zarówno „Widget”, jak i „Gizmo” mają możliwość tworzenia „Elementu koszyka” do reprezentowania siebie, ale wymaga to zarówno znajomości „CartItem”, a każda zmiana w „CartItem” będzie wymagała ode mnie dotknięcia obu „Widget” i „Gizmo” (oczywiście nie jest to idealne) 2) „CartItem” może tworzyć się z „Widget” lub „Gizmo”. Byłby to zasadniczo wzorzec fabryczny i wymagałby, aby element „CartItem” posiadał wiedzę zarówno na temat „Widget”, jak i „Gizmo”. To jest lepsze niż #1, ponieważ nie muszę wprowadzać zmian do każdego rodzaju "produktu", jeśli zmienię `CartItem`, ale _tak_ muszę pamiętać, że jeśli zmienię konkretny "produkt", muszę zmienić do tego celu metoda fabryczna `CartItem`. (nadal nie idealny, bo Murphy mówi, że zapomnę). 3) Użyj czegoś podobnego do kontrolera jako "kleju". WidgetController i GizmoController będą miały akcje AddToCart, które tłumaczą odpowiednio widget lub Gizmo na element koszyka. To naprawdę przedstawia te same problemy, co #1, w tym sensie, że jeśli `CartItem` się zmieni, muszę zaktualizować wszystkie kontrolery "produktu", i faktycznie mieszam problemy z #2, w tym muszę pamiętać, aby zawsze utrzymywać to mapowanie, jeśli coś się zmieni po obu stronach. Jednak _czuje się_ to bardziej jak praca dla kontrolera: jest zorientowana na radzenie sobie z wieloma typami, podczas gdy mieszanie typów na poziomie modelu jest po prostu niewłaściwe. 4) Trzy, które widzę; # 4 to coś, o czym muszę jeszcze pomyśleć, co może zasugerować jedna z was, życzliwa osoba. Jestem otwarty na wszelkie uwagi tutaj. Jeśli brakuje mi czegoś zupełnie oczywistego, możesz nazwać mnie kretynem i wskazać, jak wielkim jestem kretynem. Lubię czuć się głupio; wtedy się uczę ;).


title: Jak radzić sobie z wartościową osobą idącą we wszystkich kierunkach?

text: Pracuję z kimś, kto tworzy treści użytkownika, które mają być zawarte w aplikacji. Nie jest koderem, a raczej ekspertem w swojej dziedzinie, dzielącym się wiedzą. Jego wkład, dzielony kawałek po kawałku, jest świetny, ale idzie we wszystkich kierunkach i ma problemy z sekwencyjną produkcją pracy. Pracuje jednocześnie nad 25 treściami, a gdy tylko przeczyta coś „ciekawego”, chce przepisać część swoich rzeczy, aby poprawić ich jakość. Nie zbiega się naturalnie. Zbiera tony informacji, produkuje wartościowe rzeczy, ale w zupełnie nieustrukturyzowany sposób. Jakiś czas temu poruszyliśmy z nim ten problem i aby spróbować go rozwiązać, stworzyliśmy dokument ze 100 pozycjami, które musiał wypełnić. Problem w tym, że nie działa zbyt dobrze. Jak radzić sobie z tymi ludźmi i zbierać informacje? Myślałem o nowej technice: poproś go, aby wysyłał swoje fragmenty, niesprawne, krok po kroku, jak tylko będą gotowe, i zachowaj listę tego, co pozostało do zrobienia, i pokaż mu tę listę, aby wskazać mu kierunek . Ta sytuacja bardzo mnie stresuje. Gdyby jego produkcja nie była dobra, nie starałbym się tak bardzo, aby to zadziałało. Jeśli masz doświadczenie, którym możesz się podzielić, to mile widziane.


title: Jaki sposób myślenia powinien mieć programista ASP.NET, jeśli chodzi o kod po stronie klienta a kod po stronie serwera?

text: Wracam z powrotem do programowania ASP.NET po spędzeniu ostatnich 7 lat na graniu w menedżera, dba i winforms developer. Zajmowałem się kilkoma rzeczami związanymi z siecią, głównie utrzymaniem istniejących aplikacji formularzy internetowych, ale nie robiłem nic z nowszymi technologiami. O rany, jak rzeczy się zmieniły! Po obejrzeniu wielu filmów, przeczytaniu wielu artykułów i zamieszaniu z niektórymi nowymi narzędziami, myślę, że muszę patrzeć na sprawy w niewłaściwy sposób. Mam tendencję do myślenia w kategoriach pisania aplikacji internetowych przy użyciu C# i przetwarzania po stronie serwera, a nie przetwarzania po stronie klienta. Nigdy nie używałem dużo JavaScriptu i polegałem na takich rzeczach jak kontrolki Infragistics NetAdvantage i ich asynchroniczny panel odświeżania. Czy rozsądne jest założenie, że „nowocześni” twórcy stron internetowych myślą w kategoriach JavaScript i kodowania po stronie klienta, trafiając na serwer tylko za pośrednictwem usługi przetwarzania, pobierania i przechowywania danych?


title: Liczba dziesiętna do 17-bitowej podpisanej liczby uzupełniającej 2

text: Próbuję przekonwertować ułamki dziesiętne (0,05, -0,28, 25,00 itd.) na 17-bitową liczbę podpisaną jako uzupełnienie 2. Dane parametrów, które wysyłam, to SysEX Midi Data (do jakiegoś zewnętrznego syntezatora). Parametry danych składają się z 3 bajtów. Na przykład podany przykład jest następujący: * Dane parametru do ustawienia wartości na -0,02 to (07 7F 70) (Dane2,Dane1,Dane0) Zastanawiałem się, czy ktoś mógłby mi dać wskazówki, jak zrobić to w Javie, tutaj są specyfikacje, z których wychodzę: * Dane parametru to 17-bitowa liczba ze znakiem uzupełnienia 2. * data2= numer kanału miksu i najbardziej znaczące bity (bity 14-16) danych parametru (w formacie 0xxx xyyy, gdzie xxxx to numer kanału miksu (0-15) a yyy to najwyższe bity (bity 14-16) danych parametru.) * data1= bity 7-13 danych parametru * data0= najmniej znaczące bity (bity 0-6) danych parametru A więc oto, co mogę do tej pory założyć: * Składa się z 3 bajtów 17 bitów, + 4 bity do wysłania cyfr 0-15 (kanał miksowania) * 17 bit jest bitem podpisu? * Bit podpisu musi być ustawiony tylko wtedy, gdy jest to liczba ujemna i w takim przypadku musi być sformatowany z uzupełnieniem do 2 * Najwyższy bit dla każdego bajtu danych parametru jest ustawiony na 0 Mając to wszystko na uwadze, czy ktoś może pomóc rozumiem, opublikuj lub pomóż mi napisać funkcję, aby sformatować tę 17-bitową liczbę ze znaku dziesiętnego? Dodawanie/odejmowanie bitów binarnych w Javie, uzupełnienia do dwójki itp. Byłoby bardzo mile widziane, gdyby ktoś miał jakieś przykładowe funkcje lub wyjaśnienia! Twoje zdrowie


title: Jak mogę pomóc członkowi zespołu być bardziej pewnym siebie?

text: Mam dwóch członków zespołu, którzy pochodzą z różnych środowisk niż to, o co ich obecnie proszono: jak możemy zachęcić ich do robienia postępów, rozwijania umiejętności i uczenia się nowych sposobów?


title: Jak przeprowadzić test jednostkowy, który zwraca kolekcję, unikając logiki w teście?

text: Testuję metodę, która ma wygenerować kolekcję obiektów danych. Chcę sprawdzić, czy właściwości obiektów są ustawione poprawnie. Niektóre właściwości zostaną ustawione na to samo; inne zostaną ustawione na wartość zależną od ich pozycji w kolekcji. Wydaje się, że naturalnym sposobem na to jest pętla. Jednak Roy Osherove zdecydowanie odradza stosowanie logiki w testach jednostkowych (_Art of Unit Testing_, 178). Mówi: > Test zawierający logikę zazwyczaj testuje więcej niż jedną rzecz na raz, > co nie jest zalecane, ponieważ test jest mniej czytelny i > bardziej delikatny. Ale logika testów zwiększa również złożoność, która może zawierać ukryty błąd. > > Testy powinny, co do zasady, być serią wywołań metod bez przepływów > kontrolnych, nawet `try-catch` i z wywołaniami asercji. Jednak nie widzę niczego złego w moim projekcie (jak inaczej można wygenerować listę obiektów danych, których niektóre wartości zależą od tego, gdzie się znajdują? — nie można ich dokładnie wygenerować i przetestować osobno) . Czy w moim projekcie jest coś, co nie jest przyjazne dla testów? A może jestem zbyt sztywno oddany nauce Osherove? A może jest jakaś tajna magia testów jednostkowych, o której nie wiem, która omija ten problem? (Piszę w języku C#/VS2010/NUnit, ale jeśli to możliwe, szukam odpowiedzi niezależnych od języka).


title: Kto przyznaje nagrody „Nagradzanemu oprogramowaniu”?

text: Raz po raz widziałem firmy reklamujące swoje oprogramowanie, mówiąc takie rzeczy jak „Nagradzane oprogramowanie” lub „Pobierz naszą nagradzaną aplikację na Androida” itp. Kto rozdaje te „nagrody”? Działam w branży oprogramowania od kilku lat i nigdy nie słyszałem, aby ktoś otrzymał nagrodę za swoje oprogramowanie. Czy rzeczywiście istnieje organ, który przyznaje nagrody firmom, czy jest to tylko przypadek, że jakiś niejasny magazyn przyznał oprogramowaniu dobrą ocenę, a następnie określił swój produkt jako „nagradzany”?


title: Plusy i minusy wysyłania danych z Androida do php w stringu i/lub json

text: Widziałem kilka samouczków i kilka dyskusji na temat stackoverflow na temat wysyłania danych z Androida na stronę php. w większości przypadków widziałem ludzi wysyłających dane w formacie ciągu, ale powracających w formacie json. Moje pytanie brzmi, czy lepiej przesyłać dane z Androida do php w formacie json. lub w jakich przypadkach powinienem używać json zamiast string. Pozdrowienia


title: czy ta właściwość javascript domyślna wzorca jest zapachem kodu?

text: W pewnym kodzie javascript, nad którym pracuję nad refaktoryzacją, zajmowałem się przypadkami, w których chciałem ustawić domyślną właściwość obiektu na true bez konieczności przechodzenia przez bazę kodu i dodawania właściwości do każdego wystąpienia obiektu, wykonując coś takiego: if(typeof(thisBool) === 'undefined' || thisBool) { //zrób tutaj fajne rzeczy; } więc dla istniejących instancji musiałem tylko poprawić model w przypadkach, gdy chciałem ustawić `thisBool` na jakąś wartość obliczoną gdzie indziej, lub ustawić ją na false; jeśli nie było ustawione, kod traktował to jako prawdziwe. Obiekty są budowane dynamicznie, gdy są używane - nie są one zdefiniowanymi klasami, ale są "instancjami" mniej więcej tak: var thing1 = { Name: 'rzecz nr 1', HasCat: false, [thisBool: true] }; a `thing1` jest przekazywane do funkcji. Czy to okropny pomysł? Aktualizuję ten kod (i wszystkie instancje), więc teraz jest czas, aby to naprawić, jeśli jest to zapach kodu. Jeśli chodzi o mnie, wolałbym być bardziej jednoznaczny, ale widzę również wartość w tym, że nie muszę podawać `thisBool: true` w setkach miejsc, gdzie domyślnie `thisBool` powinno być true. Czy istnieje lepszy sposób na osiągnięcie tego?


title: Architektura przepływu danych GPU

text: Obecnie pracuję nad CUDA, DirectX. Chcę poznać architekturę przepływu danych procesorów graficznych. Ten przedstawiony dla CUDA i DirectX to odpowiednio model programowania równoległego i potoki graficzne. Ale chcę poznać architekturę przepływu danych (np. architekturę przepływu danych procesorów 8086).


To pytanie odbiega od tego pytania: Jakie są różnice między algorytmami wykorzystującymi struktury danych a algorytmami wykorzystującymi bazy danych?. # Ogólne pytanie Czy struktura tabel bazy danych powinna odpowiadać zamierzonej strukturze danych w logice? # Jakiś kontekst Najprostszym przykładem (i może być zbyt uproszczony) tego, o czym myślę, jest tabela bazy danych, której kolumny odpowiadają właściwościom struktury danych połączonej listy. Tak więc właściwości, o których myślę dla połączonej listy, są następujące: ## Lista połączona * Tożsamość węzła. * Przedmiot / zawartość w węźle. * Następny węzeł. W odniesieniu do pytania ogólnego kolumny tabeli bazy danych, które myślę o zmapowaniu, są następujące: ## Lista połączona > Tabela bazy danych * Tożsamość węzła *** ** Kolumny klucza podstawowego. * Pozycja/Zawartość w węźle ***** Kolumny zawierające dane, które mają być utrwalone. * Następny węzeł ***** Kolumna zawierająca odwołanie do rekordu, który ma nastąpić po nim w tej samej tabeli. Aplikacja, o której myślę, że reprezentuje powyższe, to śledzenie śladu punktów, w których byłeś na mapie. Więc mogę sobie wyobrazić zapisanie współrzędnych punktu A, a następnie umieszczenie w zmapowanej kolumnie Następny węzeł, współrzędne punktu B. Pozwól mojej wyobraźni pobiec trochę dalej, a następnie pobierz te dane i załaduj je do połączonej listy, użyj jej właściwości do zrobienia przemierzania i ponownie narysuj te punkty na mapie w późniejszym czasie. # Pytania 1. Widzę, jak tworzenie takiego mapowania upraszcza myślenie o danych, ale czuję też, że ogranicza Cię do myślenia o danych tylko w ten sposób. W jakim stopniu dostosowujesz tabele bazy danych do struktur danych, jeśli w ogóle? 2. Czy bazy danych powinny być postrzegane jako obszary surowych danych, które mają być kształtowane i formowane (przekładane) na struktury danych wybrane w zależności od celu programu? Powtórzę to, co powiedziałem w ostatnim poście. Wiem, że odpowiedzi bez konkretnego kontekstu są trudne. Żywność do przemyślenia, porady lub punkty do dyskusji są głównie tym, czego szukam i byłbym najbardziej wdzięczny! W tym poście starałem się nadać bardziej konkretny kontekst.


title: Porada: Opracowanie dwóch projektów, z których jeden jest przedłużeniem drugiego

text: ### The Two Projects Pracuję w dość małej firmie programistycznej, a obecnie jestem w sytuacji, w której jestem na końcu prac nad „Projektem A”, a zaraz zacznę tworzyć „Projekt B”. Projekt B ma być „rozszerzeniem” Projektu A (oba są głównie aplikacjami internetowymi). W Projekcie B plan polega nie tylko na dodaniu zupełnie nowych funkcji, ale także zmodyfikowaniu niektórych istniejących rzeczy z Projektu A; na przykład niektóre strony internetowe. Trudność polega na tym, że nadal chcemy móc rozpowszechniać Projekt A bez żadnych funkcji z Projektu B, ale _z_ poprawkami błędów związanych z „A”, które w końcu robimy podczas pracy nad „B”. ### Metoda 1: Rozgałęzianie Myślę o tym w taki sposób, że Projekt A jest jak gałąź "stabilna", a Projekt B jest jak gałąź "dev", ale "dev" nigdy nie zostaje scalony z powrotem w "stabilną". Mamy obawy związane z tym podejściem, ponieważ wygląda na to, że będzie wymagało dużej dyscypliny, aby upewnić się, że poprawki błędów są zawsze zatwierdzane w gałęzi Project A, a następnie scalane z gałęzią Project B (w przeciwieństwie do poprawek wdrażanych w gałęzi Project B i trzeba je ręcznie skopiować z powrotem do gałęzi Project A). ### Metoda 2: Architektura wtyczek Alternatywnie, moglibyśmy zacząć przekształcać rzeczy w coś w rodzaju „wtyczek” wszędzie tam, gdzie musi istnieć „różnica” między Projektem A i B. W ten sposób również wydaje się, że może to zmienić się w splątany bałagan, ponieważ nie wiemy jeszcze dokładnie, jakie zmiany będą potrzebne. ### Wybór W tej chwili postrzegam to jako wybór między mniejszym złem (czytaj 'trudności'). Na podstawie Twojego doświadczenia, czy masz jakieś rady, które pomogą w moim wyborze? Czy istnieją inne sposoby zarządzania podziałem między dwoma projektami, które mogłem przeoczyć?


title: Zarządzanie fałszywymi alarmami w TDD lub BDD

text: Jestem stosunkowo nowy w TDD i dużo myślałem o tym, jak zarządzać stale rosnącą pulą testów, która jest z nim związana. Jedną z moich największych obaw są fałszywe alarmy. Z mojego doświadczenia wynika, że nie jest niczym niezwykłym, że funkcja z czasem ulega dość dużym zmianom. Aby zaimplementować zmianę, najpierw napisalibyśmy test (lub wiele testów) dla nowego zachowania, a następnie zakodowalibyśmy zmianę. Idealnie byłoby, gdyby wszystkie testy przeszły pomyślnie, gdy zmiana funkcji zostałaby poprawnie zaimplementowana. Ale co z testami, które obejmowały pierwsze wcielenie funkcji? Nie ma gwarancji, że: 1. są nadal aktualne; 2. nadal mijają; 3. ich status pass/fail jest nawet poprawny. Przeglądanie/aktualizowanie/usuwanie tych testów w stosunkowo niewielkiej puli testów może być wykonalne, ale co z sytuacją, gdy masz tysiące lub dziesiątki tysięcy testów? Wydaje mi się, że istnieje duże ryzyko, że Twój zbiór testów będzie zawierał w końcu wiele fałszywych trafień. A biorąc pod uwagę, że te testy są formą dokumentacji systemu, jest to bardzo złe! **Pytanie:** Jak zmniejszyć ryzyko akumulacji testów fałszywie dodatnich podczas stosowania TDD lub BDD (lub czegokolwiek, co ostatecznie prowadzi do ogromnej kolekcji testów)?


title: Używanie Visual Foxpro DBF z ASP.NET w przeciwieństwie do SQL Server

text: Pracuję w małej firmie programistycznej, w której mój szef jest wielkim fanem Visual Foxpro. Pracujemy nad projektem ASP.NET, ale mój szef nalega na użycie Visual Foxpro DBF zamiast SQL Server. Chcę wiedzieć, jakie mogą być zalety i wady korzystania z pliku bazy danych Foxpro z ASP.NET 3.5.


title: Co to jest algorytmiczny język programowania?

text: „... Musisz zrozumieć rdzeń języka: czy jest algorytmiczny, funkcjonalny, zorientowany obiektowo? ...” - Efektywna Java, Joshua Bloch, wyd. 2008. Przedmowa, s. xiii Funkcjonalne: Lisp, OO: Java, ale czym jest (by Bloch miał na myśli) algorytmiczny język programowania?


title: Dlaczego ludzie skłaniają się ku starszym wersjom Visual Studio?

text: Zaczynam poznawać wszystkie zalety C++11, a jako użytkownik 2010 rozważam zainstalowanie 2012 zamiast lepszej obsługi C++11. Ale dlaczego 2012 nie wydaje się tak popularny jak 2010? Czy coś stracę, kiedy przejdę z 2010 na 2012? A może jest to troska o łatwość użytkowania i inny graficzny interfejs użytkownika, który odpycha ludzi? Nie chcę instalować 2012, aby dowiedzieć się o jakichś dużych ograniczeniach, których nie przedstawiłem w 2010, dziękuję za wszelkie uwagi!


title: Pytanie o użycie słowa „porting” w programowaniu

text: Obecnie jestem w trakcie modyfikowania kodu C++, który został napisany dla systemu UNIX tak, aby działał przez kompilację z programu Visual Studio. Musiałem zmienić nazwy niektórych funkcji wbudowanych i zmienić sposób definiowania tablic dynamicznych. Moje pytanie brzmi, czy mogę powiedzieć, że „portuję” ten kod z UNIXa do Windows/Visual Studio, czy też „portuję” używa się tylko przy zmianie z jednego języka programowania na inny (portowanie z C++ na Javę)?