title: Co jest bardziej wartościowe w rozwoju produktu: nastawienie na działanie czy wizjonerstwo?

text: Jako specjalista ds. rozwoju oprogramowania w dość konserwatywnej dużej firmie, zawsze miałem o wiele bardziej skłonność do działania, ponieważ moja praca była dość stabilna i wszystko, co się liczyło, to robienie tego, co mi kazano i wykonywanie zadań, które były istotne dla kariery życzliwy dyktator (tj. szef mojego szefa). Teraz, kiedy już nie pracuję dla „Mężczyzny”, uważam, że równie ważne jest użycie lewej półkuli mózgu i owinięcie głowy wokół tej całej „rzeczy z wizją”. Jak myślisz, co jest ważniejsze dla rozwoju oprogramowania w małym, ale zadziornym start-upie: Znać ścieżkę, czy iść (lub biegać) nią?


title: Jak hostować witrynę w innej witrynie — z niewielkim kodowaniem lub bez niego?

text: **PODSUMOWANIE:** Wszystko to dzieje się w Witrynie A * Użytkownik odwiedza witrynę A * Użytkownik wprowadza nazwę użytkownika i hasło * Użytkownik klika przycisk logowania * Użytkownik uwierzytelniony w Witrynie B za kulisami * Użytkownikowi wyświetlana jest strona w Witrynie A, która zawiera jego/jej profil z Witryny B w układzie/stylizowanym z Witryny B * Użytkownik może klikać łącza na stronie Profil, które prowadzą do innego obszaru Witryny B Znaczenie: Sesja musi być w jakiś sposób utrzymywana Mam aplikację internetową, w której przechowuję hasła użytkowników i Nazwa Użytkownika. Jeśli zalogujesz się do tej witryny, możesz zalogować się za pomocą hasła i nazwy użytkownika, aby mieć dostęp do swojego profilu. Istnieje inna opcja, która wymaga zalogowania się do mojej witryny z Twojej witryny i wyświetlenia swojego profilu w witrynie. Dzieje się tak, ponieważ możesz już mieć witrynę, z którą Twoi klienci Cię znają. Ten link jest zbliżony do tego, co chcę zrobić: http://aspmessageboard.com/showthread.php?t=235069 _Użytkownik w witrynie A zaloguj się do witryny B i wyświetl informacje o witrynie B w witrynie A. Nie powinien wiedzieć, czy Witryna B istnieje. Powinno być tak, jakby wszystko działo się w witrynie A_ Ta ostatnia część jest tym, czego nie potrafię zaimplementować. Mam następujące pomysły: Umieścić w witrynie **stałą ramkę IFrame** zawierającą moją witrynę: ale obawiam się o rozmiar/układ, ponieważ różni klienci mają inny układ/rozmiar sekcji treści. Zastanawiam się też nad utrzymaniem sesji **Serwis internetowy**: Nie wiem, jak to możliwe, ponieważ hasło i identyfikator znajdują się na moim serwerze. Być może będziesz musiał je wysłać tam iz powrotem. Oznacza to, że klient musiałby kodować za pomocą mojego API. _Ale nie tylko zwracam dane, muszę pokazać im stronę zawierającą szczegóły profilu_ **OpenID, Single-SignOn** : Zgaduję - ale uwierzytelnianie i dane znajdują się na moim serwerze. w tym przypadku nie ma dostępu po Twojej stronie Przykłady: logowanie do facebooka w mojej witrynie i nadal możliwość publikowania aktualizacji, otrzymywania powiadomień Facebook implementuje niektóre z nich za pomocą IFrame, np. przycisk Lubię to *UWAGA: * Przetestowałem opcję IFrame. To zadziałało, ale nadal muszę usunąć zawartość mojej witryny, taką jak baner strony, nawigacja po stronie itp. Mogłem zalogować się normalnie, tak jakbym faktycznie był na stronie. To pokazuje mój GUI, ale - brak arkusza stylów - zawartość nie stylizowana za pomocą CSS - Żaden względny adres URL nie będzie działał. Będzie szukał tego zasobu w stosunku do bieżącego serwera. Chyba że zmienię linki na bezwzględne - Kliknięcie przycisku Zaloguj powoduje błąd: _Informacje o stanie są nieprawidłowe dla tej strony i mogą być uszkodzone._ **UPDATE:** Czytałem o serwisie internetowym REST kilka dni temu i wpadłem na ten pomysł : A co z pomysłem **zwracania XML z usługi internetowej [REST lub SOAP] i dostarczania XSLT (który mogę dostarczyć) w celu wyświetlenia go**. Więc nie będą musieli dużo kodować?


title: Gdzie mogę znaleźć artykuły o tym, dlaczego przerwy są szkodliwe dla programistów?

text: Czytałem/słyszałem, że przerwy są złe dla programistów. Czytałem/słyszałem też, że dobrze jest dostać się do „strefy”. Nie wątpię w te twierdzenia, ale chciałbym edukować kolegów (głównie menedżerów) i członków rodziny (gdy pracuję w domu) na temat niebezpieczeństw przerw i wzrostu wydajności, jaki można uzyskać ze „strefy”. Czy ktoś mógłby wskazać mi artykuły i/lub książki, które dobrze uzasadniają te argumenty? Jeśli chcesz, możesz przedstawić te argumenty tutaj w odpowiedzi. Byłoby pomocne, gdyby były tam takie, które byłyby skierowane do menedżerów i kolegów nieprogramujących.


title: Jak wyjaśnić złożoność masowego wysyłania e-maili do menedżera?

text: Myślę, że wszyscy tam byliśmy, zostałeś poproszony o napisanie czegoś do wysyłania masowych wiadomości e-mail z dowolnego powodu. To rozwiązany problem, istnieje wiele firm, które mogą się tym zająć, i nie ma sensu nadrabiać zaległości w ich wieloletnim skupieniu się na upewnieniu się, że Twoja poczta e-mail dotrze do miejsca docelowego bez napastowania przez filtry antyspamowe. Teraz mógłbym porozmawiać punkt po punkcie o DKIM, SPF, limitach stawek ISP, kontroli treści, odrzuceniach, wpisywaniu się na czarną listę, usuwaniu z czarnej listy itp., ale oczy będą zaszklić. Jak przekonać nietechnicznego menedżera do problemów związanych z taką masową wiadomością e-mail?


title: Kto jest właścicielem modyfikacji oprogramowania open source?

text: Załóżmy, że oprogramowanie jest rozpowszechniane na podstawie pewnej licencji zezwalającej, np. BSD. Teraz modyfikuję to oprogramowanie i chcę rozpowszechniać moją pracę pochodną. Moje pytania: * Kto jest właścicielem pochodnej? Czy jest to autor pierwotny, nowy autor czy współwłasność? * Czy informacja o prawach autorskich (powiedzmy, że pod pierwotnymi prawami autorskimi) jest wystarczająca do ustalenia nowego właściciela?


title: Ogólna nazwa typów i wartości

text: Jaka jest w informatyce abstrakcyjna nazwa zwyczajowa typów i wartości (mam na myśli abstrakcyjne „coś”, co może być typem lub wartością)? Mówiąc dokładniej: Jeśli mamy `szablon <nazwatypu X>` lub `szablon <int X>` jaka jest abstrakcyjna nazwa `X`?


title: Delegaci języka C# są niezmienne — ale dlaczego ma to znaczenie?

text: To jest pytanie uzupełniające do tego innego pytania. **Tło** Pracując z samouczkiem delegatów MSDN (C#), widzę, co następuje: > Zauważ, że po utworzeniu pełnomocnika metoda, z którą jest skojarzona, nigdy > się nie zmienia — obiekty delegatów są niezmienne. A potem, w przykładowym kodzie, widzę to (rozłóż trochę w kodzie): delegat publiczny void ProcessBookDelegate(Book book); bookDB.ProcessPaperbackBooks(nowy ProcessBookDelegate(PrintTitle)); bookDB.ProcessPaperbackBooks(nowy ProcessBookDelegate(totaller.AddBookToTotal)); **Pytanie** Teraz oczywiście sposób, w jaki kod jest tutaj napisany, dla każdego procesu jest tworzony nowy delegat. Jestem _zgaduję_, że niezmienność jest istotna, jeśli próbujesz zrobić takie rzeczy jak ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle); ProcessBookDelegate thisIsATest = new ProcessBookDelegate(totaller.AddBookToTotal); który powinien... nadal się kompilować, gdy `thisIsATest` jest niezmienne? Jaki problem rozwiązał Microsoft, czyniąc go niezmiennym? Jakie problemy napotkalibyśmy, gdyby C# 6 sprawił, że delegaci byliby zmiennymi? **EDYTUJ** Uważam, że niezmienność zapobiegnie temu: ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle); toJestTest.ZmieńDelegataWAAdFashion(); jakasFunkcja(ThisIsATest); //Ta funkcja działa normalnie //ponieważ delegat jest niezmieniony //ze względu na niezmienność, ale niezmienność NIE zapobiegnie temu: ProcessBookDelegate thisIsATest = new ProcessBookDelegate(PrintTitle); thisIsATest = new ProcessBookDelegate(ChangeTheDelegateInABadFashion()); jakasFunkcja(ThisIsATest); //Ta funkcja działa teraz dziwnie, ponieważ // oczekiwała niezmienionego delegata Czy mam rację w tym zrozumieniu?


title: Jak przetestować losową funkcję w MS Excel/WORD/PPT?

text: Ankieterzy często zadają pytania dotyczące testowania losowej funkcji w Excelu, Wordzie, Notatniku itp. Jestem kimś, kto będzie przeprowadzał rozmowę kwalifikacyjną na stanowisko SDET i ma doświadczenie w SDE, a nie konkretnie w SDET. Jestem bardzo zainteresowany testowaniem, więc ubiegałem się o stanowisko SDET. Jak więc należy podejść do testowania losowej funkcji w oprogramowaniu, zwłaszcza oprogramowania typu word/excel/notatnik? Testy eksploracyjne? A co z funkcją taką jak Plik-> otwórz okno dialogowe w programie Word/Excel/ Jak radzić sobie z takimi pytaniami podczas rozmowy kwalifikacyjnej? Czego konkretnie rekruter szuka u doświadczonego kandydata, gdy zadaje takie pytania?


title: Czy istnieje sposób na usprawnienie typowych dyskusji programistów?

text: Często moi koledzy i ja napotykamy konkretne problemy, na przykład, jaki jest najlepszy sposób na zastosowanie tej techniki, czy ta lub inna technika byłaby dobra do użycia, lub po prostu „hej, widziałeś tę nową rzecz”. Jednak w tej chwili ta komunikacja odbywa się za pośrednictwem poczty, Skype'a lub Twittera, a wiele informacji trudno jest znaleźć bardzo szybko. Czy istnieje usługa lub metodologia umożliwiająca uporządkowanie i śledzenie tego rodzaju informacji?


title: Najlepsza metoda w PHP do obsługi błędów? Przekonwertować wszystkie błędy PHP (ostrzeżenia itp.) na wyjątki?

text: Jaka jest najlepsza metoda obsługi błędów w PHP? czy istnieje sposób w PHP, aby przekonwertować wszystkie błędy PHP (ostrzeżenia itp.) na wyjątki? jaki jest najlepszy sposób/praktyka obsługi błędów? znowu: jeśli nadużywamy wyjątków (tj. Try/catch) w wielu sytuacjach, myślę, że aplikacja zostanie niepotrzebnie zatrzymana. do prostego sprawdzania błędów możemy użyć return false; ale może to zaśmiecać kod wieloma, jeśli nie, warunkami. co proponujecie?


title: Jak mogę wyświetlić zadania github, które nie są przypisane do osoby?

text: Na głównej stronie Problemy możesz kliknąć opcję „Problemy wszystkich” lub „Przypisane do mnie”. Jeśli chcesz wyświetlić zadania przypisane do konkretnej osoby, możesz kliknąć ikonę wyszukiwania, a po lewej stronie wybrać menu rozwijane przydzielone każdemu, a następnie wybrać z listy cesjonariuszy. Ale jak wypisać wszystkie pozycje, które nie są nikomu przypisane?


title: Czy istnieje kanoniczna księga wzorców i koncepcji projektowych CMS?

text: Próbowałem zrozumieć podstawy systemów zarządzania treścią: zapoznałem się z _Pro ASP.NET 4 CMS_ firmy APress, ale zagłębia się on w implementację, poświęcając dużo czasu technologiom, a nie podstawowym zasadom. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje dotyczące systemów zarządzania treścią? Co w tej książce czyni ją wyjątkową?


title: Właściwe użycie instrukcji dotyczących przełącznika „fall-through”

text: Kiedy właściwe jest użycie instrukcji przechodzenia (klasycznej) switch? Czy takie użycie jest zalecane i zachęcane, czy też należy go za wszelką cenę unikać?


title: Dlaczego wskaźniki nie są zalecane podczas kodowania w C++

text: Gdzieś wyczytałem, że przy korzystaniu z C++ zaleca się nie używać wskaźników. Dlaczego wskaźniki są tak złym pomysłem, gdy używasz C++. Dla programistów C, którzy są przyzwyczajeni do używania wskaźników, jaka jest lepsza alternatywa i podejście w C++?


title: Jak nauczyć się tworzenia aplikacji internetowych w języku Java?

text: Planuję stworzyć aplikację webową w Javie z wykorzystaniem Amazon Web Services Elastic Beanstalk. AWS Elastic Beanstalk zasadniczo zapewnia PaaS jako dodatek do zasobów obliczeniowych AWS w chmurze. Mam problem z nauką tworzenia aplikacji internetowej w języku Java. Jestem zaznajomiony z tworzeniem podstawowych programów w Javie (pierwszy rok informatyki) i przeczytałem książkę o javie Head First, jednak nie mam pojęcia, jeśli chodzi o duży projekt, taki jak ten. Próbowałem znaleźć odpowiedni samouczek w dokumentacji AWS, ale o ile wiem, zakłada, że wiesz, jak tworzyć aplikacje Java. Wypróbowałem dokumenty Oracle Java i szukałem w Internecie czegoś przydatnego. Problem polega na tym, że wszystkie zasoby, które znajduję, zakładają znajomość tego, czego próbuję się nauczyć. Idealnie chciałbym artykuł lub samouczek opisujący proces i sposób tworzenia aplikacji internetowej Java, która zakłada jedynie podstawową znajomość języka programowania Java. Więc jeśli ktoś może zaoferować jakąkolwiek radę lub dokumenty, które mogłyby mi pomóc osiągnąć ten cel, byłbym bardzo wdzięczny za twoją pomoc :-) Z góry dziękuję i przepraszam, jeśli wydaje się, że Google może odpowiedzieć na to pytanie, ale szczerze wyglądam całkiem trudno znaleźć sposób, aby się tego nauczyć i nic nie wymyśliłem. Przyszedłem więc do Was – ekspertów ;) – którzy prawdopodobnie wiedzieli tak mało jak ja na starcie. Podstawowe szczegóły aplikacji: będzie mieć interfejs sieciowy, a także aplikacje na Androida i iOS do łączenia się z nią. Będzie on średniej złożoności i będzie wymagał interakcji z użytkownikiem. W przypadku części opartej na przeglądarce będzie to wiązało się z pobieraniem płatności od użytkowników, jeśli chcą kupić część premium usługi.


title: Jak śledzisz swoje postępy w projekcie?

text: Oto rodzaj sytuacji, z którą się zmagam i na pewno nie jestem pierwszy: * Projekt ma budżet oparty na szacowanym czasie na opracowanie rozwiązania * Ostateczny termin przekazania projektu kierownikowi ds. kontroli jakości jest jednym z kilku data * pracuję nad wieloma projektami naraz, a każdy ma określoną w budżecie liczbę godzin i terminów Śledzenie moich postępów w stosunku do budżetu i terminu byłoby całkiem proste, gdybym wiedział dokładnie, jak zamierzam go wdrożyć i miał tylko jeden lub jednocześnie skupiać się na dwóch projektach. Jednak buduję strony internetowe za pomocą Drupala, a każdy projekt zawiera jakąś funkcjonalność, która może być dostępna jako moduł - w przeciwnym razie dostępny moduł w ogóle nie będzie działał, a zbudowanie tej funkcjonalności będzie wymagało znacznego wysiłku. Którą strategię uznałeś za najbardziej pomocną w śledzeniu, gdzie jesteś w projekcie, dzięki czemu możesz dokładnie zgłosić kierownikowi projektu, jak daleko jesteś, i na wczesnym etapie zidentyfikować, czy projekt jest zagrożony opóźnieniem lub przekroczeniem budżetu, szczególnie w przypadkach, gdy czas potrzebny na niektóre części jest nieznany?


title: Stwórz monolityczną architekturę w czymś modułowym

text: Obecnie moja architektura to monolityczny blok, który spełnia naprawdę specyficzne zadanie. Teraz trzeba to uogólnić. Obecnie obsługuje żądanie i wszystkie powiązane z nim procesy (1 lub wiele). Jest klasa `Request` i klasa `Proces`, a ponieważ służy do jednego konkretnego zadania, ten model był OK. Teraz muszę podzielić obie klasy, aby osiągnąć modułowość. Na przykład klasa `Request` powinna zostać podzielona. Tak więc nadal będę mieć klasę `Request`, która przechowuje ogólne informacje o żądaniu, oraz wiele `RequestDetailsForServiceOne`, `RequestDetailsForServiceTwo` itd., które zawierają szczegółowe informacje odnoszące się do konkretnego typu żądania. Podobnie dla „Procesu”. _Pytanie w tej chwili brzmi: jak powiązać klasę `Request` z `RequestDetailsForServiceOne` (w czasie wykonywania)?_ Myślałem o wstrzykiwaniu zależności, ale `RequestDetailsForServiceOne` i `RequestDetailsForServiceTwo` nie mają żadnego wspólnego zachowania (że klasy przechowują tylko niektóre właściwości), w ten sposób doprowadzę mnie do kodu `IRequestDetailsForService` całkowicie pustego. To brzmi dla mnie jak zapach kodu. Czy w takim przypadku lepszym pomysłem byłoby użycie (w klasie `Request`/`Process`) Słownika właściwości i całkowite ominięcie klas `RequestDetailsForService*`? Naprawdę nie podoba mi się utrata kontroli typu, która w ten sposób odzyska mnie. Jakie byłoby idealne rozwiązanie?


title: Czy WinRt obsługuje .Net Framework i Wpf?

text: Chcę się dowiedzieć, czy 1. WinRt obsługuje .Net Framework, czy nie? 2. WinRt obsługuje lub nie obsługuje WPF? Nasza firma opracowała aplikacje przy użyciu WinForms i chce, aby działały również na WinRt. Czy w WinRt można używać klas opracowanych pod .Net Framework 4.5?


title: Jakiemu rodzajowi projektów należy nadać każdemu z tych projektów swoje szczególne cele?

text: Pracuję nad stworzeniem nowego systemu, który powinien być w stanie bez problemu zmieniać warstwę prezentacji, a także obsługiwać usługi sieciowe, obszary sklepowe, wewnętrzną kontrolę danych, tworzenie raportów, wiele portali internetowych itp. Po tym poście o „korzyściach z wielu projektów i jednego rozwiązania” na Stackoverflow, również w pewnym doświadczeniu, wpadłem na pomysł następującej struktury. * TestProject.BLL (Biznes) * TestProject.DAL (Persistence (Mapowanie, Konwencje itp.)) * TestProject.WEB (Warstwa prezentacji) * TestProject.BASE (Framework) Ale po kilku poszukiwaniach w Internecie odkryłem, że te projekty są **nie** zawsze jest typem „ **Aplikacja sieci Web ASP.NET**”. * * * Moje pytanie brzmi, jakie typy powinienem tworzyć w każdym projekcie? Czy powinienem je skompilować jako " **Aplikacja Windows Forms** ", czy co?


title: Rozwiązywanie, które błędy przyniosą największe korzyści kosztowe

text: Chciałem zorientować się, jak kategoryzować błędy w oparciu o to, jak łatwo jest je rozwiązać i jakie korzyści przyniesie mi to. na przykład, jeśli istnieje błąd, którego rozwiązanie zajmie powiedzmy godzinę (podwójne zamknięcie pliku itp.), w porównaniu z innym, który zajmuje dzień (błąd segmentacji). Ale jeśli rozwiązanie pierwszego błędu nie jest bardzo ważne, to prawdopodobnie popracuję nad drugim. Czy są jakieś prace badawcze, które kategoryzują błędy na podstawie stosunku kosztów do korzyści lub podobnych wskaźników? [EDYTUJ] Załóżmy, że możliwe jest kategoryzowanie błędów na podstawie ich cech, np. podatność bezpieczeństwa, błąd pamięci, błąd logiczny itp. W innym wymiarze mogą to być parametry takie jak trudność (łatwy, średni, trudny). Czy są inne wymiary, których powinienem szukać. Upraszczając, mogę założyć dwie rzeczy: 1. Każdy programista w zespole jest w równym stopniu zdolny do rozwiązania każdego błędu 2. Nie ma terminu


title: EF kontra NHibernate

text: W ciągu ostatnich 2 lat zacząłem pisać aplikacje biznesowe (wcześniej zajmowałem się programowaniem front-end wysokiego poziomu lub programowaniem systemów bardzo niskiego poziomu), nauczyłem się zestawów danych, linq to sql, a teraz encji frameworka. Logiczną rzeczą, na którą należy spojrzeć w następnej kolejności, wydaje się być NHibernate. Powody, dla których ostatecznie trafiłem do EF, to: (1) ma najlepsze wsparcie projektantów i (2) jest najbardziej wspierany przez Microsoft. Powody (mają one elementy założenia), że interesuje mnie NHibernate to: (1) może nie zostać zastąpiony przez zupełnie inną rzecz tak szybko, jak MS zmienia technologie dostępu do danych (2) Wygląda na to, że jest to albo front, albo drugi przednie narzędzie do biegania za to, co robi i (3) Wydaje się, że jest stabilne i można je prześledzić w czasie. Czy ktoś opublikował porównanie tych dwóch? Czy jeden jest lepszy od drugiego dla niektórych typów architektur? A może to tylko kwestia stylu i preferencji?


title: c# Filtr treści internetowych

text: Czy ktoś może wskazać mi jakieś DOBRE filtry treści internetowych typu open source .NET? Chciałbym dowiedzieć się, w jaki sposób mogę filtrować/blokować ruch internetowy na podstawie adresu URL i/lub słowa kluczowego. Szukałem w google, ale nie mogę znaleźć żadnego rozwiniętego c#


title: Czy ślad stosu powinien znajdować się w komunikacie o błędzie przedstawianym użytkownikowi?

text: Mam trochę kłótni w moim miejscu pracy i próbuję dowiedzieć się, kto ma rację i co należy zrobić. Kontekst: intranetowa aplikacja internetowa, której nasi klienci używają do księgowości i innych zadań ERP. Uważam, że komunikat o błędzie prezentowany użytkownikowi (gdy coś się zawiesza) powinien zawierać jak najwięcej informacji, w tym ślad stosu. Oczywiście musi zaczynać się od ładnego „Wystąpił błąd, prosimy o przesłanie poniższej informacji do programistów” dużymi, przyjaznymi literami. Moje rozumowanie jest takie, że zrzut ekranu aplikacji, która uległa awarii, będzie często jedynym łatwo dostępnym źródłem informacji. Oczywiście, możesz spróbować skontaktować się z administratorami systemów klienta, spróbować wyjaśnić, gdzie znajdują się twoje pliki dziennika itp., ale prawdopodobnie będzie to powolne i bolesne (w większości przypadków rozmowa z przedstawicielami klienta jest taka). Ponadto posiadanie natychmiastowych i pełnych informacji jest niezwykle przydatne podczas programowania, gdzie nie musisz przeszukiwać plików dziennika, aby znaleźć to, czego potrzebujesz przy każdym wyjątku. (Ale można to rozwiązać za pomocą przełącznika konfiguracyjnego.) Niestety był pewien rodzaj „audytu bezpieczeństwa” (nie mam pojęcia, jak to zrobili bez źródeł… ale cokolwiek), i narzekali na pełne komunikaty o wyjątkach, które je cytują jako zagrożenie bezpieczeństwa. Oczywiście klienci (przynajmniej jeden, którego znam) przyjęli to za dobrą monetę i teraz domagają się oczyszczenia wiadomości. Nie rozumiem, w jaki sposób potencjalny napastnik mógłby użyć śladu stosu, aby dowiedzieć się czegokolwiek, czego nie mógł rozgryźć wcześniej. Czy są jakieś przykłady, jakikolwiek udokumentowany dowód na to, że ktoś to kiedykolwiek robił? Myślę, że powinniśmy walczyć z tym głupim pomysłem, ale może jestem tutaj głupcem, więc... Kto ma rację?


title: Dobieranie karty z potasowanej talii

text: Jestem całkiem nowy w Haskell, chociaż zrobiłem kilka ML wiele księżyców temu. Próbuję ustawić talię kart do gry, potasować je, a następnie rozdać. Mam posortowaną talię i tasowanie (w pewnym sensie), ale nie jestem pewien, co robię później. Oto co mam do tej pory: import System.Random import Data.Array.IO import Control.Monad -- | Losowo przetasuj listę -- /O(N)/ shuffle :: [a] -> IO [a] shuffle xs = do ar <- newArray n xs forM [1..n] $ \i -> do j <- randomRIO (i,n) vi <- readArray ar i vj <- readArray ar j writeArray ar j vi return vj gdzie n = długość xs nowa tablica :: Int -> [a] -> IO (IOArray Int a) nowa tablica n xs = newListArray (1,n) xs szeregi=[2..14] kolory=[1,2,3,4] karty=[(r,s) | r <- szeregi, s<- kolory] deck=tasuj karty mojaAkcja :: IO [(Integer, Integer)] mojaAkcja = tasuj karty main :: IO () main = wykonaj xs <- mojaAkcja print xs Nie było żadnego konkretnego powodu I wybrałem tę listę z innego powodu niż to, że mogłem przesłuchać (lub przynajmniej wyświetlić) listę wynikową. Chciałbym móc wyciągnąć elementy ze zwróconego **IO [(Integer, Integer)]**, ale nie jestem do końca pewien, jak postępować. Rozumiem, że nie mogę po prostu przekonwertować go na listę waniliową (jest to wystarczająco omówione w innym miejscu), więc prawdopodobnie albo muszę: * rozszerzyć IO (monadę?) Jakoś * napisać niestandardową listę tasujących krotek * napisać własną monadę * użyj innej metody, której jeszcze się nie nauczyłem Anegdotycznie, wierzę, że można to zrobić "nieczysto", ale nie chcę iść do piekła programistów, dopóki nie zrozumiem, jak gorące są pożary... Jakiś pomysł, jak najlepiej postępować ?


title: Mapa drogowa technologii: Portlet JSR286 a widżet/gadżet

text: IBM wprawił mnie w zakłopotanie (znowu). IBM od wielu lat naciska na kontenery portletowe ze specyfikacją JSR 168, a później ze specyfikacją JSR 286. W latach 2008-2009 IBM, oddział Lotus, wprowadził specyfikację iWidget. Z moich odczytów wynika, że jest to bardziej dynamiczna i lżejsza wersja Portletów, zbliżona do gadżetu Google. Wykorzystuje inny paradygmat niż Porlet, zapewniając te same funkcje. Głównym wyróżnikiem tego rodzaju technologii po stronie klienta jest to, że nie potrzebujesz dużej i kosztownej infrastruktury portalu. Aby nie wpaść w dyskusje „To zależy od potrzeb”, rozważmy następujące kwestie: * Nowa firma, brak starszego portletu, brak portalu. Jakie są twoje przemyślenia na ten temat?


title: Nauka programowania w asemblerze - Przydatne zasoby

text: Kontynuując poprzedni wątek, zainteresowałem się trochę nauką programowania w asemblerze. Nie chodzi o to, że chcesz zaprogramować przydatne aplikacje, tylko po to, aby poczuć programowanie niskopoziomowe, aby lepiej zrozumieć, co się dzieje. Czy ktoś może polecić jakieś książki lub zasoby internetowe dla początkujących? Dziękuję.


title: Co robisz, gdy musisz pracować nad projektem w języku, którego nienawidzisz?

text: Niedawno zostałem przydzielony do pracy nad projektem napisanym w PHP. Nie mogę tego zmienić i nie mam zamiaru naprawdę próbować. Jednak nie może to być rzadki scenariusz. Jak motywujesz się do pracy nad projektem, gdy kod, na który patrzysz i który ciągle produkujesz, sprawia, że masz ochotę płakać? EDYCJA: Należy zauważyć, że jest to właściwie jedyna praca na terenie kampusu, która zajmuje się obecnie dostępnym oprogramowaniem, więc „po prostu zmień pracę” nie jest tak naprawdę opcją :(


title: Jak wytłumaczyć projekt potencjalnemu pracodawcy

text: W zeszłym tygodniu poszedłem na rozmowę kwalifikacyjną z młodszym programistą i wspomniałem, że pracuję nad projektem z moim kumplem. Jutro chcieliby zobaczyć ten projekt, aby zdecydować, czy mnie zatrudnić, czy nie. Zastanawiałem się więc: * Jakie części projektu są interesujące dla kogoś, kto wcześniej go nie widział? * Co mógłbym pokazać, co zmieniłoby ich spojrzenie na mnie jako programistę i to, co wiem? Projekt jest w C# i od 6 miesięcy jest projektem hobbystycznym. Bez wchodzenia w wiele szczegółów: * jest to program sieciowy * jest to serwer / klient oparty na tym, gdzie klienci łączą się ze sobą * istnieje synchronizacja danych między klientami * używamy plików do przechowywania informacji o różnych klientach, co również jest synchronizacja * program w całości jest podzielony na kilka różnych projektów (niektóre przechodzą do .dll) * projekt będzie później obsługiwał wiele warstw wyświetlania danych użytkownikowi (tzn. cmd, okno itp.) Mam zielone podświetlenie to również z moim kumplem i można to pokazać. Moim pomysłem było pokazanie działającej powłoki (cmd) oraz najwyższych warstw hierarchii, z którymi powłoka komunikuje się bezpośrednio. Są to w szczególności trzy klasy, jedna, która łączy się i komunikuje z serwerem, jedna, która obsługuje synchronizację i jedna, która obsługuje synchronizowane obiekty. Spróbuję omówić kilka szczegółów dotyczących tego, jak przechowujemy obiekty i jak jest to przekazywane do klasy synchronizatora. Następnie omów na wyższym poziomie, w jaki sposób synchronizujemy dane, kończąc na szczegółowym omówieniu tego, jak to się robi. Zasadniczo **zacznij od warstwy abstrakcyjnej i przejdź do szczegółów, gdzie dzieje się magia.** Ale zastanawiam się, jak będzie to zrozumiałe dla kogoś, kto nigdy wcześniej nie widział naszego projektu. Jak to pokaże, że jestem lepszym lub gorszym programistą niż mój następny? Są programistami, więc myślę, że zrozumieją podstawy i będą w stanie śledzić funkcje i to, co robi kod. Ale wiem, że _ja_ mam problem ze zrozumieniem całościowego obrazu projektu, a tym bardziej w ciągu 1-2 godzin. Poza tym nie wiedziałbym, jak zdecydować, czy był to dobry programista, czy zły, chyba że zobaczyłbym zły kod. Więc moje pytanie brzmi: 1. Czy nad powyższym pomysłem warto popracować? (góra > dół) 2. Czy powinienem bardziej skoncentrować się na algorytmach? 3. Czy powinienem spróbować zbudować diagram UML lub inną wizualną reprezentację projektu? Jakieś inne pomysły?


title: O co powinienem zapytać ankietera podczas rozmowy kwalifikacyjnej?

text: Za tydzień mam wywiad SDET. Przygotowuję się od dłuższego czasu. To dobra firma. Jako SDET pracuję od dwóch lat. Zastanawiam się, jakie pytania powinienem zadać mojemu rozmówcy odnośnie testów i innych rzeczy. Będę wdzięczny za pomoc, jeśli udzielisz mi przykładowych pytań, które powinienem zadać mojemu rozmówcy podczas rozmowy kwalifikacyjnej. Niektóre z nich, o których myślałem, to: 1. Jakiego rodzaju metodologii testowania używasz? 2. Czy codziennie odbywasz spotkanie segregacyjne? 3. Jaki procent pokrycia kodu jest wykonywany przez testy jednostkowe? Nie uważam, aby te pytania były bardziej skuteczne. Byłbym wdzięczny, gdyby ktoś mógł mi pomóc w wychodzeniu z lepszymi pytaniami.


title: Co oznacza „Wydane na licencji MIT i GPL”?

text: Istnieje wiele projektów wydanych na więcej niż jednej licencji. Jednym z przykładów jest trilicencja Mozilli, która stwierdza, że Oprogramowanie jest wydawane na licencji MPL, ale użytkownik może również wybrać GPL lub LGPL zamiast MPL (myślę, że dzieje się tak, ponieważ licencja MPL jest niezgodna z licencją GPL). Natrafiłem jednak na projekty wydane zarówno na licencji GPL, jak i licencji MIT. Jakie warunki muszą być spełnione w takim przypadku? W przypadku MPL/GPL/LGPL wszystko jest jasne, ponieważ możesz wybrać MPL, GPL lub LGPL. Ale z GPL i MIT rozumiem, że warunki z obu licencji muszą być spełnione w tym samym czasie, aby z niego korzystać, a to nie ma większego sensu, ponieważ mają różne cele. W takim przypadku, czy licencja MIT powinna być interpretowana jako wyjątek, podobnie jak na przykład wyjątek LGPL QT, czy jako dodatkowy zestaw warunków poza licencją GPL?


title: HTML w komentarzach docblock?

text: W standardach PEAR nie ma odniesienia do HTML, czy jest to dozwolone czy nie. http://pear.php.net/manual/en/standards.sample.php Ale widzę, że niektórzy ludzie używają znaczników HTML, takich jak `<kbd>` i tak dalej. Czy HTML jest dozwolony? Czy złamie niektóre parsery dokumentów?


title: Jak zostać programistą sterowników jądra/systemów/urządzeń?

text: Obecnie pracuję zawodowo jako inżynier oprogramowania pracujący z systemem operacyjnym Android. Pracujemy nad integracją naszej platformy jako natywnego demona między innymi aspektami projektu. Pracuję głównie w Javie rozwijając aplikacje SDK i Android, ale pomagam w obsłudze platformy w C/C++. W każdym razie bardzo interesuje mnie praca zawodowa rozwijająca niski poziom pod linuxa. Nie jestem niezadowolony na obecnym stanowisku i będę kręcił się tak długo, jak pozwoli mi firma (w rzeczywistości bardzo lubię tam pracować!), ale chciałbym podążać w tym kierunku. Pracowałem nad rozwojem jądra Linuksa (Robert Love) i Interfejsem Programowania Linuksa (Michael Kerrisk) (oprócz wzmacniania moich umiejętności C przy każdej możliwej okazji) i od niechcenia przeglądałem strony Monster i podobne. Problem, który widzę, polega na tym, że _nie ma pozycji na poziomie podstawowym_. Jak włamać się do tego pola? Za każdym razem, gdy widzę "Linux Systems Programmer" lub "Linux Device Driver Programmer", wszystkie one wymagają _co najmniej_ 5-7 lat odpowiedniego doświadczenia. Chcą kogoś, kto zna się na rzeczy, a nie programisty juniorów (pracuję już od 7 miesięcy...). Tak więc zakładam, że niektórzy z was na stackoverflow pracują zawodowo robiąc dokładnie to, co ja chciałbym robić. Jak się tam dostałeś? Z jakich platform korzystałeś, by tam pracować? Czy będę miał trudniejszy czas, ponieważ mam moich kawalerów w CSC, w przeciwieństwie do inżyniera komputerowego (gdzie doświadczyliby nieco bardziej osadzonych, asm itp.)? _EDYTUJ W CELU WYJAŚNIENIA!_ Jestem świadomy natury jądra/sterowników linuksowych o otwartym kodzie źródłowym itp. Planuję wnosić wkład niezależnie od tego, gdzie jest moja codzienna praca. Jestem bardziej ciekawa, jakie stanowiska na poziomie podstawowym pozwolą mi wykonywać odpowiednią pracę i zarabiać za to! Dzięki za wszystkie dotychczasowe odpowiedzi!


title: Czas przeznaczony na przeglądy kodu

text: Jeśli robisz przeglądy kodu * Ile czasu poświęcasz na przeglądy kodu w porównaniu do implementacji? * Ile zmian przechodzi przegląd kodu? * uważasz, że to za dużo / powinno być więcej? Czy są jakieś badania dotyczące skuteczności? [edytuj] dziękuję wszystkim za odpowiedzi, ciężko wybrać "zwycięzcę" na takie pytanie, w innych odpowiedziach też jest wiele cennych informacji.


title: Wymagana wiedza matematyczna przed przystąpieniem do informatyki

text: Obecnie jestem studentem Kolegium Analizy Systemów (studia 3-letnie). Niedługo kończę kurs i chciałbym zapisać się na informatykę na pobliskim uniwersytecie. Interesuję się nauką algorytmów sortowania, mierzeniem złożoności czasowej, kryptografią, programowaniem systemów i badaniami bezpieczeństwa. Nudzi mnie typowa wiedza na wysokim poziomie; java i ogólna znajomość algorytmów. Absolutnie nie mam problemu z nauką i wykorzystaniem nowych języków programowania, mentalności i składni. Moim jedynym zmartwieniem, jeśli chodzi o rozpoczęcie tego kursu, jest to, jaka wiedza matematyczna jest wymagana przed rozpoczęciem. Zrobiłem algebrę liniową, ale nie równania kwadratowe; Nie robiłem rachunku różniczkowego, ani nie robiłem notacji Big-O. Planuję zapisać się za 1 (jeden) rok, więc mam rok na przygotowanie się. Chciałbym wiedzieć, co powinienem studiować i czytać, aby się przygotować. Książki, arkusze ćwiczeń, filmy i wszelkiego rodzaju porady lub opinie byłyby bardzo mile widziane. Mam wielką pasję do wydajnego przetwarzania/programowania i rozwiązywania problemów w najbardziej efektywny sposób. Po prostu próbuję dowiedzieć się, czy wszedłbym ponad głowę w informatykę. Niektórzy powiedzieli, że mam za stary, 22 w tym roku, chciałbym usłyszeć opinie i rady społeczności Stack. Dzięki wszystkim z góry,


title: Co to jest wzorzec/paradygmat projektu dla aplikacji internetowych ASP.NET?

text: Właściwie nie wiem, czy moje pytanie jest poprawne, ale pracując nad przeniesieniem aplikacji webowej ze świata ASP.NET na platformę Java + Spring, wymyśliłem to pytanie. Używając Spring MVC, nowej wersji aplikacji, oczywiście stosuję wzorzec MVC, ale który był wzorem/paradygmatem ASP.NET. Wiem, że ASP.NET używa paradygmatu zorientowanego na zdarzenia, ale czy jest to wzorzec projektowy? Mam nadzieję, że wszystko będzie jasne...


title: A w którym momencie modyfikacji oryginału kod źródłowy bez licencji staje się moją własnością?

text: Niedawno natknąłem się na publicznie dostępny projekt na Github, który nie jest powiązany z licencją. W tym repozytorium znajduje się plik z logiką i większość kodu potrzebnego do pracy jako fragment projektu, nad którym pracuję. Nie dosłownie, ale około 60% chciałbym wykorzystać z różnymi modyfikacjami. Kiedy mój kod stanie się trochę bardziej stabilny, planuję wydać to, co zrobiłem, na licencji WTFPL. Wysłałem e-maila do właściciela repozytorium i jak dotąd nie otrzymałem odpowiedzi. Wiem, że mam prawa do rozwidlenia repozytorium, ale jeśli wydam okrojoną i zmodyfikowaną wersję pliku innego projektu wraz z moim, na mocy WTFPL, czy naruszam prawa autorskie? Zgodnie z Warunkami korzystania z usługi Github, przesyłając projekt na Github i udostępniając go publicznie, pozwalasz innym użytkownikom zobaczyć i rozwidlić Twój projekt. Nie mówi nic o modyfikowaniu, rozpowszechnianiu lub używaniu widelca. A w którym momencie modyfikacji oryginału staje się moją własnością?


title: Przeprowadzasz iteracyjnie wyszukiwanie w głąb przy użyciu przetwarzania asynchronicznego/równoległego?

text: Oto metoda, która przeszukuje DFS i zwraca listę wszystkich elementów o identyfikatorze najwyższego poziomu. Jak mogę to zmodyfikować, aby skorzystać z przetwarzania równoległego? Obecnie wywołanie pobrania elementów podrzędnych jest wykonywane pojedynczo dla każdego elementu na stosie. Byłoby miło, gdybym mógł jednocześnie uzyskać elementy podrzędne dla wielu elementów w stosie i szybciej wypełnić moją listę zwrotów. Jak mogę to zrobić (albo używając async/await lub TPL, lub czegokolwiek innego) w bezpieczny sposób? private async Task<IList<Item>> GetItemsAsync(string topItemId) { var items = new List<Item>(); var topItem = czekaj na GetItemAsync(topItemId); Stos<Pozycja> stos = nowy Stos<Pozycja>(); stos.Push(topItem); while (stack.Count > 0) { var item = stack.Pop(); przedmioty.Dodaj(element); var subItems = czekaj GetSubItemsAsync(item.SubId); foreach (var subItem w subItems) { stack.Push(subItem); } } zwracaj pozycje; } Myślałem o czymś w tym stylu, ale to się nie zgadza: var task = stack.Select(async item => { items.Add(item); var subItems = await GetSubItemsAsync(item.SubId);foreach (var subItem w subItems) { stack.Push(subItem);} }).ToList(); if (tasks.Any()) await Task.WhenAll(tasks); Język, którego używam, to C#.


title: Wyświetlać i przetwarzać obiekty na liście?

text: Obecnie mam taki kod, aby wyświetlić niektóre obiekty, które spełniają pewne kryteria w siatce: // uproszczone void MyDialog::OnTimer() { UpdateDisplay(); } void MyDialog::UpdateDisplay() { std::list<MyClass *> obiekty; someService_->GetObjectsMeetingCriteria(obiekty, sortField, sortDirection); for(std::list<MojaKlasa *>::iterator it = objects.begin(); it != objects.end() ; it ++) { AddObjectToGrid(*it); } } Działa to dobrze. Teraz pojawił się wymóg przetwarzania tych obiektów, gdy spełniają one pewne kryteria. Informacje o obiektach mogą się szybko zmieniać, więc najbardziej pożądane byłoby sprawdzenie, czy obiekt spełnia kryteria, a następnie natychmiastowe przetworzenie go i kontynuowanie w ten sposób. Moje pytanie brzmi, jak najlepiej zaprojektować to, aby obsłużyć wyświetlanie i przetwarzanie. Mógłbym po prostu dodać metodę do przetwarzania obiektu taką jak: for(std::list<MyClass *>::iterator it = objects.begin(); it != objects.end() ; it ++) { ProcessObject( *to); AddObjectToGrid(*it); } Jednak idealnie sprawdziłbym, czy obiekt spełnia kryteria bezpośrednio przed przetworzeniem go, aby upewnić się, że działa na najnowszych informacjach. W tym przykładzie wszystkie obiekty są sprawdzane, aby sprawdzić, czy spełniają kryteria, a następnie każdy z nich jest przetwarzany. Martwię się również, że jest to łączenie kodu przetwarzania z kodem wyświetlania, chociaż nie jestem pewien, jak je rozdzielić ani czy jest to konieczne. Mogę to rozwiązać w ten sposób: void MyDialog::OnTimer() { ProcessObjects(); AktualizujWyświetlacz(); } Ale potem przechodzę po liście obiektów dwa razy, raz do przetworzenia i raz do wyświetlenia. W końcu mogłem zrobić coś takiego: // uproszczone void MyDialog::OnTimer() { ProcessAndDisplayObjects(); } void MyDialog::ProcessAndDisplayObjects() { std::list<MyClass *> obiekty; someService_->GetAll(obiekty, sortField, sortDirection); for(std::list<MyClass *>::iterator it = objects.begin(); it != objects.end() ; it ++) { if(someService->MeetsCriteria(*it)) { ProcessObject(* to); AddObjectToGrid(*it); } } } Ogólnie rzecz biorąc, to, co mnie powstrzymuje, to fakt, że martwię się o połączenie kodu wyświetlania i przetwarzania, a kod działa wydajnie, ponieważ terminowe przetwarzanie ma kluczowe znaczenie. Jak najlepiej ustrukturyzować ten kod?


title: Na co zwrócić uwagę w umowach o pracę

text: Pomyślałem o tym dzisiaj po tym, jak współpracownik przejrzał umowę, którą podpisali kilka lat temu i był dość zaniepokojony. Na co należy zwrócić uwagę przed podpisaniem umowy, ponieważ większość pracodawców _skłoni_ Cię do jej podpisania. Prosimy o publikowanie pomysłów osobno, aby można było na nie głosować indywidualnie.


title: Czy witryna powinna korzystać z własnego publicznego API?

text: Zaczynam pisać webservice i zbudowałem go z nodeJS i podejściem RESTfulish. Z tego co wyniosłem: * Zaletą jest to, że nie musisz duplikować kodu. * Wadą jest to, że: * będziesz często aktualizować publiczne API, ale należy to rozwiązać za pomocą wersjonowania * nie możesz tak naprawdę buforować i optymalizować specyficznej dla usługi Co jest uważane za najlepszą praktykę? Czy strony takie jak Stack Exchange, Github, Twitter itp. używają własnych interfejsów API dla swoich klientów?


title: Wzorce projektowe / strategie dla niestandardowych pól i typów danych

text: Czy istnieją jakieś wspólne strategie lub wzorce projektowe do projektowania aplikacji, które umożliwiają dodawanie niestandardowych pól do obiektów danych lub tworzenie własnych niestandardowych definicji obiektów. Na przykład mam na myśli produkty takie jak SalesForce, w których możesz mieć własne typy informacji, frameworki takie jak Expression Engine i sposób, w jaki obsługuje kanały i grupy pól kanału (przykład) lub jak CMSy, takie jak wordpress, mają możliwość dodawać pola do niestandardowych typów postów.


title: Zrozumienie logiki bitmapowej

text: Przeszedłem przez ten blog i jest na nim napisane > Możesz przedstawić listę odrębnych liczb całkowitych nie większych niż N używając dokładnie > N bitów: jeśli liczba całkowita i pojawia się na twojej liście, ustawiasz i-ty bit na prawdę. > Bity, dla których nie ma odpowiadających im liczb całkowitych, są ustawiane na fałsz. Na przykład > liczby całkowite 3, 4, 7 mogą być reprezentowane jako 00011001. W innym przykładzie > liczby całkowite 1, 2, 7 mogą być reprezentowane jako 01100001. Czy ktoś może mi wyjaśnić, jak [3, 4, 7] = 00011001 i [1, 2, 7] = 01100001, a także dlaczego bierze się 8 bitów?


title: Czy istnieje różnica między własnością a atrybutem?

text: Te dwa słowa są dla mnie całkowicie synonimami, ale zastanawiam się, czy rzeczywiście istnieje użyteczna różnica semantyczna, którą mogę włączyć do konwencji/procesu kodowania/nazywania.


title: Dlaczego nadal używamy DOM w przeglądarce, a nie paradygmatu pulpitu?

text: Z mojego zrozumienia, interfejs sieciowy został opracowany do używania HTML, ponieważ w tamtym czasie nie było możliwe symulowanie aplikacji w stylu pulpitu w przeglądarce, takiej jak działanie Silverlight i Flash, z powodu ograniczeń przepustowości i prawdopodobnie mocy obliczeniowej. Dlaczego w przeszłości i teraźniejszości nie było większej akceptacji i nacisku na technologie takie jak Flash/Silverlight? Z mojego doświadczenia jest przyjemniej się rozwijać (oczywiście moja opinia) i nie musisz mieć do czynienia ze zgodnością z różnymi przeglądarkami i starszymi przeglądarkami (w większości). Obsługa postbacków, AJAX itp. wydaje się dodatkowym niepotrzebnym wysiłkiem w porównaniu z paradygmatem rozwoju aplikacji komputerowych. Czy DOM i jego komplementarne technologie nadal rozwijają się głównie dzięki temu, że Silverlight/Flash wymaga instalacji wtyczki, a niektóre urządzenia mobilne nie obsługują wtyczki?


title: Praktyczne ograniczenia rozmiaru aplikacji opartej na AngularJS

text: Otrzymaliśmy zadanie zastąpienia serii 25-letnich aplikacji mainframe aplikacjami webowymi. W serii są 4 aplikacje i staramy się wymyślić stos, który będzie działał na wszystkich 4. Teraz te aplikacje są duże. Nie ogromny, ale duży. W oparciu o pracę, którą wykonała nasza siostrzana firma, aby wymienić podobne elementy swoich systemów, oczekuje się, że ten mały pojawi się w około 150 tys. linijek kodu serwisowego i około 80 tys. W przypadku tego dużego, milion kodów serwisowych i 200k kodu interfejsu użytkownika nie jest wykluczone. Mała aplikacja, do tej pory mamy około 150 różnych widoków, duża ma około 500, o których wiemy. Teraz rozumiem, że numery linii są złym wskaźnikiem do użycia, ale w tej chwili jest to najlepsze, jakie mam, więc po prostu przejdźmy do tego. Tak więc na świecie, w którym zwykle pracuję, jest to jedna średniej wielkości aplikacja i trzy duże. Kolejny problem, który mamy. Na całej planszy, wszystkie systemy. Żadna czynność użytkownika nie trwa dłużej niż jedną sekundę. Oznacza to, że jeśli wejdziesz do aplikacji, aplikacja musi zostać załadowana i gotowa do zalogowania się w ciągu jednej sekundy. Jeśli klikniesz przycisk wyszukiwania, odpowiedź musi zostać wyświetlona w ciągu jednej sekundy. Mamy ludzi, którzy korzystają z systemów mainframe, które przetwarzają papierkową robotę, i aby osiągnąć swój dzienny limit, muszą średni czas przetwarzania od początku do końca wynoszący 15 sekund dla każdej sprawy. Zielone ekrany, których teraz używają, ledwo trafiają w ten znak. Nie każ mi eliminować papieru. Wymaga tego prawo stanowe i federalne. Wiemy więc już, że musimy zbudować aplikację w taki sposób, aby użytkownik mógł z niej korzystać bez dotykania myszki. Nie ma mowy, żeby osiągnęli swoje limity, jeśli będą musieli poruszać myszką po całym miejscu. To nie jest taka wielka sprawa, możemy zdefiniować klawisze skrótu, aby to zrobić. Ale dużym problemem jest prędkość. Typowym frameworkiem wewnętrznym jest JSF. Standardem jest RichFaces, ale wiele lat okropnych wyników Richa w końcu przekonało ich do przejścia na Prime. Bylibyśmy około 2 lub 3, aby użyć Prime. Ale ponieważ nasze wymagania dotyczące wydajności są najwyższe, jakie kiedykolwiek napotkali, poprosili mój zespół o ocenę różnych frameworków. W przypadku aplikacji wewnętrznych aktualny akceptowalny czas odpowiedzi wynosi od 5 do 7 sekund. Całkiem typowe w przedsiębiorstwie, zazwyczaj dość łatwy cel do trafienia za pomocą JSF. Spędziliśmy więc ostatnie 5 tygodni oceniając różne opcje i skokowo, najskuteczniejszym frameworkiem był GWT. W naszych testach powaliło Vaadin i JSF/Prime całkowicie poza boisko. Poza tym, poza JSF, jest to właściwie jedyna rzecz, jaką mogliśmy znaleźć, zaprojektowaną do obsługi aplikacji tego rozmiaru z zaskakującą łatwością. (Rozpórki i SpringMVC są surowo zabronione w naszym przedsiębiorstwie) Potem zaczęły się problemy. Nasza grupa Enterprise powiedziała, że nie, nie możemy jej użyć. Przyznają, że istnieje bardzo mała szansa, że JSF spełni nasze wymagania dotyczące wydajności, a jedynym praktycznym sposobem osiągnięcia naszego celu jest gruby interfejs przeglądarki, ale zamiast GWT chcą, abyśmy używali Angularjs. Na potrzeby tego postu nie wnikajmy w to, dlaczego powiedzieli „nie”, po prostu trzymajmy się faktu, że odpowiedź brzmiała „nie”. Tak więc przez ostatnie 2 dni zacząłem kopać w Angularze. Jak dotąd nie jestem pod wrażeniem. Wygląda dobrze w przypadku bardzo małych aplikacji (w porównaniu do tego, z czym zwykle mam do czynienia), ale nie mogę znaleźć nigdzie niczego, co pokazuje doświadczenie w próbie zbudowania aplikacji o rozmiarze, który muszę zbudować. Najbliżej znalazłem faceta mówiącego o swojej aplikacji „Enterprise”, którą zbudował za pomocą Angulara, która miała około 9k linii. Powiedział, że to suka do zrobienia, głównie z braku doświadczenia, ale kiedy znalazł narzędzie Lineman, stało się to znośne i był w stanie to zrobić. W aplikacjach, które muszę zbudować, 9 tys. wierszy nie obejmie logiki, którą muszę wbudować w interfejs wyszukiwania (do tej pory zidentyfikowaliśmy kilkanaście różnych sposobów wyszukiwania różnych danych i liczenia). Nie wspominając o robieniu czegokolwiek z wynikami. Zadzwoniłem więc do dwóch naszych naprawdę, naprawdę dobrych programistów i zapytałem ich o zdanie. Po tym, jak przeszliśmy przez początkową fazę rozmowy „Oszalałeś, do tego zbudowano GWT”, ustalono, że spróbuj pobrać aplikacje tego rozmiaru jako jednostronicowe aplikacje JavaScript, tak jak w GWT bardzo łatwo, byłoby całkowitym samobójstwem. Angular po prostu nie został zaprojektowany, aby być tak duży, został zaprojektowany do małych rzeczy. Aplikacje mobilne, małe aplikacje internetowe itp. Nic z tej skali. Pomysł polega na tym, że musimy podzielić aplikację na mniejsze moduły. Ale to rodzi problem, jak przenieść stan aplikacji z jednego modułu do drugiego. Ten problem był już wcześniej rozwiązywany w tej firmie z bardzo słabymi wynikami. Ale mieli pomysł. Ponieważ nie możemy zamienić naszych serwerów Websphere na Node.js, ich sugestią było wypróbowanie podejścia hybrydowego. Pomysł polega na stworzeniu fasoli konwersacyjnej JEE6. Następnie utwórz plik JSF dla każdego modułu aplikacji. Że JSF będzie powiązany z fasolą konwersacji. W ten sposób każdy moduł może uruchomić Angulara, aby obsłużyć stronę MC, a strona V może być podstawowym HTML z Twitter Bootstrap, aby był ładny. Gdy użytkownik przełącza się z jednego modułu do drugiego, stan aplikacji JS jest publikowany w ziarnach konwersacji. Fasolka konwersacji przekierowuje następnie do nowej strony modułu JSF, a następnie JSF może pobrać obiekt reprezentujący bieżący stan aplikacji z konwersacji i przekazać go do Angulara, załadować go i rozpocząć wyścig. Wtedy oczywiście Angular porozmawiałby bezpośrednio z usługami REST. Używamy powolnego stosu JEE tak mało, jak to możliwe, ale nadal jesteśmy w stanie łatwo przenosić stan aplikacji z jednego modułu do drugiego. Stos brzmi dla mnie w porządku. Mamy możliwość rozbicia aplikacji na moduły, jeśli moduł zrobi się za duży, możemy je rozbić na podmoduły, wykorzystać konwersację do przeniesienia stanu z modułu na moduł, możemy też użyć Angulara. Mój problem z tym stackiem to 2 razy. Po pierwsze, to dużo hydrauliki. Wiele rzeczy może pójść źle. Po drugie, nie mogę znaleźć nikogo, kto próbowałby czegoś takiego. Pytania: Jaki jest praktyczny limit rozmiaru aplikacji opartej na Angularze, która nie ma zalet Node.js? Moi programiści UI powiedzieli mi, że gdy aplikacja osiągnie około 10 000 elementów HTML w pojedynczym module JS, wydajność zaczyna spadać. Gdy trafisz na około 25 000 elementów, wydajność spada, a około 40 000 elementów zwykle nie ładuje się. Czy te liczby są zgodne ze średnimi i dużymi aplikacjami, które napisałeś? Dla porównania, powiedzmy, że Stack Exchange to średniej wielkości aplikacja, Dysk Google jest duży. Czy istnieje wzorzec projektowy dla tego scenariusza. Oznacza to, że istnieje wzorzec, w którym można podzielić dużą aplikację front-endową opartą na JS na moduły, które mogą być łatwiej obsługiwane przez frameworki JS za pomocą JSF lub innego systemu do przesyłania stanu aplikacji z jednego modułu do drugiego. Nieudana próba podjęta w przeszłości polegała na przesłaniu obiektu stanu aplikacji do usługi sieci Web i zapisaniu go przez tę usługę w EJB o zasięgu aplikacji, który ma zostać pobrany przez następny moduł. Ta technika nie powiodła się, gdy aplikacja znalazła się pod jakimkolwiek znaczącym obciążeniem. Czy są jakieś inne frameworki do rozważenia, które mogą zapewnić nam wydajność, skalowalność, elastyczność i łatwość tworzenia dużych aplikacji, takich jak ta, która nie ma w nazwie Google? BTW, powiedziano mi o modułach Angular około 15 minut, zanim wyszedłem dzisiaj. Wszystko, co naprawdę o nim wiem, to jego nazwa. Jeśli uważasz, że może mi to pomóc, daj mi znać. Dzięki chłopaki/dziewczyny. Jestem tu naprawdę zakłopotany.


title: zacząć od nietrywialnych programów - publikować czy nie?

text: Właśnie zacząłem tworzyć kilka prostych, ale nie trywialnych (jak mi się wydaje) programów w Ubuntu - jak na razie stworzyłem mały skrobak xkcd, który planuję rozwinąć w wielostronny program do pobierania i przeglądania komiksów internetowych Czy w tym momencie byłby to dobry pomysł, aby zacząć publikować kod na stronie takiej jak Github lub launchpad? (obecnie nie martwię się, że ludzie kopiują mój kod/licencję) A może lepiej publikować kod dopiero po zakończeniu programu? Czy możesz również zasugerować takie strony, na których mogę publikować takie kody i otrzymywać sugestie ulepszeń/omawiać kod z innymi?


title: Lisp: zalety list jako kodu nad tablicami jako kodem?

text: Pytanie dla programistów lispowych: Kod lispowy to dane lispowe, zwykle listy. Czy istnieje przewaga kodu będącego listami nad kodem będącym tablicami? Czy makra byłyby łatwiejsze do napisania/szybsze do uruchomienia? Można założyć, że w takim języku (można by to nazwać „arrap”) elementy można usuwać lub wstawiać do tablic i że tablice będą rosły i kurczyły się w miarę potrzeb.


title: Czy przy pierwszym wydawaniu aplikacji niektóre funkcje są dla Ciebie dostępne w przyszłych wydaniach?

text: Nowy na stronie, więc przepraszam, jeśli to niewłaściwa sekcja. Rozpoczynam tworzenie aplikacji i zastanawiam się, jaka jest najlepsza praktyka przy pierwszym wypuszczaniu mojej aplikacji. Czy programiści mają tendencję do zachowywania niektórych funkcji na potrzeby przyszłych aktualizacji, aby utrzymać aktywność użytkowników, czy też starają się wydać możliwie najbardziej kompletną aplikację? Zasadniczo, czy zaleca się wydanie aplikacji tak szybko, jak to możliwe, a następnie okresowe aktualizowanie jej do pełnej aplikacji, o której myślisz, czy też poczekanie, aż zostanie w pełni rozwinięta i wydana z mniejszą liczbą perspektyw aktualizacji? EDYCJA: Dzięki za odpowiedzi. Obecnie po prostu projektuję aplikację i spisuję wszystkie funkcje, o których mogę pomyśleć, i próbuję ustalić priorytety, które należy uwzględnić przy pierwszym uruchomieniu. Opierając się na udzielonych odpowiedziach, myślę, że otrzymam MVP (dzięki za termin), gdy tylko będzie gotowy, a następnie zaktualizuję o nowe funkcje, gdy tylko zostaną zbudowane. Nie wstrzymuję zbudowanych funkcji, byłem po prostu rozdarty między tym, czy powinienem zbudować je wszystkie przed uruchomieniem, czy tylko te niezbędne, zwolnić, a następnie zbudować pozostałe. O ile wiem, to nie jest klon. Jest to jednak moja pierwsza aplikacja i będę używać jej jako doświadczenia edukacyjnego


title: Używasz wyników ciągłej kompilacji jako części metryk przeglądu wydajności?

text: Mój szef planuje użyć metryk z naszej ciągłej kompilacji (buduje i uruchamia testy przy każdym zatwierdzeniu) w ramach naszych przeglądów wydajności (w naszej metryce „jakości”). Wydaje mi się to NAPRAWDĘ złym pomysłem, ale chciałbym wiedzieć, czy ktoś to studiował lub widział, jak to wcześniej próbowało. Myślę, że nasi programiści nie poddadzą tylu testów, ile zrobiliby w innym przypadku, z obawy, że testy się nie powiodą. Czuję, że zamienia cenne narzędzie programistyczne w kij, którym można pokonać programistów. Oczywistym kontrargumentem jest to, że będzie promować większą ostrożność przed podjęciem decyzji, co prowadzi do wyższej jakości. Czy jestem tutaj poza bazą? Proszę odłożyć na bok pytanie, czy powinniśmy w ogóle robić recenzje wydajności, czy nie - odpowiedź na to pytanie znajduje się gdzie indziej.


title: Optymalizacja niejawna kontra optymalizacja jawna

text: Aby wyjaśnić, co mam na myśli, zacznę od przykładu. Rozważmy deque, który obsługuje konkatenację „O(logn)” z inną deque i dodanie „O(n)” elementów „n” na jednym końcu. To dequeimplementuje ogólny interfejs `seq` (lub type-klasę, czy co masz), który pozwala na iterację po kolekcji. Jawnym podejściem optymalizacyjnym byłoby posiadanie metody (lub funkcji) `concat` dla obiektów deque i oddzielnej metody `pushSeq` dla obiektów seq. Każda metoda byłaby udokumentowana z odpowiednią złożonością. Niejawnym podejściem optymalizacyjnym byłoby posiadanie pojedynczej metody `concat`, która akceptuje seq. Wewnętrzny test typu dynamicznego sprawdza, czy dostarczony argument jest faktycznie deque, a jeśli tak, wywołuje metodę implementacji do łączenia deque. Jest to udokumentowane w API. Oczywiście możesz mieć obie te rzeczy. Celem optymalizacji niejawnej jest to, że nie dajesz użytkownikowi wyraźnej kontroli nad optymalizacją. To się po prostu „zdarza”, chyba że użytkownik celowo tego szuka. W tej chwili piszę bibliotekę i stoję przed bardzo podobnym wyborem. Bardzo podoba mi się pomysł kompaktowego interfejsu, w którym wszystko po prostu „działa”. Ukryte podejście daje mi też dużo więcej swobody. Na przykład, może mogę wykonać dziesięć testów typu dynamicznego, aby zoptymalizować operację concat dla różnych kolekcji. Posiadanie dziesięciu różnych metod nie miałoby sensu. Jakie jest twoje zdanie na ten temat? Które podejście jest lepsze i dlaczego?


title: Jakie są standardowe układy katalogów do przechowywania skryptów bazy danych w TFS?

text: Niedawno przejąłem utrzymanie 10-15 baz danych SQL Server i ku mojemu zdziwieniu okazało się, że zespół nie przechowuje nigdzie skryptów kodu. Obecnie wdrażają zmiany w każdym środowisku bez śladu papieru/kodu. Kod aplikacji korzystających z tych baz danych jest przechowywany w TFS i muszę zaimplementować strukturę katalogów do przechowywania skryptów - tabel, widoków, procedur składowanych - w TFS. Po naszej stronie Oracle w domu używamy dwóch struktur katalogów: * ddl * sql Ale myślę, że można by poprawić przechowywanie skryptów po stronie SQL Server. Myślałem o użyciu czegoś podobnego do sposobu, w jaki SSMS przechowuje obiekty: * tabele * widoki * procedury/funkcje składowane Czy istnieje standardowa struktura lub najlepsza praktyka używana do przechowywania skryptów SQL?


title: Dlaczego C# nie ma zakresu lokalnego w blokach przypadku?

text: Piszę ten kod: private static Expression<Func<Binding, bool>> ToExpression(Kryterium BindingCriterion) { switch (criterion.ChangeAction) { case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x => x.Akcja == akcja); case BindingType.ExplicitValue: var action = (byte)ChangeAction.SetValue; return (x => x.Akcja == akcja); domyślnie: // DO ZROBIENIA: Błędy lokalizacyjne wyrzuć nowe InvalidOperationException("Nieprawidłowe kryterium."); } } Byłem zaskoczony, gdy znalazłem błąd kompilacji: > Zmienna lokalna o nazwie 'action' jest już zdefiniowana w tym zakresie. Problem był dość łatwy do rozwiązania; po prostu pozbycie się drugiego `var` załatwiło sprawę. Ewidentnie zmienne zadeklarowane w blokach `case` mają zasięg nadrzędnego `switch`, ale jestem ciekaw, dlaczego tak jest. Biorąc pod uwagę, że C# nie pozwala, aby wykonanie przechodziło przez inne przypadki (wymaga instrukcji `break`, `return`, `throw` lub `goto case` na końcu każdego bloku `case`), wydaje się to dość dziwne, pozwoliłoby na użycie deklaracji zmiennych w jednej „przypadku” lub konflikt ze zmiennymi w każdym innym „przypadku”. Innymi słowy, zmienne wydają się przechodzić przez instrukcje `case`, mimo że wykonanie nie może. C# dokłada wszelkich starań, aby promować czytelność, zabraniając niektórych konstrukcji innych języków, które są mylące lub łatwo nadużywane. Ale wydaje się, że to po prostu spowoduje zamieszanie. Rozważ następujące scenariusze: 1. Gdybyś miał to zmienić na następujący: case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x => x.Akcja == akcja); case BindingType.ExplicitValue: return (x => x.Action == action); Otrzymuję " _Użycie nieprzypisanej zmiennej lokalnej "akcja"_ ". Jest to mylące, ponieważ w każdej innej konstrukcji w C#, o której myślę, że `var action = ...` inicjuje zmienną, ale tutaj po prostu ją deklaruje. 2. Gdybym miał zamienić sprawy w ten sposób: case BindingType.ExplicitValue: action = (byte)ChangeAction.SetValue; return (x => x.Akcja == akcja); case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x => x.Akcja == akcja); Otrzymuję " _Nie można użyć zmiennej lokalnej "akcja" przed jej zadeklarowaniem_ ". Tak więc kolejność bloków case wydaje się być tutaj ważna w sposób, który nie jest całkowicie oczywisty -- Normalnie mógłbym zapisać je w dowolnej kolejności, ale ponieważ `var` musi pojawić się w pierwszym bloku, w którym użyto `action` , muszę odpowiednio dostosować bloki `case`. 3. Gdyby to zmienić na to: case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x => x.Akcja == akcja); case BindingType.ExplicitValue: action = (byte)ChangeAction.SetValue; przejdź do przypadku BindingType.Inherited; Wtedy nie otrzymuję błędu, ale w pewnym sensie _wygląda_ na to, że zmienna ma przypisaną wartość przed jej zadeklarowaniem. (Chociaż nie przychodzi mi do głowy, kiedy naprawdę chciałbyś to zrobić — nie wiedziałem nawet, że „sprawa goto” istniała wcześniej) Więc moje pytanie brzmi, dlaczego projektanci C# nie podali „przypadku” ` blokuje własny zasięg lokalny? Czy są ku temu jakieś przyczyny historyczne lub techniczne?


title: Projekt: wiele algorytmów na tych samych dużych zbiorach danych

text: Mam kilka algorytmów, które chciałbym przetestować na tych samych zestawach danych, aby porównać ich wyniki. Nie wiem, jak to zaprojektować, żeby była maksymalna czytelność i maksymalna wydajność. Rozważałem stworzenie klasy dla każdego algorytmu i udostępnienie jej kopii danych do pracy, ale nie wydaje się, aby to była właściwa odpowiedź: 1. Każdy zestaw danych jest dość duży (10 000 float numpy array), więc nie chcę kopiować każdego ~30 razy. 2. Wiele algorytmów ma podobne procedury przetwarzania wstępnego (dlatego powtarzanie ich dla każdego algorytmu wydaje się marnotrawstwem) 3. Niektóre algorytmy mają prawie identyczny kod, z wyjątkiem kilku parametrów, które są różne. Jednocześnie posiadanie jednego wywołania funkcji na algorytm również wydaje się niewłaściwe: zgodnie z (2) wiele osób będzie wywoływać te same funkcje przetwarzania wstępnego, a wtedy bardzo trudno jest stwierdzić, kto dzwoni do kogo. Chcę móc umożliwić użytkownikowi (którym będę ja) łatwe wywoływanie różnych algorytmów na danych, jednocześnie zachowując kod tak przejrzysty, jak to możliwe. Po prostu ciągle myślę, że potrzebuję odwrotności klasy; gdzie każdy obiekt klasy będzie miał te same metody, ale różne dane, potrzebuję czegoś, w którym każdy członek będzie miał te same dane, ale różne metody.


title: Edytor tekstu szybkiego zimnego startu

text: Czy istnieje edytor tekstu z podświetleniem składni c#, który uruchamia się BARDZO SZYBKO? Chcę tylko spojrzeć na kod źródłowy niektórych plików w projekcie i nie chcę czekać 30 sekund podczas uruchamiania VS.


title: Gdzie jest przeglądarka obiektów w VS 2010

text: Uczę się C# i używam książki, która odwołuje się do Visual Studio 2008. Jednak używam VS 2010. Książka chce, abym spojrzał na przeglądarkę obiektów, wybierając z menu Widok, Inne okna, Przeglądarka obiektów. Jednak przeglądarki obiektów nie ma. Najechałem myszką na ikony w menu i nic się nie wyróżniało. Więc gdzie to jest? Poza tym, czy napotkam więcej takich problemów? Czy warto kupić zaktualizowaną książkę?


title: Właściwa nazwa projektu obsługuje 2 różne wydania

text: Czy istnieje techniczna nazwa projektu oprogramowania, w którym utrzymywane są zarówno obecne, jak i wcześniejsze wersje stabilne?


title: Jak środowisko uruchomieniowe języka wspólnego poprawia wydajność?

text: W artykule wikipedii dotyczącym środowiska uruchomieniowego języka wspólnego przeczytałem, że jedną z korzyści zapewnianych przez środowisko wykonawcze jest „poprawa wydajności”. Wykonywanie kodu zarządzanego (lub kodu bajtowego) z pewnością zawsze musi być **wolniejsze** ze względu na dodatkowe obciążenie związane z kompilacją JIT niż wykonywanie kodu natywnego. Jak więc to możliwe, że CLR powoduje „poprawę wydajności”? **Aktualizacja:** Przyjrzałem się pytaniu i odpowiedziom na pytanie Co potwierdza twierdzenie, że C++ może być szybszy niż JVM lub CLR z JIT?, ale nie było to pomocne, ponieważ to pytanie dotyczy tego, dlaczego C++ miałby być szybciej niż wolniej. Interesuje mnie to, w jaki sposób jest możliwe, z architektonicznego punktu widzenia, że zarządzany kod może prowadzić do poprawy wydajności


Pracuję dla witryny e-commerce, która ostatnio traci siłę roboczą. Zostałem zatrudniony dziesięć miesięcy temu jako programista interfejsu użytkownika. W tym czasie mieliśmy trzech innych programistów. Jednym z nich był kierownik techniczny, który był w firmie od 10 lat. Pozostali dwaj byli programistami po stronie serwera, którzy byli tam odpowiednio przez 10 i 3,5 roku. W ciągu dziesięciu miesięcy przewaga techniczna odeszła na lepsze stanowisko, jeden deweloper został zwolniony, a drugi całkiem niedawno odszedł. Tak więc jestem teraz jedynym programistą w zespole. Mamy jednego DBA i jednego administratora sieci. Obecnie chcą zatrudnić innego dewelopera, ale nie są skłonni zapłacić wystarczająco dużo, aby zatrudnić osobę starszą. Uważam się za junior developera z dwuletnim doświadczeniem. Twierdziłem, że musimy zatrudnić co najmniej jednego starszego programistę i innego młodszego programistę, jeśli zamierzamy utrzymać działanie naszej obecnej witryny (nie wspominając o opracowywaniu nowych funkcji)… nawet jeśli oznacza to zwolnienie personelu w innych działach. W tej chwili mamy 6,5 miliona odsłon miesięcznie i wydaje mi się, że 3,2 miliona odsłon na programistę musi być niewiarygodnie nienormalne. Moje pytanie brzmi zatem: jaki jest normalny stosunek programistów do odsłon? Czy są jakieś standardy branżowe lub literatura na ten temat, które mogę wykorzystać do argumentowania o większej liczbie pracowników?


title: Jaką nazwę należy rozróżnić między częściami aplikacji, które mają różne typy użytkowników w każdej części?

text: W projekcie, nad którym pracuję, staram się znaleźć rzeczownik opisujący różne części aplikacji zależne od interfejsu użytkownika. Są trzy części: superadmin, admin i zwykli użytkownicy. Każda z tych części składa się z modułów, interfejsów z użytkownikami, interfejsów z innymi częściami. Próbowałem "podsystemu", "modułu", "środowiska", "platformy", ale żaden z nich tak naprawdę nie opisywał, czym jest każda z tych części systemu. Potrzebuję rzeczownika, który oddaje wszystko, co zawiera się w każdej części, np. superadministrator(?) umożliwia właścicielowi ręczne dodawanie i edytowanie treści. Normalnie użyłbym po prostu "modułu", ale w każdej części jest wiele modułów.


title: Inżynier oprogramowania bez wykształcenia policealnego?

text: A więc jest tak: w tej chwili jestem na studiach i ze względu na zamieszanie ostatnich wydarzeń, w tym trudności na kursach niezwiązanych z matematyką i matematyką, naprawdę nie jestem pewien, czy chcę kontynuować studia na uniwersytecie w przyszłym roku. Chociaż bardzo lubię moje kursy informatyki i matematyki, uważam, że po prostu nie nadążam za klasą. Weźmy na przykład moją fizykę opartą na rachunku różniczkowym. Jestem pewien, że mając wystarczająco dużo czasu, mógłbym przejść przez kurs i nauczyć się wszystkiego, co muszę wiedzieć; ale ponieważ pracuję i chodzę na 4 inne kursy, po prostu nie mam tego czasu. Czuję, że dużo więcej skorzystałbym na uczeniu się tych kursów pojedynczo, tj. skończeniu rachunku różniczkowego przed przystąpieniem do fizyki opartej na rachunku różniczkowym. Prawdopodobnie powinienem był zapisać się na kurs oparty na algebrze, ale teraz jest na to za późno. Jakie reperkusje (pod względem kariery) miałybym, gdybym zdecydowała się rzucić szkołę i uczyć się sama? Mógłbym rozważyć powrót po kilku latach pracy na pełnym etacie, ale tak naprawdę nie wiem. Czy warto płacić za szkołę, jeśli nie czuję, że zyskam na niej tyle, ile mogę?


title: Jak stworzyć wrapper Public API z różnymi parametrami konfiguracyjnymi

text: Chcę sprawdzić, czy istnieje wzorzec projektowy, który może rozwiązać następujący problem. Przykład jest dość specyficzny, ale celem jest publiczne + wewnętrzne API. Potrzebuję konkretnych informacji dla mojej podstawowej biblioteki, ale chcę ogólnie przedstawić API. Jeśli moje pytanie jest niejasne lub okropne, postaram się urozmaicić je Twoimi komentarzami. Jako przykład załóżmy, że tworzę publiczne API i chcę, aby było niezależne od implementacji. Kontynuując przykład, tworzę API obsługi zadań przy użyciu biblioteki Quartz (może być dowolna biblioteka) w bieżącej implementacji. Chcę, aby ludzie mogli wpisywać: Job job = jobManager.getJob("my.job.name"); String otherInformation = job.getOtherInformation(); job.setSchedule(nowy IntervalSchedule(repeatInterval, intervalUnit)); job.setSchedule(nowy CronSchedule(cronExpression)); Interfejs API kwarcu ma konstruktorów dla harmonogramów (używanych w wyzwalaczu): CronScheduleBuilder.cronSchedule(cronExpression); CalendarIntervalBuilder.calendarIntervalSchedule() .withInterval(repeatInterval, DateBuilder.IntervalUnit.DAY); W moim obecnym przykładzie miałbym interfejs bazowy lub Harmonogram klas. Dzięki tej strukturze można uzyskać określone informacje, których potrzebuję dla konstruktorów harmonogramów, bez ujawniania konkretnego obiektu implementacji w moim interfejsie, przy jednoczesnym zachowaniu jego rozszerzalności. Moim celem jest zapobieganie wyciekom klas implementacyjnych do publicznego API. Jeśli w przyszłości Quartz wypadnie z łask, publiczne API nie będzie musiało zmieniać i deprecjonować klas specyficznych dla Quartz. Jakiego wzorca projektowego lub reorganizacji kodu mi brakuje?


title: Problemy z prawami autorskimi z algorytmami szyfrowania

text: Zajmuję się tworzeniem aplikacji dla systemu Android/Java. Ta aplikacja jest rodzajem menedżera haseł, więc przechowuję zaszyfrowane hasła pod maską hasła głównego. Istnieje wiele algorytmów szyfrowania DES/AES/BlowFish/TwoFish i tak dalej. Moim zamiarem jest stworzenie aplikacji wolnej od komercyjnych problemów związanych z prawami autorskimi. A więc pytania brzmią: 1. Jeśli używam wbudowanych API szyfrowania Javy (np. DES/AES) – czy to oznacza, że będę wolny od ewentualnych interesów komercyjnych, podobnie jak posiadaczy praw autorskich do DES/AES? 2. Algorytmy szyfrowania czasami są ograniczone eksportowo, pamiętając, że pochodzę z Moskwy/Rosji - czy są jakieś implikacje z tego faktu? Wszelkie inne myśli byłyby pomocne.


title: potrzebujesz konkretnych przykładów na temat historyjek użytkownika, zadań i ich związku ze specyfikacjami funkcjonalnymi i technicznymi

text: Mała uwaga, jestem jedynym samotnym programistą budującym/planującym/kpiącym z mojego projektu. Wymyśliłem wersję zapoznawczą, która zawiera tylko podstawowe aspekty systemu, **o dobrej wartości biznesowej**, i zakodowałem większość interfejsu użytkownika jako brudne makiety, które można rzucać na ładnie abstrakcyjnej i bardzo minimalnej podstawie kod. W końcu dobrze wiem, czego chcą moi klienci. Nie mogę już dłużej znosić zwinnego kowboja, ponieważ jestem całkowicie zdezorganizowany i nie mam papierowego planu, a ponieważ moi klienci są szczęśliwi, sprawy stają się bardziej złożone z większą liczbą funkcji i pomysłów. Zacząłem więc używać i uczyć się Agile & Scrum. Oto moje problemy: * * * 1. Wiem, czym jest specyfikacja funkcjonalna (przykład): Czy wszystkie historyjki użytkownika i/lub scenariusze stają się częścią specyfikacji funkcjonalnej? 2. Wiem, czym są historyjki użytkowników i zadania. Czy to są takie historie użytkowników? Nie widzę żadnego uzasadnienia wartości biznesowej dodanej do nich. * * * Zrobiłem mapę myśli używając freemind, miałem takie problemy: Aktor: Menadżer Finansów >> Czy mogę dodać plan finansowy do systemu, bo _o to właśnie chodzi_? Z jakiego powodu warto dodać wartość biznesową w takich sytuacjach? > Przykład: użytkownik musi mieć możliwość dodania artykułu na blogu (w aplikacji blogera) > _ponieważ..??_ To jest sens aplikacji blogera, skupia się wokół tej > funkcji? * * * Jak przejść do bardziej szczegółowych informacji i definicji systemu: _Aktor:_ Menedżer finansów >> _Akcja:_ Dodaje plan finansowy. To _dodawanie_ to skomplikowany proces składający się z wielu kroków. Jaka historia użytkownika opisze czym jest _plan finansowy w systemie_ ?? Mogę dodać go do specyfikacji funkcjonalnej pod definicjami wyjaśniającymi, czym jest _plan finansowy_ i jak należy go dodać do systemu, ale jak stamtąd przejść do planowania **backlogu**? > Przykład: Artykuł na blogu to w większości dokument tekstowy, który można napisać w > tekście sformatowanym w systemie. Aby dodać artykuł na blogu, trzeba... Ale jak z tego stworzyć listę/funkcje zaległości? Gdzie są historie użytkowników dotyczące tego, czym jest artykuł na blogu i jak go dodać/usunąć? * * * Wreszcie, jestem trochę zdezorientowany, jeśli chodzi o relacje między specyfikacjami funkcjonalnymi a historyjkami użytkownika. Czy moja specyfikacja **zawiera** historie użytkowników z makietami interfejsu użytkownika? Czy te historyjki użytkownika będą rozgałęziać zadania, które stworzą coś w rodzaju specyfikacji technicznej? Przykład: _EditorUser_ Może dodać artykuł na blogu. 1. Użyj XML do przechowywania artykułów na blogu. 2. Dodaj formularz, aby dodać bloga. 3. Dodaj obsługę programu Windows Live Writer. To byłyby zwinne _zadania_, ale czy byłoby to również częścią/lub częścią specyfikacji technicznych? Przydałoby się kilka konkretnych przykładów/odpowiedzi na moje pytania!!


title: Przeciążenie metody w scala

text: Wiem, że przeciążanie metod nie jest dozwolone w Scali i przeczytałem kilka postów dotyczących przyczyn. Ale wciąż widzę przeciążenie niektórych funkcji w bibliotece Scala (przykład: println). Chcę wiedzieć, jak to się robi i czy mogę wykorzystać ten sam mechanizm do niektórych moich metod.


title: Testowanie zachowania klasy abstrakcyjnej

text: Obecnie przeprowadzam refaktoryzację istniejącego projektu, który został stworzony bez TDD. Istnieje hierarchia klas z jedną abstrakcyjną klasą bazową i dwiema podklasami. W pierwotnym projekcie te klasy były w większości tylko posiadaczami danych bez większego zachowania. Zidentyfikowałem kilka funkcjonalności, które powinny być zaimplementowane w klasie bazowej i chciałbym teraz napisać testy dla tej funkcjonalności. Ale ponieważ klasa jest abstrakcyjna, nie mogę jej utworzyć (oczywiście). **Uwaga:** Funkcjonalność, którą chciałbym przetestować, nie wywołuje żadnych metod „czysto wirtualnych”. klasa podstawowa {}; // Jest abstrakcją TEST(BaseTest, robiCośNiesamowitego) { Base aBase; // <-------- Niemożliwe!!! ASSERT_THAT(aBase.amazeMe(), Eq(AMAZING_RESULT)); } _Edytuj:_ Aby wyjaśnić kilka rzeczy: * Dziedziczenie faktycznie ma sens w tej sytuacji - obie podklasy mapują się do konkretnych pojęć domenowych, a polimorfizm pomaga utrzymać otaczający kod w czystości * Istnieje zachowanie, które będzie używane w obu podklasach i które potrzebuje danych wspólnych dla obu klas. Myślę więc, że sensowne jest umieszczenie go w wspólnej super klasie. Przychodzi mi do głowy kilka możliwych rozwiązań, ale żadne z nich nie wydaje mi się optymalne: * Dodaj podklasę do kodu testowego, która implementuje wszystkie funkcje `czystego wirtualnego`. Minus: Trudno nazwać tę podklasę w zwięzły sposób, zrozumienie testów staje się trudniejsze * Zamiast tego należy utworzyć obiekt podklasy. Minus: Sprawia, że testy są dość mylące * Dodaj puste implementacje do klasy bazowej. Minus: klasa nie jest już abstrakcyjna, skłaniam się ku opcji 3, aby testy były jak najbardziej przejrzyste, ale nie jestem z tego zadowolony. Czy istnieje lepszy sposób, którego nie znam?


title: Python, magia i obiekty, które dodają atrybuty swojemu właścicielowi

text: Zacznę od zastrzeżenia: _nie_ jestem najlepszym programistą na świecie. Ja jednak studiuję IT. i nauczyłem się trochę Javy i C. Utknąłem w Pythonie i Django + Mongoengine, nie będę tego wyjaśniał szczegółowo, ponieważ będzie odbiegał od pierwotnego pytania. Próbując zrozumieć, co się dzieje w tym fragmencie kodu Django, byłem **zszokowany** niektórymi koncepcjami, które zdawałem się rozumieć. Przeważnie byłem całkowicie zdezorientowany tym, jak jeden obiekt może dodać dostępne atrybuty do obiektu nadrzędnego i jak Python definiuje `__set__()` i `__get__()` w taki sposób, że jest to tak mylące. Czy ktoś mógłby mi powiedzieć, jak _ortodoksyjny_ jest ten styl projektowania i czy uważam go za dziwaczny, bo jestem programistą-amatorem.


title: informacja o prawach autorskich do pracy klienta

text: Zastanawiam się, jaki jest najlepszy sposób na dodanie praw autorskich/informacji do źródła dla klienta. Zwykle robię projekty dla siebie i wypuszczam je na licencji GPL, jednak pracuję z klientem i nie jestem pewien, jak podać im źródło. Czy coś takiego byłoby poprawne? > /* Pakiet: Nazwa projektu > Plik: nazwapliku.php > Autor: Moje imię (emailme@example.net) > (c) Nazwa klienta 2011 Wszelkie prawa zastrzeżone > > Opis pliku.... > */ Klient jest właścicielem kod, gdy już za niego zapłacili, ale nadal uważam, że dobrym pomysłem jest dodanie opisu pliku i praw autorskich do każdego pliku. Może jest to rozmowa z każdym klientem, ale czy wydaje się to uczciwym (i legalnym) sposobem na zrobienie tego?


title: Czy nadal można uzyskać MCTS w .NET 3.5?

text: Ponieważ pracuję dla Złotego Partnera Microsoft, są oni zainteresowani uzyskaniem przeze mnie certyfikatu. Pozostawili mi decyzję, na które certyfikaty chcę się udać. Zacząłem trenować MCTS .NET 4, ale uważam je za trudniejsze niż oczekiwałem. Częściowo problem polega na tym, że głównie pracuję z 3,5 w ramach mojej pracy i pracuję tylko z 4 w domu. Czy powinienem po prostu zrobić sobie przerwę i udać się na egzaminy 3.5? Czy inni pracodawcy pomyśleliby, że to złe/dziwne, że nadal zdaję 3,5 egzaminów w 2011 roku? Nadal chciałbym znać wszystkie najnowsze technologie, ale w tej chwili po prostu stwierdzam, że jest ich za dużo. Do czasu, gdy będę gotowy na .NET 4, prawdopodobnie wydadzą 5 i cykl będzie kontynuowany.


title: Dlaczego operatory bitowe mają niższy priorytet niż porównania?

text: Czy ktoś mógłby wyjaśnić, dlaczego w wielu popularnych językach (patrz uwaga poniżej) operatory porównania (==, !=, <, >, <=, >=) mają wyższy priorytet niż operatory bitowe (&, |, ^ , ~)? Nie sądzę, że kiedykolwiek spotkałem się z zastosowaniem, w którym ten precedens byłby naturalny. To zawsze takie rzeczy jak: if( (x & MASK) == CORRECT ) ... // Wybrane bity są we właściwym ustawieniu, reszta nieistotna if( (x ^ x_prev) == SET ) // tylko i dokładnie SET bit zmieniony if( (x & WYMAGANE) < WYMAGANE ) // Nie wszystkie warunki są spełnione Przypadki, w których użyłbym: flags = ( x == 6 | 2 ); // ustaw bit 0, gdy x wynosi 6, bit 1 zawsze. są bliskie nieistnienia. Jaka była motywacja projektantów języków do decydowania o takim pierwszeństwie operatorów? * * * Na przykład wszystkie języki z wyjątkiem SQL na liście 12 najpopularniejszych języków są takie same jak na liście popularności języków programowania na langpop.com: C, Java, C++, PHP, JavaScript, Python, C#, Perl, SQL, Ruby, Shell, Visual Podstawowy.


title: Aplikacja SourceTree, skąd mam wiedzieć, jaki jest mój obecny oddział?

text: Rozgałęziłem się z mojej gałęzi `develop` `bugfix/issue2`, aby pracować nad poprawką błędów. Teraz, gdy to się skończyło, chcę scalić tę gałąź `bugfix/issue2` z powrotem do `develop`, ale pyta mnie, czy chcę połączyć się z moją bieżącą gałęzią. I nie wiem, czy moja obecna gałąź to `develop`? Zobacz załączone zrzuty ekranu: ![tu wpisz opis obrazu](http://i.stack.imgur.com/cLFGl.png) ![tu wpisz opis obrazu](http://i.stack.imgur.com/sEM44. png)


title: Fizyczna implementacja algorytmu wyżarzania kwantowego

text: Na podstawie tego pytania o różnice między wyżarzaniem kwantowym a symulowanym wyżarzaniem odkryliśmy (w komentarzach do odpowiedzi), że istnieje fizyczna implementacja wyżarzania kwantowego (komputery kwantowe D-Wave). Czy ktoś może wyjaśnić ten algorytm w kategoriach bramek kwantowych i algorytmów kwantowych lub w kategoriach fizycznych (część algorytmu zależna od sprzętu kwantowego)?


title: Czy dobrą praktyką jest używanie mniejszych typów danych dla zmiennych w celu oszczędzania pamięci?

text: Kiedy po raz pierwszy nauczyłem się języka C++, dowiedziałem się, że oprócz int, float itp. w języku istnieją mniejsze lub większe wersje tych typów danych. Na przykład mógłbym nazwać zmienną x int x; lub krótkie int x; Główną różnicą jest to, że short int zajmuje 2 bajty pamięci, podczas gdy int zajmuje 4 bajty, a short int ma mniejszą wartość, ale moglibyśmy to również nazwać, aby był jeszcze mniejszy: int x; krótki int x; unsigned short int x; co jest jeszcze bardziej restrykcyjne. Moje pytanie dotyczy tego, czy dobrą praktyką jest używanie oddzielnych typów danych w zależności od tego, jakie wartości przyjmuje zmienna w programie. Czy to dobry pomysł, aby zawsze deklarować zmienne zgodnie z tymi typami danych?


title: Jak nauczyć się C w dwa dni (jeśli już znam C++)?

text: Od kilku lat programuję w C++ i zrobiłem jeden lub dwa szkolne projekty w C (jak również w kilku innych językach). Jednak w ogóle nie znam dobrze C. Za dwa dni mam rozmowę programistyczną i właśnie zdałem sobie sprawę, że ta rozmowa będzie w C. Jak mam do tego podejść? Jak nauczyć się C na tyle dobrze, aby odnieść sukces w rozmowie z programowaniem? Ta praca nie polega na szukaniu „eksperta C” ani niczego w tym rodzaju, więc myślę, że będą nieco wyrozumiali, jeśli wyjaśnię, że nie zaprogramowałem zbyt wiele w C. Po prostu decydują się na prowadzenie swoich rozmów kwalifikacyjnych w C. Kupowanie i czytanie podręcznik jest niewykonalny, więc moje zasoby będą musiały być w Internecie.


title: Rozszerzenia Chrome, które powinien znać każdy programista

text: Właśnie przełączyłem się z Firefoksa na Chrome, więc co chcę wiedzieć: Czy są jakieś rozszerzenia Chrome, które są niezbędne programiście?


title: Opisywanie wymagań w SRS – przypadki użycia?

text: Nie mam dostępu do standardu IEEE, a informacje w sieci są sprzeczne. Czy mogę uchwycić wymagania użytkownika w SRS przy użyciu przypadków użycia? Czy też powinienem oddzielić przypadki użycia, ponieważ bardziej przypominają scenariusze niż oddzielne wymagania?


title: Podsumuj warunki korzystania z usługi?

text: Jaka jest Twoja opinia na temat podsumowania Warunków korzystania z usług? Przykład: [Zasady tutaj] Zasadniczo oznacza to, że nie będziesz mnie pozwać. [Akceptuję][Nie akceptuję] Czy to dobra praktyka, czy może to tylko spowoduje, że będziesz więcej pozwany?


title: Jak: Życie osobiste programisty

text: właśnie ukończyłem studia i szukam pracy na kierunku Software Development. Od tego czasu lubię rozwijać aplikacje. Cóż, będąc inżynierem oprogramowania; Potrafi przetrwać osobiste życie rodzinne. Jestem kawalerem :) Raz wyjdę za mąż. Czy będę mógł spędzić czas z żoną i dziećmi? Widzę, że obecnie wielu specjalistów od oprogramowania nie wraca na noc do domu. ze względu na obciążenie pracą. To sprawia, że ich żona jest w jakiś sposób przerażająca. Jak pójdą porozumienia? Jak narażasz swoje życie osobiste?


title: Potrzebujesz spotkać się osobiście, aby skutecznie współpracować?

text: Jeśli uruchamiasz aplikację internetową, mobilną lub samodzielną, jak dobrze musisz znać resztę swojego zespołu? Czy to byłby zły pomysł, żeby kiedykolwiek pracować z kimś, chyba że spotkałem go osobiście? Czy akceptowanie niewielkich wkładów publicznych, takich jak fragmenty kodu i grafika bez spotkania z autorem, jest w porządku? Czy powinienem kiedykolwiek aktywnie współpracować z osobami online, których nie spotkałem, o ile osoba ta ma szczegółowy profil i dobrą reputację. Jeśli współpracujesz online, jakich narzędzi używasz do budowania zespołów i znajdowania współpracowników? Jeśli nie, czy rozważyłbyś pomysł, gdyby istniało bezpieczne medium? Wszelkie inne uwagi na ten temat będą mile widziane.


title: Odzyskanie zaufania starszego programisty

text: Mój szef dowiedział się, że nie jestem tak bystra, jak mu się wydawało. Przykład z mojego doświadczenia: jestem młodszym programistą i pracuję w zespole składającym się z dwóch osób, mojego szefa (starszego programisty) i siebie. Miałem za zadanie stworzyć wewnętrzną aplikację webową dla firmy, w której pracujemy. Napisałem back-end do front-endu (projekt bazy danych był już na miejscu i wybrano technologię serwerową). Okresowo sprawdzał moje postępy, obserwując działanie aplikacji internetowej i cieszył się, że się pojawiła. Kiedy skończyłem aplikację internetową, był zadowolony z tego, jak dobrze wyszedł produkt końcowy. Kilka dni temu zainteresował się kodem, więc powiedziałem mu, jakich technologii użyłem (dla front-endu) i tu poszło na południe. Do front-endu aplikacji internetowej użyłem frameworka JavaScript (Backbone.js). Zapytany, dlaczego miałbym to zrobić. Moja odpowiedź była taka, że czułem, że framework całkiem dobrze pasuje do tej aplikacji i pomoże mi lepiej ustrukturyzować kod, niż gdybym pisał go od zera… „Cóż, to przygnębiające” było jego odpowiedzią. Biorąc pod uwagę ten przykład, moje pytanie brzmi: jeśli jesteś starszym programistą i utraciłeś zaufanie do umiejętności swojego młodszego programisty, co chciałbyś zobaczyć od swojego młodszego programisty, aby odzyskać pewność siebie? **EDYTUJ** : Dziękujemy wszystkim za wspaniałe odpowiedzi i wspierające opinie!


title: Jaka jest konwencja C++, jeśli taka istnieje, dotycząca nazewnictwa w celu rozróżnienia między typami struktur a innymi typami?

text: Ogólnie rzecz biorąc, czy powinienem używać jakiejś konwencji nazw struktur, która różni się od innych nazw typów? Myślałem o tym, kiedy mój profesor zaczął mówić o strukturach. Miałem ze sobą następującą dyskusję, a ponieważ nie chcę dochodzić do żadnych nierzetelnych wniosków. Jak odpowiedziałbyś na pytania i które odpowiedzi są niewiarygodne? P: Czy należy rozróżniać nazwy struktur i nazwy typów, aby kod był bardziej przejrzysty? O: Struktura jest typem, więc nie ma potrzeby rozróżniania. RE: P: Czyli nigdy nie ma przypadku, gdy ktoś używa `typedef int SOMETYPE` do zmiany nazwy wbudowanego typu, aby uczynić kod bardziej elastycznym? RE: A: Nie ma praktycznego powodu, aby zmieniać nazwy typów wbudowanych. W rzeczywistości zdefiniowanie typów `int` jako `SOMETYPE` sprawia, że kod jest mniej czytelny, ponieważ ktoś czytający kod nie będzie znał wbudowanego typu użytego dla tego typu. Szczerze nie ufam żadnej odpowiedzi. Patrząc na niektóre z podstawowych struktur w nowym Win32Project za pomocą Visual Studio, widzę takie rzeczy, jak `typedef short HFILE;`, co, jak sądzę, wyjaśnia programiście, do czego służy zmienna. Być może jest to jednak zbyt subiektywne. Na marginesie, w jaki sposób zwykle określa się, co się dzieje, gdy napotyka się deklaracje zmiennych, które używają typów, których nigdy wcześniej nie widziałeś. Czy po prostu polegasz na IDE, aby zabrać Cię do lub wyświetlić deklarację?


title: Czy tworzenie własnej licencji praw autorskich jest bezpieczne?

text: Widziałem różne biblioteki open source (właściwie to widziałem również dla zasobów) posiadające licencję domowej roboty w następujący sposób: > Licencja SomeGuy: > 1\. Możesz swobodnie używać tego kodu w projektach komercyjnych i modyfikować go według własnego uznania, ale nie sprzedawać go > 2\. Jeśli chcesz sprzedać zmodyfikowaną wersję, najpierw wyślij mi e-mail lub daj mi > kredyty Edytuj: Powyższy przykład jest niejednoznaczny, więc podaję inny, chcę wiedzieć, czy 3 linie licencji będą miały pewne podstawy: > Licencja SomeGuy: > 1\. Możesz użyć tego kodu w projekcie komercyjnym jako biblioteki innej firmy > 2\. Nie można jej sprzedawać jako dzieła pochodnego Wiem, że taka licencja w ogóle nie jest dopracowana, np. zestaw licencji Creative Commons wydaje się być krótki, ale faktycznie kryją się pod nim jakieś duże rzeczy prawne, ale zastanawiam się, czy przynajmniej pewien poziom ochrony można uzyskać dzięki takiej licencji hobby ? Moje pytanie brzmi: **czy może to mieć jakiekolwiek uzasadnienie w sądzie**, czy też prawnicy korporacyjni firmy X rozerwą ją na strzępy?


title: Ruby nie jest generatorem PHP, prawda?

text: Mój szef patrzył z góry na mnie, jeśli chodzi o naukę Rubiego, ponieważ "To tylko generator PHP", czego nie mogę znaleźć. Czy tak jest? Rozumiem, że framework Rails może być używany do generowania kodu PHP, ale czy Ruby sam w sobie nie jest własnym językiem programowania?


title: Co to jest powiązanie skryptu i jak to się robi?

text: Słyszałem coś takiego jak Script Binding - wiązanie JavaScriptu lub lua z API z C++ lub Objective-C. Chcę wiedzieć więcej na ten temat - jednak Google okazał się do tego dziwnie bezużyteczny. Jak to jest zrobione? - OK, jeśli wskażą mi inne źródła, ale tylko jak? Nigdy nie wiedziałem, że jitter skryptów może wchodzić w interakcje ze skompilowanymi bibliotekami.


title: Popraw jakość kodowania

text: Programowaniem zajmuję się od kilku lat (wciąż jestem studentem, ale mam dużo staży). Pracując głównie z C++, Pythonem i MATLAB, zauważyłem, że za każdym razem, gdy ściągam SDK lub bibliotekę z Internetu/GitHub i zaglądam do środka, kod jest znacznie bardziej złożony niż mój, wszędzie używam wychwytywania błędów i innych rzeczy, które nigdy nie przychodzą mi do głowy. umysł podczas pisania własnego kodu. Moje pytanie brzmi: jak mogę się uczyć lub praktykować tego rodzaju rzeczy? Z mojego doświadczenia żaden kurs programowania nie mówił o stylu kodowania, kiedy i jak efektywnie używać try/catch, jak szybciej debugować itp... Nie myślę też o używaniu mutexa podczas uzyskiwania dostępu do jednej zmiennej z różnych funkcji w tym samym czasie, ponieważ mój kod po prostu działa bez nich i do tej pory nie miałem żadnego problemu. Obecnie pracuję nad projektem przy użyciu Pythona, a Pycharm bardzo pomaga mi w utrzymaniu poprawnego stylu kodowania, ale ogranicza się do składni i konwencji nazewnictwa.


title: O jakich licencjach na oprogramowanie powinienem wiedzieć?

text: Licencjonowanie to coś, na co naprawdę nie zwracałem uwagi; Chyba czułem, że nie ma takiej potrzeby. Jednak nie mogę oprzeć się myśli, że powinienem. Jakie są więc najpopularniejsze licencje, o których jako programista powinienem wiedzieć? Przydałby się również krótki opis każdego z nich.


title: Czy są jakieś języki programowania rozumiane przez wszystkie systemy operacyjne, jeśli tak to jakie?

text: Jestem ciekaw, czy istnieje język programowania, w którym można pisać kod dla wszystkich systemów operacyjnych, a jeśli tak, to jaki to może być język? Zgaduję, że coś bardzo niskiego poziomu, takiego jak Binary, mogłoby to zrobić, ale nie jestem pewien.


title: Czy programiści powinni martwić się automatyzacją, która ostatecznie sprawi, że będą zbędni?

text: Czy programiści powinni obawiać się możliwej automatyzacji w ich projektach, która może sprawić, że będą zbędne? Sam nigdy się tym specjalnie nie martwiłem, ale widziałem, jak wielu programistów się tym martwi, nawet jeśli nie przyznają się do tego otwarcie. Istnieje obawa, że jeśli zautomatyzujesz większość aspektów systemu, który obsługujesz, może to w końcu sprawić, że staniesz się zbędny. Sam miałem na to doświadczenie. 1 rok temu zacząłem pracować w projekcie, gdy pojawiły się jakiekolwiek wymagania/zmiany, jedynym rezultatem było kilka zapytań o inserty. W zespole tym pracowało 2 programistów i 1 tester (wszyscy na lądzie). Jedyne, co musiał zrobić programista, to skonfigurować zapytania wstawiania na podstawie wymagań. Kiedy przystąpiłem do pracy nad tym, od razu zasugerowałem zbudowanie aplikacji internetowej, która umożliwiłaby ludziom biznesu zrobienie tego bezpośrednio. Każda rzecz zostałaby skonfigurowana w aplikacji internetowej, w tym raporty o błędach na wypadek, gdyby coś poszło nie tak. Nie trzeba dodawać, że mojemu menedżerowi podobał się ten pomysł, ale nigdy nie przeszedł on przez wyższe kierownictwo. Logika polegała na tym, że dopóki klient nie zgłosi takiego wymagania, nigdy nie należy tego robić, ponieważ będzie to wiązało się z przyszłymi stratami dla firmy i ewentualnie utratą zatrudnienia aktualnie obsługujących ją pracowników. Czy programista powinien się tym martwić? Z pewnością chciałbym wierzyć, że > Jeśli nie zajmiesz się swoim klientem, to ktoś inny się tym zajmie, ale doświadczenie mówi mi inaczej.


title: Obsługa faktur ze znacznikami czasu

text: Obecnie zamierzam napisać coś do **automatycznego tworzenia faktur** za pomocą cronjobs przy użyciu PHP i znaczników czasu. Mam dla mnie **przemyślany pomysł** jak go rozwiązać, ale chcę zapytać społeczność **czy ktoś widzi błędy w rozumowaniu** i **ewentualne problemy z moim rozwiązaniem**. Staram się opisać mój pomysł jak najdokładniej, aby każdy mógł podążać za moim tokiem myślenia: Generalnie są **4 rodzaje faktur** : 1. Płatne rocznie 2. Płatne półrocznie 3. Płatne kwartalnie 4. Płatne miesięcznie **Zakupione produkty są zapisywane w bazie danych SQL** z cyklem rozliczeniowym: * ID użytkownika * ID produktu * Cykl rozliczeniowy * Ostatnia data płatności Teraz dostępne jest cronjob, które uruchamia się raz dziennie, aby sprawdzić, czy ma utworzyć nową fakturę za każdy zakupiony produkt. W wierszu „Ostatni termin płatności” zapisuję sygnaturę czasową pierwszej daty do zapłaty po jej utworzeniu. Kod, który już napisałem, oblicza **czas, który upłynął** od datownika `Last Due Date` i wyświetla coś takiego: * Znacznik czasu jest w przeszłości lub w przyszłości * Minął miesiąc * Minął dzień Teraz mój ** zasady tworzenia nowej faktury** są następujące: 1. **Płatna roczna** if ( Znacznik czasu jest w przeszłości = true AND Miesiąc, który minął = **11** AND Liczba dni, który minął >= 20 ) then ( utwórz nową fakturę i ustaw "Ostatni termin płatności" na time() ) 2. **Płatne co pół roku** if ( Sygnatura czasowa jest w przeszłości = true AND Minął miesiąc = **5** AND Minęło dni >= 20 ) then ( utwórz nową fakturę i ustaw „Ostatni termin płatności” na time() ) 3. **Płatne kwartalnie** if ( Sygnatura czasowa jest w przeszłości = true AND Miesiąc, który minął = **3** AND Minął dni >= 20 ) then ( utwórz nową fakturę i ustaw „Ostatni termin płatności” na time() ) 4. **Płatne co miesiąc** if ( Znacznik czasu jest w przeszłości = true ORAZ Minął miesiąc = **0** ORAZ Minął dzień >= 20 ) następnie ( utwórz nową fakturę i ustaw "Ostatni termin płatności" na time() ) Jak widać nowa **faktura zostanie utworzona ~10 dni przed Najnowsza data płatności** i znacznik czasu w „Ostatniej dacie płatności” są ustawione na bieżący czas, więc gdy cronjob sprawdza następnego dnia, faktura nie zostanie utworzona dla tego zakupionego produktu. Moje pytanie brzmi: **czy jest to odpowiedni sposób na rozwiązanie tego problemu** i czy **dostrzegasz jakiekolwiek błędy w rozumowaniu lub problemy, które mogą wystąpić**?


title: Zasoby do hakowania zabezpieczeń C/C++ (biały kapelusz)

text: Obecnie pracuję jako programista C++ w dziale bezpieczeństwa oprogramowania, ale nie jako badacz lub haker whitehat. Bezpieczeństwo jest moim zainteresowaniem, głównie w obszarach, w których mogę wykorzystywać kod lub odtwarzać pliki wykonywalne/komunikację/protokoły. Zrobiłem trochę pracy w inżynierii wstecznej, ale tylko jako hobby (tj. modyfikowanie zapisanego pliku gry dla gry). Jako osoba, która zna C, C++ i niektóre assemblery (MASM), jakie rodzaje zasobów polecasz przeczytać, aby uzyskać więcej wiedzy na temat tych dziedzin? Książki, blogi i artykuły prawdopodobnie byłyby najlepsze. Obecnie czytam 24 grzechy główne bezpieczeństwa oprogramowania: błędy programistyczne i jak je naprawić.


title: Jaka byłaby dobra nazwa praktyk, których (zazwyczaj) nie uczysz się na uniwersytecie?

text: Przygotowuję kurs dla świeżo upieczonych absolwentów CS. Muszę to nazwać. Czy istnieje angielskie słowo lub zdanie, które definiuje wszystkie praktyki, których nie uczysz się na uczelni/uniwersytecie? Oto (częściowa) lista rzeczy, których nie uczy większość uczniów, z którymi przeprowadzam wywiady lub z którymi rozmawiam: * Testowanie jednostkowe + prześmiewanie * Wzorce projektowe * Agility (takie jak Scrum lub Extreme Programming) * DRY, YAGNI, SOLID, DIP, KISS, ... * Kontrola źródła, DVCS, ... Kiedyś usłyszałem "Praktyki industrializacji oprogramowania" (dosłownie przetłumaczone z francuskiego) i chociaż brzmiało to świetnie po francusku, nie jestem pewien, czy po angielsku.


title: Co powinno być „D” dla dobrego testu jednostkowego?

text: Próbuję przedstawić, czym są testy jednostkowe i jak napisać dobry test jednostkowy znajomemu. Myślę, że lepiej, jeśli podam mu kilka zasad dobrego testu jednostkowego i nagle przypominam sobie o właściwościach „ACID” transakcji: **A** \- atomowe: test jednostkowy powinien testować tylko jedną rzecz **C** \- spójny: test jednostkowy, jeśli zostanie zaliczony, powinien przejść tysiąc razy, za każdym razem, gdy go uruchomisz, więc nie powinien zależeć od zewnętrznych rzeczy, takich jak sieć, baza danych... **I** \- niezależny: test jednostkowy , powinny być niezależne od innych, dlatego możesz uruchamiać testy jednostkowe w każdej kolejności, bez zmiany wyniku. Ale trochę utknąłem z "D" - trwałym. Trwały test jednostkowy? To nie ma sensu. Jakieś sugestie dotyczące tego D? Dziękuję Ci.


title: Użycie słowa „usterka”

text: Mówię o komputerach z wieloma nie-technicznymi ludźmi, którzy często używają słowa „usterka”, aby opisać niepożądany wynik działania programu lub systemu operacyjnego (oczywiście nigdy Linux!). Nigdy nie słyszałem, aby inny programista użył słowa „usterka”, a słysząc to, wydaje mi się, że użytkownik nie ma pojęcia, o czym mówi. WIĘC moje pytanie: Czy używasz słowa usterka w codziennej, technicznej rozmowie, a jeśli nie, to czy jego użycie oznacza dla ciebie ignorancję i brak zrozumienia?


title: emacs - eksplorator projektów i funkcje autouzupełniania - czy jest dostępny?

text: Wiem, że Emacs jest bardzo potężnym edytorem. Staram się używać go od czasu do czasu i chcę się go lepiej nauczyć. Ale żeby nauczyć się tego lepiej, muszę go używać częściej niż teraz. Ale jedną dużą przeszkodą jest to, że nie mogłem znaleźć podstawowych właściwości, takich jak autouzupełnianie projektu. Może jestem leniwy, ale nie chcę ciągle pisać tych samych długich nazw metod. Innym jest przejście do definicji, chcę zobaczyć prawdziwą deklarację dowolnej klasy lub metody, a nawet zmiennej. Wiem też, że może obsłużyć pliki make, ale rzeczywista reprezentacja projektu wraz z edytorem byłaby bardzo dobra. Więc pytam, czy istnieje sposób na zapewnienie tych opcji w Emacsie? A może istnieje rozszerzona wersja Emacsa, która obsługuje te funkcje?


title: Jak zamknięcia w Javie wpłyną na społeczność Javy?

text: Jest to jedna z najczęściej omawianych funkcji planowanych dla Javy: Zamknięcia. Wielu z nas tęskniło za nimi. Niektórzy z nas (w tym ja) trochę się niecierpliwili i zwrócili się do języków skryptowych, aby wypełnić pustkę. Ale kiedy zamknięcia w końcu dotarły do Javy: jak wpłyną one na społeczność Java? Czy rozwój języków skryptowych ukierunkowanych na maszyny wirtualne spowolni indeksowanie, pozostanie bez zmian, czy też przyspieszy? Czy ludzie skupią się na nowej składni zamykania, zmieniając w ten sposób podstawy kodu Java w bardziej funkcjonalnie ustrukturyzowane implementacje? Czy będziemy widzieć tylko zamknięcia posypane w Javie? Jaki będzie wpływ na obsługę narzędzi/IDE? A co z wydajnością? I wreszcie, co to będzie oznaczać dla dalszego przyjmowania Javy jako języka w porównaniu z innymi językami, które zyskują na popularności? Aby podać przykład jednej z najnowszych proponowanych specyfikacji składni Java Closure: interfejs publiczny StringOperation { String invoke(String s); } // ... (new StringOperation() { public invoke(String s) { new StringBuilder(s).reverse().toString(); } }).invoke("abcd"); stałoby się ... String reversed = { String s => new StringBuilder(s).reverse().toString() }.invoke("abcd"); [źródło: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonim_28.html]


title: Test jednostkowy zapytań opakowujących SHA256

text: Mam następujący wrapper SHA256. public statyczny ciąg SHA256(ciąg zwykły tekst) { StringBuilder sb = new StringBuilder(); Dostawca SHA256CryptoServiceProvider = nowy SHA256CryptoServiceProvider(); var hashedBytes = provider.ComputeHash(Encoding.UTF8.GetBytes(plainText)); for (int i = 0; i < hashedBytes.Length; i++) { sb.Append(hashedBytes[i].ToString("x2").ToLower()); } return sb.ToString(); } Czy chcę to przetestować? Jeśli tak, co polecasz? Mój proces myślowy wygląda następująco: 1. Jaka jest tutaj logika. 2. Odpowiedzią jest moja pętla for i `ToString("x2"`), więc z mojego zrozumienia chcę przetestować tę część? Mogę założyć, że `Encoding.UTF8.GetBytes(plainText`) działa. Prawidłowe założenie? Mogę założyć, że `SHA256CryptoServiceProvider.ComputeHash()` działa. Prawidłowe założenie? Chcę tylko testować moją logikę. W tym przypadku ogranicza się do drukowania hasha zakodowanego szesnastkowo. Prawidłowy? Dziękuję. EDYCJA: Metoda aktualizacji oparta na doskonałej odpowiedzi MainMa: /// <summary> /// Zwraca skrót SHA256 zwykłego tekstu. /// </summary> /// <param name="plainText">Tekst bólu.</param> /// <returns>Hash.</returns> publiczny ciąg statyczny SHA256(string plainText) { if ( string.IsNullOrWhiteSpace(plainText)) wyrzuć nowy ArgumentNullException("Zwykły tekst nie może być pusty."); StringBuilder sb = nowy StringBuilder(); Byte[] hashedBytes; using (SHA256CryptoServiceProvider sha256Provider = new SHA256CryptoServiceProvider()) { hashedBytes = sha256Provider.ComputeHash(Encoding.UTF8.GetBytes(plainText)); } foreach(Byte b w hashedBytes) { sb.Append(b.ToString("x2").ToLower(CultureInfo.InvariantCulture)); } return sb.ToString(); }