title: Edytor tekstu HTML z manipulacją DOM?

text: Podczas dzisiejszej edycji statycznego pliku HTML zdałem sobie sprawę, że wiele rzeczy, które robiłem za pomocą wyszukiwania i zastępowania wyrażeniami regularnymi, byłoby znacznie prostsze przy użyciu JavaScript (i być może biblioteki DOM, takiej jak jQuery) i manipulacji DOM. Mógłbym oczywiście załadować plik do przeglądarki, wpisać trochę JavaScript do konsoli i skopiować i wkleić zmanipulowany kod źródłowy z powrotem do edytora. Ale byłoby to o wiele łatwiejsze, gdyby edytor tekstu HTML wspierał to bezpośrednio, ponieważ mógłby automatycznie ładować jQuery, można by przechowywać i ponownie wykorzystywać skrypty, szansa na utratę formatowania jest mniejsza itp. Czy ktoś wie, czy coś takiego istnieje? Najlepiej dla systemu Windows, ale sugestie dotyczące innych systemów operacyjnych też są w porządku.


title: Właściwa architektura do uruchamiania i zatrzymywania złożonych zadań w tle

text: Mam problem z wypracowaniem poprawnej architektury dla następującego zadania. Mam GUI w Windows Forms, który zawiera `ListBox`, wymieniający pewne układy architektoniczne. Po wybraniu elementu na tej liście niestandardowa „Kontrola” wyświetla interaktywną wizualizację wybranego układu. Rysowanie tego interaktywnego diagramu to zadanie wymagające dużej mocy obliczeniowej, które na moim komputerze może zająć nawet sekundę. Funkcjonalność, którą staram się osiągnąć, polega na tym, że jeśli użytkownik chce szybko przewijać układy w `ListBox` (powiedzmy, przytrzymując klawisz strzałki w dół), nie chcę, aby mój komputer siedział tam i myślał o tym jak narysować układ, zanim pozwoli użytkownikowi zrobić cokolwiek innego. Oczywistą odpowiedzią jest oczywiście przeprowadzenie obliczeń układu w osobnym wątku. Ale jak sprawić, by wątek zwrócił całą kontrolkę? Jak mogę się upewnić, że nie przeprowadzam dwóch obliczeń układu jednocześnie? Jestem całkiem nowy w tym złożonym biznesie GUI. Tak więc prawdziwe pytanie brzmi: jaka jest właściwa architektura, aby zaimplementować coś takiego? Wydaje się, że ludzie robią to przez cały czas, ale znalezienie sugestii, jak zrobić to właściwie, jest naprawdę trudne.


title: Czy powinienem testować?

text: Większość logiki mojej usługi internetowej polega na rozmowie z usługami internetowymi naszych dostawców. (sprawdzanie kolejności dostępności itp.) Nie mają środowiska testowego, a większość wywołań nie może być uruchamiana arbitralnie (na przykład wstrzymanie zostałoby uruchomione raz i faktycznie zatrzymałoby usługę). Czy w tym środowisku można przeprowadzać testy jednostkowe? Mógłbym symulować typowe odpowiedzi, ale martwię się, że odpowiedzi dostawcy na sztywno podważą sens testów jednostkowych.


title: Czy powinienem zaimplementować funkcjonalność dla pliku xml+schematu?

text: Pracuję nad skryptem do pobierania danych z arkuszy kalkulacyjnych programu Excel do bazy danych. Dane pochodzą z ankiet przeprowadzonych przez nasze biuro, w których dane przychodzą z bardzo małym formatowaniem. W tej chwili dane są manipulowane za pomocą wielu funkcji kopiowania i wklejania, a następnie analizowane „ręcznie” (tj. ktoś klika i przeciąga w excelu, a także obraca i kopiuje wklejanie do innego oprogramowania). Prowadzi to do bałaganu w strukturach plików i braku lub niepoprawne/niezrozumiałe dane. wprowadź potrzebę bazy danych. Mam działające rozwiązanie, które zaakceptuje pliki csv. Przeanalizuje dane i wstawi je poprawnie, o ile każdy nagłówek kolumny jest poprawny. Ale mój przełożony naciska na mnie, abym akceptował pliki xml ze schematem xsd, abym mógł sprawdzić poprawność danych. Mój argument byłby taki, że niezależnie od tego, czy używam xml, użytkownik będzie musiał zapisać oryginalny plik jako inny typ pliku, a ja i tak mogę sprawdzić poprawność danych w moim skrypcie na podstawie nagłówków kolumn. Kontrargumentem jest to, że jeśli zdecydują się dołączyć nowy zestaw danych (tj. nowy układ tabeli), mój skrypt może się zepsuć. Tak czy inaczej, jeśli typ danych jest niepoprawny, użytkownik będzie musiał wrócić do pliku i edytować go, zanim jakiekolwiek rozwiązanie zadziała. Więc odpowiedzią, której szukam, jest to, czy powinienem zawracać sobie głowę konfiguracją funkcji xml. [uwaga, używam php do skryptu, ponieważ nie jestem zaznajomiony z vba i jestem na stażu studenckim, więc nie mam wystarczająco dużo czasu, aby nauczyć się nowego języka.] [NA POCZĄTKU - czy podchodzę do tego z namiętnym podejściem? ]


title: Oddawanie kodu, który opracowałeś w swojej firmie jako zadania domowe

text: Obecnie prowadzę start-up z kumplem i zauważyłem, że niektóre z moich zadań uniwersyteckich można ukończyć, po prostu kopiując kod z niektórych opracowanych przez nas programów. Czy są jakieś problemy prawne, na które mogę się natknąć? A może to ogólnie zły pomysł (jak to się teraz wydaje)? Przepraszam, jeśli to jest w niewłaściwym miejscu, nie byłem pewien, czy umieścić to tutaj, czy w stackoverflow.


title: Język edukacyjny oparty na procedurach lub zdarzeniach

text: Jestem tutaj, aby zadać pytanie, które było zadawane **wiele razy** wcześniej. Jakiego języka programowania powinienem się nauczyć, aby zostać inteligentnym programistą koncepcyjnym? Wiele osób zgadza się, że nie musisz uczyć się jednego języka programowania; musisz nauczyć się programowania jako samej koncepcji (większość z nas może opanować język w ciągu kilku tygodni). Czy lepiej byłoby nauczyć się języków opartych na procedurach lub zdarzeniach do celów koncepcyjnych? Czemu? Pozwólcie, że sprecyzuję moje powyższe pytanie w tej sprawie. Napisałem wiele podstawowych przykładów kodu i programów. Czuję, że mam mocne korzenie w podstawowych pojęciach i teraz jestem gotowy na wykonanie bardziej skomplikowanego zadania, takiego jak programowanie silnika renderowania grafiki lub kompilatora. Z tego, co rozumiem, C/C++ powinien nauczyć mnie więcej ważnych zasad, które mogę przenieść do dziedzin takich jak elektrotechnika.


title: Czy mogę uzyskać kompilator C++ do tworzenia instancji obiektów w czasie kompilacji?

text: Piszę jakiś kod, który ma bardzo dużą liczbę w miarę prostych obiektów i chciałbym, aby zostały one utworzone w czasie kompilacji. Myślałem, że kompilator byłby w stanie to zrobić, ale nie byłem w stanie wymyślić, jak. W _C_ mógłbym wykonać następujące czynności: #include <stdio.h> typedef struct data_s { int a; intb; znak *c; } informacje; lista informacji[] = { 1, 2, "a", 3, 4, "b", }; main() { int i; for (i = 0; i < sizeof(lista)/sizeof(*lista); i++) { printf("%d %s\n", i, lista[i].c); } } Używając #C++*, każdy obiekt ma wywołany konstruktor, a nie tylko układany w pamięci. #include <iostream> używając std::cout; używając std::endl; class Info { const int a; const int b; const char *c; public: Info(const int, const int, const char *); const int get_a() { return a; }; const int get_b() { return b; }; const char *get_c() const { return c; }; }; Info::Info(const int a, const int b, const char *c) : a(a), b(b), c(c) {}; Lista informacji[] = { Informacje(1, 2, "a"), Informacje(3, 4, "b"), }; main() { for (int i = 0; i < sizeof(lista)/sizeof(*lista); i++) { cout << i << " " << lista[i].get_c() << endl; } } Po prostu nie widzę, jakie informacje nie są dostępne dla kompilatora, aby całkowicie utworzyć wystąpienie tych obiektów w czasie kompilacji, więc zakładam, że czegoś brakuje.


title: Reprezentuj akcje (czasowniki) w REST URI

text: Mam operację drukowania do wykonania dla moich dokumentów klienta. Potrzebuję również innych standardowych operacji, takich jak dodawanie, aktualizacja, usuwanie. więc mam następujące: * Do tworzenia nowego klienta: URI = /customer/{id}, type = POST, Methodname = CreateCustomer() * Do aktualizacji: URI: /customer/{id}, type = PUT, method = UpdateCstomer () * W przypadku usuwania klienta: URI = /customer/{id}, type = DELETE, Methodname = DeleteCustomer() * W przypadku widoku: URI: /customer/{id}, type = GET, method = GetCustomer() Teraz, jeśli Muszę wydrukować dokument dla tego klienta, potrzebuję funkcji drukowania. Mój identyfikator URI może wyglądać tak: /customer/{id}, type = POST , method = PrintCustomer(). Ale użyłem tego typu URI i POST dla CreateCustomer. Chciałem, aby URI wyglądał tak: /customer/Print/{id}, type = POST , method = PrintCustomer(). Ale nie mogę mieć czasownika "Drukuj" w moim URI. Jaki jest najlepszy sposób, aby to zrobić? Myślałem o /customer/document/{id} jako identyfikatorze URI... ale napotkam ten sam problem. Miałbym operacje CRUD na „dokumencie”. Więc znowu zabrakło mi tego, co użyłbym do "drukowania". Proszę doradź.


title: Materiały dotyczące projektowania języków strukturalnych?

text: Istnieje wiele materiałów na temat projektowania oprogramowania do programowania obiektowego. Czy znasz jakieś dobre materiały do czystego programowania strukturalnego? Pracuję wyłącznie w C i chociaż mogę skorzystać z doświadczeń z programowania obiektowego, dowiedziałem się, że znam kilka sztuczek dotyczących dobrego projektowania strukturalnego.


title: Dlaczego nie możemy skuteczniej uchwycić projektowania oprogramowania?

text: Jako inżynierowie wszyscy "projektujemy" artefakty (budynki, programy, obwody, cząsteczki...). Jest to czynność (design-the-verb), która daje pewien rodzaj wyniku (design-the-noun). Myślę, że wszyscy zgadzamy się, że design-the-noun to inny byt niż sam artefakt. Kluczową czynnością w branży oprogramowania (a właściwie w każdej firmie, w której artefakt wynikowy produktu wymaga ulepszenia) jest zrozumienie „projektu (rzeczownika)”. Wydaje się jednak, że jako społeczność mamy do czynienia z całkowitymi porażkami w ich nagrywaniu, czego dowodem jest ilość wysiłku, jaki ludzie wkładają w ponowne odkrywanie faktów na temat ich bazy kodu. Poproś kogoś, aby pokazał Ci projekt swojego kodu i zobacz, co otrzymasz. Myślę, że projekt oprogramowania ma: * Jawną specyfikację tego, co oprogramowanie ma robić _i jak dobrze to robi_ * Jawną wersję kodu (ta część jest łatwa, każdy ją ma) * Wyjaśnienie, w jaki sposób każda część kodu służy do osiągnięcia specyfikacji (np. relacja między fragmentami specyfikacji a fragmentami kodu) * _uzasadnienie_, dlaczego kod jest taki, jaki jest (np. dlaczego konkretny wybór, a nie inny) Co NIE jest projektowanie to szczególne spojrzenie na kod. Na przykład [nie wybierać konkretnie] diagramy UML nie są projektami. Są to raczej właściwości, które można uzyskać z kodu, lub prawdopodobnie właściwości, które chciałbyś uzyskać z kodu. Ale z reguły nie można wyprowadzić kodu z UML. Dlaczego po ponad 50 latach tworzenia oprogramowania nie mamy regularnych sposobów na wyrażenie tego? (Możesz zaprzeczyć mi za pomocą wyraźnych przykładów!) Nawet jeśli to zrobimy, większość społeczności wydaje się tak skoncentrowana na zdobyciu „kodu”, że projekt rzeczownika i tak ginie. (IMHO, dopóki projektowanie nie stanie się celem inżynierii, z artefaktem wyodrębnionym z projektu, nie obejdziemy tego). Co widziałeś jako środki do nagrywania projektów (w sensie, w jakim to opisałem)? Wyraźne odniesienia do artykułów byłyby dobre. Jak myślisz, dlaczego konkretne i ogólne środki nie powiodły się? Jak możemy to zmienić? [Mam własne pomysły, które rozwijają punkt widzenia powyżej, ale interesują mnie odpowiedzi innych ludzi ... i trudno jest wdrożyć mój schemat [[i może to jest prawdziwy problem :-]] ] EDIT 2011/1 /3: Jeden z wątków odpowiedzi wskazuje, że „dokumentacja” (prawdopodobnie tekstowa, w szczególności nieformalna) może być adekwatna. Chyba powinienem wyjaśnić, że w to nie wierzę. Narzędzia CASE pojawiły się na scenie począwszy od lat 80., ale wczesne narzędzia głównie przechwytywały piksele dla diagramów tego, co narysowałeś; chociaż narzędzia prawdopodobnie odniosły sukces komercyjny, tak naprawdę nie były zbyt pomocne. Kluczowym spostrzeżeniem było to, że jeśli dodatkowe artefakty „projektowe” nie są formalnie interpretowalne, nie można uzyskać żadnej poważnej pomocy narzędzia. Uważam, że ten sam pogląd dotyczy każdej długofalowej, użytecznej formy przechwytywania projektu: jeśli nie ma formalnej struktury, nie będzie miał żadnego rzeczywistego zastosowania. Dokumenty tekstowe prawie nie przechodzą tego testu.


title: Cel instrukcji NOP i instrukcja wyrównania w asemblerze x86

text: Minął mniej więcej rok, odkąd ostatnio brałem udział w zajęciach montażowych. W tej klasie używaliśmy MASM z bibliotekami Irvine'a, aby ułatwić programowanie. Po przejrzeniu większości instrukcji, powiedział, że instrukcja NOP w zasadzie nic nie robi i nie martwił się jej użyciem. Tak czy inaczej, to było w połowie semestru, a on ma przykładowy kod, który nie działał poprawnie, więc powiedział nam, abyśmy dodali instrukcję NOP i zadziałało dobrze. Zapytałem, że jestem po zajęciach, dlaczego i co to właściwie zrobiło, a on odpowiedział, że nie wie. Czy ktoś wie?


title: Czy zgodnie z prawem mogę ponownie wykorzystać kod dla różnych klientów?

text: Firma, w której pracuję, opracowuje niestandardowe aplikacje automatyki przemysłowej dla wielu klientów. Mimo że każda aplikacja jest niestandardowa, zawierają wspólny kod, który jest ponownie używany w różnych projektach. Jeden z klientów szuka teraz kodu źródłowego do swojej aplikacji, co wywołało burzę w firmie. Kierownictwo zdecydowało, że nie możemy dać im źródła współdzielonych komponentów, ponieważ są one używane przez innych klientów. Zostałem poproszony o zmodyfikowanie współdzielonych komponentów 'wystarczająco', aby nie były wspólne. Więc moje pytania brzmią: 1) Czy z prawnego punktu widzenia powinien być jakiś problem z ponownym wykorzystaniem wspólnych komponentów dla różnych klientów? 2) Jeśli naprawdę muszę zmodyfikować wspólne komponenty, to ile to „wystarczy”? (Wiem, że to jest do bani, ale albo to robię, albo składam wypowiedzenie). O tak, a moja firma nie ma licencji na żadnego z tych klientów.


title: Pytanie projektowe aplikacji dotyczące zapisywania plików

text: Pracuję nad aplikacją w C# i mam ekstremalne trudności z rozwiązaniem tego problemu projektowego. Zasadniczo aplikacja pozwala użytkownikom tworzyć książki kucharskie. Użytkownik może kliknąć „nowa książka”, a aplikacja utworzy książkę o podanej nazwie. Teraz użytkownik może dodawać „przepisy” do tej książki. Użytkownik może w każdej chwili zapisać książkę. Mogą załadować tę książkę na innych komputerach z aplikacją. W aplikacji może być jednocześnie otwarta tylko jedna książka. Jeśli więc użytkownik chce utworzyć nową książkę lub otworzyć inną, aplikacja będzie musiała zamknąć bieżącą książkę, a następnie otworzyć następną. Moje pytanie brzmi, jaki byłby najlepszy sposób na rozwiązanie tego problemu? * Jak mam sprawdzić, czy książka jest otwarta? * W jaki sposób aplikacja utworzy nową książkę? * Jak mam mieć aplikację „zamknij i zapomnij” zamkniętą książkę, aby jedyną otwartą księgą była nowa? Myślałem, że będę miał klasę CookBook i klasę Recipe. Klasa CookBook będzie przechowywać informacje dotyczące nowej książki, która została utworzona, i będzie zawierać listę wszystkich przepisów w tej książce CookBook. Po prostu trudno mi znaleźć najlepszy sposób, aby dać użytkownikowi możliwość utworzenia nowej książki kucharskiej i zamknięcia bieżącej książki kucharskiej, aby użytkownik mógł utworzyć nową. Klasa CookBook będzie miała funkcję, która zapisze zawartość CookBook i przepisy CookBook do pliku. W CookBook pojawi się również funkcja, która zapełni interfejs użytkownika aplikacji na podstawie zawartości CookBook, który jest ładowany/otwierany przez użytkownika.


title: Strumieniowe przesyłanie danych z mikrokontrolera na serwer?

text: Edytuj *Mamy monitor pracy serca podłączony do msp430 z modułem Wi-Fi wędrujących sieci. Chciałbym połączyć wysłać jakiś strumień danych do serwera WWW, aby ktoś mógł go oglądać poza siedzibą firmy. Chciałbym mieć połączenie strumieniowe danych lub coś z serwerem internetowym, ponieważ myślałem, że jest to bardziej naturalne niż próba wysyłania żądania postu co 0,5 sekundy. (Wiem, że to nie jest bardzo szczegółowe, ale jest to poziom, na którym teraz jestem.) Próbuję dowiedzieć się, jak przesyłać strumieniowo dane (nie wideo ani nic dużego) z mikrokontrolera na serwer sieciowy i przesyłać je do serwera Aplikacja na iOS. Mój kumpel ma moduł Wi-Fi dla naszego MCU i twierdzi, że po prostu piszemy UART, a moduł Wi-Fi nadaje nasz sygnał UART. Więc chcę przesyłać strumieniowo te dane do serwera WWW (php). Czy istnieje jakiś rodzaj protokołu Wi-Fi do wysyłania strumienia danych na serwer? Jaki jest protokół ustanawiania połączenia strumienia danych po stronie MCU? Jakiego kodu po stronie serwera potrzebuję, aby otrzymać strumień danych?


title: Dlaczego frameworki UI nie używają generyków?

text: Jednym ze sposobów patrzenia na bezpieczeństwo typów jest dodawanie automatycznych testów do całego kodu, które w pewien sposób powstrzymują pewne rzeczy. Jednym z narzędzi, które pomagają w tym w .NET, są generyki. Jednak zarówno WinForms, jak i WPF są wolne od generycznych. Na przykład nie ma kontrolki `ListBox<T>`, która mogłaby wyświetlać tylko elementy określonego typu. Takie kontrolki niezmiennie działają na „obiekcie”. Dlaczego generyki nie są popularne wśród twórców frameworków UI?


title: Korzystasz z oprogramowania Microsoft Office jako części zaplecza usługi sieci Web?

text: Jakie problemy licencyjne pojawiają się, gdy zainstaluję i używam oprogramowania Microsoft Office (w tym przypadku Visio) jako części zaplecza usługi sieci Web? Flagowe oprogramowanie mojej firmy może konwertować pliki Microsoft Visio do użytku w ich środowisku, ale oczywiście wymaga lokalnej instalacji Visio w celu odkodowania plików. System, który mam stworzyć, ma oferować rodzaj usługi sieciowej, w której ludzie mogą przesyłać swoje pliki Visio, a my możemy pochwalić się jedną z korzyści płynących z zakupu naszego oprogramowania w pełnej cenie. W tym celu musiałbym zainstalować nasze oprogramowanie na serwerze, a także Visio. Martwi mnie to, że technicznie każdy odwiedzający witrynę technicznie korzysta z programu Visio. Naprawdę nie mogę znaleźć żadnych innych przykładów podczas wyszukiwania w Internecie, więc każda porada byłaby bardzo mile widziana!


title: Czy powszechne jest drukowanie kodu na papierze?

text: Lubię trzymać linie kodu poniżej 80 znaków, ponieważ: * nie muszę przewijać w poziomie; * Wiem, że linia jest prawdopodobnie zbyt skomplikowana, jeśli przekracza ten limit; i * ładnie się drukuje na papierze. Jeśli chodzi o to drugie, spotkałem tylko kilku, którzy faktycznie drukują kod do obejrzenia (jestem jednym z nich). Więc jak często zdarza się drukować kod?


title: Czy istnieje korelacja między skalą projektu a surowością języka?

text: Wyjaśniając mojemu koledze różnicę między surowością języków i paradygmatów, doszedłem do wniosku, że: * Języki tolerancyjne, takie jak języki dynamiczne i interpretowane, są najlepiej używane w prototypach i małych projektach lub średniej wielkości aplikacjach internetowych. Wybierając eleganckie języki dynamiczne, takie jak Python czy JavaScript z Node.js, korzyści to: 1. Szybki rozwój, 2. Zredukowany szablonowy kod, 3. Możliwość przyciągnięcia młodych, kreatywnych programistów, którzy uciekają z _"języków korporacyjnych"_ takich jak Java. * Języki statycznie wpisane/skompilowane najlepiej sprawdzają się w przypadku aplikacji wymagających większej rygorystyczności, takich jak aplikacje o znaczeniu krytycznym dla firmy lub aplikacje dla średnich i dużych aplikacji. 1. Dobrze znane paradygmaty i wzorce opracowywane przez dziesięciolecia, 2. Łatwość statycznego sprawdzania, 3. Możliwość znalezienia wielu profesjonalnych programistów z kilkudziesięcioletnim doświadczeniem. * Ścisłe języki, takie jak Haskell, Ada lub techniki, takie jak kontrakty na kod w C#, są lepsze dla systemów, które przedkładają bezpieczeństwo nad elastyczność (nawet jeśli Haskell może być niezwykle elastyczny), takich jak systemy krytyczne dla życia i systemy, które mają być wyjątkowo stabilne. Korzyści to: 1. Możliwość wyłapania jak największej liczby błędów w czasie kompilacji, 2. Łatwość statycznego sprawdzania, 3. Łatwość formalnych dowodów. Jednak patrząc na języki i technologie wykorzystywane w dużych projektach przez duże korporacje, **wydaje się, że moje twierdzenie jest błędne**. Na przykład Python jest z powodzeniem używany w dużych systemach, takich jak YouTube czy inne aplikacje Google, które wymagają dużej dozy rygorystyczności. Czy nadal istnieje korelacja między skalą projektu a ścisłością języka/paradygmatu, którego należy użyć? Czy istnieje trzeci czynnik, o którym zapomniałem wziąć pod uwagę? Gdzie się mylę?


title: Testowanie złożonych kompozycji

text: Mam dość duży zbiór klas, które sprawdzają i mutują daną strukturę danych. Można je komponować za pomocą wzorca kompozycji w dowolnie złożone struktury drzewiaste. Finalny produkt zawiera wiele takich skomponowanych struktur. Moje pytanie brzmi teraz: Jak mogę je przetestować? Chociaż łatwo jest przetestować każdą pojedynczą jednostkę tych kompozycji, testowanie całych kompozycji jest dość kosztowne w następującym sensie: * Testowanie prawidłowego układu drzewa kompozycji daje ogromną liczbę przypadków testowych * Zmiany w kompozycjach skutkuje bardzo pracochłonnym przeglądem każdego pojedynczego przypadku testowego. Jaka jest tutaj ogólna wytyczna?


title: Czy powinienem zwrócić Collection czy ImmutableCollection z metody?

text: Pisząc API w Javie, zwracając pewnego rodzaju niezmienną kolekcję, mam możliwość zwrócenia `Collection` (lub `List`, `Map`, itp.) z metody lub `ImmutableCollection` (lub ` ImmutableList`, `ImmutableMap`, etc): private final ImmutableMap<> _immutableMap = ... public Collection<T> getValues() { return _immutableMap.values(); } lub public ImmutableCollection<T> getValues() { return _immutableMap.values(); } Co jest lepsze? Ustawienie wartości zwracanej jako `ImmutableCollection` ogranicza mnie do używania tego dokładnego typu na zawsze, więc nie mogę później zamienić `_immutableMap` na mój własny niezmienny typ, który zwraca, powiedzmy, niezmienny widok wartości, które są` t ImmutableCollection` (skonstruowanie jednego wymaga skopiowania wartości i nie mogę podklasować go, aby zapewnić niezmienny widok mutowalnej kolekcji). Jednak ludzie wywołujący metodę, aby zobaczyć, że zwracana wartość jest w rzeczywistości niezmienna, a metody `add` i `remove` są oznaczone jako przestarzałe, są korzystne, zamiast próbować dodawać lub usuwać elementy i powodować błędy w czasie wykonywania. Ogólnie rzecz biorąc, lubię zwracać najbardziej specyficzny typ interfejsu z metody, aby w razie potrzeby móc później zmienić podstawową implementację bez zrywania umowy. Ale istnieje korzyść dla wywołujących zwracających „ImmutableCollection”, kosztem ograniczenia przyszłego rozwoju metody i spowodowania przyszłych możliwych problemów z wydajnością z powodu kopiowania wszystkich wartości do „ImmutableCollection”, a nie zapewniania niezmiennego widoku.


title: Wielozadaniowość, jak śledzić to, co robisz

text: Jestem w długim zadaniu debugowania, muszę dowiedzieć się, gdzie podłączyć dodatkowe funkcje, których potrzebuję. To uciążliwa praca, a debugowałem całe 2 dni i jestem na trzecim, ale pracuję w wielu projektach i wracam do tego po prawie tygodniu i ciężko było wrócić do punktu, w którym wyszedłem, i pamiętaj, o co w tym wszystkim chodziło i do jakich wniosków już doszedłem. Jak możesz śledzić, co robiłeś/myślałeś w takim scenariuszu, w którym komentarze nie są właściwie „właściwą rzeczą” do zrobienia? Robię kilka komentarzy w moim kodzie testowym, plus kilka pouczających wiadomości o commitach git/hg, ale to trochę brudne… napisany papier może być odpowiedzią…


title: Musisz złożyć wniosek o inwentaryzację zapasów

text: Muszę złożyć wniosek, aby mój tata mógł śledzić stany magazynowe. Handluje akcjami dla siebie i dla swoich klientów i chciałby prowadzić ewidencję, takie rzeczy jak cena kupna/sprzedaży akcji, zyski, straty, data itp. dla swoich akcji i akcji swoich klientów oraz chciałby różnego rodzaju raporty/widoki. Używa okien. Chcę udostępnić lokalną stronę html, na której będzie wprowadzał nowe informacje, a to powinno trafić do lokalnej bazy danych i ze swojej strony html, może wybrać raporty itp., a raporty będą wyświetlane na stronie internetowej itp. Zastanawiam się nad użyciem rozpórki (i windows, tomcat) i mysql do stworzenia tej aplikacji. Wiem kilka rzeczy z czasów college'u, ale zajrzałbym do samouczków, aby skonfigurować rzeczy i programować. Czy ten wybór technologii wygląda wystarczająco dobrze, czy istnieje coś łatwiejszego i równie dobrego? **update:** To jest to, na co się zdecydowałem: użyłem mysql/windows, navicat lite i zapełnionej bazy danych/tabeli oraz napisałem kilka procedur pobierających dane wejściowe. Podobnie jak jedna procedura przyjmuje datę i nazwę akcji jako dane wejściowe i daje ilość posiadanych akcji do tej daty oraz dotychczasowy zysk/stratę, efektywną cenę kupna każdej akcji tej akcji. To jest do indywidualnego użytku podstawowego.. i wygląda na to, że na razie wystarczy - bardzo, bardzo proste, ale mógłbym tworzyć niestandardowe tabele, niestandardowe tworzyć zapytania/procedury. Tata dostaje „noty kontraktowe” od swojego brokera zawierające jego codzienne transakcje i mógłbym pobrać te notatki online, skompilować te z ostatnich 2-3 lat w jedną tabelę, więc sprawa jest w stanie roboczym... bardzo prymitywny, ale na razie działa zgodnie z jego wymaganiami. i tak, utworzył 2 konta (jedno konto przywilejów tylko do odczytu, za pomocą którego będzie uruchamiał swoje zapytania, procedury itp.) i innego roota, którego użyje podczas zapełniania swoich tabel, powiedzmy raz lub dwa razy w ciągu 15 dni.


title: Względy architektoniczne dotyczące nowego programu czarnej skrzynki

text: Widzę wyłaniający się trend w przetwarzaniu w „chmurze” polegający na przenoszeniu obciążenia pracą na serwer innej firmy i pobieraniu opłat za ilość pracy wykonanej w ten sposób. Może to być wszystko, od hostingu plików po uwierzytelnianie użytkowników. Zastanowiłem się więc przez chwilę i pomyślałem, dlaczego te usługi nie mogą być oferowane w sposób peer-to-peer, a nie tradycyjny sposób klient-serwer. Więc moim pomysłem jest stworzenie (najlepiej, jak potrafię to opisać) wirtualnej maszyny czarnej skrzynki. Jakiś program, który udostępnia usługę sieciową na tym komputerze, który pozwala każdemu innemu komputerowi z tym oprogramowaniem prosić go o wykonanie dowolnego rodzaju obliczeń, pod warunkiem, że to samo można zażądać od hosta, bez żadnych finansowych "kosztów" . Oczywiście byłoby to zagrożenie bezpieczeństwa bez odpowiednich środków ostrożności, dlatego należy przestrzegać następujących zasad: 1. To oprogramowanie może w dowolnym momencie odrzucić żądania wykonania lub zatrzymać wykonanie. 2. Przekazywane są parametry, które żądają pewnych uprawnień dostępu, w tym między innymi: * Wykorzystanie pamięci - Ile megabajtów będzie do dyspozycji programu. * Wykorzystanie dysku — ile miejsca na dysku można zużyć. * Przestrzeń nazw — kontekst dla tego programu, który określa, czy będzie on miał dostęp do przestrzeni dyskowej zapisanej przez inne programy z tą przestrzenią nazw. * Wykorzystanie procesora - Maksymalny procent procesora, który może być używany w chwilach bezczynności i bezczynności. 3. Dostęp do dysku to symulowana czarna skrzynka z rootem "/", która ukrywa rzeczywistą zawartość dysku. Kiedy program jest wykonywany, tworzony jest folder ze swoją nazwą pod "/prog/" i można swobodnie czytać i pisać w dowolnym folderze (włącznie z folderem innych programów, być może z parametrem, który wyraźnie tego żąda). Tylko inne programy w tej samej przestrzeni nazw mogą się widzieć, ale program może znajdować się w wielu przestrzeniach nazw. 4. Jakiś rodzaj struktury analitycznej, która statystycznie określa, czy przenoszenie zadań wielowątkowych na inne maszyny wirtualne z czarną skrzynką jest wygodne, a jeśli tak, automatycznie spróbuje. Jednak nie zażąda żadnej pracy z komputera o parametrach zasobów wyższych niż parametry zasobów, które sam udostępnia innym komputerom. Oznacza to, że w skrócie dostajesz tylko to, co dajesz. 5. Jeśli nie są nałożone żadne ograniczenia na niektóre rodzaje zasobów, jakiś rodzaj zabezpieczenia przed awarią, aby zapewnić, że stabilność komputera nie zostanie zagrożona. 6. Jakiś potężny system modułów, który pozwala ludziom pisać programy do pracy z tym systemem. * Te moduły miałyby przyjazny sposób instalowania się z instalacji na komputerach równorzędnych lub alternatywnie sposób na pobranie i zainstalowanie się ze strony internetowej. * Te moduły musiałyby być zgodne z tymi samymi wytycznymi, co program wykonywany na tym systemie. Moje pytanie brzmi: a) co, jeśli cokolwiek, już istnieje, co w pewnym stopniu to robi i 2) jaki język, platformę, system operacyjny radziłbyś zbudować ten program? Skłaniałem się ku Javie, ponieważ maszyna wirtualna ma pełny dostęp do tego, jak działają jej programy, dlatego musiałbym tylko przerobić, jak pliki są odczytywane/zapisywane do systemu plików, jednak nic nie jest zapisane w kamieniu. Każda rada byłaby mile widziana, nawet jeśli jest to rada, która sugeruje, że tego typu rzeczy nie są możliwe. Poza tym, jeśli ktoś ma dobre imię dla tego programu, wszyscy jestem uszami. :)


title: Jaki jest duch startupów?

text: Ciągle słyszę od Netu i ludzi wokół mnie, że Startupy to miejsce, w którym można się dużo nauczyć, a także spotykam się z terminem „Duch startupów”. Jaka jest różnica między kulturą pracy startupu a korporacją? Chciałbym, żeby ludzie wyjaśnili w kontekście programowania.


title: Czy monitorowanie/profilowanie wydajności oprogramowania może być w wysokim stopniu zautomatyzowane, tak jak w testach jednostkowych?

text: Testy jednostkowe składają się z kodu wykonywalnego, który wykonuje określoną funkcjonalność, a następnie zapewnia pewne warunki. Wyniki to zaliczenie lub niepowodzenie. * Celem jest zawsze zaliczenie wszystkich testów. Profilowanie wydajności oprogramowania zwykle wymaga pomocy jakiegoś zautomatyzowanego narzędzia testowego/profilowania, ale wyniki wydają się zawsze wymagać ludzkiej interpretacji, ponieważ: * Nie ma jasnych celów zaliczenia/niezaliczenia. * Istnieje wiele aspektów (wymiarów) wydajności oprogramowania i aby zinterpretować wynik i podjąć decyzję, należy wziąć pod uwagę ogólny profil wydajności (pełny obraz; gra słów nie jest zamierzona). * Istnieje wiele pułapek w profilowaniu oprogramowania, takich jak wyniki wypaczone przez narzut profilowania, niezamierzone interakcje między modułami lub systemem operacyjnym, przypadki testowe, które nie są reprezentatywne dla potrzeb klientów. Teraz, gdy testy jednostkowe zostały ogłoszone jako główny przełom w promowaniu wiarygodności inżynierii oprogramowania, czy można znaleźć kolejną srebrną kulę dotyczącą problemów z wydajnością oprogramowania? **Wyjaśnienie** na temat „zautomatyzowanej w wysokim stopniu”: * Mam na myśli to, że testy jednostkowe, które zostały napisane dawno temu (i aktualizowane w miarę rozwoju oprogramowania) pozostaną przydatne w nieskończoność. Przez większą część życia produkcyjnego oprogramowania nie ma potrzeby modyfikowania testów jednostkowych, chyba że nastąpią duże zmiany w funkcjonalności. * Z drugiej strony wydaje się, że testowanie wydajności wymaga ciągłego dostosowywania i powtarzania, nawet na etapie produkcji. **Powiązane:** * W jaki sposób testy wydajności są zintegrowane z cyklem życia produktu?


title: Co oznacza instrukcja if(event) w JavaScript?

text: Jestem raczej nowy w JavaScript i ogólnie programowaniu, więc jestem przyzwyczajony tylko do sprawdzania instrukcji if, które mają jakiś rodzaj operatora porównania, takiego jak `if (x < 10)` lub `if(myBool)`. Widziałem instrukcję `if` sprawdzającą względem `zdarzenia`, ale nie rozumiem, co i dlaczego `zdarzenie` jest sprawdzane w ten sposób. Jakie jest semantyczne znaczenie tego sprawdzenia lub porównania? Oto kod, o którym mowa: if(event){ event.preventDefault(); }


title: Czy inżynieria wydajności to inna specjalizacja niż ogólne tworzenie oprogramowania?

text: Głównym celem tworzenia oprogramowania jest skupienie się na dostarczaniu funkcji zaimplementowanych w kodzie dobrej jakości. **Zdolni programiści powinni pisać oprogramowanie o dobrej wydajności** w zakresie, w jakim rozumieją (czyli **w module oprogramowania**, nad którym pracują). Na przykład powinni umieć stosować odpowiednie algorytmy i struktury danych przy wdrażaniu różnych części systemu. Innymi słowy, pierwsza implementacja, którą napisali, aby spełnić test jednostkowy, miałaby dobrą charakterystykę wydajności, którą powinien mieć produkt końcowy. **Jednak gdy system jest duży i złożony** , składający się z wielu komponentów napisanych przez różne osoby/zespoły i obejmujący wielu dostawców, czy bardziej produktywne dla firmy jest oddzielenie ról inżynierów wydajności od programistów, tak aby oprogramowanie programiści mogą skupić się na funkcjach i poprawności, które spełniają specyfikację, a inżynier wydajności może skupić się na pomiarze i poprawie wydajności bez wpływu na funkcjonalność i poprawność? Mówiąc prościej, czy istnieją dwa różne kapelusze, wymagające dwóch różnych sposobów myślenia? **Motywacja:** Z odpowiedzi, które otrzymałem z innego pytania Alternatywa do wymagania czerwonego w TDD: cofnięcie zmiany kodu?, uświadamiam sobie, że podczas głównego czasu tworzenia oprogramowania spełnienie wymagań funkcjonalnych jest **must-have* * podczas gdy wydajność oprogramowania to **miło mieć**. * Testy wymagań funkcjonalnych mają deterministyczne wyniki, zwykle zaliczone/niezaliczone lub zaakceptowane/odrzucone. * Charakterystyki wydajności nie mają ustalonego celu Akceptuj/Odrzuć, ale mają metrykę, która może napędzać wysiłek związany z optymalizacją wydajności. * Przyszłe zmiany wymagań funkcjonalnych mogą spowodować konieczność poświęcenia/dostosowania niektórych celów wydajnościowych. * Osobiście zgadzam się, że powinien istnieć szybki cykl informacji zwrotnych między wdrożeniem funkcji a monitorowaniem wydajności oprogramowania. * W tym pytaniu spieram się, czy te dwie specjalizacje są odrębnymi specjalizacjami - chociaż niektórzy mogą specjalizować się w obu. **Możliwe wyniki** Gdy implementacja i optymalizacja funkcji są wykonywane przez różnych programistów: 1. Będą konflikty i nic nie zostanie zrobione. (nadesłane przez @quant_dev) 2. Powstałe oprogramowanie ma lepszą wydajność. 3. Otrzymane oprogramowanie ma słabą wydajność. **Powiązane:** * Jakie umiejętności powinien posiadać inżynier wydajności? * _(Niedługo zadam osobne pytanie.) Czy jest możliwe, że problemy z wydajnością oprogramowania mogą wynikać z dużych systemów oprogramowania, których nie mogą przewidzieć nawet bardzo doświadczeni programiści? Czy oddany inżynier wydajności będzie w stanie go rozwiązać?_


title: Czy dobrą praktyką jest trzymanie głównej funkcji w osobnym pliku?

text: Czy dobrą praktyką jest posiadanie pliku main.c, który zawiera tylko główną funkcję i nie zawiera żadnych innych funkcji, aby wszystkie inne funkcje mogły być połączone? Jeśli nie ma ostatecznej reguły, kiedy dobrze jest to robić, a kiedy tego nie robić?


title: Jak skalowalna jest Scala?

text: > **Możliwy duplikat:** > Dlaczego Scala jest bardziej skalowalna niż inne języki? Strona Wikipedii na temat Scali mówi: > Nazwa Scala jest połączeniem „skalowalności” i „języka”, co oznacza, że > jest zaprojektowana tak, aby rozwijać się wraz z wymaganiami użytkowników. Czytałem też, że: > I to jest brudny mały sekret Scali. Scala jest skalowalna tylko w tym sensie, że działa na niezawodnej, wysokowydajnej platformie JVM. a także, że „języki się nie skalują, platformy się skalują”. Jak Scala rośnie wraz z wymaganiami swoich użytkowników? Czy nie jest prawdą, że Scala „naprawdę jest skalowalna”? I jak w wierszu powyżej, czy nie każdy język jest skalowalny?


title: Czy możesz poprawić swoje umiejętności programowania, ucząc się innych paradygmatów językowych?

text: Jeśli tak, czy możesz mi powiedzieć, jak nauka nowego paradygmatu zmieniła twoje podejście do rozwiązywania problemów programistycznych, nawet jeśli problem dotyczy innego paradygmatu/języka/technologii? Będę bardzo wdzięczny, jeśli możesz opowiedzieć mi w konkretny sposób, w jaki sposób Twoje umiejętności programowania w X (np. JAVA/C#/C++) poprawiły się dzięki nauce Y (np.: Scheme/Prolog/Lisp). Ponadto, jakie paradygmaty sugerujesz, pomagając najbardziej zostać dobrym programistą? Moje doświadczenia są tylko ustrukturyzowane – OOP, imperatywne – proceduralne i do pewnego stopnia szablonowe metaprogramowanie, ale moim celem nie jest nauka innego języka, ale raczej nauczenie się różnych podejść do rozwiązywania problemów. Dziękuję!


title: Jak często komentarze są używane w dokumentach XML?

text: Obecnie opracowuję internetowy program do zarządzania XML dla klienta (chociaż mogę go „sprzedać” dla przyszłych klientów). Obecnie czyta dokument XML, konwertuje go na łatwe do zarządzania obiekty JavaScript i ostatecznie wypluwa wcięty, łatwy do odczytania kod XML. **Edycja:** Program byłby używany przez klientów, którzy nie mają ochoty uczyć się języka XML, aby dodawać elementy lub znaczniki, ale ja (lub inny programista XML) mogę używać surowych danych do szybkich zmian bez użycia edytora. Czuję, że zasadniczo jest gotowy do wydania, ale zastanawiam się, czy powinienem pójść o krok dalej i zezwolić na obsługę zapamiętywania (i być może tworzenia) komentarzy przed wygenerowaniem wynikowego XML. Biorąc pod uwagę, że te pliki XML prawdopodobnie nigdy nie zostaną odczytane bez programu, który je zinterpretuje, czy naprawdę powinienem zawracać sobie głowę dodawaniem obsługi komentarzy? Prawdopodobnie będę jedynym przeglądającym surowe pliki, a i tak zwykle nie używam komentarzy do XML-a. Czy komentarze są wspólne/ważne w większości dokumentów XML?


title: Nauka programowania, sugestie dotyczące mapy drogowej

text: Najpierw trochę tła: jestem nowy w programowaniu i odkryłem to dość późno w życiu; Jak wielu hobbystów, moje wprowadzenie do tematu odbyło się poprzez PHP/jQuery (tak, znam panujący tu nastrój... one-nie-prawdziwe-języki-programowania ;-) ). Lubię wierzyć, że jestem dość kompetentny w tym, co robię w moim innym życiu, a to rozwijające się uzależnienie od kodowania odbiło się ** bardzo ** na moich perspektywach zawodowych. Oto pytanie: * Jakie języki programowania dalej? (Nie ma planów porzucenia PHP w najbliższej przyszłości, co będzie wiązało się z przepisaniem dużej części mojego kodu.) * Jakieś absolutnie niezbędne książki, które muszę przeczytać? * Czy konieczne jest zapisanie się na kurs w college'u/uniwersytecie? * Czy muszę porzucić inny zawód, aby kontynuować poważną naukę? Moje cele to: * Rozwijanie solidnego zrozumienia nauki i sztuki programowania. * Kontynuuj pracę nad własną aplikacją internetową. (Najbardziej odpowiada mi nauka w ręce).


title: Czy ogólne podejście do metody celu-c powoduje, że podejście projektowe typu „wiele małych metod” jest niewskazane?

text: Generalnie wolę używać małych metod, zalecanych m.in. przez Boba Martina w _Clean Code_. Czytałem również wystarczająco dużo o wewnętrznych elementach Objective-C, aby mieć przynajmniej jakieś pojęcie o tym, jak działa wysyłanie wiadomości (seria bbums jest na ten temat szczególnie pouczająca). Niezależnie od obaw związanych z przedwczesną optymalizacją, chciałbym wiedzieć, czy cała ta praca, którą Objective-c wykonuje z objc_msgSend, jest w praktyce wystarczająco znacząca, aby podejście „wiele małych metod” było niewskazane w przypadku projektów Objective-C. Szczególnie mile widziane są ustalenia empiryczne (może kiedyś sam zorganizuję test). Doświadczenie od każdego, kto napisał duże projekty typu Object-C, również byłoby wspaniałe. _Wyjaśnienie_ Ogólny ton pytania jest zamierzony. Nie pytam o dostrajanie wydajności konkretnych aplikacji (dlatego pytam tutaj, a nie na SO), ale bardziej o to, czy cechy języka Objective-C zniechęcają do określonego podejścia projektowego. Zauważyłem, że większość kodu, który widziałem od Apple i innych stron (na githubie itp.) Ma tendencję do dużych metod (i klas) i zastanawiam się, czy jest to błąd, który wkradł się z powodu języka samo. Oczywiście mogłem odczytać niewłaściwy kod lub może to raczej kulturowe niż techniczne czynniki, które doprowadziły do tendencji, jeśli taka istnieje. (Co to jest warte, obecnie piszę Cel-C i używam małych metod) _Dalsza prośba_ Zgadzam się z obydwoma udzielonymi odpowiedziami. Jeszcze jedną rzeczą, którą chciałbym, aby ktoś wskazał mi (mam nadzieję, że istotną) bazę kodu Objective-C o otwartym kodzie źródłowym (lub w inny sposób widoczną), która używa ładnych krótkich metod (i małych klas). Nie widziałem jeszcze nic w Objective-C do porównania z (na przykład) źródłem fitnesse.


title: Jak zarabiać na małym narzędziu open source?

text: Mam pomysł na mały program użytkowy, o którym nikt wcześniej nie pomyślał. Nie mam pojęcia, jaki byłby na to popyt, ale jestem pewien, że byłoby to 0, gdyby trzeba było za to zapłacić. A ja lubię opensource. :) To powiedziawszy, nadal byłoby miło dostać kilka euro za mój wysiłek. Jak to zrobić? Moim pierwszym pomysłem było umieszczenie w programie nienachalnych reklam (gdzieś z boku), ale nie mogę znaleźć żadnych programów reklamowych, które pozwoliłyby umieścić reklamy w aplikacjach Win32. Google AdSense z pewnością tego zabrania. Oczywiście przycisk „Przekaż darowiznę” zawsze się przydaje i myślę, że go zrobię, ale wątpię, aby wiele osób i tak chciało coś przekazać. Jakieś inne pomysły?


title: Jakie jest dobre środowisko do nauki?

text: Mam wrażenie, że ostatnio jako programista niewiele się poprawiłem. Być może nauczyłem się trochę o niektórych technologiach i zdobyłem trochę wiedzy dziedzinowej, ale to niewiele. W zakresie ogólnych umiejętności programowania nauczyłem się bardzo niewiele. Nie poprawiłem się w czytaniu starszego kodu. Nadal z tym walczę. Moje umiejętności projektowe nie uległy poprawie. Trudno mi podejmować decyzje projektowe. Mam ograniczone doświadczenie w różnych miejscach pracy, więc pytam, jak bardzo środowisko pracy wpływa na naukę i na co konkretnie się w nim znajduje? Sądzę, że są rzeczy, które wpływają na motywację do nauki, ale także rzeczy, które umożliwiają naukę. Proszę podziel się swoimi doświadczeniami.


title: Czy możemy założyć, że wszyscy użytkownicy mają dziś dostęp do Internetu?

text: Ponieważ Internet jest dość wszechobecny, czy jako programiści możemy zakładać, że wszyscy użytkownicy mają dostęp do Internetu? Teraz nie mam na myśli, że kod jest napisany w taki sposób, że jeśli nie ma połączenia to cały program się zawiesza z powodu braku kodu błędu. Chodzi mi o to, czy dzisiejsze programy można rozwijać przy założeniu, że ich użytkownicy zawsze będą mieli dostęp do Internetu? Możesz zapytać "Co zyskujemy zakładając to?" Pytam dlatego, że na uniwersytecie używamy sporo programów, które wymagają dostępu do Internetu ze względu na sposób, w jaki sprawdzają licencje (sprawdza twój adres IP - jeśli to nie jest adres w kampusie, to jesteś nie wolno go używać). Zwróć uwagę, że sam program powinien działać poprawnie bez dostępu do Internetu; wystarczy tylko do sprawdzenia licencji. **EDYTUJ:** Mówię tutaj o aplikacjach komputerowych. **EDIT2:** Z niektórych odpowiedzi mam wrażenie, że jestem oskarżony o wykorzystywanie użytkowników w nieetyczny sposób. _Nie_ popieram tego, co opisałem w tym pytaniu - pytam tylko o to, ponieważ zrobili to twórcy niektórych programów, których używamy na uniwersytecie. Osobiście uważam, że robienie tego jest głupie i złe.


title: Jakie są różnice między programistą a webmasterem?

text: Myślałem, że są „takie same”, ale teraz zdaję sobie sprawę, że tak nie jest (dwie różne witryny w stackexchange). Jednak nie znam różnic, co robi webmaster (a czego nie) i to samo dla programisty (albo programisty czy programisty?)


title: Jak radzić sobie z konfliktami kluczy szyfrowania podczas synchronizacji danych?

text: Załóżmy, że istnieją dane, które są synchronizowane między kilkoma urządzeniami. Dane są chronione algorytmem szyfrowania symetrycznego i kluczem. Klucz jest przechowywany na każdym urządzeniu i zaszyfrowany hasłem. Gdy użytkownik zmieni hasło, tylko klucz zostanie ponownie zaszyfrowany. W normalnych okolicznościach, gdy połączenie sieciowe z innymi równorzędnymi jest dobre, bieżący klucz jest synchronizowany, a wszystkie dane na nowym urządzeniu są szyfrowane tym samym kluczem. Ale jak radzić sobie w sytuacjach, gdy nowe urządzenie nie ma połączenia sieciowego i np.? tworzy własny nowy, ale niezgodny klucz? Jak w takich okolicznościach utrzymać jak najwyższą użyteczność? 1. Aplikacja może wykryć brak sieci i odmówić uruchomienia. Moim zdaniem jest to bardzo zła użyteczność, ponieważ w tym przypadku aplikacja w ogóle nie działa. Nie uważam tego za rozwiązanie. 2. Aplikacja może zignorować brakujące połączenie sieciowe i utworzyć nowy klucz. Ale co zrobić, gdy aplikacja połączy się z siecią? Będzie kilka niezgodnych kluczy, a niektóre części podstawowych danych mogą być szyfrowane tylko jednym kluczem, a inne części innym kluczem. 3. Sytuacja pogorszyłaby się, gdyby kluczy było więcej niż tylko dwa i aplikacja musiałaby za każdym razem prosić o hasło, gdy potrzebny byłby inny obiekt, który powinien zostać odszyfrowany innym kluczem. 4. Próba ponownego zaszyfrowania wszystkich danych zaszyfrowanych innym kluczem z kluczem _main_ jest bardzo kłopotliwa i czasochłonna. Jaki powinien być w ogóle główny klucz w tym przypadku? Najstarszy klucz? Klucz z najbardziej zaszyfrowanymi obiektami? Co się stanie, jeśli klucz zostanie zsynchronizowany, ale nie wszystkie obiekty zaszyfrowane tym konkretnym kluczem? Skąd użytkownik powinien wiedzieć, o jakie konkretne hasło pyta aplikacja i dlaczego ponowne zaszyfrowanie danych trwa prawdopodobnie bardzo długo? Bardzo trudno jest opisać użytkownikom „problemy” z szyfrowaniem. Jak dotąd nie znalazłem akceptowalnego rozwiązania ani jakiejś ogólnej strategii. Czy masz jakieś wskazówki dotyczące konkretnej strategii lub jakieś książki/artykuły opisujące synchronizację symetrycznie zaszyfrowanych danych z kluczami, które mogą powodować konflikty?


title: Dlaczego chronione elementy członkowskie zostały udostępnione klasom tego samego pakietu w Javie?

text: Z oficjalnej dokumentacji... Modyfikator Klasa Pakiet Podklasa Świat publiczny T T T T chroniony T T T N bez modyfikatora T T N N prywatny T N N N Rzecz w tym, że nie pamiętam przypadku użycia, w którym musiałem uzyskać dostęp do chronionych elementów z klasy w tym samym pakiecie. Jakie były przyczyny tego wdrożenia? **Edycja:** Aby wyjaśnić, szukam konkretnego przypadku użycia, w którym zarówno podklasa, jak i klasa w tym samym pakiecie muszą uzyskać dostęp do chronionego pola lub metody. pakiet jakiś.pakiet; public class A { protected void protectedMethod(){ //zrób coś}} pakiet inny.pakiet; public class B extends A{ public void someMethod(){ // dostępna, ponieważ B jest podklasą A protectedMethod(); } } pakiet jakiś.pakiet; public class C { public void anotherMethod(){ // dostępny, ponieważ C jest w tym samym pakiecie co A protectedMehtod(); } }


title: Przechwytywanie kontra wstrzykiwanie: decyzja o architekturze ramowej

text: Jest taki framework, który pomagam zaprojektować. Istnieje kilka typowych zadań, które należy wykonać przy użyciu wspólnych komponentów: w szczególności rejestrowanie, buforowanie i zgłaszanie zdarzeń. Nie jestem pewien, czy lepiej używać wstrzykiwania zależności i wprowadzać wszystkie te komponenty do każdej usługi (na przykład jako właściwości), czy powinienem umieścić jakieś metadane nad każdą metodą moich usług i używać przechwytywania do wykonywania tych typowych zadań ? Oto przykład obu: **Injection:** public class MyService { public ILoggingService Logger{get;set;} public IEventBroker EventBroker{get;set;} public ICacheService Cache{get;set;} public void DoCoś() { Logger .Log(mojaWiadomość); EventBroker.Publikuj<EventType>(); Cache.Add(mójObiekt); } } a oto inna wersja: **Przechwytywanie:** public class MyService { [Log("Moja wiadomość")] [PublishEvent(typeof(EventType))] public void DoSomething() { } } Oto moje pytania: 1 Jakie rozwiązanie jest najlepsze dla skomplikowanego frameworka? 2. Jeśli przechwycenie wygrywa, jakie mam opcje interakcji z wewnętrznymi wartościami metody (na przykład do użycia z usługą pamięci podręcznej?)? czy mogę użyć innych sposobów, a nie atrybutów, aby zaimplementować to zachowanie? 3. A może istnieją inne rozwiązania problemu?


title: porównanie zmiennej bez znaku do 0

text: Kiedy wykonuję następującą pętlę: unsigned m; for( m = 10; m >= 0; --m ){ printf("%d\n",m); } pętla nie zatrzymuje się na m==0, wykonuje się w nieskończoność, więc pomyślałem, że powodem było to, że nie można porównać unsigned z 0. Ale kiedy wykonałem następujący test unsigned m=9; if(m >= 0) printf("m jest dodatnie\n"); else printf("m jest ujemne\n"); Otrzymałem następujący wynik: m jest dodatnie, co oznacza, że zmienna m bez znaku została pomyślnie porównana z 0. Dlaczego porównanie m do 0 nie działa w pętli for i działa dobrze w innych miejscach?


title: Czy powinienem używać zagnieżdżonych macierzy lub słowników?

text: Jak na Czy powinienem zadać pytanie, jakiej struktury danych użyć tutaj? Pytam o to tutaj. Mam nadzieję, że nie jest to zbyt specyficzne dla implementacji. Obecnie pracuję nad programem, który będzie przedstawiał struktury chemiczne (i docelowo pozwalał na ich manipulacje/reakcje). Wymieszałem dwa różne systemy przechowywania tych danych, ale nie jestem pewien, jak wybrać który. # Opcja 1: Matryce zagnieżdżone Substancje chemiczne mają (mniej więcej) określoną strukturę i względne pozycje przedmiotów i wydaje się, że łatwiej byłoby coś takiego przedstawić za pomocą macierzy - wtedy mogę przypisać określone 'współrzędne' każdemu atomowi lub obligacji. Niestety, kończy się to pewnym zachodzeniem na siebie, jeśli masz strukturę, która trochę się rozgałęzia. Aby rozwiązać ten problem, opracowałem rozwiązanie wykorzystujące zagnieżdżone macierze 5x5. [[Brak, Brak, [CH3], Brak, Brak ], [Brak, Brak, Bond, Brak, Brak ], [[CH3], Bond, C, Bond, [CH3]], [Brak, Brak, Bond, Brak, Brak ], [Brak, Brak, [CH3], Brak, Brak ]] Tutaj `C` reprezentuje pierwiastek węgiel (można to przedstawić na kilka różnych sposobów i nie jest tutaj szczególnie istotne). `Bond` reprezentuje wiązanie, a `[CH3]` reprezentuje kolejną macierz 5x5. To jest najwyższy (`[0][2]`) `CH3` [[Brak, Brak, H, Brak, Brak], [Brak, Brak, Wiązanie, Brak, Brak], [H, Wiązanie, C, Wiązanie , H ], [Brak, Brak, Wiązanie, Brak, Brak], [Brak, Brak, Korzeń, Brak, Brak]] Tutaj najniższy `Więź` jest odniesieniem do tego samego obiektu, co najwyższy `Więź` w pierwszym struktura, podczas gdy `Root` jest (jakiś nieokreślonym) sposobem odniesienia, że to jest miejsce, w którym macierz łączy się z wyższym poziomem. Gdyby była to bardziej złożona struktura, jedno z „H” zostałoby zastąpione inną macierzą, taką jak dodatkowa „[CH3]”. **Zalety tej metody:** * Wszystko jest jasno określone, łącznie ze strukturą, która jest dobra według The Zen of Python. * Gdy te chemikalia zostaną (ostatecznie) przedstawione graficznie, znacznie łatwiej (teoretycznie) będzie upewnienie się, że wszystko jest na swoim miejscu **Wady:** * Nie jest to w ogóle czytelne, jeśli masz bardziej złożoną strukturę * To jest zagnieżdżone, nie płaskie * To będzie wymagało dużo rekurencji, aby przejść przez # Opcja 2: Słowniki Innym sposobem, w jaki mógłbym je przedstawić ze znacznie mniejszym zagnieżdżeniem i lepszą czytelnością, byłoby użycie słowników. Każda cząsteczka byłaby kluczem w słowniku `{Molekuła1 : Dane, Molekuła2 : Dane}` a dane byłyby słownikami oraz `Atomami: Dane, Wiązania: Dane`. Wymaga to nieco mniej zagnieżdżenia, ale wymagałoby trochę więcej pracy, gdy w końcu chcę je wyświetlić. # Końcowe myśli Zanim zadałem to pytanie, a właściwie podczas pisania, byłem dość nastawiony na słowniki. Wydaje się, że jest to czystsza i łatwiejsza metoda przechowywania tych danych, która nie wymaga wymyślania naprawdę paskudnej rekurencyjnej techniki przechodzenia przez cząsteczkę. Nie zdziwiłbym się jednak, gdybym coś przeoczył, dlatego tutaj pytam. Jeśli wydaje się to zbyt specyficzne dla implementacji, daj mi znać, co Twoim zdaniem powinienem zmienić, a zrobię co w mojej mocy, aby uczynić to bardziej ogólnym


title: Jak ustawić limit czasu gry?

text: Uczę się teraz wielowątkowości i timera w C#. Ale wygląda na to, że nie mogę znaleźć dobrego rozwiązania. Na przykład chciałbym zobaczyć, ile dodatkowych problemów mogę rozwiązać w ciągu 1 minuty. Chciałbym, aby mój program miał 1. Cyfrowy zegar odliczający 60 sekund na górze mojej konsoli. 2. Wydrukuj problem matematyczny na środku mojej konsoli, poczekaj na moje dane wejściowe. 3. Po 60 sekundach natychmiast przerwij zadania matematyczne (w większości przypadków nadal czeka na moje dane, ale natychmiast je zatrzymamy). 4. Policz, ile poprawnych problemów rozwiązałem. Teraz dwa wyzwania programu. a) w jaki sposób możemy upewnić się, że czas drukowania i problem matematyczny nie zepsują. b) jak możemy zatrzymać część wyzwań matematycznych natychmiast po upływie czasu?


title: Jakie są najważniejsze umiejętności OO, którymi należy się pochwalić w poszukiwaniu pracy?

text: Szukam nowego zatrudnienia i znalazłem stanowisko, w którym poproszono mnie o stworzenie próbki programistycznej na podstawie zlecenia. Pewnej nocy wysadziłem próbkę, próbując zrobić to szybko, i odmówiłem - tylko po to, by niedawno dać drugą szansę. Obawiałem się, że tak naprawdę nie demonstrowałem wiedzy zorientowanej obiektowo. Przemyślałem swoje podejście, ale uważam, że warto zapytać: gdybyś zatrudniał kogoś na stanowisko OO, jakie umiejętności najbardziej chciałbyś, aby pokazał, że ma mocne zrozumienie? Chcę mieć pewność, że tym razem brakuje mi czegoś ważnego.


title: Jak trudno byłoby przeprowadzić migrację aplikacji Struts/JSP do Groovy?

text: Przejąłem rozwój aplikacji JSP/Struts. W tej chwili jest trochę bałaganu i uważam, że strony JSP z tagami Struts są niesamowicie szczegółowe. Czy ktoś przeprowadził migrację aplikacji Struts do Groovy/Grails? Czy można to robić stopniowo, strona po stronie? @4bu3li: Myślałem o zastąpieniu stron JSP jeden po drugim kodem Groovy HTML builder. Tagi rozpórek IMO to arcydzieło gadatliwości i zaciemniania, a ja mam dość dopasowywania tagów otwierających i zamykających. W tej chwili zespół to tylko ja i jeszcze jeden facet, a ja znam Groovy'ego lepiej niż JSP i Struts. Przerabiamy całą stronę, więc wszystko zostanie jakoś przepisane. Ale nie mogę zatrzymać konserwacji, więc muszę ją stopniowo przepisywać strona po stronie. Czy mogę po prostu zacząć przerabiać metody akcji Struts, aby zwrócić zawartość wygenerowaną przez Groovy?


title: Czy procesy mojego zespołu wymknęły się spod kontroli?

text: Jestem liderem zespołu programistów (niedawno przejąłem kontrolę nad nowym zespołem) i ostatecznie odpowiadam za utrzymanie wysokiej produktywności, dobrej jakości i uporządkowanych priorytetów. W moim zespole jest 6 starszych programistów, ale tutaj panuje bałagan. Sytuacja jest taka, że mam do czynienia z zapytaniami JIRA z około 10 różnych punktów kontaktowych w naszej firmie i wszystkie reprezentują różne jednostki biznesowe lub klientów. Problem, jaki mam, polega na tym, że moja praca polega głównie na gaszeniu pożarów przez cały dzień i upewnianiu się, że problemy wszystkich są rozwiązywane. Niestety, kultura w naszej firmie była wysoka produktywność (szybkie wydania), ale niska jakość (błędy produkcyjne), a nasi klienci nie zaakceptują nagłego opóźnienia w wynikach. Jakie są dobre sposoby radzenia sobie z tym? Mam mnóstwo teorii, ale szukam odpowiedzi od kogoś, kto faktycznie ma doświadczenie w pracy w takiej sytuacji jak moja. Oto krótka lista tego, jak to działa: * Każdy programista jest odpowiedzialny za określoną aplikację i usługi z nią współpracujące; * Wersje są zazwyczaj testowane przez klienta na symulowanym serwerze produkcyjnym, a następnie wdrażane na aktywnym serwerze; * Z każdej aplikacji korzysta średnio 50-80 osób, łącznie 8 aplikacji. Dziękuję


title: Opracowanie strategii kontroli wersji dla SVN

text: Poza tym zamierzam spróbować wymyślić strategię kontroli wersji dla mojej firmy; obecnie używamy SVN, ale nie ma w nim żadnej struktury - w zasadzie mamy tylko trunk i tylko do tego się zobowiązujemy. Niedawno kierownik ds. rozwoju uruchomił drugie repozytorium, które działa jak nasz „tag”, ale musi być ręcznie połączone z „tułem”, ponieważ nie jest częścią tego samego repozytorium, ale całkowicie oddzielnym. W efekcie istnieje tylko jeden folder o nazwie „Dev” (w różnych terminach są różne foldery „Dev”, ale tylko „Dev” jest głównym) i pod nim jest wszystko inne; wszystkie inne projekty. W ogóle nie jest zorganizowany według projektu, nie ma pojęcia gałęzi/tagu/trunków ani niczego. Osoba, która go założyła (oczywiście dawno już nie ma), wydawała się w ogóle nie wiedzieć, jak skonfigurować SVN i od tego czasu nikt nie zadał sobie trudu, aby nauczyć się robić rzeczy poprawnie z obawy, że coś zepsuje. Nie korzystamy z żadnego CI (ani niestety zautomatyzowanego testowania). Po pierwsze, czy powinniśmy to rozdzielić według projektu? Na przykład mamy: dwie witryny sieci Web ASP.NET (nie aplikacje sieci Web, witryny sieci Web), usługę sieci Web, folder wdrażania dla wszystkich skryptów tabel i procedur składowanych, dwóch klientów wiersza polecenia dla projektów zewnętrznych, które są wywoływane przez Witryny internetowe i folder współdzielony zawierający wspólne obiekty biznesowe i tym podobne. Czy każdy z nich powinien być własnym projektem z ustawieniami branchy/tag/trunk, czy też powinien wyglądać tak: dev/ branchs/ tags/ trunk/ Site1/ Site2/ WebService/ SharedCode/ i mieć wszystkie branche i wszystko ma kopię całego folderu Dev? Takie podejście może być łatwiejsze do przełknięcia, ponieważ często mamy sytuacje, w których musimy wprowadzić zmiany w udostępnionej bibliotece kodu i co najmniej jednej (zazwyczaj obu) witrynach internetowych. Po drugie, wykonujemy regularne wydania (w naszym żargonie „wpychania”) na nasz serwer deweloperski i serwer na żywo. Z tego, co wyczytałem, najlepszym sposobem na poradzenie sobie z tym byłoby to, że cały rozwój idzie do trunk/, gałęzie są "tymczasowe" i używane do dodawania nowej funkcji, która może wpływać na trunk, a tagi są dla wydań? Tak więc, powiedzmy, naciskamy co miesiąc, a ja pracuję nad zupełnie nowym modułem. Rozgałęziłbym trunk i używał tej gałęzi do mojego kodu, pisania i testowania go i tak dalej. Kiedy moduł jest skończony, scaliłbym go z powrotem do trunka (i być może skasował gałąź), a kiedy jesteśmy gotowi do wdrożenia, oznaczymy go (powiedzmy "May2011"). Jeśli mamy poprawkę błędu po jej uruchomieniu, zostanie ona naprawiona w tagu May2011 i włączona do bagażnika (więc bagażnik również otrzyma poprawkę), a następnie May2011 zostanie ponownie wypchnięty z poprawką? Czy to jest intencja tagowania?


title: Jak szybko powinienem zaadoptować nową technologię tj. nowe wersje .NET, nowe wersje VS itp.?

text: Nigdy nie jestem pewien, jak szybko powinienem wdrażać nową technologię. Często po prostu nie robię tego, dopóki nie jest taka potrzeba ze strony klienta lub mam nowy projekt, który ułatwia rozpoczęcie z nową wersją. Jak często inni adoptują nową technologię? Czy jest powód, aby od razu wskoczyć? Czy istnieje dobry powód, aby tego nie robić? Czy istnieją jakieś dobre zasady lub wytyczne? Podejścia?


title: Algorytm do generowania N liczb losowych między A i B, które sumują się do X

text: Ten problem wydawał się być czymś, co powinno być rozwiązane za pomocą kilku linijek kodu. Niestety, kiedy zacząłem to pisać, zdałem sobie sprawę, że nie jest to takie proste, jak się wydaje. Potrzebuję zestawu X liczb losowych, z których każda znajduje się między A i B i wszystkie sumują się do X. Dokładne zmienne dotyczące problemu, z którym się borykam, wydają się jeszcze prostsze: potrzebuję 5 liczb, między - 1 i 1 (uwaga: są to liczby wymierne (zmiennoprzecinkowe), które sumują się do 1. Moje początkowe podejście „kilka linii kodu, powinno być łatwe” polegało na losowaniu 4 liczb od -1 do 1 (co jest dość proste ), a następnie zrób ostatnią `1-(suma poprzednich liczb)`. Szybko okazało się to błędne, ponieważ ostatnia liczba mogła równie dobrze być większa niż 1 lub mniejsza niż -1. Jaki byłby najlepszy sposób podejścia do tego problemu? PS. Tylko w celach informacyjnych: używam C#, ale myślę, że to nie ma znaczenia. Właściwie mam problem ze stworzeniem wystarczająco dobrego rozwiązania problemu w mojej głowie. * * * Chciałem również podać moje obecne rozwiązanie problemu, _ale pamiętaj, że jest ono dość niedoskonałe i zostało stworzone jako szybka naprawa początkowego problemu_! * Wygeneruj 4 losowe liczby od -1 do 1 * Utwórz „końcową” liczbę `X=SUM(previousNumbers)` * Jeśli końcowa liczba to >1 lub <-1, to: * Uzyskaj „kwotę” powyżej 1 / poniżej -1 i ustaw ostatnią liczbę jako 1 / -1 * Znajdź inną liczbę, która może przyjąć tę kwotę i nadal w nawiasach * Jeśli żadna liczba nie może przyjąć kwoty (jest za duża / za mała), podziel kwotę na pół i spróbuj ponownie dla każdej połowy * Losuj kolejnośćwygenerowanych liczb i zwróćje Działa to w tym sensieże ten algorytm generuje 5 liczb z przedziału od -1 do 1 a ich suma wynosi 1. Jednak wadą jest to, że dość często jedna z wygenerowanych liczb liczby to 1 (lub -1), co nie wydaje się zbyt przypadkowe.


title: Który interfejs API jest lepszy: table.add_row() czy table.rows.add()?

text: Piszę bibliotekę do tworzenia i manipulowania plikami Word .docx w Pythonie. Ogólnie biorąc, przy projektowaniu API mam duży wpływ na Microsoft VBA/C# API dla Worda, dochodząc do wniosku, że poświęcili mu dużo więcej przemyśleń, niż kiedykolwiek będę w stanie. Kilka razy znalazłem mądrość w zaprojektowaniu tego w taki sposób, w jaki oni to robili dopiero po tym, jak zaszedłem znacznie dalej. Tabela ma właściwości `.rows` i `.columns`, z których każda jest sekwencją odpowiednio instancji `Row` i `Column` w tabeli. W MS API metody dodawania nowego to `Table.rows.add()` i `Table.columns.add()`. Jestem skłonny wierzyć, że jest to bardziej skomplikowane niż to konieczne, co utrudnia naukę mojego API dla początkujących, nie przynosząc żadnych korzyści. Myślę, że lepiej pasowałyby `Table.add_row()` i `Table.add_column()`. Tak się składa, że upraszcza to również nieco kod; to nie jest motywator, tylko obserwacja, która, jak się zastanawiam, może próbować mi coś powiedzieć. Czy istnieje argument za preferowaniem tego pierwszego?


title: Rozważania dotyczące opracowania systemu na dużą skalę, który musi być zarówno tradycyjny, jak i dostępny w sieci, jak i na urządzeniach mobilnych

text: Staram się rozpocząć planowanie systemu, który będzie zarówno zarządzaniem klientami, jak i dokumentami, z wbudowanymi narzędziami do analizy wszystkich transakcji itp. Zastanawiam się, na jakie względy muszę zwracać uwagę początkowe etapy, aby kiedy muszę zwiększyć skalę, na początku nie strzeliłem sobie w stopę. Muszę również upewnić się, że jest dostępny mobilnie, a nie tylko w tradycyjnej sieci. Nigdy nie robiłem takiego systemu na dużą skalę i mam wystarczająco dużo czasu na planowanie, więc wszelkie sugestie są mile widziane. **Edytuj** Muszę również upewnić się, że obsługa danych będzie bezpieczna, ponieważ byłyby to wrażliwe dane klienta.


title: Jak zaprojektować bazę danych zawierającą wiele powiązanych ze sobą podmiotów?

text: Projektuję nowy system, który jest bardziej systemem pomocy dla podstawowych aplikacji w bankach lub sektorze opieki zdrowotnej. Biorąc pod uwagę naturę systemu, nie jest to system mocno zorientowany na transakcje, ale bardziej intensywnie czytający. Teraz w tej aplikacji mam wiele podmiotów, które są ze sobą powiązane. Dla m.in. Załóżmy następujące podmioty w systemie 1. Użytkownik 2. Szkolenie 3. Regulamin Teraz każdy z tych podmiotów ma ze sobą Relację M:N. Zakładając użycie standardowego RDBMS, projekt może obejmować wiele tabel relacji, z których każda zawiera relacje z jedną inną jednostką („User_Training”, „User_Regulations”, „Training_Regulations”). Ten projekt jest ograniczony, ponieważ mam więcej niż 3 jednostki w systemie i utrzymanie wykresu relacji jest w ten sposób trudne. Najczęściej stosowaną operacją jest „dane encji podaj mi wszystkie powiązane encje” . Muszę zaprojektować bazę danych, w której ta operacja jest stosunkowo tania. Jakie są różne zalecenia dotyczące modelowania tego rodzaju bazy danych.


title: Dlaczego nie można przełączać się między nagłówkiem a cpp w programie Visual Studio?

text: Przez ostatnie osiem lat czekam, aż Microsoft doda podstawową funkcjonalność C++ polegającą na przełączaniu się między plikami .h i .cpp i wciąż mnie zdumiewa, że nadal nie jest obsługiwany w Visual Studio 2010. Czy ktoś wie, dlaczego odmawiają dodać tę istotną funkcję?


title: Ankieta deweloperska jakości kodu

text: Wiem, że zdefiniowanie i/lub zmierzenie jakości kodu jest prawie niemożliwe. Zamiast próbować to zmierzyć, chciałbym przeprowadzić ankietę wśród innych programistów, aby zobaczyć, jak _postrzegają_ aktualną jakość kodu. Chciałbym podkreślić, że zależy mi na opinii każdego dewelopera na temat kodu, a nie na jego statystycznym mierniku. Zastanawiam się nad poproszeniem ich o ocenę kodu w kilku kategoriach, takich jak łatwość utrzymania, spójność i stabilność. Dodatkowo chciałbym ich zapytać, co ich zdaniem idzie dobrze i co ich zdaniem wymaga największej poprawy. Czy jest to skuteczny sposób na poznanie bazy kodu od innych programistów? Czy zadaję właściwe pytania? Czy dostarczy to użytecznych informacji, czy będzie bezużytecznym ćwiczeniem?


title: Jaki język programowania do edycji tekstu?

text: Potrzebuję języka programowania do edycji i przetwarzania tekstu (zastępowanie, formatowanie, wyrażenia regularne, porównywanie ciągów, przetwarzanie tekstu, analiza tekstu itp.). Który język programowania jest mocniejszy i ma więcej funkcji do tego celu? Ponieważ pracuję w PHP do moich projektów internetowych, obecnie używam PHP, ale faktem jest, że PHP jest językiem skryptowym dla aplikacji internetowych; mój obecny projekt jest offline. Jestem ciekawy, czy inne języki programowania, takie jak Perl, Python, C, C++, Java itp., mają więcej funkcjonalności do tego celu i czy warto przesunąć projekt?


title: Godne polecenia lektury o historii programowania?

text: O ile uwielbiam kodować, tak niewiele wiem o historii programowania. Znam kilka nazwisk (Turing, Ritchie, Linus) - ale to wszystko. Z grubsza wiem, co zrobili i trochę mi wstyd. To, a ponieważ chcę wiedzieć więcej, proszę o godne polecenia lektury (czy to książki, e-booki, artykuły, w/e) na ten temat.


title: Jak zarabiać na tworzeniu bibliotek JavaScript?

text: Istnieje wiele bibliotek JavaScript. Dlaczego ludzie je tworzą, jeśli nie dla pieniędzy? Jeśli tak, to w jaki sposób zarabiają na czymś, co każdy może skopiować, skoro źródło kodu jest dostępne publicznie?


title: Dlaczego frameworki xUnit nie pozwalają na równoległe uruchamianie testów?

text: Czy znasz jakiś framework xUnit, który pozwala na równoległe uruchamianie testów, aby wykorzystać wiele rdzeni w dzisiejszej maszynie? Jeśli żaden (lub tak niewielu) tego nie robi, to może jest jakiś powód… Czy to dlatego, że testy są zazwyczaj tak szybkie, że ludzie po prostu nie czują potrzeby ich paralelowania? Czy jest coś głębszego, co uniemożliwia dystrybucję (przynajmniej niektórych) testów w wielu wątkach?


title: Jaka jest różnica między API a SDK?

text: Przeglądałem różne API i SDK, kiedy zdałem sobie sprawę, że tak naprawdę nie potrafię odróżnić czegoś, co nazywa się API i czymś, co nazywa się SDK. Oba są koncepcyjnie sposobem, w jaki program może komunikować się z zasobami dostarczanymi przez inne oprogramowanie i kontrolować je, niezależnie od tego, czy to inne oprogramowanie jest usługą sieciową, aplikacją użytkownika końcowego, usługą systemu operacyjnego lub demonem, czy też jądrem sterownik urządzenia. Jaka jest więc różnica semantyczna między SDK a API?


title: Często zadawane pytania i najlepsze wskazówki dotyczące bazy danych uczenia się?

text: Dla programisty bez wcześniejszego kontaktu z bazami danych 1. Jaka byłaby dobra baza danych do nauki Oracle vs SQLserver vs MySQL vs PostgreSQL? 2. Spotkałem się z wieloma dyskusjami o MySQL i PostgreSQL i szczerze mówiąc nie wiem, od czego zacząć. Czy są one bardzo różne, w tym sensie, że gdyby trzeba było się przełączyć, czy narażenie na jedno byłoby szkodliwe dla uczenia się drugiego? 3. Czy praca z bazami danych w dużym stopniu zależy od platformy? 4. **Co dokładnie ludzie mają na myśli przez programowanie baz danych vs. administracja?** 5. Czy ludzie wybierają bazy danych w oparciu o język programowania używany do tworzonej aplikacji? 6. Ogólnie rzecz biorąc, praca z bazami danych jest domniemana, że pracujemy z jakimś serwerem? 7. Czy wybór baz danych jest inny, jeśli chodzi o tworzenie gier? Jeśli tak, jakimi czynnikami się różni? 8. Jakie są najlepsze wskazówki, które okazały się przydatne podczas nauki baz danych Edycja: Niektóre FAQ, które miałem i znalazłem to samo w SO 1. Co każdy programista powinien wiedzieć o bazach danych? 2. Która baza danych, jeśli uczysz się od zera w 2010 roku? 3. Dla początkujących, czy jest duża różnica między MySQL a PostgreSQL? 4. Jakich RDBMS powinienem się nauczyć/używać? (MySql/SQL Server/Oracle itp.) 5. W jakim stopniu programista powinien uczyć się baz danych? 6. Czym programiści baz danych różnią się od innych programistów? 7. jakiego rodzaju bazy danych są używane w grach?


title: Problemy z wydajnością podczas analizowania kodu

text: Zastanawiałem się nad problemami z wydajnością podczas analizowania pliku źródłowego, który jest edytowany przez użytkownika (na przykład, gdy trzeba podświetlić składnię). Myślę, że najprostszym podejściem jest parsowanie za każdym razem, gdy kod się zmienia, uzyskiwanie wyników i zastępowanie bieżącego kodu podświetlonym. Jednak przy dużych plikach może to stanowić problem. Czy jest na to lepszy sposób? Przypuszczam, że rozwiązaniem może być przeanalizowanie tylko „obszaru”, w którym była ostatnia edycja. Czy to dobry pomysł?


title: Używanie szablonu procesu kompilacji TFS (przepływu pracy) do wdrożenia

text: Myślę o użyciu przepływów pracy TFS Build dla złożonych wdrożeń. Mamy kilka, które mogą wymagać wdrożenia: 1. Aplikacje internetowe i usługi 2. Bazy danych 3. Raporty SSRS 4. Pakiety SSIS 5. Kto wie, co jeszcze Podoba mi się fakt, że mogę nadać przepływowi pracy kilka podstawowych parametrów, takich jak budowa do wdrożenia i po prostu by działał. Potencjalnie niektóre części mogą wymagać zatwierdzenia przez człowieka i wiem, że przepływ pracy również sobie z tym poradzi. Przykładem jest to, że możemy użyć przepływu pracy do utworzenia skryptu zmiany z naszych projektów baz danych programu Visual Studio, ale grupa DBA będzie chciała zatwierdzić skrypt przed jego uruchomieniem. Chciałbym wiedzieć, czy inni używali w tym celu „kompilacji” w przeszłości i jakie problemy zostały znalezione.


title: Podejście do zarządzania wieloma usługami, takimi jak Evernote, Dysk Google, Dropbox w iOS

text: Próbuję wymyślić scenariusz, w którym miałbym trzy różne formy NSData (lub cokolwiek) do wysłania do trzech różnych usług, takich jak Evernote, dysk Google, Dropbox. To prawda, że każdy z nich ma własne pakiety SDK, które można dołączyć do aplikacji na iOS, i to jest w porządku. Teraz chcę utworzyć pojedynczą klasę, która serializuje zarówno wysyłanie, jak i odbieranie danych do iz powyższych usług. Mój umysł zabiera mnie do `singleton`, wspólnej klasy z `NSOperationQueue` u jej podstaw. Okresowo dodawałbym `{send:"this data" do:dropbox}` do `NSOperationBlock` i dodawał go do `singleton`. W dowolnym momencie powiedzmy, że następujące operacje mogą znajdować się w `NSOperationQueue` `singleton`. * `{send:"te dane" do:dropbox}` * `{send:"ten numer" do:evernote}` * `{send:"tego gościa" do:googledrive}` `singleton` musiałby obsłużyć osiągalność internetu, sesje aplikacji itp. Ta klasa byłaby połączona z **Dropbox** , **Evernote** i **GDrive** oraz odpowiednimi pakietami SDK. Tak więc w rzeczywistości jedyną rzeczą, jaką ta klasa zrobiłaby, jest przekazanie danych odpowiednim pakietom SDK, aby same sobie z tym poradziły (co jest jak powiedzenie: obsłuż to i daj mi znać, czy to się udało, czy nie). d naprawdę lubię sugestie / krytykę podejścia, które obieram. Mam niewielkie doświadczenie z `NSOperationQueue`, nie wiem czy dokonuję tutaj właściwych wyborów. Kilka wskazówek dotyczących dobrego wzorca API byłoby naprawdę pomocne. ## AKTUALIZACJA Zasugerowano, abym tworzył wrapper dla każdej usługi. Ale If można podkreślić, że w klasach `Dropbox Wrapper` jest niewiele do zrobienia, ponieważ w iOS wszystko jest obsługiwane w ich własnym SDK. Na przykład **Evernote** rozszerza tylko proste `[ENSession .. uploadNote..]`. Wszystko, co chciałem zrobić, to zserializować moje przesyłanie do jednej globalnej kolejki, a następnie wysłać pojedyncze metody do `Dropbox` lub `Evernote` lub gdziekolwiek. Jeśli załóżmy, że istnieje usługa, która wymaga jakiejś formy obsługi danych, użyłbym _wrapper_ i wysłałby własny wątek. To też dodam do pytania. To jest serializacja i kolejkowanie, które chcę. Brzmi rozsądnie?


title: Zasada Open/Close i ponowne otwarcie klas Ruby

text: W OOP istnieje zasada Open/Closed, która mówi, że > "jednostki programowe (klasy, moduły, funkcje, itp.) powinny być > otwarte na rozszerzenie, ale zamknięte na modyfikację". Biorąc pod uwagę, że w Rubim możliwe jest ponowne otwarcie klasy, nie sądzisz, że to łamie zasadę Open/Closed? Jak myślisz, kiedy powinniśmy faworyzować ponowne otwieranie zajęć zamiast po prostu je przedłużać? Jak myślisz, jakie są pułapki w ponownym otwieraniu zajęć?


title: Chcę zbudować bibliotekę klienta java, od czego mam zacząć?

text: Jestem na drugim kursie Java w szkole i myślę o stworzeniu biblioteki klienta usług internetowych dla jednego z moich projektów. Chciałbym, aby biblioteka mogła wysyłać zapytania do usługi sieciowej MusicBrainz i zwracać obiekt danych lub wyniki wyszukiwania w zależności od zapytania. Czy ktoś ma jakieś rady lub referencje, na które można mi wskazać? W szczególności szukam porady na temat struktury mojego kodu (np. Jak podzielić moje klasy), a także pomocy w zrozumieniu, jak komunikacja powinna płynąć z zewnętrznej aplikacji, mojej biblioteki, usługi sieciowej i z powrotem. Istnieje istniejąca biblioteka klienta java MB, ale staram się nie grzebać w niej. Chcę mieć satysfakcję z budowania klienta od podstaw, a nie tylko kopiowanie/wklejanie kodu i pomysłów z istniejącej aplikacji. **Edytuj:** Żeby było jasne, nie mówię, że chcę uniknąć przeglądania innych bibliotek. Chodziło mi o to, że wiem, że istnieje już biblioteka, która robi to, czego szukam, ale ponieważ jestem w tym całkiem nowy, chcę uniknąć pokusy ślepego kopiowania pomysłów, gdy utknę lub kiedy Nie jestem pewien, w którym kierunku iść. Mając wiele odniesień, mam nadzieję, że będę w lepszej sytuacji, aby wiedzieć, co robić. To, czego szukam, to jakiś przewodnik, którego mogę użyć do zbudowania własnej biblioteki. Nie znalazłem wiele sam, więc pomyślałem, że zamieszczenie pytania tutaj może dać mi kilka pomysłów lub kilka nowych rzeczy do sprawdzenia.


title: NodeJS: Zamrażać zależności przed testowaniem i wdrażaniem? Sprawdź w node_modules?

text: Załóżmy, że masz aplikację NodeJS. Wydanie może składać się z wielu kroków: 1. Testy automatyczne i/lub ręczne 2. Wdrożenie 3. (jeśli coś pójdzie nie tak) Przywrócenie do ostatniej stabilnej wersji Istnieje kilka pożądanych wymagań dotyczących zależności aplikacji: * Po zakończeniu testów , chcesz wdrożyć _dokładnie_ wersję testowaną, z uwzględnieniem wszystkich zależności. * To samo dotyczy wycofywania zmian: chcesz przywrócić nie tylko własny kod, ale także wszystkie zależności zewnętrzne. Moje pytanie dotyczy najlepszych praktyk umożliwiających osiągnięcie tych celów. **Jaki jest zalecany sposób tworzenia migawki wszystkich zależności Twojej aplikacji NodeJS?** Oto trzy opcje, które przychodzą mi do głowy: 1. W tym artykule autor zaleca umieszczenie katalogu `node_modules` pod kontrolą źródeł . (Nie dla wszystkich modułów, ale tylko dla modułów, które zostaną wdrożone.) 2. Jedną z alternatyw, którą ten sam artykuł opisuje jako antywzorców, jest użycie jawnego blokowania wersji. Jego argument wydaje się rozsądny: kiedy blokujesz na przykład Express do określonej wersji, nadal nie możesz kontrolować, czy jedna z jego zależności nie wprowadziła później subtelnego błędu. 3. Po prostu nie przejmuj się i zawsze używaj najnowszej wersji wszystkich zewnętrznych modułów. * * * Moje dotychczasowe przemyślenia (ale nie mam jeszcze dużego doświadczenia z NodeJS): * 3) wydaje się zbyt lekkomyślne. * Mam tendencję do 1), ale nie jestem pewien, gdzie umieścić `node_modules`. Kiedy po prostu sprawdzasz to wraz ze swoim normalnym kodem, obawiam się, że przepływy pracy, takie jak `npm link` do lokalnych modułów, nie będą już działać. Dodatkowo zawsze pojawia się problem irytujących konfliktów scalania.


title: Jak rozwijać najlepsze praktyki jako pojedynczy informatyk w małej firmie?

text: Przez większą część ostatniej dekady pracowałem jako jedyny informatyk w małej firmie. W szczytowym okresie firma zatrudniała około 8 pracowników. Teraz spadło do 4, jeden z nich w niepełnym wymiarze godzin. Tak więc droga jest ciężka - ale biorąc pod uwagę jej rozmiar, zawsze tak było. Lubię pracować z tamtejszymi ludźmi, dlatego nadal tam jestem, a moi pracownicy nigdy nie obwiniali mnie za zły kod ani nic. W pełni wspierają moją pracę. Jednak intensywnie zmagam się z całą ideą „zrób to właściwie”. Przez pierwsze 6 lat pracy tam pracowałem głównie nad naszym autorskim webowym CMSem. Pochodzi z czasów, gdy Ruby On Rails dał ton jako przykład wydajnego stosu aplikacji internetowych lub Wordpress wyznaczający standard blogowania. Sprawdziliśmy wtedy dostępne opcje i uznaliśmy, że nic nie oferuje tego, czego byśmy chcieli, jeśli chodzi o standardy, dostępność i użyteczność (duży błąd z perspektywy czasu, ale takie jest życie). Tak więc (czytaj I) postanowiliśmy stworzyć własny CMS. Kod, który wypuściłem, to po prostu okropne, okropne rzeczy. Został napisany w pośpiechu, ponieważ zawsze nadrabialiśmy zaległości z funkcjami lub pospiesznie dotrzymywaliśmy terminów klienta. Nasz system stał się wolniejszy i nieprzewidywalny, zmiany trudne i tak dalej. Jak można się naprawdę spodziewać. Byłem coraz bardziej sfrustrowany, ponieważ jestem świadomy TDD, refaktoryzacji i tak dalej, ale wydawało mi się, że nigdy nie było na to czasu. Należy również pamiętać, że bycie jedynym informatykiem oznacza również utrzymywanie sieci biurowej, zapewnianie wsparcia dla komputerów stacjonarnych, wsparcie techniczne w pisaniu propozycji i wreszcie utrzymanie naszych serwerów i 50-60 stron internetowych, które działają na nich za pomocą naszego CMS. Rzadko czułem się pewnie, aby chociaż podejść do TDD, ponieważ w pierwszej kolejności JEST on znacznie wolniejszy. To było stałe źródło prawdziwej i naprawdę mam na myśli PRAWDZIWĄ, głęboką frustrację. Wiem, że robię to w zły sposób, ale wydaje się, że nie ma szans na zrobienie tego we właściwy sposób. Może jestem po prostu za słaby, nie ryzykuję. Nie wiem. Ale jak inni poradzili sobie w takiej sytuacji? Często jestem o krok od rzucania ręcznika. Pewnie by się udało, gdyby nie drobny problem konieczności utrzymania rodziny. Przenoszenie miejsc pracy byłoby trudne, ponieważ prawdopodobnie oznaczałoby to przeniesienie krajów (ale to przy okazji). Czasami zastanawiam się, czy ten cały TDD jest czymś, co jest raczej wyjątkiem niż normą. Niedawno przenieśliśmy się do Wordpress, ponieważ nigdy nie będziemy w stanie osiągnąć tej jakości z tylko jednym informatykiem. Po zagłębieniu się w bazę kodu, Wordpress nie wygląda o wiele jaśniej niż to, co zakodowałem, i nie mówmy o wielu wtyczkach. Ale wydaje się to nie mieć znaczenia, ponieważ Wordpress jako platforma jest solidna, dobrze udokumentowana i oczywiście ma znakomitą procedurę kontroli jakości. A odkąd przeniosłem się na Wordpress, większość mojej pracy polega na integracji wtyczek i napisaniu kilku linijek, aby to wszystko połączyć. Tak naprawdę niewiele rozwoju. Co sprawia, że mam jeszcze mniej okazji do naprawdę satysfakcjonującego zwinnego rozwoju. Szczególnie zależy mi na kontaktach z innymi osobami w podobnej do mnie sytuacji. Czy po prostu skreślasz to jako część życia programisty w małym MŚP? Naprawdę straciłem pewność, że potrafię tworzyć oprogramowanie, zamiast po prostu włamywać się do wszystkiego razem. Jak radzisz sobie z tworzeniem najlepszych praktyk w zakresie zwinnego tworzenia stron internetowych, gdy jesteś jedynym członkiem zespołu. EDYCJA: jak dotąd dobre odpowiedzi. Chciałbym usłyszeć od innych, którzy są lub byli w podobnej sytuacji. tzn. pracując jako jedyny informatyk w bardzo małej firmie. Jak radzisz sobie z ciągłymi wymaganiami dotyczącymi spędzania czasu, gdy nikt inny nie może Ci realistycznie pomóc? Dziękuję.


title: Czy klasy użytkowe zawierające tylko statyczne składowe są antywzorcem w C++?

text: Pytanie, gdzie powinienem umieścić funkcje, które nie są związane z klasą, wywołało dyskusję na temat tego, czy w C++ sensowne jest łączenie funkcji użytkowych w klasie, czy po prostu istnienie ich jako wolnych funkcji w przestrzeni nazw. Pochodzę ze środowiska C#, gdzie ta druga opcja nie istnieje, a zatem naturalnie skłaniam się do używania klas statycznych w małym kodzie C++, który piszę. Najwyżej głosowana odpowiedź na to pytanie oraz kilka komentarzy mówi jednak, że należy preferować darmowe funkcje, nawet sugerując, że statyczne klasy były anty-wzorcem. Dlaczego tak jest w C++? Przynajmniej na pierwszy rzut oka statyczne metody w klasie wydają się nie do odróżnienia od wolnych funkcji w przestrzeni nazw. Skąd więc preferencja dla tych ostatnich? Czy byłoby inaczej, gdyby zbiór funkcji użytkowych wymagał wspólnych danych, np. pamięć podręczna, którą można przechowywać w prywatnym polu statycznym?


title: Używanie potęgi 2 liczb do reprezentowania typów

text: Powiedzmy, że mamy pewne wartości, reprezentowane przez potęgę 2: TYPE_1 = 1 TYPE_2 = 2 TYPE_3 = 4 TYPE_4 = 8 ... Muszę przechowywać niektóre z tych typów w jednej wartości. Przykład: aby reprezentować „TYPE_1” za pomocą „TYPE_3”, wartość to „5”. Jaka operacja służy do identyfikowania, że wartość „5” reprezentuje „TYPE_1” z „TYPE_3”?


title: pcre niewrażliwość na wielkość liter: obsługiwać sekwencje specjalne jako surowe bajty?

text: Rozważ następujące wyrażenie regularne (bez Unicode): Przykład:\x04\x05\x41 Załóżmy, że przeszukujesz to wyrażenie bez uwzględniania wielkości liter. Czy spodziewałbyś się, że będzie przeszukiwać końcowe \x41 z uwzględnieniem wielkości liter? Ludzie, których pytam, faktycznie oczekują takiego zachowania. A takie oczekiwania są błędne. Perldoc mówi: > Zauważ, że znak wyrażony jako jeden z tych znaków ucieczki jest uważany za znak > bez specjalnego znaczenia przez silnik regex i będzie pasował do "tak jak jest". Co w zasadzie oznacza, że jeśli znak, którego uciekł jest drukowalny znak niespecjalny, jest to równoznaczne z wpisaniem tego znaku. I tak to się właściwie zachowuje. Jednak jeśli wyrażenie regularne nie uwzględnia wielkości liter, znaki alfabetu mają specjalne znaczenie „ten znak lub ten sam znak w odwrotnej wielkości” i takie specjalne znaczenie nie jest ignorowane w sekwencjach \x. Sekwencje specjalne mają semantykę „surowego bajtu”, ale nie zawsze. Czy wydaje ci się to niezręcznością projektową? Czy istnieje sposób, aby pcre traktowało sekwencje \x jako nieprzetworzone bajty, które ignorują rozróżnianie wielkości liter? Może jako flaga? Jak niestandardowa łatka? Jeśli nie, to jak w ogóle kod silnika pcre można zmodyfikować, aby zapewnić taką funkcjonalność?


title: Czy potrzebujemy danych testowych, czy możemy polegać na testach jednostkowych i testach ręcznych?

text: Obecnie pracujemy nad średnim/dużym projektem PHP/MySQL. Wykonujemy testy jednostkowe za pomocą PHPUnit i QUnit i mamy dwóch pełnoetatowych testerów, którzy ręcznie testują aplikację. Nasze dane testowe (mock) są obecnie tworzone za pomocą skryptów SQL. Mamy problem z utrzymaniem skryptów dla danych testowych. Logika biznesowa jest dość złożona, a jedna „prosta” zmiana w danych testowych często powoduje kilka błędów w aplikacji (które nie są prawdziwymi błędami, tylko produktem nieprawidłowych danych). Stało się to dużym obciążeniem dla całego zespołu, ponieważ ciągle tworzymy i zmieniamy stoły. Naprawdę nie widzę sensu utrzymywania danych testowych w skryptach, ponieważ wszystko można ręcznie dodać w aplikacji w około 5 minut za pomocą interfejsu użytkownika. Nasz PM nie zgadza się z tym i mówi, że posiadanie projektu, którego nie możemy wdrożyć z danymi testowymi, jest złą praktyką. Czy powinniśmy zrezygnować z utrzymywania skryptów z danymi testowymi i pozwolić testerom po prostu przetestować aplikację bez danych? Jaka jest najlepsza praktyka?


title: Podstawy tworzenia witryn mobilnych

text: Jak rozpocząć tworzenie stron internetowych na urządzenia mobilne (w tym telefony)? Znam trochę starego dobrego HTML i JS, ale zastanawiam się, jaki jest nowoczesny sposób. Aby było to konkretne, muszę zaimplementować klienta dla aplikacji korporacyjnej. Pomyśl o pulpicie nawigacyjnym chronionym logowaniem dla menedżerów. Biorąc pod uwagę, że mam tylko podstawową wiedzę i nigdy nie wdrażałem takich aplikacji, co muszę wziąć pod uwagę przy wyborze platformy i technologii? 1. Czy mam przejść na Androida / iPhone'a, HTML & JS lub HTML5? Jakie są ogólne plusy i minusy, które muszę wziąć pod uwagę? 2. Jak mogę przetestować aplikację na Androida na komputerze bez korzystania z telefonu? 3. To samo pytanie o testowanie HTML/JS lub HTML5 (wersja mobilna musi być inna niż desktopowa, a chciałbym zobaczyć dokładnie tak, jakby to był telefon). 4. Jakie zasoby (najlepiej online) polecasz do nauki podstaw? Mam na myśli zwłaszcza HTML i JS: Jaka musi być strona, aby świetnie działała na smartfonach (i nie tylko na komputerach stacjonarnych)? Mam na myśli możliwe usterki interfejsu użytkownika, ograniczoną obsługę niektórych funkcji HTML/JS, rozmiar strony i wszelkie inne ważne szczegóły.


title: Kompozycja pomocnika widoku Zend Framework

text: Przeglądam więc fragment kodu, który jest idealnym kandydatem do wyabstrahowania do pomocnika widoku. Jednak w tej chwili fragment kodu używa dwóch innych pomocników widoku, aby uzyskać ostateczny wygląd. Teraz moje pytanie brzmi, czy jeśli tworzony jest nowy pomocnik widoku, czy zaleca się wstrzyknięcie dwóch już używanych pomocników do tego utworzonego, aby uzyskać potrzebny wynik końcowy? Nie widziałem niczego za lub przeciw, moje początkowe odczucia były takie, że kod prawdopodobnie wymaga refaktoryzacji, ale nie sądzę, że dev będzie na to chętny, więc to, co nakreśliłem, wydawało mi się miłym kompromisem.


title: Nauka tworzenia systemów wbudowanych bez nadzoru

text: W tym roku ukończyłem studia i dostałem swoją pierwszą pracę związaną z programowaniem w C, administracją Linuksem i tworzeniem systemów wbudowanych. Czuję się całkiem zadowolony ze swojej pracy, ale obawiam się, że nie zostanę odnoszącym sukcesy programistą w tej dziedzinie. Jestem teraz samotnym programistą w mojej pracy, a moi koledzy z zespołu są ekspertami od sprzętu, nie ma nikogo, kto by mnie poprowadził lub nauczył mnie sposobów programowania wbudowanego, muszę uczyć się sam. Oto moje pytania. Czy można zostać dobrym programistą systemów wbudowanych, zaczynając od pozycji na poziomie podstawowym bez nadzoru ze strony starszych programistów? Jak mogę nim zostać (może z pomocą forów, kanałów IRC, dobrych podręczników)? Jak długo to zajmie? **AKTUALIZACJA:** Do tej pory otrzymałem kilka pomocnych odpowiedzi, ale zdałem sobie sprawę, że potrzebuję konkretnych wskazówek na ten temat. Oto moje szczegółowe pytania: 1. Jakich dobrych podręczników można używać do nauki programowania wbudowanego? 2. Jakie wyspecjalizowane społeczności internetowe mogą być pomocne dla początkującego programisty wbudowanego (nie licząc ogólnych rzeczy, takich jak Stack Overflow, Reddit i tak dalej)? 3. Jakie są najciekawsze blogi poświęcone rozwojowi systemów wbudowanych?


title: Czy złą praktyką jest posiadanie doświadczenia z antytechnologiami?

text: Miałem tę wątpliwość od dłuższego czasu, zamykając w CV doświadczenie lub znajomość technologii, które są sobie „anty” lub rywalizują w realnym świecie. Dla m.in. - Facet posiadający certyfikat RHCE **i** certyfikat MCSE będzie preferowany lub odrzucany na pierwszy rzut oka? Moim zdaniem - ma doświadczenie z obydwoma technologiami więc wolałbym tego gościa `ale słyszałem że` osoby z takim CV są traktowane jak- nie miały tego w głowie '' Co chcą robić w przyszłość, jakie są ich zainteresowania "itp. itp...


title: Związek między historią użytkownika, funkcją i epopeją?

text: Jako osoba, która wciąż nie jest zwinna, nie jestem pewien, czy w pełni rozumiem związek lub różnicę między historią użytkownika, funkcją i epopeją. Zgodnie z tym pytaniem funkcja jest zbiorem opowiadań. Jedna z odpowiedzi sugeruje, że funkcja jest w rzeczywistości epopeją. Czy funkcje i epopeje są uważane za to samo, co w zasadzie jest zbiorem powiązanych historii użytkowników? Nasz kierownik projektu upiera się, że istnieje hierarchiczna struktura: Epic -> Funkcje -> Historyjki użytkowników ... w zasadzie wszystkie historyjki użytkowników muszą mieścić się w tej strukturze. Dlatego wszystkie historie użytkowników muszą należeć do funkcji parasola, a wszystkie funkcje muszą należeć do epickiej. Dla mnie brzmi to niezręcznie. Czy ktoś może wyjaśnić, w jaki sposób są powiązane historie użytkowników, funkcje i eposy? A może jest artykuł, który wyraźnie przedstawia różnice?


title: Przegląd modelu parsera zorientowanego obiektowo

text: Po raz pierwszy korzystam z Code Review. W tej chwili tworzę aplikację na Androida, a firma, dla której ją rozwijam, ma określony format pliku, który można wykorzystać do nadania zasad formatowania danych tekstowych. Zobacz go jako format tekstu sformatowanego specjalnie stworzony i zaprojektowany do ich użytku. # **Format pliku do pracy** Format pliku był lub przynajmniej jest moim zdaniem przeznaczony do użytku wyłącznie z powodów formatowania i właściwie nie jest zbyt dobrze zaprojektowany do dostępu do danych. Aplikacja na Androida, którą piszę, jest bardzo mocno uzależniona od dostępu do danych, co oznacza, że musiałem zaprojektować inteligentny parser, który jest w stanie przekształcić sformatowany tekst do pewnego rodzaju modelu danych, który nadal może zawierać formatowanie. Typowy plik może składać się z 600 wierszy tekstu o łącznej długości 60000 znaków. I mógłby wyglądać tak: \id sit amet \ide UTF-8 \rem Wersja pliku: 2013-06-18 \rem Copyright 1995-2012 \t Lorem ipsum \h 1 \st Nunc at urna \p \v 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit. \v 2 Zawieszenie ak turpis quis diam swobodam cursus siedzieć poza urną. \pq Vestibulum vulputate \nd dui\nd* Eget pharetra adipiscing. \pq Suspendisse viverra metus quis feugiat rutrum. \v 3 Nunc at urna vehicula, luctus quam convallis, adipiscing metus. \v 4 Integer sit amet neque condimentum, laoreet neque ut, feugiat tellus. \h 2 \v 1 Nam commodo orci et magna eleifend imperdiet. \v 2 Cras a lorem ac nunc interdum lacinia. \v 3 Integer vestibulum mauris i scelerisque lacinia. \st Ut molestie nibh \p \v 4 Duis aliquam \nd diam\nd* nec nisl hendrerit posuere. \v 5 Donec eget sapien id purus sollicitudin mocm non eget arcu. \b \v 6 Fusce auctor justo vitae aliquam luctus. \v 7 Phasellus eget nisl i dui dignissim pharetra. \v 8 Mauris iaculis mi at augue mattis, eu bibendum nunc placerat. Znacznik `\h` i znacznik `\v` są najważniejszymi znacznikami używanymi do identyfikacji danych za pomocą liczby całkowitej znajdującej się za nimi. Inni twórcy są w większości nieistotni (jak znaczniki `\id, \ide, \rem`), a niektórzy jak `\pq` są używane do dołączania ich danych do wiersza powyżej, ale z pewnym zastosowanym formatowaniem. Niektóre znaczniki są „w tekście”, jak znacznik `\nd`. Oczywiście istnieje wiele zasad dotyczących używania tagów w poprawnym pliku, ale myślę, że jest to całkowicie nieistotne dla recenzji. (A może jest ktoś, kto chce przeczytać 90 stron?) # **Struktura parsera** Więc wymyśliłem następujący (obiektowy) model parsowania: Parser musi być: * ** Potrafi oddzielić dane od FORMATOWANIE** * Szybko * oddziel dane i formatowanie, aby oba były łatwo dostępne * Możliwość parsowania podzbioru danych lub określonego zakresu danych z pliku Wybór danych jest często określany jako: Plik - Poziom - Pod- level(rzeczywiste dane) Gdzie `plik` jest tylko plikiem do przeanalizowania, `poziom` jest liczbą całkowitą, którą można znaleźć w pliku za pomocą znacznika `\h` i `Podpoziomu`, podobnie jak Poziom z ` \v` ekspres. Napisany przeze mnie parser zwraca obiekt, który przechowuje dwie listy - jedną z całym formatowaniem i drugą ze wszystkimi danymi. public class ParseResult { protected ArrayList<FileData> danych = new ArrayList<FileData>(); protected ArrayList<FileFormat> format = new ArrayList<FileFormat>(); } Obiekt `FileData` i obiekt `FileFormat` można rozszerzyć, aby utworzyć wiele różnych formatów i obiektów danych. Oto struktura, której użyłem w parserze, który napisałem: Dla danych: FileData -FileDataLocation extends FileData -FileDataText extends FileDataLocation -FileDataThing extends FileDataLocation -FileDataAnotherThing extends FileData Formatowanie: FileFormat -FileFormatLevel extends FileFormat -FileFormatTitle extends FileFormatial -FileFormat extends FileFormat Aby użyć danych z przeanalizowanego pliku, używam danych `ArrayList`. Aby wydrukować sformatowane dane, przechodzę przez pętlę przez format `ArrayList`, który jest posortowany tak, aby początek pliku znajdował się na indeksie 0 listy, a koniec analizowanego pliku był ostatnim indeksem listy. **Każdy obiekt formatujący ma odniesienie do obiektu danych na liście danych. Dzięki temu podczas korzystania z obiektów formatujących dane są zawsze dostępne. Obiekty formatujące przechowują tylko informację, do jakiego pokoju danych należy zastosować format i jakiego rodzaju formatowania.** # **Metoda parsowania** Podczas parsowania pliku parser odczytuje plik wiersz po wierszu i stale śledzi ` \h` i `\v` i rozpoczyna przechwytywanie danych w obiekcie `ParseResult` po znalezieniu określonej kombinacji znaczników (nazwijmy to lokalizacją). Aby sprawdzić, z jakim typem znacznika ma do czynienia parser, skanuję linię, aż znajdę pierwszą białą spację. Po znalezieniu odstępu można utworzyć podłańcuch od początku wiersza do lokalizacji odstępu. Porównanie podciągu z listą znanych twórców mówi parserowi, co ma zrobić z linią. Po znalezieniu znacznika linia jest przetwarzana za pomocą wyrażenia regularnego. To jest przykładowe wyrażenie regularne dla linii ze znacznikiem `\v`: \v\s(([0-9]{1,3})(?:-([0-9]{1,3})) ?)\s{1}(.+)[\n\r$]* # **Recenzja?** Wydajność parsera wcale nie jest zła, przetworzenie największych plików zajmuje około 600ms (9000 linii, 280000 znaków). Co chciałbym wiedzieć * Dane są teraz (po parsowaniu) przechowywane tylko na liście, wyszukiwanie określonego pokoju danych nie jest zbyt dobrze zoptymalizowane. Czy istnieją inne struktury, których mógłbym użyć, które mogę przeszukiwać za pomocą `file(string) - level(integer) - sub-level(integer)`, aby szybko uzyskać określony obiekt danych. * Przechodząc przez listę formatowania muszę sprawdzić, do jakiej instancji należy obiekt, a następnie rzutować obiekt, aby móc korzystać z określonych metod i funkcji. Czy istnieje lepsza, inna, alternatywna metoda? * Format pliku jest dość prosty, czy powinienem rozważyć usunięcie wszystkich funkcji wyrażeń regularnych i przeanalizować je w całości za pomocą zwykłego kodu?


title: Czy ktoś może mi pomóc w stworzeniu dynamicznego programistycznego rozwiązania tego problemu?

text: Mam kilka nazw funkcji, które są przypisane do niektórych węzłów. Muszę zdecydować, które funkcje przenieść do innych węzłów, aby zwiększyć prędkość. Dlaczego muszę przenieść funkcje do innych węzłów? Jeśli funkcje komunikujące się znajdują się w tych samych węzłach, zajmują mniej czasu w porównaniu do sytuacji, gdy funkcje komunikujące się znajdują się w różnych węzłach. Funkcja może komunikować się z kilkoma funkcjami (wszystkie mogą znajdować się w różnych węzłach). Pytanie brzmi, do którego węzła mam go przenieść, aby zmaksymalizować globalną wydajność. Potrzebuję znaleźć globalnie optymalne rozwiązanie za pomocą programowania dynamicznego. Mam następujące informacje 1. Całkowita wartość ilości danych przesyłanych między funkcjami 2. Czas potrzebny na przesłanie danych między węzłami. Początkowo wszystkie funkcje zostały przypisane do niektórych węzłów. Czy ktoś może mi pomóc w zmapowaniu tego problemu do algorytmu harmonogramowania linii produkcyjnej (programowanie dynamiczne) lub w stworzeniu innego dynamicznego rozwiązania tego problemu? Twardą metryką jest czas wykonania całego programu. Niezależny czas działania funkcji jest obliczany przez dowolny timer API (już go mamy). Jej (funkcji) rzeczywisty czas działania byłby równy jej niezależnemu czasowi działania + czas działania wszystkich funkcji, które generują dane zużywane przez tę funkcję + czas komunikacji między tą funkcją a innymi funkcjami w tym samym węźle + czas komunikacji między nią funkcja i funkcje na innych węzłach. Czas działania programu byłby wówczas sumą czasu działania wszystkich funkcji w programie. Muszę zminimalizować czas wykonania programu, który jest sumą czasu wykonania wszystkich funkcji.Czas wykonania każdej funkcji jest sumą swojego własnego czasu (wstępnie obliczonego) oraz sumy wszystkich funkcji, które zostaną wykonane przed nim i jego suma z czasem spędzonym na komunikacji z innymi funkcjami (takimi samymi lub różnymi węzłami).


title: Przeciwny termin wcięcia

text:
Mówimy, że wcinamy kod. Piszę konstruktora ciągów, który może dodawać/usuwać tabulatory do kodu wcięcia. Przykład: builder.Add("
"); budowniczy.Wcięcie(); builder.Add("

"); budowniczy.Dedent(); // <-- jak to powinno być nazwane. builder.Add("
"); Jak nazwać metodę?


title: Żądania AJAX i JavaScript po stronie klienta

text: Jestem nowy w AJAX i próbuję zrozumieć pytanie, które otrzymałem: Żądanie HTTP jest generowane przez formularz, który zawiera listę rozwijaną. Po przesłaniu formularza wyświetlana jest nowa strona internetowa z pewnymi istotnymi informacjami tekstowymi (zależnymi od wybranej pozycji listy). Teraz te same parametry są wysyłane do serwera za pośrednictwem żądania AJAX i zwracane są te same informacje tekstowe. P. Jakie zadania musiałby wykonać JavaScript po stronie klienta, aby upewnić się, że prawidłowe żądanie zostało skonstruowane i wysłane? Wszelkie przydatne linki lub szybkie wyjaśnienia są bardzo mile widziane.