title: Najlepsze praktyki dotyczące używania słów „shall and must” podczas pisania wymagań

text: Wysłałem wcześniej e-mail przypominający naszym programistom, że _użycie słowa 'Shall' w twoich wymaganiach pochodnych nie powinno odpowiadać twoim wymaganiom funkcjonalnym. Podczas pisania wymagań funkcjonalnych słowo „Musi” jest używane do opisania funkcji, jaką musi wykonać wymaganie pochodne. Pochodne = System będzie wymaganiem Funkcjonalny = System musi wykonać wymaganie_ Zostało odesłane przez jednego z naszych Seniorów, że to było złe i powinno być użyte w każdym wymaganiu. Czy się tu mylę i powinna być użyta w każdym wymaganiu. Nie udało mi się znaleźć niczego na poparcie tego.


title: Czy pokrycie ścieżki jest silniejsze niż pokrycie stanu?

text: Spotkałem się (nawet w literaturze) z dwiema sprzecznymi opiniami dotyczącymi pokrycia ścieżki vs stanu (nie gałęzi ani krawędzi!). Niektórzy twierdzą, że pokrycie Ścieżki jest silniejsze niż pokrycie stanu, niektórzy twierdzą, że jest odwrotnie. Mając taki kod: If(X<0 OR X>100) DoStuff(); _Pokrycie ścieżki_ \- Do pokrycia ścieżki potrzebny jest 1 przypadek testowy. Gdy X=-1, drugie wyrażenie nie będzie testowane i ewentualny błąd zostanie pominięty. _Pokrycie warunków_ \- przypadki testowe X=-1 i X=100 są potrzebne do przetestowania obu warunków. Czy czegoś mi brakuje lub pokrycie stanu jest naprawdę silniejsze niż pokrycie ścieżki? **Pokrycie warunków (ISTQB):** > **Nasz następny poziom pokrycia nazywa się pokryciem warunków. Podstawowa koncepcja > polega na tym, że gdy decyzja jest podejmowana przez złożone wyrażenie, które ostatecznie > ma wartość PRAWDA lub FAŁSZ, chcemy się upewnić, że każdy warunek atomowy > jest testowany w obie strony.** _Praktyczny wgląd w CMMI_ > Miary pokrycia warunków prawdziwy i fałszywy wynik każdego podwyrażenia logicznego >. **Referencje:** _Testowanie oprogramowania: zasady i praktyki Srinivasan Desikan, Gopalaswamy Ramesh:_ strona 61 > Pokrycie warunku jest znacznie silniejszym kryterium niż pokrycie ścieżki, które z kolei jest znacznie silniejszym kryterium niż pokrycie oświadczenia.


title: Jak zezwolić wielu wtyczkom na dostarczanie danych dla wielu procesów agregacji?

text: Pracuję nad projektem Java, w którym chcemy mieć wtyczki do zbierania danych, które zbierają dane do przetworzenia przez jeden lub więcej modułów agregacji danych. Wszystkie wtyczki zostaną napisane we własnym zakresie. Powiedzmy na przykład, że mamy wtyczki do zbierania danych A, B i C oraz moduł agregacji danych X. Moduły A, B i C wprowadzają dane do tabel, które są różne, ale mają kilka wspólnych pól, o które X dba. Czasami nazwy pól są różne, ale pod względem algorytmu są „takie same”. Jaki jest najlepszy sposób, aby X operował na tych różnych źródłach danych, jednocześnie pozwalając na integrację nowej wtyczki D do zbierania danych, a także możliwość nowego modułu agregacji Y, który działa na niektórych lub wszystkich źródłach danych? Moje główne obawy dotyczą zależności - na przykład, czy wtyczki do zbierania danych powinny wiedzieć o modułach agregujących, czy na odwrót? Czy nie? Czy wtyczki kolekcji powinny implementować interfejsy, z których mogą korzystać agregatory, a jeśli tak, to gdzie należy zdefiniować interfejsy?


title: Jakie są obecnie uważane najlepsze praktyki dotyczące słowa kluczowego „to” przed polem i metodami w c#?

text: O ile nie jest konieczne rozróżnienie między zmienną a polem o tej samej nazwie, nigdy nie umieszczam `this.` przed polem lub jakimkolwiek dostępem do składowej w C#. Widzę, że nie różni się to od prefiksu `m_`, który był powszechny w C++ i myślę, że jeśli naprawdę potrzebujesz określić, że jest to członek, twoja klasa jest za duża. Jednak w moim biurze jest wiele osób, które zdecydowanie się z tym nie zgadzają. Co jest uważane za najlepsze praktyki w zakresie „tego”? EDYCJA: Aby wyjaśnić, nigdy nie używam `m_` i używam `this`, gdy jest to absolutnie konieczne.


title: CZY C++ jest językiem wieloplatformowym?

text: Jeśli stworzę grę w C++ na Macu przy użyciu biblioteki, która jest taka sama dla obu Windows i OSX, czy gra będzie grywalna na obu Windows i OS X, czy będzie działać tylko w OS X, ponieważ zrobiłem to w Xcode? Czy SDL to świetna biblioteka do zrobienia pierwszej gry po nauczeniu się podstaw i składni C++ (uważam, że składnia jest zbliżona do Javy)?


title: Obsługa i porządkowanie danych z pliku zapisu?

text: Pracuję nad aplikacją webową (python/javascript), aby zmodyfikować plik zapisu gry. Plik ma pewne bajty reprezentujące informacje o graczu, takie jak broń, sprzęt itp. Chodzi o to, aby pokazać interfejs reprezentujący informacje w pliku, umożliwić użytkownikowi dokonywanie zmian, wysyłanie danych z powrotem do serwera, który modyfikuje plik i umożliwia użytkownikowi jego pobranie. Mój problem polega na tym, że nie wiem, które funkcje powinny być obsługiwane w javascript, a które w Pythonie. Potrzebuję Pythona do odczytu pliku, ale czy to oznacza, że powinienem go używać do obsługi danych? Jeśli odczytam informacje do odpowiednich zmiennych, aby odesłać je za pomocą JSON, czy jest to zbędne, ponieważ nie robię nic z informacjami w Pythonie poza odsyłaniem ich? Obecnie nie jestem zdecydowany co do dwóch możliwych sposobów. Jednym z nich jest obsługa pliku w Pythonie; zorientuj się, gdzie są określone rzeczy, wczytaj je do słowników, zamień je w json, wyślij do javascript, a następnie przeanalizuj json i zaktualizuj gui. Jak powiedziałem wcześniej, wydaje mi się, że to zły sposób. Inną rzeczą, którą rozważałem, było po prostu przeczytanie całego pliku i odesłanie go z powrotem do javascript do pracy. To również wydaje się naprawdę niepoprawne. JavaScript (przynajmniej taki, jaki jest zaimplementowany w przeglądarkach) nie jest przeznaczony do obsługi plików, a funkcje pakowania/rozpakowywania musiałyby być niestandardowe – jedna z rzeczy, które widzę jako czerwoną flagę dotyczącą tej metody. Pliki mają tylko około 1-2kb, więc nie byłby to powód, aby nie odsyłać ich z powrotem na stronę. W rzeczywistości odsyłany przeze mnie plik json jest większy niż tylko zawartość pliku. Mimo to nie podoba mi się ten pomysł. Więc co mam zrobić? Mam też problem z uporządkowaniem samego kodu. Wiem, że trzymanie dużej ilości kodu w jednej funkcji jest złą praktyką, ale podzielenie na wiele innych funkcji utrudnia śledzenie rzeczy. Czy jest jakaś dobra książka agnostyczna dla języka, która mi w tym pomoże?


title: Potrzebujesz lokalizacji pliku w warstwie logiki biznesowej z warstwy interfejsu użytkownika

text: Oto, co robię: czytam plik w BLL, który znajduje się w warstwie interfejsu użytkownika. Obecnie aplikacja używa `HttpContext.Current.Request.PhysicalApplicationPath` do znalezienia ścieżki bezwzględnej zapisanej w BLL. Uważam, że to nie jest dobry projekt i myślę, że powinienem przekazać te informacje w jakiejś strukturze do BLL lub użyć metody pomocniczej, aby to uzyskać. Proszę o informację, który z nich jest lepszy i czy są jakieś lepsze rozwiązania/sugestie. Zapytaj, czy potrzebujesz więcej szczegółów.


title: Czy powinienem używać funkcji połączonych w Javie?

text: Od czasu do czasu będę miał klasę w Javie, która przyjmuje wiele parametrów, jednak czasami tworząc obiekt tej klasy nie muszę używać wszystkich parametrów. Na razie zwykle ustawiam parametry na null lub 0 w zależności od typu. Czy jednak byłoby prościej, gdybym po prostu stworzył metody łańcuchowe do ustawiania określonych pól w klasie? Więc zamiast: `MojaKlasa jakaśInstance = new MojaKlasa(param0, null, null, 0, null, param5);` Miej coś takiego: `MojaKlasa jakaśInstance = (nowa MojaKlasa()).setParam0(param0).setParam5(param5 );` Czy to jest sprzeczne ze zwykłym paradygmatem OOP lub Javy?


title: Czy rozprzestrzenianie @staticmethod to zapach kodu?

text: Rozważ klasę Pythona z wieloma metodami `@staticmethod` i kilkoma metodami instancji. Metody statyczne nie akceptują instancji klasy definiującej jako parametrów. * Czy uważasz, że wszystkie te statyczne metody nie należą do tej klasy i powinny zostać wyłączone? * Jeśli tak, jakie podejście byś podjął, aby wyczyścić taki kod?


title: Gdybyś miał zbudować aplikację taką jak Craigslist, użyłbyś gotowego frameworka lub napisałbyś własną?

text: Tytuł jest pytaniem. A pytam, ponieważ z tego, co przeczytałem o większości frameworków PHP (np. Code Igniter, Kohana, Cake, Zend) wynika, że są one zbyt skomplikowane w eterze lub są przeznaczone głównie do małych aplikacji (takich jak blogi).


title: Jak należy połączyć wbudowany system operacyjny z kodem użytkownika?

text: Jako efekt uboczny projektu wbudowanego, nad którym pracowałem, stworzyłem mały system operacyjny dla procesora ARM. Chociaż system operacyjny i mój kod użytkownika znajdują się w osobnych katalogach i mają wyraźne granice między nimi, są wbudowane w pojedynczy obraz przy użyciu jednego pliku Makefile. Chciałbym wydać system operacyjny jako open source. Składa się z bibliotek sterowników exokernel i userland. To, co próbuję zdecydować, to w jaki sposób użytkownik tego systemu operacyjnego powinien połączyć go z własnym kodem w czasie kompilacji, aby mieć jeden obraz do flashowania. Przychodzą mi do głowy trzy możliwości: 1) Niech użytkownik dołączy pliki źródłowe systemu operacyjnego jako część swojego projektu. Odtworzyliby konfigurację, którą obecnie mam, i tak wygląda na przykład FreeRTOS (chociaż ma tylko trzy pliki). 2) Niech system operacyjny wbuduje się w plik .a, z którym może się połączyć kod użytkownika. Umożliwiłoby to użytkownikowi pełną kontrolę nad rozmieszczeniem pamięci za pomocą własnego skryptu linkera (i umożliwiłoby linkerowi poinformowanie go, kiedy połączona sekcja tekstu, BSS lub danych przekracza swoją przestrzeń). 3) Niech system operacyjny zbuduje się w surowy plik binarny, który oczekuje, że kod użytkownika zostanie połączony na jego końcu. Kod użytkownika zaczynałby się od małego nagłówka (umieszczanego przez skrypt linkera), który miał adres funkcji main. Kod użytkownika łączyłby się również z plikiem .a zawierającym tylko sterowniki z przestrzeni użytkownika, a nie z jądrem. (1) ułatwiłoby mi rozwijanie systemu operacyjnego i kodu użytkownika równolegle z poddrzewem git. (2) wydaje się mieć najbardziej użyteczny proces łączenia. (3) daje największą separację. Gdybyś go używał, co wolałbyś i dlaczego?


title: Zastosowania sterty

text: Heapsort to algorytm sortowania, który ma złożoność czasową O(nlogn) i wykonuje sortowanie przy użyciu złożoności przestrzennej O(1). Wiem jednak, że ponieważ jest niestabilny, nie znajduje wielu zastosowań (np. w porównaniu z innymi algorytmami sortowania). Wiem, że jest używany do planowania interwałowego. **Jakie są praktyczne zastosowania Heapsort?** **EDYTUJ:** Jak zauważył @AProgrammer, szybkie sortowanie również nie jest stabilne.


title: Jaka jest różnica między wymaganiem niefunkcjonalnym a atrybutem jakości?

text: Staram się zrozumieć różnicę między wymaganiami niefunkcjonalnymi a atrybutami jakości. Czy to to samo? Zestaw atrybutów jakości można znaleźć w standardzie ISO9126. Wiem, że każdy system jest zdefiniowany przez zestaw wymagań funkcjonalnych i każde z tych wymagań ma skojarzony jeden lub więcej atrybutów jakościowych. Załóżmy na przykład, że masz wymaganie opisujące funkcjonalność logowania w systemie. Z tym wymaganiem można powiązać atrybuty bezpieczeństwa i wydajności. Jeśli powiem, że odpowiedź systemu nie może zająć więcej niż 1 sekundę, mówię o ograniczeniu. Więc gdzie wkracza koncepcja wymagań niefunkcjonalnych? Czy są definiowane przez użytkowników? Jak mogę je zidentyfikować?


title: Czy jesteś zobowiązany zapewnić starym pracodawcom dostęp do chronionych zasobów?

text: Po pierwsze, wyłączenie odpowiedzialności. To pytanie nie jest spowodowane tym, że jestem niezadowolonym pracownikiem planującym ukryć jakiś złośliwy kod, którym mogę później szantażować mojego pracodawcę. Właściwie bardzo lubię ludzi, z którymi pracuję - po prostu ciekawi. Więc jeśli stary pracodawca potrzebował hasła do jakiegoś zasobu, który tylko ja miałem. Czy byłbym zobowiązany do ich przekazania, czy też mógłbym (prawdopodobnie nierozsądnie) je im przykleić i albo odmówić, albo obciążyć skandaliczną opłatą „konsultingową” za podanie tego hasła? A co, gdybym zaprojektował dla nich jakiś komponent, na przykład jakąś podstawową zaszyfrowaną warstwę bezpieczeństwa, która wymagała klucza skrótu, który tylko ja miałem, czy byłbym zobowiązany do jego przekazania? Te dwa scenariusze są generalnie winą pracodawcy, ale co, jeśli w trzecim scenariuszu zbudowałem ten komponent potajemnie, bez jego wiedzy? Niekoniecznie oznacza to, że komponent został zbudowany wyłącznie z zamiarem zablokowania pracodawcy w przyszłości, może faktycznie służył dobremu celowi - po prostu nigdy nie został udokumentowany, jak działał, ponieważ firma miała słabe procesy dokumentacyjne lub programiści też byli zajęty itp. Czy w takim scenariuszu, kiedy w końcu będą potrzebować tego klucza skrótu, byłbym zobowiązany do jego podania?


title: terminologia i wyjaśnienie projektu/procesu

text: Pracuję w BPO, właściwie call center. Moi szefowie zobaczyli narzędzie html, które stworzyłem, aby pomóc mi dokumentować obawy klientów i kroki, które zrobiłem, aby pomóc im szybciej i łatwiej. Dzięki temu zrobili ze mnie reportera. Następnie poprosili mnie o utworzenie pliku wykonywalnego (.exe), który generuje statystyki lub metryki agentów. Użyłem dostępu c# i ms do bazy danych. 6 miesięcy zajęło mi samodzielne ukończenie tego. Ale czuję, że to dość długi okres dla takiego projektu. A kiedy patrzę na moje kody, sam nie jestem zadowolony. Naprawdę chcę kontynuować programowanie / rozwój oprogramowania. Po prostu nie mam do tego odpowiedniego szkolenia ani wykształcenia. Wziąłem inżynierię komputerową na studiach, ale moja szkoła nie jest tak dobra (chcę podzielić się powodem, ale to tylko wydłuży ten post). Robię badania, czytam ebooki o programowaniu, ale wciąż nie mogę pojąć istoty tego. To tak, że mogę łatwo nauczyć się języka, IDE, technologii itp., ale nie potrafię ich połączyć. Eksperci, czy możecie mi powiedzieć, jak mogę zobaczyć większy obraz? Czy możesz mi pomóc zrozumieć następujące kwestie: 1. W jaki sposób firmy, które tworzą/dostarczają oprogramowanie/programy, rozpoczynają projekt? Albo jak je wytwarzają, jeśli chodzi o proces? 2. Widzę terminy takie jak tester oprogramowania, testowanie jednostkowe, test automatyzacji itp. Co to są i dlaczego są używane lub włączane do procesu? Mam tyle pytań do zadania, ale kiedy próbuję je opublikować, zapominam o nich, jak na czubku języka. Mam nadzieję, że eksperci mogą rzucić nieco światła na te pytania. Nie staram się zdobywać punktów, ale naprawdę chcę skorzystać z funkcji czatu, aby gdy mam szybkie pytanie i dowiaduję się więcej o programowaniu/rozwoju oprogramowania, mogę z łatwością rozmawiać z ekspertami.


title: Środowisko testowe dla JavaScriptu innego niż przeglądarka?

text: Kiedy chcę coś przetestować w JavaScript, otwieram nowe okno przeglądarki (głównie Firefox) i zaczynam pisać kod w dostarczonej konsoli (głównie Firebug). Jednak jest to bardzo żmudne i powolne. Czy istnieje środowisko, takie jak na przykład IDE z możliwością samodzielnego wykonywania, w którym możemy testować JavaScript? Poradnik: Szukam czegoś takiego jak jsfiddle, ale nie w przeglądarce i nie online. Chciałbym mieć środowisko wykonawcze, które jest zarówno w trybie offline, jak i nie jest przeglądarką. Proszę tylko o posiadanie czegoś takiego jak Konsola Firebug jako osobnych aplikacji (najlepiej aplikacji Windows), które można otworzyć przez dwukrotne kliknięcie iw której można napisać kod JavaScript i nacisnąć przycisk Wykonaj. To wszystko. Mówiąc prościej, wszystko, czego chcę, to konsola Firebug, bez Firefoksa. Czy mamy coś takiego na rynku?


title: Jak wywołać „proxy”, które deleguje do *kilku* implementacji?

text: W tradycyjnym serwerze proxy GoF masz interfejs, implementację, która implementuje interfejs, i serwer proxy, który również implementuje interfejs, odwołuje się do instancji Implementation i deleguje wywołania metod interfejsu do tych samych metod w instancji implementacji . Powiedzmy, że nazwalibyście parę interfejs/implementacja „fragmentem” i mielibyśmy kilka różnych takich par. Teraz wyobraź sobie, że tworzysz Whole Interface, który zaimplementował wszystkie te interfejsy fragmentów i pojedynczy Whole Proxy, który zaimplementował cały interfejs i został delegowany do odpowiedniej instancji implementacji fragmentów. Przykład kodu (Java): // Fragment A: interface FragmentA { ... } class FragmentAImpl implementuje FragmentA { ... } // Cały A. To jest interfejs, którego "klienci używają" interfejsów WholeA rozszerza FragmentA { // PUSTY ! } // *automatycznie wygenerowane* Proxy: class ProxyA implementuje WholeA { private FragmentA implA; // Implementuje FragmentA poprzez delegację do implA } // Fragment B: interface FragmentB { ... } class FragmentBImpl implementuje FragmentB { ... } // Cały B. To jest interfejs, którego "klienci używają" interfejsy WholeB rozszerza CałyA, FragmentB { // PUSTY! } // *automatycznie wygenerowane* Proxy: class ProxyB extends ProxyA implementuje WholeB { private FragmentB implB; // Implementuje fragment B przez delegację do implB } // Fragment C: podobny do fragmentu B, ale z innym *dodanym zachowaniem*. Czy to w ogóle ten wzorzec (ponieważ Wzorce muszą być powszechnym rozwiązaniem typowych problemów)? A jeśli tak, to jak ma nazwę? A może można by to jednoznacznie zdefiniować jako połączenie wzorów? Będąc w stanie jasno opisać, jak ten kod działa pod kątem wzorców, znacznie ułatwiłoby wyjaśnienie innym, jak tworzyć zgodny kod, i pomogłoby znaleźć framework, który już implementuje ten wzorzec. _Proxy_ zwykle deleguje do _jednego wystąpienia_. _Fasada_ zwykle oferuje _inny interfejs_ do _wielu obiektów_, które ukrywa. _Bridge_ oferuje również _inny interfejs_ niż _pojedyncza instancja_, którą ukrywa. _Composite_ oczekuje, że wszystkie komponenty _współdzielą ten sam interfejs podstawowy_. _Dekorator_ rozszerza interfejs opakowanego obiektu, tak jak tutaj, ale zwykle _implementuje samą dodatkową funkcjonalność_ , zamiast delegować do innych obiektów. Whole, która implementuje pojedynczy Fragment, jest po prostu wzorcem Proxy, ale Whole, która rozszerza inną Whole, jest najbliższa wzorcowi Decorator. Jest kilka powodów, aby zrobić to w ten sposób. Po pierwsze, kod klienta powinien widzieć WholeB jako rozszerzenie WholeA, chociaż realizator FragmentB nie może rozszerzyć fragmentu A (który został zaimplementowany przez kogoś innego). Po drugie, odniesienia do WholeX (ProxyX) pozostają ważne, nawet jeśli implementacja FragmentX zostanie zastąpiona środowiskiem wykonawczym. Po trzecie, zarówno ProxyB, jak i ProxyC mogą współużytkować _to samo wystąpienie_ fragmentu AImpl.


title: Projekt klasy dla specjalnych zasad biznesowych

text: Zajmuję się tworzeniem aplikacji, która umożliwia składanie niestandardowych zleceń produkcyjnych. Jednak podczas gdy większość wymaga podobnej dokumentacji, niektóre z nich mają niestandardowe dokumenty, których potrzebują tylko oni. Mój obecny projekt klasy ma klasę Manufacturer, której jedna ze zmiennych składowych jest tablicą obiektów RequiredSubmission. Obawiam się jednak dwóch kwestii. Po pierwsze, niektórzy producenci są skłonni zaakceptować albo standardowy formularz, albo własny niestandardowy formularz. Zastanawiam się nad przechowywaniem tego w obiekcie RequiredSubmission z tablicą alternatywnych formularzy, które są prawidłowym substytutem. Nie jestem jednak pewien, czy to jest idealne. Głównym problemem jest jednak to, że niektórzy producenci mają cykle terminów. Na przykład formularze A, B i C muszą być dostarczone do 1 stycznia, a płatność musi być dokonana do 10 stycznia. Jeśli je przegapisz, będziesz musiał poczekać do następnego cyklu. Nie jestem do końca pewien, w jaki sposób mogę to zrobić z moimi istniejącymi klasami — jak mogę powiedzieć „ten zestaw dat należy do tego samego cyklu, z datą A dla formularza A, datą B dla formularza B itd.” Byłbym bardzo wdzięczny za wszelkie spostrzeżenia, jak najlepiej zaprojektować te klasy.


title: Jak przekonać moich kolegów z drużyny, że tworzenie wielu wątków to zły projekt?

text: Natknąłem się na ten problem, gdy próbowałem uruchomić naszą aplikację w złych warunkach sieciowych; tworzy setki wątków (które istnieją na długo przed zakończeniem), a z czasem aplikacja się zawiesza. Jednak inni programiści odpowiedzieli, że to „nie jest błąd” i „zgodnie z założeniami”. Mam silne przeczucie, że tworzenie tak wielu wątków zamiast używania wywołań asynchronicznych jest przede wszystkim wadliwym projektem. Jednak moi koledzy z drużyny nie zgadzają się. Jakieś pomysły, jak mogę ich przekonać? UPD, czy mogę powiedzieć, że tworzenie wątków dla krótkich zadań to zły projekt? Jakich argumentów mogę użyć na poparcie tego stwierdzenia?


title: Ponowna architektura klasycznego projektu dziedziczenia

text: Mam możliwość przepisania głównego fragmentu projektu (C#), który jest dziedziczony i jest coraz bardziej restrykcyjny w sposobie jego projektowania. Scenariusz jest dość prosty, wyobraź sobie aplikację zbudowaną do obsługi różnych małych zadań. Każde zadanie jest unikalne pod względem funkcjonalności, więc implementuje interfejs ITask z kilkoma prostymi metodami, które są implementowane przez każdą klasę zadania (np. Init(), Start(), Stop() itp.). Oprócz interfejsu ITask istnieje również abstrakcyjna klasa BaseTask, z której dziedziczą wszystkie zadania. Ta klasa BaseTask jest rodzajem podejścia „wszystko oprócz zlewu kuchennego”, które zawiera przydatne elementy funkcji, których często wymagają zadania. Na przykład wszystkie zadania rejestrują swój status i postęp w dokładnie taki sam sposób, więc ta logika jest zdefiniowana w BaseTask i jest dostępna dla wszystkich elementów podrzędnych za pomocą metody chronionej. Lub, aby podać inny przykład, niektóre zadania muszą wysyłać powiadomienia e-mail po spełnieniu określonych warunków, więc ponownie BaseTask zapewnia dostęp do podstawowych funkcji SMTP aplikacji w tym celu. Istnieje wiele przykładów tego rodzaju metod/właściwości pomocniczych Problem oczywiście polega na tymże ta klasa bazowa stała się już nieporęczna i zaśmiecona właściwościami i metodami, które nie są uniwersalne dla wszystkich zadań i zaczyna stwarzaćwięcej problemów niż jest rozwiązywanie. Na przykład za każdym razem, gdy wymagana jest zmiana w klasie bazowej, znajdujesz się w sytuacji, w której możesz zakończyć niektóre (lub wszystkie) zadania. Wydaje się również, że jest to jego przełamująca enkapsulacja i jedna główna odpowiedzialność. Jest również całkiem jasne, jak to się stało w pierwszej kolejności (i to też częste zjawisko). Początkowo była to bardzo mała, wyspecjalizowana aplikacja, ale bardzo szybko rozrosła się pod względem zakresu i rozmiaru, a to, co początkowo prawdopodobnie nie było złą decyzją pod względem architektonicznym, okazało się nieelastyczne i niewygodne. Od czego zacząłbyś od czegoś takiego? Jak podszedłbyś do problemu i jakie byś wybrał zleceniodawców lub wzorce projektowe? Dziękuję Ci bardzo


title: Poczta e-mail w PHP za pomocą zadania cron

text: Moja aplikacja PHP musi codziennie wysyłać powiadomienia o wygaśnięciu produktu do klientów. Mam na myśli: 1. Jednorazowe zadanie cron dla skryptu php, który identyfikuje klientów z tabeli 10000 wierszy, a następnie wysyła e-mail do każdego z nich za pomocą biblioteki SwiftMailer. Każdy e-mail będzie miał unikalną treść, więc nie zamierzam wysyłać wiadomości zbiorczych. * _Wada: *_ Zbyt wolny i serwer może go zabić. 2. Powtarzające się pięciominutowe zadanie crona, które wysyła określoną liczbę e-maili (np. 20) dla każdego wykonania. * _Con: *_ Wszyscy klienci mogą nie otrzymywać e-maili, ponieważ kolejka może nie zakończyć się w ciągu 24 godzin. Proszę podać alternatywy i sugestie. TIA.


title: Jak przepisać serwer TCP MMOG przeznaczony do pracy na jednej maszynie, w sposób rozproszony?

text: Mam serwer MMOG działający w C++, używający winsockets. Mój serwer nie obsługuje więcej niż 200 graczy. Wpadłem na pomysł przeprojektowania go tak, aby używał wielu serwerów zamiast jednego, więc może na przykład każdy serwer mógłby obsłużyć wielu graczy, a gdyby był zbyt opóźniony, mógłby przenieść odpowiedzialność za to gracza na inny serwer. Nie jestem jednak pewien, jak zaprogramować spójną logikę gry w ten sposób. Czy są na to techniki?


title: Jak sprawić, by klaster uruchamiał zadanie tylko raz?

text: Gdybyś miał zadanie, które chciałbyś uruchomić tylko raz na klastrze serwerów, w regularnych odstępach czasu, jaki byłby najlepszy sposób na osiągnięcie tego? _Definicja klastra w tym przypadku to co najmniej 2 identyczne serwery z rozproszonymi sesjami za systemem równoważenia obciążenia._ **Przypadek użycia:** Masz zadanie, które jest drogie do uruchomienia, które powinno być uruchamiane tylko raz na X godzin. Ta praca może na przykład iterować wiele rekordów i aktualizować ich status. * Najgorszy scenariusz jest taki, że dwukrotne uruchomienie zadania powoduje unieważnienie danych. * Najlepszym scenariuszem jest to, że zadanie wykorzystuje zasoby na wszystkich Twoich serwerach. **Podsumowanie wymagań:** 1. Zadanie musi nadal działać, nawet jeśli jeden z węzłów nie działa. 2. Zadanie można uruchomić tylko raz na harmonogram. 3. Jeśli wiele zadań jest zaplanowanych w tym samym czasie lub w nakładających się okresach, liczba uruchomionych zadań jest równomiernie rozdzielona między serwery. 4. Maszyny muszą mieć tę samą bazę kodów i być zsynchronizowane przez NTP. 5. Konfiguracja może różnić się między węzłem a węzłem według zmiennych środowiskowych. 6. Zadanie musi rozpocząć się na czas lub w określonym przedziale czasu. (powiedzmy na przykład 5 minut) **Możliwe rozwiązania** * Ustaw jeden węzeł jako węzeł główny, to nie działa, ponieważ narusza 1 powyżej. * Złóż wniosek, aby system równoważenia obciążenia rozpoczął pracę. Niestety ma to taki efekt uboczny, że jeśli masz wiele zadań uruchomionych w tym samym czasie, wszystkie mogą być uruchamiane przez ten sam komputer. Musiałoby to działać w Javie, w kontenerze serwletów. Jednak nie koduje prac, których szukam. Z pewnością jest to rozwiązany problem ze znanym najlepszym rozwiązaniem. * * * **Pytanie pokrewne.** Zaplanuj zadanie jest wykonywane dwukrotnie w klastrze To nie jest duplikat, ponieważ rozwiązanie jest niewystarczające, jak na te 5 wymagań podanych powyżej. Najbardziej uprzywilejowane rozwiązanie ma problem z rasą, a drugie rozwiązanie narusza wymaganie 3


title: Pomóż nam z naszym przepływem pracy git

text: Mamy aplikację internetową, która jest wdrażana w wielu regionach naszego stanu. Instancja aplikacji dla każdego regionu. W naszym repozytorium utrzymujemy gałąź pomostową i produkcyjną (master), ale zastanawialiśmy się, jaki jest najlepszy sposób na utrzymanie bazy kodu każdej instancji. W rdzeniu jest podobnie, ale musimy dać każdemu regionowi możliwość zgłaszania konkretnych żądań, które mogą nie trafić do rdzenia aplikacji. W tej chwili mamy oddziały dla każdego regionu, takie jak region_one_staging i region_one_production. W tempie, w jakim się rozwijamy, w ciągu najbliższych kilku lat będziemy mieć tu setki oddziałów. Czy jest na to lepszy sposób?


title: Czy powinienem otworzyć Source moją aplikację na iOS?

text: Stworzyłem aplikację na iOS jako student i obecnie dystrybuuję ją za darmo w App Store. Otrzymałem kilka zapytań dotyczących dodawania funkcji do aplikacji, w tym jednej osoby, która chciałaby, aby aplikacja była open source, aby mogła samodzielnie dodawać funkcje. Jakie mam obawy, jeśli otworzę swoją aplikację na iOS? Jakiej licencji open source powinienem użyć?


title: Przekazywanie obiektu DB między klasami singleton, statyczne czy inne?

text: Więc projektuję system raportowania w pracy, to mój pierwszy projekt napisany OOP i utknąłem w wyborze projektu dla klasy DB. Oczywiście chcę tylko utworzyć jedną instancję klasy DB na sesję/użytkownika, a następnie przekazać ją do każdej z klas, które jej potrzebują. Czego nie wiem, jaka jest najlepsza praktyka w tym zakresie. Obecnie mam kod podobny do następującego:- class db { private $user = 'USER'; prywatne $pass = 'PASS'; private $tables = array( 'użytkownik','raport', 'etc...'); function __construct(){ //USTAWIANIE POŁĄCZENIA I TABEL } }; class report{ function __construct ($params = array(), $db, $user) { //Sprawdzanie/obsługa błędów trimed //$db to utworzony przez nas obiekt bazy danych $this->db = $db; //$this->user jest obiektem użytkownika zalogowanego użytkownika $this->user = $user; $this->raportUtwórz(); } public function setPermission($permissionId = 1) { //Zauważ, że $this->db jest to najlepsze rozwiązanie? $this->db->permission->find($permissionId) //Zauważ, że $this->user jest najlepszym rozwiązaniem? $this->user->checkPermission(1) $data=array(); $this->db->reportpermission->insert($data) } };//end report Czytałem o używaniu klas statycznych i właśnie natknąłem się na Singletony (chociaż te wydają się już passé?), więc co jest aktualne najlepsze praktyki w tym zakresie?


title: Outsourcing: pytanie o własność kodu i prawa autorskie

text: Chcę zadać pytanie z punktu widzenia pracodawcy. Wiem, że tak naprawdę nie jesteście prawnikami i tak dalej, ale myślę, że możecie pomóc. Prowadzę negocjacje z freelancerem (z Indii), aby stworzyć konkretną samodzielną aplikację do konwersji plików. Jest to program, który chcę oznaczyć i odsprzedać. Dostałem od nich dobrą ofertę, ponieważ już w przeszłości tworzyli takie oprogramowanie. Ale mam dwa problemy: a) Program został wcześniej stworzony przez nich dla innego ich klienta, na niejasnych warunkach (lub jeszcze nie spytałem). Z tego, co mi powiedzieli, stworzyli dla niego program na jego prywatny użytek. Wygląda na to, że nadal mają prawa autorskie/własność kodu źródłowego. b) Nadal chcą zachować prawa autorskie/własność kodu. Nie mam nic przeciwko, ale w rzeczywistości chcę wiedzieć, jak to może lub nie może wpłynąć na mnie w przyszłości. Na przykład, co się stanie, jeśli sprzedaż pójdzie dobrze i nagle zdecydują, że chcą części zysku, ponieważ kod jest ich? Coś w tym stylu. Teraz kolejne pytanie: Czy istnieje różnica między kodem źródłowym programu a jego skompilowaną wersją? Na przykład otrzymuję produkt końcowy (jak plik wykonywalny/instalator), do którego jestem właścicielem i do którego mam prawa, a oni zachowują prawa do podstawowej technologii. czy to możliwe? I na koniec, jak myślisz, jak najlepiej do tego podejść? Myślę, że mogę pozwolić im zachować prawa autorskie do kodu, ale podpisać mi umowę o odsprzedaży produktu końcowego. Czy to w ogóle ważne? Czy można to zrobić?


title: Szybka nauka C# (biorąc pod uwagę, że już wiem…)

text: Ok, chcę nauczyć się C# na rozmowę kwalifikacyjną (chcą C# lub Javę, znam Javę, ale dobrze byłoby wiedzieć, że obaj). Znam już Javę, C++, C, F# oraz w pewnym stopniu Pythona i Pascala. Jakie są duże różnice między C# a Javą lub C++? Jakie są dobre zasoby, do których warto się przyjrzeć, biorąc pod uwagę, że chcę uzyskać podstawową wiedzę w ciągu kilku godzin? BTW: Powiedziałem im, że nie znam C#, mówiąc, że jednak znam te inne języki i że prawdopodobnie mógłbym go dość szybko opanować.


title: Konwersja liczby z reprezentacji zmiennoprzecinkowej pojedynczej precyzji na zmiennoprzecinkową o połowie precyzji

text: Mam kod, w którym muszę pracować nad liczbami zmiennoprzecinkowymi o połowie precyzji. Aby to osiągnąć, stworzyłem własną klasę C++ fp16 ze wszystkimi operatorami (arytmetycznymi, logicznymi, relacyjnymi) związanymi z tym typem, przeciążonymi moimi funkcjami niestandardowymi, używając jednocześnie liczby zmiennoprzecinkowej o pojedynczej precyzji z liczbą zmiennoprzecinkową o połowie precyzji. Liczba zmiennoprzecinkowa o połówkowej precyzji = 1 bit znaku, 5 bitów wykładnika, 10 bitów significand = 16 bitów zmiennoprzecinkowych pojedynczej precyzji = 1 bit znaku, 8 bitów wykładnika, 23 bity significand = 32 bity. liczba na Liczbę zmiennoprzecinkową o połowie precyzji: - Dla bitów significand - używam obcinania, tj. luzem 13 bitów z 32 bitów, aby uzyskać 10 bitów significand dla liczby zmiennoprzecinkowej o połowie precyzji. Co powinienem zrobić, aby obsłużyć bity wykładnika. Jak przejść z 8 bitów wykładniczych do 5 bitów wykładniczych? Pomogłaby każda dobra lektura.


title: Metodologie oprogramowania

text: Jestem bardzo nowy w tej dziedzinie, ale spędzam dużo czasu, aby szczegółowo przeczytać o wszystkich tych metodologiach (SSADM, AGILE, RAD, SPIRAL, WATERFALL, INCREMENTAL, DSDM, XP, Iterative), jak one działają, korzystne i niekorzystna i ... Teraz zła część to: rozumiem je wszystkie osobno, ale nie mogę zrozumieć: 1. Czy to tak, jakby jeden z nich powiedział **SSADM** (Z 5-7 ETAPAMI) jest tym, co staramy się osiągnąć i do tego powinniśmy wykorzystać resztę (RAD, AGILE AND ..). 2. A może niektóre z nich są głównymi kategoriami, takimi jak (SSADM, AGILE), a reszta staje się ich podkategoriami? 3. Albo nie, są wszystkie oddzielne rzeczy bez powiązań, których w tym przypadku nie mogę zrozumieć z Wikipedii: > SSADM to kaskadowa metoda tworzenia systemu informacyjnego > projekt. Można sądzić, że SSADM reprezentuje szczyt rygorystycznego > opartego na dokumentach podejścia do projektowania systemów i kontrastuje z bardziej współczesnymi > metodami szybkiego tworzenia aplikacji, takimi jak DSDM.


title: Jak wytłumaczyć, że to jest antywzorzec?

text: Niedawno zacząłem nową pracę. Istniejący system działa OK, ale jest słabo zaprojektowany i trudny w utrzymaniu, planują przebudować go w MVC i obawiam się, że będzie znacznie gorzej. (Nie z powodu MVC) Chcę zniechęcić głównego programistę do używania antywzorca Istniejące problemy obejmują * Ciągi zakodowane na stałe w logice biznesowej, które są również powiązane z interfejsem (np. `if (x.CustomerType.Contains("Shipping Klient") foobar();` is _everywhere_ * Niektóre klasy mapują bezpośrednio do dbTables (co jest dobre). Ale ponieważ oprogramowanie musi być "łatwe do dodania funkcji do ", istnieje tabela "DynamicData" podobna do Sharepointa do przechowywania nowe pola, których klient może wymagać a la `[FieldName] [FieldValue] [FieldType]` * Odmowa użycia Linq, ale łączy zapytania lambda dla około 2 stron o szerokości klient widzi stos wywołań, ponieważ jest po prostu zrzucany do wyskakującego okna dialogowego) * Odmowa użycia `var`, ale uwielbia ideę `dynamic` wszystko. Jaki jest najlepszy sposób na przekonanie mojego głównego programisty do unikania tych okropnych metod i nie umieszczaj _wszystko_ w ogólnej tabeli par klucz-wartość-para w wersji 2.0? (Biorąc pod uwagę, że jestem tu nowy, a lider zespołu jest tu od wielu lat)


title: Najbardziej lewe i prawe pochodzenie

text: Rozumiem więc semantykę wyprowadzeń, jeśli chodzi o formę Backus Naur. Jednej rzeczy, której nie mogę znaleźć w żadnym podręczniku ani w różnych notatkach wykładowców, które są dostępne w Internecie, jest to. Kiedy najbardziej prawicowa derywacja byłaby korzystna w porównaniu z najbardziej lewą derywacją? Czy kompilator lub generator zawsze używałby lewej lub prawej strony, czy też używałby obu? Oto przykład: Załóżmy, że mamy następujące zdanie w języku: A = B + C * A Przykładowa gramatyka języka dopuszczająca powyższe: <assign>  <id> = <expr> <id>  A | B | C <wyraż>  <wyraż> + <wyraz> |<wyraz> <wyraz> <wyraz> * <czynnik> |<czynnik> <czynnik>  ( wyraż ) | <id> Wyprowadzenie z lewej strony: <assign> => <id> = <wyraż> => A = <wyraż> + <warunek> => A = <termin> + <termin> => A = <czynnik> + < termin> => A = <id> + <term> => A = B + <term> => A = B + <termin> * <czynnik> => A = B + <czynnik> * <czynnik> => A = B + <id> * <czynnik> => A = B + C * <termin> => A = B + C * <czynnik> => A = B + C * <id> => A = B + C * Prawidłowe wyprowadzenie: <assign> => <id> = <expr> => <id> = <expr> + <term> => <id> = <expr> + <term> * <factor> = > <id> = <wyrażenie> + <term> * <id> => <id> = <wyrażenie> + <term> * A => <id> = <wyrażenie> + <czynnik> * A => <id > = <wyrażenie> + <id> * A => <id> = <wyrażenie> + C * A => <id> = <term> + C * A => <id> = <id> + C * A=> <id> = B + C * A => A = B + C i C


title: Nie powtarzaj się w kodzie testów integracyjnych i w kodzie produkcyjnym?

text: Całkowicie wierzę w to, aby nie powtarzać się w kodzie produkcyjnym. Zaakceptowałem pomysł, że nie powinieneś powtarzać się w kodzie testowym. Ale co się stanie, gdy masz usługi produkcyjne, które uprościłyby kod testowy? Podam przykład. Mamy usługę, która uzyskuje dostęp do API Doohickey. Interfejs API Doohickey jest z konieczności złożony, a my dysponujemy sporą ilością kodu, aby uprościć go do naszych potrzeb. Teraz muszę napisać kilka automatycznych testów dla naszego serwisu. Moje testy muszą skonfigurować dane w usłudze i bardzo przydatne byłoby ponowne wykorzystanie tej fasady. Ale potem wdaję się w kłótnię ze sobą, która wygląda mniej więcej tak: „Jeśli wprowadzisz błąd w Fasadzie, test może go nie pokazać”. „Ale jeśli po prostu zrobisz kopię, to kiedy Dohickey Inc uaktualni swoje API, musisz dokonać zmiany w dwóch miejscach”. „Prawda, ale może to i dobrze. Możemy najpierw zaktualizować kod produkcyjny, zarządzać danymi testowymi przy użyciu starego, znanego, wciąż obsługiwanego interfejsu API i dokładnie przetestować nową wersję”. A potem myślę, że może przemyślam problem. Czy ktoś ma doświadczenie z tego rodzaju problemami? Jeśli tak, w którą stronę poszedłeś i czy później w ogóle tego żałowałeś? Edycja: wczesne komentarze sugerują, że wymagany jest bardziej konkretny przykład. Załóżmy, że mam usługę, która może utworzyć produkt ORAZ złożyć zamówienie. Mam następujący test do napisania... Biorąc pod uwagę, że produkt X istnieje Kiedy klient Y zamawia produkt X Wtedy powinno istnieć zamówienie dla klienta Y, zawierające tylko produkt X W przypadku części "Kiedy" kontaktuję się z moim serwisem, który korzysta fasada wokół Dohickey Purchasing API do tworzenia zamówienia. Kroki „Dane” i „Następnie” powinny utworzyć produkt i otrzymać zamówienie, ale nie powinny przechodzić przez usługę, aby to zrobić. Być może mój serwis nie ma takiej funkcjonalności, a jeśli tak, to przetestuję go gdzie indziej. ALE fasada, która znajduje się w usłudze, znacznie uprościłaby kod testowy. Czy powinienem więc odwołać się do kodu produkcyjnego i użyć go, czy skopiować/przepisać fasadę?


title: Gdzie można dodać kod logowania w modelu MVC?

text: Pracuję nad programem C# WinForms, który jest napisany w stylu MVC (a właściwie Model-View-Presenter) i chcę dodać kilka linijek kodu, który jest odpowiedzialny za rejestrowanie niektórych zdarzeń. Gdzie mam napisać dwie lub trzy linijki kodu, którego potrzebuję? Czy powinienem to napisać w sekcji Prezenter? Aby zorientować się, oto kilka wierszy przykładowego kodu, który już istnieje w metodzie **_Save()_** w klasie **_Company.MyApplication.Presenter.MyPresenter.cs:_** napisał kody leżą: w tej części prezentera: private void Save(Helper.SaveStatusEnum status) { if (notification.CheckLocks(orderIdCollection)) { using (new HourglassController()) { controller.FireActiveCellLeaving(); WyświetlDokumentowaneWartości(); int wynik = saveController.Save(status); if (result == Helper.SAVE_SUCCESSFUL) { // CZY MOŻNA ZAPISAĆ TUTAJ KILKA LINII KODU???????????? model.Brudny = fałsz; if ((model.CurrentStatus == Helper.OrderStatusEnum.Complete) || (model.CurrentStatus == Helper.OrderStatusEnum.Corrected)) { controller.EnableDisableSheet(false); } SprawdźStateAplikacji(); SheetHelper.ClearUnsavedDataRowImage(view.ActiveSheet); } else { MessageBox.Show("Wystąpił nieoczekiwany błąd podczas próby zapisu."); } } } }


title: Struktura danych do dopasowywania wzorców

text: Załóżmy, że masz plik wejściowy z wieloma wpisami, takimi jak: data, ticker, open, high, low, close, <i kilka innych wartości> i chcesz wykonać procedurę dopasowywania wzorców dla wpisów (wierszy) w tym pliku, używając na przykład wzoru świecznika. (Patrz, Doji) I ten wzór może pojawić się w dowolnym jednolitym przedziale czasowym (niech t = 1s, 5s, 10s, 1d, 7d, 2w, 2y, i tak dalej...). Powiedzmy, że procedura dopasowywania wzorców może zająć dowolną liczbę wierszy do przeprowadzenia analizy i zawierać dowolną liczbę podwzorców. Innymi słowy, niektóre wzorce mogą wymagać 4 wpisów, aby operować na innych, mogą wymagać więcej lub mniej. Powiedz również, że procedura (może) później będzie musiała znaleźć i sklasyfikować ekstrema (maksymalne i globalne maksima i minima oraz punkty przegięcia) dla tickera w przedziale domkniętym, na przykład możesz powiedzieć, że funkcja sześcienna (x^3 ) ma ekstrema na przedziale [-1, 1]. (Zobacz link) Biorąc pod uwagę, że nie znam rozmiaru pliku wejściowego podczas czytania? Jaki byłby najbardziej naturalny wybór pod względem struktury danych? A co z interfejsem, który dopasowuje obiekt `Ticker` zawierający jeden wiersz danych do kolekcji `Ticker`, aby można było zastosować do danych dowolny wzorzec. Na przykład, powiedzmy, że mam wzorzec, który wymaga `n` elementów, aby utworzyć dopasowanie, muszę zastosować wzorzec do tych elementów, a następnie przeanalizować każdy z tych kawałków. Jaka jest pierwsza rzecz, która przychodzi na myśl? Wybrałem podwójnie połączoną cykliczną listę, która ma następujące metody: push_front() push_back() pop_front() pop_back() [] //przeciążony, może być używany z parametrami ujemnymi Ale ta struktura danych wydaje się bardzo niezgrabna, ponieważ tak wiele trwa pushowanie i wyskakiwanie, muszę wykonać głęboką kopię struktury danych przed uruchomieniem na niej analizy. Tak więc nie wiem, czy moje pytanie było bardzo jasne, ale główne punkty to: 1. Jakie struktury danych należy wziąć pod uwagę podczas analizowania sekwencyjnych punktów danych, aby były zgodne ze wzorcem, który NIE wymaga dostępu losowego? 2. Jakie struktury danych należy wziąć pod uwagę przy klasyfikowaniu ekstremów zbioru punktów danych? * * * **Zaktualizowane** Oto główna pętla analizatora dla mojego programu (w jakimś pseudokodzie, który jest wielojęzycznym wielojęzycznym) data = new circular_linkedList() // w moim przypadku dane to połączona cyklicznie lista elementów. foreach(element in dataFeed) { data.push_front(element) } step_value = Pattern.numberRequiredElementsForMatch() buffer = new circular_linkedList() // w tym momencie będziesz mieć cykliczną połączoną listę // gdzie pop_back() zwróci najstarszy wpis i // wpis, a pop_front() zwróci najnowszy // zainicjalizuje bufor for(value in range(step_value()) { buffer.push_back(data.pop_back()) // wypełni bufor liczbą // wartości wymagane do dopasowania // więc teraz bufor będzie zawierał // [elementk, ... , elementk+n] // gdzie bufor[0] < ... < bufor[n] } do { last = bufor [len(buffer)] ... first = buffer[0] Pattern.match(first, ... , last) buffer.pop_front() // usuń pierwszy element buffer.push_back(data.pop_back()) // dodaj kolejny element z tyłu } while (!data.isEmpty()) ... W każdym razie to podstawowe wyobrażenie o tym, co się dzieje. Problem polega na tym, że tak, jak robię to teraz, muszę powtórzyć pętlę, aby zastosować inny wzór. (rozmiary buforów różnią się) Wydaje się to po prostu nieefektywne. Ponadto, co się dzieje, gdy w buforze nie ma więcej danych i nie można go równomiernie podzielić przez liczbę elementów potrzebnych do dopasowania?


title: Dlaczego stare języki programowania są nadal poprawiane?

text: To pytanie nie brzmi: „Dlaczego ludzie wciąż używają starych języków programowania?” Rozumiem to całkiem dobrze. W rzeczywistości dwa języki programowania, które znam najlepiej, to C i Scheme, które pochodzą z lat 70-tych. Ostatnio czytałem o zmianach w C99 i C11 w porównaniu z C89 (który wydaje się nadal najczęściej używaną wersją C w praktyce i wersją, której nauczyłem się od K&R). Rozglądając się, wydaje się, że każdy intensywnie używany język programowania otrzymuje nową specyfikację przynajmniej raz na dekadę. Nawet Fortran wciąż otrzymuje nowe wersje, mimo że większość osób z niego korzystających nadal korzysta z FORTRAN 77. Porównajmy to z podejściem, powiedzmy, systemu składu tekstu TeX. W 1989 roku, wraz z wydaniem TeX 3.0, Donald Knuth oświadczył, że TeX jest kompletny, a przyszłe wydania będą zawierały tylko poprawki błędów. Nawet poza tym stwierdził, że po jego śmierci „wszystkie pozostałe błędy staną się funkcjami” i absolutnie nie będą wprowadzane żadne dalsze aktualizacje. Inni mogą swobodnie forkować TeX i to zrobili, ale powstałe systemy są zmieniane, aby wskazać, że różnią się od oficjalnego TeX-a. Nie dzieje się tak dlatego, że Knuth uważa, że TeX jest doskonały, ale dlatego, że rozumie wartość stabilnego, przewidywalnego systemu, który za pięćdziesiąt lat zrobi to samo, co teraz. Dlaczego większość projektantów języków programowania nie przestrzega tej samej zasady? Oczywiście, gdy język jest stosunkowo nowy, ma sens, że przejdzie przez okres szybkich zmian, zanim się uspokoi. I nikt tak naprawdę nie może sprzeciwić się drobnym zmianom, które nie robią nic więcej niż skodyfikowanie istniejących pseudostandardów lub poprawienie niezamierzonych odczytów. Ale kiedy po dziesięciu czy dwudziestu latach wydaje się, że język nadal wymaga poprawy, dlaczego po prostu go nie rozwidlić lub zacząć od nowa, zamiast próbować zmienić to, co już jest w użyciu? Jeśli niektórzy ludzie naprawdę chcą programować obiektowo w Fortran, dlaczego nie stworzyć w tym celu „Objective Fortran” i zostawić samego Fortrana w spokoju? Przypuszczam, że można powiedzieć, że niezależnie od przyszłych rewizji, C89 jest już standardem i nic nie stoi na przeszkodzie, aby ludzie nadal go używali. To trochę prawda, ale konotacje mają konsekwencje. GCC w trybie pedantycznym ostrzega o składni, która jest albo przestarzała, albo ma nieco inne znaczenie w C99, co oznacza, że programiści C89 nie mogą po prostu całkowicie zignorować nowego standardu. Więc musi być jakaś korzyść w C99, która wystarczy, aby nałożyć ten koszt na każdego, kto używa tego języka. To jest prawdziwe pytanie, a nie zaproszenie do kłótni. Oczywiście mam opinię na ten temat, ale w tej chwili staram się zrozumieć, dlaczego nie tak się już robi. Przypuszczam, że pytanie brzmi: > Jakie są (rzeczywiste lub postrzegane) zalety aktualizacji standardu językowego, > w przeciwieństwie do tworzenia nowego języka na podstawie starego?


title: Czy doktryna 2 jest wystarczająco szybka?

text: Muszę zbudować sieć społecznościową, która spodziewa się bardzo dużego ruchu, 10k - 50k + rejestracji w ciągu dnia, nie uwzględniając nawet odwiedzających, odsłon, przesyłanych obrazów itp., dużej aktywności w bazie danych. Mamy teraz solidny czterordzeniowy serwer dedykowany z 8 GB ddr3 i 2 TB hdd sata. Czy doktryną będzie spowolnienie liczby zapytań i czasu ładowania, aby obsłużyć tak duży ruch w witrynie?


title: Jak mogę zastosować Six Sigma w środowisku programistycznym?

text: Jestem programistą Java, ale poproszono mnie o zapoznanie się z zastosowaniem Six Sigma w celu zwiększenia zysków naszej organizacji. Czytałem, że Six Sigma może być stosowana we wszystkich środowiskach, ale interesują mnie niuanse jej zastosowania w tworzeniu oprogramowania. Jakie koncepcje Six Sigma można zastosować w środowisku programistycznym i jak mogę je skutecznie zastosować? Czy są jakieś zasoby, które omawiają zastosowanie Six Sigma w konkretnym środowisku programistycznym?


title: Praktyczne zastosowanie kontenera do wstrzykiwania zależności (IoC)

text: Tworzę framework MVC-ish w PHP. Próbuję zaimplementować kontener DI, aby umożliwić tworzenie obiektów kontrolera (m.in.). Mój framework MVC jest dość typowy. Każdy moduł (lub komponent, jeśli chcesz) ma kontroler odpowiedzialny za wykonywanie żądań. Te kontrolery modułów zazwyczaj rozszerzają podstawową klasę `Controller`. Wszystkie kontrolery zaakceptują obiekty `Request` i `Response` jako argumenty. Zamieszanie występuje, ponieważ niektóre kontrolery mogą potrzebować różnych argumentów, aby działać. Na przykład: Wiele kontrolerów będzie potrzebować obiektu `Database`; Kontrolery wysyłające pocztę mogą potrzebować obiektu `Mailer`; podczas gdy kontroler, który rejestruje dane, może potrzebować obiektu `Log`. Kontener DI będzie zawierał przepisy na tworzenie wszystkich tych kontrolerów. Mój kontroler frontowy musi mieć możliwość tworzenia dowolnego z tych obiektów kontrolera, zgodnie z żądaniem. Ponadto każdy kontroler musi mieć możliwość stworzenia dowolnego innego kontrolera. **Jak sprawić, by mój przedni kontroler i kontrolery modułów miały dostęp do kontenera DI w sposób, który nie powoduje zależności od kontenera DI przez każdy kontroler?** Właściwie nie mam nic przeciwko temu, że przedni kontroler jest zależny na kontenerze, bardziej martwią mnie kontrolery modułów. Dziękuję,


title: Jak mogę ukryć poufne dane w moim projekcie open source?

text: Mam projekt open source, który przesyła pliki do DropBox między kilkoma hostami plików. W tej chwili zajmuję się screen scrapingiem dla DropBox. Aby korzystać z ich API, muszę na stałe zakodować dostarczony mi SECRET KEY w celu uwierzytelnienia OAuth. Ale obawiam się, że klucz nie będzie tajny, jeśli będzie wyraźnie widoczny dla każdego. „Możliwe” jest, że ktoś złośliwy użyje mojego klucza do przesłania wirusa na konto użytkownika (który już zezwolił na dostęp do mojej aplikacji), który rozprzestrzeni się na jego komputer (jeśli miał włączoną synchronizację pulpitu) i na komputer innych osób (jeśli mieli udostępnione foldery) i tak dalej. :O Znalazłem to pytanie bez odpowiedzi, które ma ten sam problem, co moje. Ale chciałbym wiedzieć ogólnie, jak ukryć poufne dane w projekcie open source. Mam jeden pomysł. * Czy masz symbol zastępczy w kodzie źródłowym, taki jak „<SEKRETNY KLUCZ TUTAJ>” i wypełniaj go tylko podczas tworzenia pliku binarnego do wydania? (fuj!) Jakiś przyzwoity pomysł?


title: Co to jest 'Asp.net Handler'?

text: Przeczytałem w książce „beginning asp.net 4.5 in c#”, że gdy ktoś wpisze adres URL witryny asp.net, przeglądarka wyśle żądanie do serwera i jeśli serwer znajdzie jakiekolwiek znaczniki lub kontrolki ASP.NET, to pozostawi to lub zmapuje to na coś, co nazywa się obsługą asp.net. Więc co to za przewodnik? Czy to sam serwer, czy inna rzecz na serwerze?


title: Codzienne zobowiązania do ekstremalnego programowania

text: Czy codzienne zatwierdzenia (zatwierdzenie wszystkich zmian przed powrotem do domu) nie są praktyką XP? Jakie są korzyści z przestrzegania tego? Jakie jest ryzyko nie przestrzegania tego?


title: Nowoczesny sposób obsługi błędów...

text: Od jakiegoś czasu zastanawiam się nad tym problemem i ciągle znajduję zastrzeżenia i sprzeczności, więc mam nadzieję, że ktoś może wyciągnąć następujące wnioski: ### Preferuj wyjątki zamiast kodów błędów O ile mi wiadomo, od pracy w branży przez cztery lata, czytania książek i blogów itp. Obecnie najlepszą praktyką w zakresie obsługi błędów jest zgłaszanie wyjątków zamiast zwracania kodów błędów (niekoniecznie kodu błędu, ale typu reprezentującego błąd). Ale - wydaje mi się to sprzeczne... ### Kodowanie do interfejsów, a nie implementacji Kodujemy do interfejsów lub abstrakcji, aby zredukować sprzężenie. Nie znamy lub nie chcemy znać konkretnego typu i implementacji interfejsu. Skąd więc możemy wiedzieć, jakie wyjątki powinniśmy szukać? Implementacja może zgłosić 10 różnych wyjątków lub nie może zgłosić żadnego. Kiedy złapiemy wyjątek, na pewno robimy założenia dotyczące wdrożenia? Chyba że - interfejs ma... ### Specyfikacje wyjątków Niektóre języki pozwalają programistom na stwierdzenie, że pewne metody generują pewne wyjątki (na przykład Java używa słowa kluczowego `throws`). Z punktu widzenia kodu wywołującego wydaje się to w porządku - my dokładnie wiedzieć, które wyjątki możemy potrzebować złapać. Ale - wydaje się to sugerować... ### Nieszczelna abstrakcja Dlaczego interfejs powinien określać, które wyjątki mogą być zgłaszane? Co się stanie, jeśli implementacja nie musi zgłaszać wyjątku lub musi zgłaszać inne wyjątki? Na poziomie interfejsu nie ma możliwości sprawdzenia, które wyjątki może chcieć zgłosić implementacja. A więc... ### Podsumowując Dlaczego preferowane są wyjątki, jeśli wydają się (moim zdaniem) sprzeczne z najlepszymi praktykami oprogramowania? A jeśli kody błędów są tak złe (i nie muszę sprzedawać wad kodów błędów), czy jest inna alternatywa? Jaki jest obecny (lub wkrótce będzie) stan techniki w zakresie obsługi błędów, który spełnia wymagania najlepszych praktyk, jak opisano powyżej, ale nie polega na wywoływaniu kodu sprawdzającego zwracaną wartość kodów błędów?


title: Koszt setInterval w JavaScript

text: Mam kod, który chcę uruchomić, gdy do strony zostaną dodane pewne elementy HTML. Aby to zrobić, mam funkcję "runOnRender": runOnRender: function (func, args, interval) { var that = this; var guid = hb.getGuid().substr(0,7); var checkFunc = function () { if (that.$el.height() > 0 && that.$el.width() > 0) { clearInterval(that[guid]); to[przewodnik] = 0; func.call(to, args); } }; this[guid] = setInterval(checkFunc, interwał ||200); } Ustawienie interwału na 200 jest tak wysokie, jak tylko mogę, zanim często pojawia się zauważalne opóźnienie w wyzwalaniu zdarzenia. Ostatnią rzeczą, jakiej chcę, jest to, że moi użytkownicy zastanawiają się, dlaczego przycisk został właśnie kliknięty lub widzą zmianę tekstu etykiety itp. Oto haczyk. Jest całkiem możliwe, że ten "runOnRender" zostanie skonfigurowany.....ale użytkownik nigdy nie powoduje akcji, która spowoduje, że dany element HTML trafi do DOM....co oznacza, że ten kod będzie działał bez końca jako tak długo, jak strona jest otwarta. Jestem na ładnej, potężnej maszynie deweloperskiej.... więc zastanawiam się, jaki jest koszt tego kodu i czy jest lepszy sposób.


title: Języki programowania „wyższy poziom” niż Python

text: Ogólnie rzecz biorąc, zostały mi przedstawione następujące rodzaje hierarchii abstrakcji języka programowania: Assembly < C < C++ < Java < Python, gdzie C abstrakcji jest mniejsze niż C++ i tak dalej. Możesz również rozważyć to na podstawie języka skompilowanego vs przetłumaczonego vs interpretowanego (co zwykle jest rozpatrywany w tym temacie, łącząc C i C++), ale chciałbym myśleć w kategoriach poziomów abstrakcji dla tego pytania. Dialekty Lisp, mój ulubiony język, wydają się różnić w implementacji i mieszczą się pomiędzy nimi, podobnie jak języki takie jak Haskell i Prolog, ale języki takie jak Ruby i Python są niewątpliwie na szczycie. Czy istnieją języki, które są bardziej abstrakcyjne niż Python czy Ruby? Czy te języki są pożądane w użyciu? Rozpoczynając pracę z Lispem/C++, nie spodziewałem się, że tak bardzo spodoba mi się Python i Ruby. Nie spodziewałem się również, że poprawią moje kodowanie, ponieważ możesz użyć funkcji takich jak Scipy's Weave, aby użyć Pythona do wykonywania obliczeń wysokiego poziomu dla większości rzeczy, a następnie obliczeń niskiego poziomu dla kodu wąskiego gardła. Zastanawiam się więc, czy są dostępne języki wyższego poziomu, o których nie wiem i które powinienem wypróbować.


title: Czy naruszyłoby to jakiekolwiek kwestie związane z prawami autorskimi?

text: Obecnie publikuję artykuł na temat wykrywania skóry. Muszę jednak znaleźć odpowiedni rozmiar kosza histogramu dla każdej przestrzeni kolorów. Niedawno natknąłem się na artykuł, który opublikował, co według niego jest idealnym rozmiarem pojemnika. Artykuł można znaleźć pod adresem: http://www.inf.pucrs.br/~pinho/CG/Trabalhos/DetectaPele/Artigos/OPTIMUM%20COLOR%20SPACES%20FOR%20SKIN%20DETECTION.pdf. Mówię konkretnie o Tabeli 1. Jeśli przytoczę źródło, czy będzie w porządku, jeśli użyję danych z tabeli? Zwróć uwagę, że nie mogę skontaktować się z autorem artykułu.


title: Jaki jest preferowany typ mediów internetowych w żądaniu RESTful POST?

text: Czy istnieje preferowany/zalecany typ mediów internetowych dla żądań POST zgodnych z protokołem REST? Na przykład, jeśli chcę dodać nowego użytkownika, czy powinienem wysłać dane jako ciąg zakodowany w adresie URL, taki jak: name=Foo&otherData=Bar, czy REST zaleca wysłanie danych w dowolnym formacie, w jakim ma zostać wysłana odpowiedź (np. JSON/XML)? <user> <name>Foo</name> <other-data>Bar</other-data> </user>


title: po co tworzyć aplikacje mobilne dla programów webowych, skoro można po prostu korzystać ze stron internetowych?

text: Na rynku istnieje wiele frameworków, które zamieniają rzeczywiste strony internetowe w aplikacje mobilne. Zastanawiałem się nad pytaniem - po co tworzyć aplikacje mobilne, skoro można mieć tylko mobilną wersję strony?


title: Czy jest to uważane za implementację wzorca projektowego Template Method?

text: Proszę rozważyć klasę `StringBank`. Ta klasa przechowuje listę Strings i może `zwrócić` je klientowi. Jest to kod (pominięto nieistotne rzeczy): abstract class StringBank{ List<String> strings; public List<String> getStrings(){ for(String string : strings){ if(!stringValid(string)){ strings.remove(string); } } zwraca ciągi; } public abstract boolean stringValid(String s); } Jak widać, `stringValid` jest metodą abstrakcyjną, przeznaczoną do implementacji przez podklasy. W ten sposób podklasy służą jako „filtry” banku ciągów, odfiltrowując nieprawidłowe ciągi (np. konkretna podklasa może zwrócić „false” dla ciągów kończących się „a”). Moje pytanie brzmi: czy jest to uważane za implementację wzorca projektowego Template Method? Celem metody szablonu jest zdefiniowanie kroków algorytmu w abstrakcyjnej nadklasie, a podklasy definiują implementację niektórych z tych kroków. Zwykle 'metoda szablonowa' - gdzie algorytm jest zdefiniowany, wyglądałaby mniej więcej tak: void algorytm(){ step1(); // zaimplementowany w tej klasie step2(); // zaimplementowany w tej klasie step3(); // metoda abstrakcyjna, zaimplementowana w podklasach. krok 4(); // zaimplementowana w tej klasie } Jednak w `StringBank` algorytm jest bardzo prosty, więc wymaga tylko jednego wywołania metody: `stringValid()`. Pozostałe kroki algorytmu są zdefiniowane w samej metodzie (przechodzenie przez ciągi, usuwanie ciągów i zwracanie ich). **`getStrings()` tak naprawdę nie 'wygląda jak 'metoda szablonu', więc nie jestem pewien, czy jest to uważane za implementację wzorca metody szablonu.** Algorytm można opisać jako: 1. Dla każdego ciąg: 1.1. Sprawdź, czy jest prawidłowy. _(realizowane przez podklasy)_. 1.2. Jeśli jest nieprawidłowy, usuń z listy. 2. Zwróć listę ciągów. Czy zdefiniowałbyś opisaną przeze mnie implementację jako implementację wzorca projektowego Template Method, mimo że `getStrings()` nie 'czuje się' jak klasyczna metoda szablonu?


title: Czy korzystasz z testów jednostkowych w pracy? Jakie korzyści z nich czerpiesz?

text: Planowałem przestudiować i zastosować testy jednostkowe do mojego kodu, ale po rozmowie z kolegami niektórzy z nich zasugerowali mi, że nie jest to konieczne i przynosi bardzo małe korzyści. Twierdzą również, że tylko kilka firm faktycznie przeprowadza testy jednostkowe za pomocą oprogramowania produkcyjnego. Jestem ciekaw, w jaki sposób ludzie zastosowali testy jednostkowe w pracy i jakie korzyści czerpią z ich używania, np. lepsza jakość kodu, skrócony czas rozwoju w dłuższej perspektywie itp.


title: walidacja API

text: Posiadamy szereg urządzeń i zdecydowaliśmy się na udostępnienie klientowi do użytku wspólnego API. Klient użyje tego interfejsu API w celu zaprogramowania sprzętu. API zawiera funkcje do nawiązywania połączenia z oprogramowaniem, takie jak X_Open, X_Close, X_SetConfig, X_GetConfig, liczba podłączonego sprzętu, obsługa błędów z odpowiednimi strukturami do wypełnienia przez API lub klienta. Sprzęt będzie oczywiście również walidowany niezależnie. Jakich strategii mogę użyć do walidacji tego interfejsu API? Chcemy przetestować to API, tj. działa zgodnie z oczekiwaniami, na przykład jesteśmy w stanie ustawić Config w h/w lub nie uzyskać żadnych urządzeń na magistrali lub jeśli wywołana zostanie funkcja API X_Open , funkcja jest w stanie nawiązać połączenie z sprzęt zgodnie z oczekiwaniami lub powiedzmy funkcja API X_GetNoDevices zwraca nie. obecnych urządzeń w autobusie. Chcemy sprawdzić, czy wszystkie funkcje API działają zgodnie z opisem dla klienta


title: Jak zaprojektować aplikację opartą na algorytmach i lekką obiektowo?

text: Poza wierzchołkami, krawędziami, ścianami i siatkami, mój projekt/aplikacja do przetwarzania geometrii zawiera tylko około pół tuzina innych elementów, takich jak krzywe na powierzchniach. Jednak większość mojego kodu jest poświęcona obróbce geometrii. Będąc naiwnym programistą, kiedy zaczynałem ten projekt, zaimplementowałem różne algorytmy przetwarzania geometrii jako metody kilku klas, które miałem. W rezultacie niektóre z moich klas są teraz bardzo duże, ponieważ implementują algorytmy przetwarzania geometrii (a zatem obejmują do 5 plików *.cpp) -- bardzo źle. W niektórych przypadkach zaimplementowałem również algorytmy jako klasy na swoich prawach. W związku z tym mam teraz klasy, które tak naprawdę nie są bytami. Teraz mam z tym problem, ponieważ teraz uważam, że klasy powinny być obiektami z możliwością tworzenia instancji, a ich metody rzeczami, które robią. Jednak przestrzeganie tej zasady doprowadziło do dużych plików. Jednocześnie odejście od niej doprowadziło do powstania klas, które nie mają sensu jako byty konkretyzowalne, np. klasa geodezyjna. W każdym razie planuję przeprojektowanie tego projektu i chętnie doradzę, jak zaprojektować moje zajęcia. Jedną z rozważanych przeze mnie opcji jest zaimplementowanie każdego algorytmu jako zbioru metod w przestrzeni nazw. Jednak ponieważ przestrzenie nazw nie mają zmiennych instancji, będzie wiele argumentów przekazywanych między metodami - znowu nie jest to zbyt przyjemne.


title: Zmień mój sposób myślenia przygotowując się do programowania funkcjonalnego

text: Przechodząc na funkcjonalny styl programowania po przejściu z proceduralnego i OOP, jakie rzeczy muszę wiedzieć z góry o „tym nowym sposobie myślenia”? Jak przygotowujesz się do nurkowania w świecie FP i zdobywasz go za pierwszym razem? Jakie są podstawy, których należy się nauczyć i najpierw je wyprostować?


title: Jaka jest najlepsza lekcja, jakiej nauczyłeś się w swojej karierze?

text: Myślę, że moje jest "nie ma czegoś takiego jak pięciominutowa praca" - programiści mają tendencję do zbytniego optymizmu co do rozwoju i że powinniśmy naprawdę przemyśleć implikacje, zanim obiecamy szybkie rozwiązanie problemu, a następnie zagłębimy się w kod


title: Czy warto oceniać optymalizację kompilatora w trywialnych przypadkach?

text: Obecnie testuję Visual C++ 10 na kilku trywialnych fragmentach kodu. Na przykład taki jak ten (zaczerpnięty stąd): int main() { int i; clrscr(); for(i=0,i++,i<=5;i++,i<=2;i=0,i<=5,i+=3){ printf("%d",i); } zwróć 0; } Dla powyższego kodu kompilator emituje kod maszynowy, który w efekcie robi to: clrscr(); printf("%d", 2); zwróć 0; i to mnie uszczęśliwia. Czasami kompilator emituje naprawdę głupi kod, a następnie przesyłam element opinii Microsoft Connect. Mam następujące obawy. Czy warto testować kompilator na trywialnym kodzie? Z jednej strony chcemy, aby prawdziwy kod był skompilowany tak dobrze, jak to możliwe, a nie jakieś głupie fragmenty próbek. Z drugiej strony optymalizacja kompilatora jest rekurencyjna w tym sensie, że jeśli kod B podąża za kodem A, a kompilator widzi, że kod B nic nie robi, może wyeliminować kod B i wyeliminować logicznie wszystkie połączenia A i B, a tym samym zoptymalizować (i być może wyeliminować) kod Lepiej. A jeśli kompilator nie zoptymalizuje kodu B, prawdopodobnie nie będzie też w stanie zoptymalizować kodu A. Tak więc każde ulepszenie wygenerowanego kodu ma znaczenie - lepszy kod w pewnym momencie może oznaczać lepszy kod gdzie indziej i jest to korzystne. Czy warto testować kompilatory na trywialnych próbkach, czy tylko testy na "prawdziwym kodzie" są warte?


title: Bogata warstwa dostępu do danych

text: Sytuacja: dba jest zewnętrznym wykonawcą, który przechowuje cały kod DAL w TFS. Byłoby fajnie, jako front-end developer, móc dodawać kolumny, modyfikować procesy i tak dalej, bez konieczności czekania, aż ten koleś odpowie na twoje e-maile, aby wykonać pracę. Pytanie: Jakie byłoby zalecane rozwiązanie/proces, który umożliwiłby szybszy/zwinny rozwój, przy jednoczesnym zachowaniu integralności danych oraz miłości i szczęścia w zespole?


title: Dynamiczne tworzenie metod w pytonie

text: Mam klasę, która będzie miała kilka metod zewnętrznych, które wywołają ten sam mniejszy zestaw metod wewnętrznych. Czyli coś takiego: obj.method_one(a, c) i obj.method_two(a, c) gdzie obj.method_one wywołuje obj._internal_method(a, c, y) a obj.method_two wywołuje obj._internal_method(a, c, z ). Są prawie identyczne, ale mają na końcu jeden argument, który różni się w wywołaniu wewnętrznym (który jest stały). Mógłbym po prostu skopiować i wkleić kilka razy, ale zastanawiałem się, czy istnieje sposób na dynamiczne tworzenie tych zewnętrznych metod.


title: Nie mogę się zmusić, aby usiąść i zacząć kodować

text: Ostatnie 5 miesięcy spędziłem pracując na co dzień (qa) i wieczorami rozwijając aplikację na Androida. Teraz byliśmy na dwutygodniowych wakacjach na Boże Narodzenie i spędziłem cały czas na rozwijaniu mojej aplikacji, a teraz czuję się wyczerpany, po prostu nie mogę usiąść i zacząć pisać kodu od nowa. Po prostu czuję się jak ogromna góra ciężaru, którą muszę podnieść, nawet o tym myśląc. Czy to normalne? Czy z czasem sytuacja się pogorszy? Jestem w branży IT od 9 miesięcy, 6 z nich, jak wspomniałem, było bardzo intensywnych. 25 lat. Myślę też, że warto wspomnieć, że bardzo szybko i intensywnie się uczę i cały czas wyprzedzam siebie. Czy wypalę swój potencjał? PS: Dlaczego ktoś miałby odrzucić moje pytanie? co złego lub złego zrobiłem? Której zasady nie przestrzegałem?


title: Jaki jest najlepszy sposób na przełączanie awaryjne w trybie offline klienta stacjonarnego korzystającego z usługi sieci Web?

text: Mam trzy nadchodzące projekty, które mają wspólny problem: > muszą mieć logikę w systemie webowym i potrzebują lokalnej > aplikacji (np. punktu sprzedaży), która komunikuje się z takim systemem poprzez > usługę sieciową RESTful. ### Moje rozwiązanie Rozwiązaniem, które udało mi się wymyślić, jest zaimplementowanie w aplikacji desktopowej kolejkowania wiadomości do przechowywania operacji w trybie offline, a dokładniej asynchronicznego kolejkowania wiadomości. Jednak to jest najłatwiejsza część (jeśli takie jest najlepsze rozwiązanie). Zajmuję się również synchronizacją danych i rozwiązywaniem konfliktów. Główny system musi być oparty na sieci, ponieważ do raportowania i monitorowania przez interesariuszy wymagana jest aplikacja sieciowa, a usługi sieciowe będą obsługiwać żądania kilku zakładów. Klienty desktopowe (najlepiej cienkie) zostaną zaimplementowane za pomocą Javy (dokładniej Netbeans), a system webowy za pomocą Symfony2. Dwa z projektów wymagają integracji sprzętowej klienta, więc stworzenie aplikacji desktopowej z technologią webową (np. Appcelerator Titanium) może być dużym problemem. ### Moje pytanie 1. Jakie jest lepsze rozwiązanie skalujące się, czyli maksymalna wydajność przy minimalnym nakładzie pracy (a najlepiej bez dodatkowych kosztów, takich jak zakup serwera zapasowego do pracy lokalnej)? 2. Kto jeszcze zajmował się tym wcześniej? Jak rozwiązałeś swój problem? Jakimi lekcjami możesz się podzielić? 3. Jak poradziłeś sobie z synchronizacją? **Edytuj: Dodano brakującą część do mojego pytania w punkcie #3**


title: Jaka jest nowa strategia zarządzania wydaniami Mozilli?

text: Widziałem dzisiaj, że FireFox wypuścił nową wersję (5). Próbowałem przeczytać o tym, co zostało dodane i wpadłem na ten link: http://arstechnica.com/open-source/news/2011/06/firefox-5-released-arrives-only-three-months-after-firefox-4 .ars Stwierdza, że: > Mozilla uruchomiła Firefox 5, nową wersję popularnej przeglądarki internetowej o otwartym kodzie źródłowym. > Przeglądarka. Jest to pierwsza aktualizacja wydana przez Mozillę od czasu przyjęcia > **nowej strategii zarządzania wydaniami**, która drastycznie skróciła > cykl rozwoju Firefoksa. Bardzo mnie to intryguje – masz jakiś pomysł, na czym polega ta nowa strategia?


title: Aplikacja łącząca się z serwerem bazy danych

text: Pracuję nad aplikacją, która wymaga poświadczeń użytkownika i tak dalej. Więc baza danych jest wymagana na zapleczu. Jaka jest najlepsza praktyka łączenia się z bazą danych bez zakodowania w niej hasła? Program może być poddany inżynierii wstecznej i można uzyskać hasło, którego oczywiście nie chcemy.


title: Projektowanie API usług danych

text: Projektujemy usługę danych, która będzie przechowywać dużą liczbę statystyk dotyczących akcji, w tym dane historyczne. Klientem będzie aplikacja internetowa, która będzie musiała pobierać różne bity danych, aby pokazać się w różnych miejscach na stronie. Ponieważ różne miejsca muszą pokazywać różne zestawy statystyk, nie jest rozsądne, aby usługa oferowała po prostu jedną metodę, która pobiera wszystkie dane, które posiadamy. Ponieważ istnieje tak wiele różnych typów statystyk, usługa nie jest świadoma typu każdego z nich i po prostu przechowuje je według klucza. Wcześniej próbowaliśmy sobie z tym poradzić, stosując szereg metod, które zwracały obiekty danych o różnym poziomie szczegółowości, na przykład getBasicStockInfo, getStockInfo, getFeaturedStockInfo, getStockDetails. Problem, który znalazłem, polegał na tym, że dodawanie nowych elementów danych do obiektów stało się nużące (konieczność zmiany kodu serwera), a każdy z nich z czasem się rozdęwał, gdy dodawane są pola dla niektórych określonych lokalizacji w interfejsie użytkownika. Z drugiej strony niepraktyczne byłoby posiadanie metody dla każdej lokalizacji w interfejsie użytkownika, która zwraca określone dane, które są potrzebne w tej lokalizacji. Czy ktoś ma jakieś pomysły, jak najlepiej poradzić sobie z tą sytuacją? Jedną z rzeczy, którą rozważam, jest to, że klient musiałby wysłać listę kluczy danych dla żądanych danych i odzyskać mapę statystyk. Nie jestem pewien, czy to jest droga, ponieważ waga parametrów byłaby dość ciężka, gdy te same parametry byłyby wielokrotnie przekazywane z każdej lokalizacji w aplikacji internetowej.


title: Jaka jest najlepsza praktyka obsługi wyjątków SOA?

text: Oto interesująca debata, jaka toczy się między mną a moim kolegą podczas zajmowania się wyjątkami SOA: Z jednej strony popieram to, co powiedział Juval Lowy w Programowaniu usług WCF 3rd Edition: > Jak wspomniano na początku tego rozdziału, jest to powszechna iluzja że > klienci przejmują się błędami lub mają coś sensownego do zrobienia, gdy się pojawią. > Każda próba wpajania takich możliwości klientowi stwarza nadmierny > stopień sprzężenia między klientem a obiektem, rodząc poważne pytania > dotyczące projektu. Skąd klient może wiedzieć więcej o błędzie niż usługa >, chyba że jest z nią ściśle powiązana? Co się stanie, jeśli błąd powstał > kilka warstw poniżej usługi — czy klient powinien być połączony z tymi > warstwami niskiego poziomu? Czy klient powinien spróbować połączenia ponownie? Jak często i jak > często? Czy klient powinien poinformować użytkownika o błędzie? Czy jest użytkownik? > Dzięki temu, że wszystkie wyjątki usług są nie do odróżnienia od siebie, WCF > oddziela klienta od usługi. Im mniej klient wie o tym, co wydarzyło się > po stronie usługi, tym bardziej oddzielona będzie interakcja. Z drugiej strony, oto co sugeruje mój kolega: > Uważam, że jest to po prostu niepoprawne, ponieważ nie jest zgodne z najlepszymi praktykami w > budowaniu architektury zorientowanej na usługi i ignoruje ogólną ideę > że są problemy, które użytkownicy są w stanie naprawić z, takich jak nie > poprawne kluczowanie wartości. Jeśli rozważymy tylko wyjątki systemowe, być może > ten pomysł się utrzyma, ale wyjątki systemowe są tylko częścią wyjątku > domeny. Wyjątki możliwe do odzyskania przez użytkownika to druga część domeny i prawdopodobnie występują > regularnie. Uważam, że prawidłowym sposobem budowania architektury zorientowanej na usługi jest mapowanie sytuacji możliwych do odzyskania przez użytkownika na sprawdzone wyjątki, a następnie skierowanie każdego sprawdzonego wyjątku z powrotem do klienta jako unikalnego wyjątku, który programiści aplikacji klienckich są w stanie odpowiednio obsłużyć. Przesyłaj wszystkie wyjątki środowiska wykonawczego z powrotem do klienta jako > wyjątek systemowy, wraz ze śladem stosu, aby łatwo > rozwiązać problem z główną przyczyną. Chciałbym wiedzieć, co o tym myślisz.


title: GPL i OpenJDK: pytania dotyczące nagłówków źródłowych

text: Mam kilka pytań prawnych dotyczących nagłówka źródłowego OpenJDK: /* * Copyright (c) 1997, 2008, Oracle i/lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone. * NIE ZMIENIAJ ANI NIE USUWAJ INFORMACJI O PRAWACH AUTORSKICH LUB TEGO NAGŁÓWKA PLIKU. * * Ten kod jest darmowym oprogramowaniem; możesz go rozpowszechniać i/lub modyfikować * tylko na warunkach Powszechnej Licencji Publicznej GNU w wersji 2, * opublikowanej przez Free Software Foundation. Oracle określa * ten konkretny plik jako podlegający wyjątkowi „Ścieżka klasy”, zgodnie z * dostarczonym przez Oracle w pliku LICENSE dołączonym do tego kodu. (...) * Czy jest zgodne z GPL zdefiniowanie komentarza w pliku źródłowym (w tym przypadku nagłówka) jako „nie wolno go modyfikować”? * Czy inne projekty open-source na licencji GPL pochodzące z tych źródeł muszą przestrzegać tego „oświadczenia”? * Czy Oracle naprawdę ma prawa autorskie do tych źródeł GPL? * Czy jest zgodne z GPL stwierdzenie, że **_tylko_** wolno `modyfikować [oprogramowanie] na warunkach Powszechnej Licencji Publicznej GNU w wersji 2`? * Co to oznacza dla projektów open source na GPLv3, które korzystają z tych (prawdopodobnie zmodyfikowanych) źródeł? * Czy muszę się obawiać edytowania (i publikowania) tego pliku (i może dodania czegoś do nagłówka pliku) w moim własnym projekcie open source na GPLv3?


title: Używaj protokołów Objective-C, takich jak interfejsy Java

text: Jestem programistą Java przechodzącym na Objective-C. Do tej pory w Objective-C widziałem protokoły szeroko używane do implementacji wzorca delegatów, ale nie widziałem wtedy, aby dodać warstwę abstrakcji w sposób, w jaki używa się interfejsów Java. Mój instynkt podpowiada mi, że używam protokołów do definiowania kontraktu i dodawania warstwy abstrakcji, abym mógł później zastąpić inną konkretną klasę. Czy to idiomatyczne w Objective-C, czy też ludzie mają tendencję do używania `@interface` do definiowania kontraktu dla konkretnej klasy i używania go bezpośrednio?


title: Czy mam błędne pojęcie o inżynierii oprogramowania?

text: Witam ludzi, mam pytanie, które zadała mi moja ostatnia praca (raczej stażysta). Żeby umieścić rzeczy w kontekście - mam 21 lat i wcześniej skończyłem drugi rok studiów. Mam około 2 lata doświadczenia w pracy administratora systemu / kontroli jakości i w zasadzie mogę powiedzieć, że widziałem, jak różne Działały sektory IT. Przenieśmy się do teraźniejszości, a oto ja ląduję na stażu w jednej z czołowych instytucji badawczych w Wielkiej Brytanii. To, co muszę zrobić, to stworzyć kilka wewnętrznych narzędzi przy użyciu mieszanki technologii - głównie AWS/Java/Bash - masz obraz. Wszystko w porządku, wykonuję swoją pracę, ALE nie jestem zadowolony. Dlaczego tak jest - ponieważ oczekuje się ode mnie pracy doraźnej. To znaczy tworzyć rzeczy szybko, nie tracąc czasu na projektowanie. Mój kierownik wyraźnie powiedział, że oczekuje się, że będzie „szybko” rozwiązywać problemy w miarę ich pojawiania się, a my zasadniczo. W konsekwencji okazało się, że rzeczy trzeba było przerobić i przeprojektować, a nadal nie są idealne. Jeśli chodzi o testowanie - ogranicz je do minimum, dopóki wygląda na sprawne, to jest OK. Czy mam winę, że nie zgadzam się z takim sposobem prowadzenia pracy? Czy źle jest chcieć przemyśleć system jako całość, a następnie skupić się na różnych komponentach i zobaczyć, jak mogą one ze sobą współpracować, aby skupić się na różnych „kluczowych punktach”, które mogą okazać się problematyczne w przyszłości? Czy to przestępstwo chcieć wykonać dobrą robotę, a nie „szybką robotę”? Czy próba zbadania struktur danych mających zastosowanie do problemu, aby móc wybrać najlepszą w zależności od konkretnego zestawu problemów, jest błędem lub niewłaściwym podejściem? Zgodnie z moim najlepszym zrozumieniem, bit „Inżynieria” w „Inżynierii oprogramowania” ma związek z tym właśnie - zbadać domenę problemu i znaleźć świadome rozwiązanie, a następnie udoskonalić w razie potrzeby? Byłem na rozmowie kwalifikacyjnej w biurze Arm w Wielkiej Brytanii i pokazali mi swój pokój SCRUM i wyglądało na to, że mają całkiem niezły pomysł, jak zarządzać swoim projektem - mieli zaległości, mieli metryki, jak długo każdy problem może wymagać rozwiązania - zwykłe rzeczy dla SCRUM - zupełnie inne niż sposób, w jaki wszystko działa "tutaj" Czy ogólnie zbudowałem błędny pogląd na temat branży oprogramowania? Chciałbym usłyszeć twój wkład w tej sprawie. Mam na myśli, że "wszedłem" w tworzenie oprogramowania tylko dlatego, że chcę tworzyć rzeczy - proste i proste, ale chcę tworzyć rzeczy wysokiej jakości. Chcę, aby moje oprogramowanie było używane w różnych scenariuszach, chcę, aby było ono kuloodporne – czy nie jest to siła napędowa wszystkich inżynierów oprogramowania? Myślę, że każdy może zostać programistą/koderem, po prostu ucząc się składni, ale dla mnie prawdziwa zabawa zaczyna się wtedy, gdy trzeba wymyślić projekt, który jest wykonalny w prawdziwym świecie. Kiedyś robiłem swoje zadania na uniwersytecie, po prostu na nie patrząc i od razu zaczynałem kodować, i mogłem łatwo uzyskać oceny powyżej 75% i nigdy nie doceniałem modułu „cyklu rozwoju oprogramowania”. Ale teraz, kiedy zobaczyłem w prawdziwym świecie, jak źle jest pracować bez formalnego procesu i frustrację, która jest nieodłączną częścią sytuacji, w której nie wiesz, czy wymagania się zmienią jutro (och, czy powiedziałem, że nie nie masz jasno zdefiniowanej analizy wymagań?) Naprawdę lubię wierzyć, że właśnie wylądowałem na pozycji, w której niektórzy ludzie potrzebowali po prostu małpy kodu, aby wykonać swoją brudną robotę, a tak nie jest, jak działa świat oprogramowania.


title: Zagadka nazewnictwa klas

text: Pracuję nad osobistym projektem, który działa z bazami danych i w tym projekcie mam zestaw klas, które są _podobne_, więc dziedziczą po wspólnej klasie bazowej. Problem, z którym się zmagam, polega na tym, że mam dokuczliwe wrażenie, że nazwy klas, które wywodzą się z klasy bazowej, tak naprawdę nie odzwierciedlają tego, czym w rzeczywistości są. Zastrzeżenie: Proszę zignorować fakt, że wygląda to na wynalezienie koła na nowo. To jest punkt projektu. Wspólna klasa bazowa nazywa się Entity. Jego celem jest służenie jako podstawa dla: 1. Klas opisujących dane zwracane przez zapytanie SQL lub procedurę składowaną lub 2. Klas opisujących zapytanie SQL lub procedurę składowaną oraz ich parametry. Obie te klasy są tworzone przez konsumentów zestawu w celu opisania procedur składowanych i zapytań w ich bazie danych oraz danych, które z niej będą pobierać. Na przykład są one przeznaczone do pracy z bazą danych Northwind: public class Employee : DataEntity { public int EmployeeId { get; ustawić; } ciąg publiczny Nazwisko { get; ustawić; } ciąg publiczny Imię { get; ustawić; } } [Sql(@"SELECT [IdentyfikatorPracownika], [Nazwisko], [Imię] FROM [Pracownicy] ORDER BY [Nazwisko], [Imię]") public class SelectEmployee : SqlEntity { public int EmployeeId { get; ustawić; } } W obecnej formie wywołuję obecnie pierwszą z tych jednostek danych i drugą jednostkę SQL. Nie jestem jednak do końca pewien, czy są to odpowiednie warunki. Na przykład, czy faktycznie są to _modele_? Czy jest lepsze określenie, którego nie rozważam? Zestaw uwzględnia tylko właściwości publiczne, które mają zarówno metodę pobierającą, jak i ustawiającą. Deweloper może dodać do niego wszystko, jeśli zajdzie taka potrzeba. Tak więc jednostka danych może zostać rozszerzona o dodatkowe funkcje. Każda rada byłaby bardzo mile widziana. **EDYTUJ** Warto zauważyć, że możesz również modelować procedury składowane za pomocą tych rzeczy (ponownie, używając procedury składowanej bazy danych Northwind): [Sql()] public class CustOrderHist { [Parameter("@CustomerId", SqlDbType = SqlDbType. NChar, MaxLength = 5)] ciąg publiczny CustomerId { get; ustawić; } } Zestaw automatycznie wiąże klasy z procedurami składowanymi, a właściwości z parametrami.


title: Gdzie mogę uzyskać bezpłatne publiczne nieprzetworzone dane?

text: _W tworzeniu stron internetowych, mashup to strona internetowa lub aplikacja, która wykorzystuje i **łączy dane** , prezentację lub funkcjonalność z dwóch lub więcej źródeł w celu tworzenia nowych usług._ Istnieje wiele źródeł pozyskiwania danych (informacji surowych). Dobrym przykładem są rządy. Jednak wiele z nich kosztuje i ma skomplikowane licencje. Na przykład SMHI w Szwecji sprzedaje dane o temperaturze, podczas gdy sąsiednia Norwegia udostępnia je za darmo. Można by powiedzieć, jaką aplikację budujesz i jakich danych potrzebujesz? Powiedziałbym, że daj mi kilka interesujących danych, a zrobię z nich dobry mashup. Mógłbym po prostu narysować to na przykład na mapach Google. Więc pytanie brzmi: **Gdzie mogę uzyskać darmowe dane?** Uwaga: Nie jestem zainteresowany eksploracją danych za pomocą robota internetowego! Proszę podziel się ze mną swoimi źródłami.


title: Czego szukać w kimś, aby zapewnić krótkoterminową ochronę dla samotnego dewelopera?

text: W naszym intranecie działa autorska aplikacja ASP.NET. W naszym zespole jestem jedyną osobą techniczną, co oznacza, że moja rola obejmuje wszystko, od programowania, przez administrację serwerami, po „drukarka nie działa”. Za kilka miesięcy, po skończeniu dużej przeróbki, biorę kilka tygodni urlopu i potrzebujemy kogoś, kto pokryje ten okres. Nie wiem, jakiego zestawu umiejętności powinniśmy szukać w krótkim okresie. Będąc głównym ulepszeniem, będą oczywiście występowały błędy, chociaż będą one wystarczająco długie, aby poradzić sobie z tymi, które są szczególnie niepokojące i/lub powszechne. Z tego punktu widzenia myślę, że biorąc pod uwagę krótkie ramy czasowe dostanie się programisty byłoby złym wyborem (małe błędy mogą poczekać, duże złe błędy, które pozostałyby prawdopodobnie tego rodzaju doświadczenie i czas na naukę systemu trzeba to naprawić, oczywiście nalegam na laptopa i VPN, aby sobie z tym poradzić, jeśli tak się stanie). Patrząc w ten sposób, myślę, że preferowaną trasą byłaby osoba z umiejętnościami administrowania serwerami (będąca w stanie utrzymać serwery w stanie awarii, jeśli to konieczne, zrestartować usługi itp.), chociaż nadal pozostawia wiele swobody w szczegółach, aby spojrzeć dla. Również pomimo powyższej opinii na temat pozyskania programisty, możliwość przejrzenia kodu, aby wskazać, gdzie błąd wchodzi w interakcję z serwerami, może oczywiście być przydatna. Połowa problemu polega oczywiście na tym, że jest wiele do omówienia, a nic szczególnie nie wyróżnia się jako duży obszar, na którym można się skupić. Oto zestawienie tego, co mamy, wszelkie rady lub pomysły byłyby bardzo mile widziane. * Własna aplikacja ASP MVC2, zawiera trochę niestandardowego JavaScript w interfejsie użytkownika * Legacy ASP Classic (niektóre obszary intranetu, które nie zostały jeszcze zaktualizowane, działają w tandemie z aplikacją MVC) * Instalacja Mediawiki działająca na Apache i MySql na Windows * Serwery działają pod kontrolą systemu Windows 2008 i SQL2008 * Skrypty tworzenia kopii zapasowych Powershell * Prosty zwrotny serwer proxy w języku C# (intranet używa uwierzytelniania systemu Windows, zezwalamy zewnętrznej organizacji na dostęp do intranetu, więc ten serwer proxy działa jako ich brama i uwierzytelnia się jako znany użytkownik ogólny)


title: Czy argument lub parametr jest uważany za bardziej odpowiedni dla argumentu funkcji/metody/parametru?

text: Mam nadzieję, że temat nie jest zbyt zagmatwany, ale jestem ciekawy, ponieważ ostatnio coraz częściej widuję użycie słowa parametr do oznaczania wartości przekazywanych funkcji, podczas gdy podczas moich studiów mam wrażenie, że argument był używany prawie wyłącznie. Czy parametr jest bardziej odpowiedni, ponieważ argument jest bardziej specyficzny dla argumentów programu określonych w czasie wykonywania, podczas gdy gdy funkcja jest wywoływana, przekazywane do niej wartości są parametrami samej funkcji? Od ciekawskiego programisty.


title: Metodologia pobierania dużych zbiorów danych XML w kawałkach

text: Pracuję na serwerze HTTP w Delphi, który po prostu odsyła niestandardowy zestaw danych XML. Nie stosuję żadnego standardowego formatowania, takiego jak SOAP. Mam system działa bezproblemowo, z wyjątkiem jednej małej usterki: gdy mam bardzo duży zestaw danych do odesłania do klienta, przesłanie wszystkich danych może zająć do 2 minut. Serwer HTTP, który buduję, jest zasadniczo opartym na danych XML API wokół bazy danych, implementującym wspólną regułę biznesową - dlatego żądania są specyficzne dla danych znajdujących się za systemem. Kiedy na przykład pobieram duży zestaw danych produktu, chciałbym to rozłożyć i odesłać kawałek po kawałku. Jednak pojedyncze żądanie HTTP wywołuje pojedynczą odpowiedź. Niekoniecznie mogę nadal karmić klienta wieloma różnymi pakietami XML, chyba że klient wyraźnie tego zażąda. Nie mam zarządzania sesjami, ale klucz API. Wiem, że gdybym miał sesje, mógłbym tymczasowo utrzymywać zestaw danych dla klienta, a oni mogliby żądać jego fragmentów. Jednak bez zarządzania sesjami musiałbym wykonać zapytanie SQL wiele razy (dla każdego fragmentu danych), a w międzyczasie, jeśli te dane ulegną zmianie, „strony” mogą się popsuć, powodując wyświetlanie elementów na niewłaściwych stronach, po przejściu na inną stronę. Jak się z tym powszechnie obchodzi się? Jaka jest metodologia dzielenia dużego zestawu danych XML na porcje w celu zaoszczędzenia obciążenia?


title: Czy ten kod jest zawsze efektywny przy znajdowaniu array[max]?

text: Próbuję znaleźć maksymalną wartość tablicy, najpierw skracam moją tablicę od min do max, po czym używam array[array.length-1] Czy ta logika jest wydajna w dużych tablicach? public static int findMax(int[] array){ Arrays.sort(array); int max = tablica[tablica.długość-1]; powrót max; }//metoda zakończenia


title: Jak należy obsłużyć manipulację poddrzewem XML w publicznym API?

text: Pracuję nad interfejsem API, w którym określone wywołanie zastąpiłoby poddrzewo dokumentu XML — zakorzenione w jakimś elemencie — innym poddrzewem. Dwie opcje, które rozważam w odpowiedzi na to wywołanie, to: * Zwróć DOM * Zwróć zmodyfikowane poddrzewo W interesie opracowania ustandaryzowanego, stabilnego API, chciałbym to zrobić dobrze. Czy istnieje najlepszy sposób na poradzenie sobie z tego typu scenariuszem? Jakie są zalety i wady robienia tego w jedną stronę w drugą? Czy byłoby sensowne oferowanie obu tych opcji konsumentom API?


title: Wysyłanie danych do określonego urządzenia z Androidem

text: Planuję aplikację zawierającą funkcjonalność karty członkowskiej, w której użytkownik może złożyć zamówienie w aplikacji lub telefonicznie do sprzedawcy. Po złożeniu zamówienia, zwłaszcza w przypadku telefonu w zamówieniu, jakie byłoby najlepsze podejście, aby strona dostawcy przekazywała odpowiednie szczegóły do konkretnego urządzenia. Sprawdziłem C2DM Androida, to nie wydaje się być najlepszą metodą. Nie chcę wysyłać wiadomości/danych do wszystkich urządzeń z zainstalowaną aplikacją, tylko do konkretnego urządzenia, które złożyło zamówienie.


title: Cytowane od tyłu symbole, dobre czy złe?

text: Projektuję język programowania, który ma trzy rodzaje cytowanych jednostek: ciągi znaków i znaki, jak w C oraz symbole (ciągi wewnętrzne przeznaczone do użycia jako klucze wyszukiwania itp.), które uważam za jedną z najbardziej ujmujących cech Lispa. Obecnie mam dla nich następującą składnię: "*" // Ciąg '*' // Znak `*` // Symbol, który bardzo mi się podoba, ale ma kilka potencjalnych problemów: 1. Powiedziano mi, że na jakiejś klawiaturze układy, backquote jest uciążliwe do pisania. 2. Cytat wsteczny i ' nie są najbardziej wizualnie wyróżniającymi się znakami, a kilka razy zdarzyło mi się pisać ', gdy miałem na myśli cytat odwrotny. W mojej konfiguracji nie stanowi to problemu, ponieważ mam ustawione podświetlanie składni UltraEdit, aby wyświetlać symbole w cudzysłowie na zielono, więc błąd jest natychmiast widoczny, ale oczywiście nie mogę zapewnić podświetlania składni dla większości edytorów, z których korzystają ludzie, więc przynajmniej na początku większość użytkowników nie będzie miała korzyści z tego rodzaju specjalnej kolorystyki. Biorąc pod uwagę te potencjalne problemy, chciałbym uzyskać informację zwrotną na temat opcji, które ludzie uważają za preferowane: 1. Zachowaj składnię taką, jaką mam teraz. 2. Zamień backquote i ', aby ' był używany dla symboli, a backquote dla stałych znakowych. 3. Użyj ' dla symboli, @"*" dla stałych znakowych (np. w kodzie jądra Linuksa stałe znakowe są mniej więcej trzydzieści razy rzadsze niż stałe łańcuchowe, więc prawdopodobnie można nadać im nieco bardziej gadatliwą składnię) i zacytuj coś odwrotnego w przeciwnym razie, być może surowe (większość nieinterpretowanych kodów ucieczki) ciągi. 4. Użyj ' dla symboli, @"*" dla stałych znakowych i całkowicie zrezygnuj z używania backquote.


title: Zaproponuj najlepszą praktykę tworzenia klasy Constants

text: Między członkami mojego zespołu toczy się debata na temat deklaracji klasy Constants. Przenosimy zmienne stałe do osobnej klasy, jak poniżej public class Contants { public const string StateId = "ST"; public const ciąg CountryId = "CI"; } niewielu członków mojego zespołu sugeruje zadeklarowanie klasy jako zapieczętowanej, aby uniknąć nadpisania opcji, a niewielu sugeruje się oznaczenie jej jako statycznej, aby uniknąć tworzenia instancji stałej klasy. Jednak wolałem mieć go jako Sealed ze statycznym konstruktorem, ponieważ pomoże nam to zainicjować zmienne tylko do odczytu w przyszłości. Proszę o poradę..


title: Nazwa drzewa, w którym węzły zawierają odniesienie do swojego rodzica, a także ich dzieci

text: Tworzę drzewo, w którym niektóre węzły mają odniesienie do swojego rodzica, a także ich dzieci. Wydaje się, że jest to drzewiasta wersja podwójnie połączonej listy. Czy jest na to nazwa?


title: Synonimy operatorów

text: W przypadku nowo zaprojektowanego języka funkcjonalnego rozważ m.in. operator _nie równa się_, pisany `/=`, jak to jest powszechne wśród języków funkcyjnych. Oczywiście operator ten jest również znany jako `!=` w językach z rodziny C i `<>` w SQL i in. Łatwo byłoby sprawić, by parser zaakceptował je jako synonimy, w nadziei, że zmniejszy liczbę rzeczy, o które może potknąć się ktoś niezbyt obeznany z językiem. Ale czy jest to pożyteczna rzecz do zrobienia, czy po prostu dodaje więcej zamieszania, niż jest to warte? Większość języków głównego nurtu nie zapewnia synonimów, prawdopodobnie dlatego, że są one przeznaczone dla programistów, którzy znają składnię. Ale co, jeśli projektujesz język skryptowy dla scenariuszy, w których wielu użytkowników nie będzie się z nim zbyt dobrze znało i może być specjalistami w czymś innym niż programowanie? Czy to przechyla szalę na korzyść podawania synonimów, aby ułatwić początkującym?


title: Hakowanie biblioteki Python "Requests".. Jak zacząć jako średniozaawansowany pythonista?

text: Moje pytanie jest koncepcyjne, ale niezwykle ważne dla mnie. Jestem średniozaawansowanym programistą Pythona. Wiem o tym wystarczająco uczciwie i faktycznie używam go na co dzień. Teraz chciałbym zmienić moje możliwości z użytkownika biblioteki/API na "projektanta". Odkryłem, że biblioteka „Python Requests” autorstwa **Kennetha Reitza** jest niezwykle dobrym miejscem do odkrywania wzorców i idiomów Pythona. Muszę nauczyć się dzielić duży problem na podstawowe „moduły”, definiować wymagane klasy/funkcje i używać ich do wspólnej pracy. Brakuje mi takiej dyscypliny i tęsknię za tą wiedzą. Jak mam zagłębić się w tę bibliotekę? Jest **duża** , z wieloma modułami (oczywiście z nazwami logicznymi), klasami i metodami. Zacząłem czytać kod, ale nie wiem, gdzie jestem i do czego ta część kodu jest przeznaczona.


title: Jak zapewnić klienta, że zrealizujemy nasz projekt i nie uciekniemy z pieniędzmi?

text: Postanowiłem pracować jako freelancer. Opracowałem oprogramowanie i z powodzeniem przeprowadziłem prezentację. Klientowi się spodobało i zgodził się na realizację projektu w swojej organizacji. Ale klient poprosił mnie, abym upewnił się, że nie ucieknę z pieniędzmi bez ukończenia projektu. Koszt projektu jest wysoki i nie ma możliwości jego realizacji bez uzyskania zaliczki od klienta. Jaka praktyka jest zwykle stosowana? Sam jakoś zgadzam się z zapytaniem klienta. Wiem, że uda mi się zrealizować projekt. Nie zamierzam oszukiwać. Ale jak to udowodnić klientowi? Co zrobić w takiej sytuacji?


title: Zmienna statyczna — użycie i implikacje w wątkach

text: Mam pewne zamieszanie dotyczące używania statycznych zmiennych/odniesień w klasie. Wydaje mi się, że nie do końca zrozumiałem konsekwencje utrzymywania czegoś statycznego. Kiedy mówię, że zmienna jest publiczna statyczna, czy jest to jedno wystąpienie zmiennej na klasę, czy jedno wystąpienie na zestaw? Na przykład mam kontrolkę użytkownika (powiedzmy, dla aplikacji WPF). Ta kontrolka użytkownika ma publiczną zmienną statyczną, która koordynuje różne rzeczy w kontrolce. Jeśli w aplikacji klienckiej znajduje się formularz, który używa tej kontrolki użytkownika, z wieloma wystąpieniami tej kontrolki na formularz, ile wystąpień publicznej zmiennej statycznej jest tworzonych? (Moje przypuszczenie jest tylko jedno i jest modyfikowane przez każdą kontrolkę). Teraz potrzebuję, aby każda instancja kontrolki miała jedną taką zmienną, a nie jedną zmienną we wszystkich instancjach kontrolki w tej pojedynczej formie. Czy użycie wzorca singleton ze słowem kluczowym „lock” rozwiązuje ten problem, tj. czy utworzy jedną zmienną na instancję kontrolki użytkownika? Jeśli nie, jaki problem rozwiązuje wzór singletona? Jakie są możliwości rozwiązania tego problemu projektowego? (Uwaga: uciekłem się do utworzenia wewnętrznej niestatycznej zmiennej globalnej i ostrożnego jej przekazywania, zamiast iść statyczną trasą i działać poprawnie. Chcę sprawdzić, czy jest inna opcja.) (Proszę o wyrozumiałość, jeśli pytanie brzmi bardzo naiwnie lub niezbadane, przeczytałem trochę przed wysłaniem, ale wydaje mi się, że utknąłem na znalezieniu odpowiedzi, która wyjaśnia mi to bardzo jasno.)


title: CANopen i sterownik CAN

text: **Sterownik CAN** oznacza aplikację, która współdziała ze sprzętem CAN i pomaga w zainicjowaniu konfiguracji i komunikacji. **CANopen Stack** udostępnia różne interfejsy API do obsługi komunikacji CAN. Teraz to mnie myli, więc daj mi znać: **Czy CANopen Stack i CAN driver to ten sam?**


title: Czy jest w porządku, aby przekazać konkretnemu klientowi metodę na konkretną strategię?

text: Czy podczas używania wzorca strategii dobrą praktyką jest przekazywanie `this` do metody na `this.strategy`? Mam interfejs strategii z jednym wywołaniem „TakeAction”. Chodzi o to, że TakeAction decyduje, które z kilku możliwych działań powinien wykonać Klient, a następnie wywołuje odpowiednią metodę na kliencie. Zatem w konkretnej strategii metoda `TakeAction` może wyglądać tak: void TakeAction(IAbstractClient client) { if (client.IsBlah()) client.UnBlah(this.BlahValue1, this.BlahValue2); else if (client.CanFoo()) client.Foo(this.FooValue); else if (this.ShouldTwiddle()) client.Twiddle(); } A w kliencie wywołanie wygląda tak: this.strategy.TakeAction(this); Czy to dobra forma? A może jest na to lepszy sposób? (Przekazywanie klasy z wyliczeniem opisującym akcję i wartości, które należy do niej przekazać, wydawało się przesadą.)


title: Słowo kluczowe const i plik konsolidatora

text: Jeśli deklaruję w pliku nagłówkowym, na przykład, `extern unsigned long * Ptr;` i wartość tego wskaźnika Ptr w pliku konsolidatora. Czy ten adres będzie „stały”? Czy mogę zmienić jego wartość?


title: Czy sesje są bezpieczne dla captcha w przypadku nieudanego logowania?

text: Nie lubię pisać pytań otwartych, ale mam szybkie pytanie zabezpieczające. Mam skrypt logowania PHP, który pokazuje CAPTCHA przy trzeciej nieudanej próbie logowania. Sposób, w jaki liczę nieudane logowania, polega na wykorzystaniu danych sesji. Czy to jest bezpieczne? Czy jest na to lepszy sposób? Może przechowywać adres IP w tabeli bazy danych? Nie jestem do końca pewien, jak działają boty i programy, które próbują używać listy słów. Dziękuję


title: Czy można powtórzyć kod dla testów jednostkowych?

text: Napisałem kilka algorytmów sortujących do przypisania do klasy, a także napisałem kilka testów, aby upewnić się, że algorytmy zostały poprawnie zaimplementowane. Moje testy mają tylko 10 linijek długości i są 3 z nich, ale tylko 1 linijka zmienia się między 3, więc jest dużo powtarzającego się kodu. Czy lepiej jest przerobić ten kod na inną metodę, która jest następnie wywoływana z każdego testu? Czy nie musiałbym wtedy napisać kolejnego testu, aby przetestować refaktoryzację? Niektóre zmienne można nawet przenieść na poziom klasy. Czy testowanie klas i metod powinno podlegać tym samym zasadom, co zwykłe klasy/metody? Oto przykład: [TestMethod] public void MergeSortAssertArrayIsSorted() { int[] a = new int[1000]; Random rand = new Random(DateTime.Now.Milisekunda); for(int i = 0; i < a.Długość; i++) { a[i] = rand.Next(Int16.MaxValue); } int[] b = nowy int[1000]; a.Kopiuj do(b, 0); Lista<int> temp = b.ToList(); Temp.Sortuj(); b = temp.ToArray(); MergeSort merge = nowy MergeSort(); scal.mergeSort(a, 0, a.Długość - 1); CollectionAssert.AreEqual(a, b); } [TestMethod] public void InsertionSortAssertArrayIsSorted() { int[] a = new int[1000]; Random rand = new Random(DateTime.Now.Milisekunda); for (int i = 0; i < a.Długość; i++) { a[i] = rand.Next(Int16.MaxValue); } int[] b = nowy int[1000]; a.Kopiuj do(b, 0); Lista<int> temp = b.ToList(); Temp.Sortuj(); b = temp.ToArray(); scalanie sortowania wstawiania = nowe sortowanie wstawiania(); scal.insertionSort(a); CollectionAssert.AreEqual(a, b); }


title: Czy możesz podać przykład swojego procesu rozwoju ciągłej integracji?

text: myślimy o zrobieniu tutaj ciągłej integracji z kompilacjami Nightly. Niektóre z naszych spornych kwestii dotyczą tego, kiedy należy przeprowadzać przeglądy kodu. Czy ktoś tam robi ciągłą integrację z nocnymi kompilacjami ORAZ robi przeglądy kodu? Jeśli możesz podać krótki zarys swojego procesu, byłoby świetnie. Na przykład, oto co robimy teraz: 1. Deweloperzy próbują sprawdzać kod codziennie lub tak często, jak to możliwe. Kod nie musi być "zrobiony", wystarczy go skompilować. W tej chwili zmieniają swój kod, wprowadzając zmiany wszystkich innych osób. Robienie tego często uniemożliwia nam łączenie koszmarów. 2. Kompilacje wychodzą co wieczór, ale kontrola jakości patrzy tylko na kompilacje, ale nie pisze jeszcze błędów, tylko informuje nas o tym, co widzą. 3. Co kilka dni mamy oficjalne wydanie. Kod jest sprawdzany. Piszemy opis tego, co jest gotowe do testów, a co nie. 4. Kontrola jakości spisuje to, co znajdują w materiałach, o których mówimy, że są gotowe do przetestowania. Proces zaczyna się od nowa. Więc co robimy źle? Jedna rzecz, która mi się nie podoba, to to, że kod jest sprawdzany i nie jest sprawdzany. Słyszałem wcześniej, że kod powinien być sprawdzany tylko w tym, który został sprawdzony, jednak nie jestem pewien, jak to zrobić i nadal programiści sprawdzają kod codziennie. jeśli możecie podać przykłady tego, czym jest wasz proces, naprawdę to docenię. Dziękuję.