title: Gdzie mogę znaleźć dane biznesowe do wykorzystania w mojej aplikacji?

text: To pytanie dotyczy wszelkich bezpłatnych publicznych surowych danych, które wydawały się zawierać cenne fragmenty, ale nic, co naprawdę zapewnia to, czego szukam. Zamiast korzystać ze zdefiniowanego społecznie wykazu firm (czwórka), chcę mieć zestaw danych wykazu firm zarejestrowanych firm i powiązanych adresów, które można następnie przeszukiwać na podstawie lokalizacji (współrzędnych). Najważniejszą potrzebą jest to, aby zestaw danych można było filtrować w oparciu o różne kryteria (podaj wszystkie restauracje, kawiarnie itp.). Jeśli dane są bezpłatne, to świetnie, ale wszędzie, gdzie sprzedaje się tego typu dane, również wystarczy. Infoszympy wyglądały na możliwość, ale być może istnieje coś bardziej rozbudowanego. Gdzie mogę znaleźć bezpłatny lub płatny zestaw danych zarejestrowanej firmy, który można filtrować na podstawie rodzaju firmy i lokalizacji?


title: Zalecenie dla bazy danych do wykonywania zapytań o rekordy z atrybutami będącymi tablicami lub skrótami?

text: Buduję witrynę z bardzo prostą strukturą danych: dokumenty, które są węzłami, które odwołują się do innych węzłów, z których każdy ma tablice rodziców, dzieci i rodzeństwa, więc struktura jest następująca: Węzeł: uuid nazwa [napis] opis [napis] dzieci, rodzice , siblings [tablice identyfikatorów uuid węzłów] Najważniejsze jest szybkie i łatwe wykonanie następującego zapytania: `wszystkie węzły z uuid x w ich tablicy dzieci/rodziców/rodzeństwa`. Rozważam użycie Riaka lub ewentualnie Postgresa z hstore, ale chciałbym uzyskać inne sugestie dotyczące dobrej bazy danych zaprojektowanej do łatwego i szybkiego przechowywania i pobierania danych w tej strukturze. Trwałość jest ważna, skalowalność jest teraz kwestią drugorzędną.


title: Czy weryfikacja i walidacja są zarówno zapewnianiem jakości, jak i kontrolą jakości?

text: Po przeczytaniu książki znalazłem uwagę, że weryfikacja i walidacja mogą być zarówno zapewnieniem jakości, jak i kontrolą jakości. Nie rozumiem, jak może to być zapewnienie jakości, ponieważ obie dostarczają jedynie dowodów, czy produkt spełnia swoje zastosowanie, wymagania itp., czyli kontrola jakości. IMHO V&V nie może zapewnić jakości, odpowiada tylko na pytanie „czy to działa?”, „czy to prawda?”.


title: Jaka jest różnica między „ukrywaniem danych” a „enkapsulacją”?

text: Czytam "Współbieżność Java w praktyce" i mówi się: "Na szczęście te same techniki obiektowe, które pomagają pisać dobrze zorganizowane, łatwe do utrzymania klasy - takie jak enkapsulacja i ukrywanie danych - mogą również pomóc w tworzeniu bezpiecznych wątków zajęcia." Problem #1 - nigdy nie słyszałem o ukrywaniu danych i nie wiem co to jest. Problem nr 2 - zawsze myślałem, że enkapsulacja polega na używaniu prywatnego vs publicznego i jest w rzeczywistości ukrywaniem danych. Czy możesz wyjaśnić, czym jest ukrywanie danych i czym różni się od enkapsulacji?


title: używanie obiektu biznesowego jako klucza w słowniku

text: Widzę to wszędzie. Myślę, że jest to antywzorc, który wymaga częściowo skonkretyzowanego obiektu biznesowego, aby móc znaleźć pełny obiekt w słowniku. Mam rację? Dlaczego ludzie mieliby to tak bardzo kochać? Nie lubię: class Thingy { Id; // pierwszy składnik klucza SubId subId; // drugi składnik klucza Dane danych; // użyteczna ładowność public Thingy(Id id, SubId subId, Data data) {...} // równość i porównanie & nadpisanie skrótu } Set<Thingy> things; Lubię: class Thingy { public static class Key { Id id; // pierwszy składnik klucza SubId subId; // drugi składnik klucza // równość i porównanie & zmiana skrótu } Key key; Dane danych; // użyteczny ładunek public Thingy(Key key, Data data) {...} } Map<Thingy.Key, Thingy> things;


title: Jak konstruowane są nowe formaty plików?

text: Użyłem pakietu oprogramowania zainstalowanego w biurach i na odległych statkach. Instalacje komunikują się tam iz powrotem, a robią to za pomocą prostego zastrzeżonego formatu pliku, który wygląda mniej więcej tak: /SHIP:16 MILES=45213 /ORDER:22943 STATUS=OPEN TOTAL=447.84 URGENCY=HIGH /ORDERLINES:22943 ITEM= 3544 ILOŚĆ=1 CENA=299.99 ITEM=11269 ILOŚĆ=5 CENA=29,57 Ostatnio pisałem oprogramowanie dla klienta, które zapisuje informacje w tym samym formacie pliku płaskiego. Kiedy plik jest otwierany, wiersze są powtarzane i „rzeczy się dzieje” z wierszami (tj. są wstawiane do bazy danych lub cokolwiek innego). Ale skłoniło mnie to do zastanowienia się, jak ten rodzaj pliku skaluje się? (Lubię rzeczy, które są w stanie skalować) Mogę oczywiście `gzip` to; ale w jaki sposób format pliku ewoluuje od bycia czymś tak prostym jak ten, do bycia monolitycznym? Jakie typowe praktyki stosuje się podczas tworzenia formatu pliku dla nowego oprogramowania? Jak są zazwyczaj zbudowane? Powiązane: Czy istnieje właściwy sposób utworzenia formatu pliku? i czy powinienem szyfrować pliki zapisane przez mój program?


title: GIT i różne wersje projektu: jakie są najlepsze praktyki?

text: Jestem bardzo nowy w używaniu GIT jako systemu wersjonowania i pomimo wielu wyszukiwań, nie mogę naprawdę zrozumieć, jak poradzić sobie z moim scenariuszem. Mam ten projekt sieciowy, który musi być opracowany w dwóch wersjach: * pierwsza to ogólna wersja używana do dem * druga to wersja dostosowana dla mojego klienta. Na razie druga wersja różni się drobnymi rzeczami, głównie brandingiem (tj. ikony, niektóre tytuły) oraz połączeniami z bazą danych. Pomysł polega na wzbogaceniu kodu o sugestie i rzeczywiste przypadki użycia dostarczone przez klienta, a w miarę postępów z poprawkami błędów i nowymi funkcjami, przeniesienie zmian do "wersji ogólnej/bez marki" - ale z zachowaniem tych drobnych różnic. W przyszłości „ogólna” wersja może zostać rozwidlona i wzbogacona o kilka niezależnych funkcji. Czy gałęzie są użytecznym sposobem radzenia sobie z tym scenariuszem? Myślę, że nie są, ponieważ (przynajmniej tak rozumiałem) są bardziej przeznaczone do wprowadzania zmian, które mają zostać połączone z powrotem w krótkim lub średnim okresie.


title: Efektywność algorytmu liczenia sortowania

text: Czytając książkę o "Analizie algorytmów", natknąłem się na algorytm count_sort. W mojej głowie pojawiło się pytanie. Czytałem w wielu innych artykułach, że "Quick Sort/Merge Sort" to najlepsze i najbardziej wydajne algorytmy sortowania. Jednak złożoność tego algorytmu wynosi O(n+k), taka sama dla sortowania szybkiego i lepsza niż sortowanie przez scalanie O(n ln n). Moje pytanie: * Jaki jest problem z tym algorytmem sortowania. * Jakie są najlepsze algorytmy sortowania, które muszę sprawdzić? def count_sort(seq): b, c = [], defaultdict(list) for x in seq: c[x].append(x) for k in range(min(c), max(c)+1): b .extend(c[k]) return b


title: Czy jest to jakaś forma wzorca usługi, jakiś inny wzorzec, SOA czy tylko antywzorzec?

text: Przedstawię scenariusz/wzór, z którym się spotkałem, a następnie mam kilka pytań z nim związanych. Podczas żądania MVC w webowym frameworku (PHP, w moim przypadku Laravel), jeśli mam abstrakcyjną klasę bazową `Service` gdzie podklasy: * Nie zwracaj wartości * Deponuj wynik ich pracy do wspólnego singletona `Response`, nawet w wielu klasach usług. * Nigdy nie zgłaszaj wyjątków, ale zamiast tego zgłaszaj sytuacje błędów jako kolejną torbę wartości w singletonie odpowiedzi. * Oferuj płynny interfejs API, aby łączyć wywołania z pojedynczą podklasą `Service`. * Gdy wywołujący (kontroler) w końcu chce danych, kończy interfejs API Fluent metodą `getResponse()`, która zwraca singleton `Response`, bez pojęcia, co może się w nim znajdować, co się wydarzyło i kiedy z poprzednich wywołań łączonych. Czy miałbym tutaj antywzór na moich rękach? Moje obawy są następujące: * Podklasy `Service` ukrywają teraz dane, które zwracają w ogólnej torbie danych - `Response` * Ze względu na chęć zaimplementowania płynnego API, usługi są teraz mniej więcej relokacją kodu kontrolera, a nie przenośna logika biznesowa. Aby wykonywać płynne wywołania, wszystkie metody muszą istnieć w tej samej instancji, co oznacza, że jesteś teraz zmuszony do mieszania niepowiązanych funkcji w tej samej instancji. * Wywołujący klasę usług (zazwyczaj kontrolery i inne usługi) są teraz sprzężone ze strukturą klasy `Response`, zamiast otrzymywać żądane dane (powiedzmy kolekcję ORM lub prosty typ kolekcji językowej), teraz musimy wykonywać dodatkową pracę, a nie tylko zajmować się czystymi, zwróconymi danymi. * Rozdzielenie obaw przy tworzeniu usług współzależnych, zwłaszcza w sytuacjach błędów, które powodują utratę zakresu awarii. * Utrata możliwości wykrywania przypadkowych cyklicznych zależności między usługami poprzez wstrzykiwanie zależności * Czy to jest „SOA”? Czy w tym projekcie jest więcej zagrożeń lub jeśli jest to znane, czy istnieją zalety tego wzorca w porównaniu z prostym pisaniem zwykłych klas, które zwracają dane domeny bezpośrednio dla warstwy usług?


title: taksonomia modeli pozyskiwania projektów oprogramowania

text: Chciałbym zrozumieć wpływ różnych modeli pozyskiwania zasobów dla projektów oprogramowania. Najpierw chciałbym zidentyfikować różne podejścia do zasobów, które są używane w projektach oprogramowania zasobów. Oto kilka modeli, o których mogę pomyśleć w oparciu o moje własne doświadczenia: 1. Pozyskiwanie zasobów skoncentrowane na produkcie 2. Planowane łączenie zasobów 3. Chaotyczne łączenie zasobów _Model 1_ \- posiada zasoby skoncentrowane na produkcie. W tym modelu zespół projektowy jest dedykowany do produktu (np. usługi SOA). W tym modelu produkt jest główną koncepcją, a zespół pozostaje i rozwija się wraz z produktem. Model ten promuje ciągłe uczenie się zespołu w dziedzinie produktu i ułatwia szybkie opracowywanie nowych funkcji, ponieważ zespół projektowy ma dogłębną wiedzę na temat produktu. Ten model wydaje się być bardzo skuteczny w rozwijaniu istniejących produktów w firmach skoncentrowanych na produkcie. _Model 2_ \- pobiera zasoby z puli zasobów podczas uruchamiania nowych projektów. Ten model wydaje się najbardziej odpowiedni przy opracowywaniu nowych produktów od podstaw. W tym modelu członkowie zespołu muszą zdobyć wiedzę domenową wymaganą przed rozpoczęciem projektu. Model nie wydaje się być skuteczny w przypadku firm opartych na produktach, ponieważ wiedza w dziedzinie produktów jest tracona, gdy zasoby się zmniejszają po zakończeniu projektu. Model ten jest typowy w organizacjach konsultingowych. _Model 3_ \- jest w rzeczywistości rozszerzeniem Modelu 2. W Modelu 3 zasoby są zastępowane innymi zasobami w trakcie trwania projektu. W ten sposób model traktuje zasoby jak towary, przy czym od nowych członków zespołu projektowego oczekuje się zdobycia tej samej wiedzy, co zasób, który zastąpili. Model ten przecieka najwięcej wiedzy dziedzinowej i charakteryzuje się niskim morale oraz niską produktywnością. Ten model jest zwykle spotykany w organizacjach, które stale zwalczają pożary. **Pytanie** : Czy istnieje taksonomia modeli pozyskiwania oprogramowania, których mogę używać zamiast tworzyć własne?


title: używanie wewnętrznych lub zewnętrznych iteratorów nad krawędziami grafów

text: Napisałem trochę kodu, aby manipulować rzadkimi wykresami dla mojej pracy szkolnej, i mam operację, która wymaga, abym zapętlił się na wszystkich krawędziach wykresu. Interfejs, który muszę zaimplementować to jakaś funkcja int gimme_some_edges(graph* g, int k, int* I, int* J), która umieszcza kolejne `k` krawędzi wykresu `g` w tablicach `I` i `J ` i zwraca liczbę faktycznie znalezionych krawędzi w przypadku, gdy pozostało mniej niż `k`. Wzorzec iteratora wydaje się być narzędziem do tego zadania. Najważniejszą kwestią, którą chcę wziąć pod uwagę, jest to, że mój program jest równoległy; każdy wątek odpowiada za przetwarzanie rozłącznego podzbioru krawędzi grafu. W takim przypadku bieżąca krawędź iteratora musi być prywatna dla każdego wątku, a iterator musi zostać zatrzymany przed kontynuowaniem poza pewnym punktem końcowym do krawędzi, za które odpowiada inny wątek. **Czy chcę, aby iteratory krawędzi grafu były wewnętrzne czy zewnętrzne względem obiektów grafu?** Jeśli iterator krawędzi grafu jest zewnętrzny i wywoływany przez klienta, jest więcej do zrobienia w utrzymaniu tego obiektu, ale równoległość jest prosta. Co więcej, zostaną usunięte na końcu funkcji przetwarzania krawędzi. Z drugiej strony, jeśli iterator jest częścią grafu, mój kod wygląda na prostszy. Ale muszę się upewnić, że przechowuję ich tablicę, po jednym dla każdego wątku. Są również wytrwali, więc ich stan może się pogorszyć przed następnym przetwarzaniem krawędzi, chyba że jestem ostrożny (nie stawiaj na to).


title: Jak nazywasz swoje kontrolki GUI?

text: Powszechnie uważa się, że używanie notacji węgierskiej jest złą praktyką, ale często można znaleźć kontrolki GUI o nazwach `userNameTextBox` i `userNameLabel`. Czy umieszczasz typ kontroli w jego nazwie? Czy nie jest to rodzaj notacji węgierskiej?


title: Czy wydziały CS mają formalne procedury wyboru nauczanych języków?

text: Nie mówię o wiejskich uczelniach. * Czy są jakieś przemyślane procedury w czołowych instytucjach oparte na kryteriach formalnych, rzeczywistych statystykach lub zapotrzebowaniu ze strony branży? * Jeśli tak, jakie są stosowane kryteria? * Czy decyzje o porzuceniu niektórych języków i wprowadzeniu innych są podejmowane systematycznie czy w sposób przypadkowy?


title: Czy powinienem używać kluczy podstawowych z wieloma kolumnami, czy dodać nową kolumnę?

text: Mój obecny projekt bazy danych wykorzystuje wielokolumnowy klucz podstawowy do korzystania z istniejących danych (które i tak byłyby unikalne) zamiast tworzenia dodatkowej kolumny przypisującej każdemu wpisowi dowolny klucz. Wiem, że jest to dozwolone, ale zastanawiałem się, czy jest to praktyka, którą mógłbym chcieć stosować ostrożnie i ewentualnie unikać (podobnie jak goto w C). Jakie są więc wady, które mogę zobaczyć w tym podejściu lub powody, dla których mogę potrzebować klucza pojedynczej kolumny?


title: Zarządzanie rozmiarem sesji

text: Z tego co wiem, informacje o sesji są zazwyczaj zapisywane na serwerze. W Javie dane są obsługiwane jako mapa, która, jak sądzę, zawiera identyfikator String i referencję do obiektu, która wskazuje na strefę pamięci z serwera. Biorąc to pod uwagę, czy można bezpiecznie założyć, że przechowywanie pliku właściwości w sesji nie będzie miało krytycznego wpływu na wydajność? Muszę obsługiwać niektóre pliki właściwości języka (`ResourceBundle`). Z jakiegoś powodu muszę przetłumaczyć na każde żądanie przynajmniej 30 napisów w jednym z 3 języków. Powoduje to powstanie wielu klauzul warunkowych, których można uniknąć, przechowując plik Properties w sesji. **Uwaga:** Plik `Właściwości` to tylko przykład. Celem pytania jest ustalenie, dlaczego i jak umieszczenie obiektu Properties w sesji różni się od pacingu obiektu String. Jestem świadomy aspektu rozmiaru, ale czy ten problem występuje, gdy wszystkie obiekty są przechowywane na serwerze?


title: Zarządzanie stałymi w aplikacji

text: Nasza aplikacja składa się z dwóch części: aplikacji webowej obsługującej ROR i serwisu webowego z systemem Sinatra. Aplikacja komunikuje się z urządzeniem mobilnym, dla którego używamy różnych stałych w zależności od wiadomości, którą potrzebujemy wysłać na urządzenie. Obecnie używamy stałych liczb całkowitych zapisanych w module. Np.: SEND_HI="122" Ponieważ aplikacja się rozrosła i mamy ponad 50 stałych, zdajemy sobie sprawę, że jest to zły sposób obsługi stałych, ponieważ różni deweloperzy wydają się podawać różne stałe i pojawiają się kolizje. Istnieje również niezgodność między stałymi wartościami w ROR i Sinatra (oczywiście z powodu błędu programistów). Jaki jest bezbolesny sposób obsługi stałych lub identyfikatorów komunikatów.


title: Dlaczego interfejsów nie można casteable/ducktypeable?

text: Jedną rzeczą, która zawsze mnie irytowała (w C#), było to, że istnieje twarda zależność między klasą interfejsu/abstrakcyjną a klasą implementującą i asemblerem. Oznacza to, że jeśli dwa różne zespoły implementują ten sam interfejs, jeden z nich musi odwoływać się do drugiego (gdzie znajduje się interfejs) lub oba muszą odwoływać się do trzeciego zestawu z interfejsem. Utrudnia to testowanie różnych części aplikacji osobno i sprawia, że kod jest znacznie mniej elastyczny, ponieważ musisz zaimplementować ten specyficzny interfejs. Sprawia również, że dystrybucja bibliotek do stron trzecich jest mniej uporządkowana, ponieważ jeśli chcesz tylko dystrybuować część swojej funkcjonalności, będziesz musiał albo przerobić klasę, aby strony trzecie dołączyły interfejs, albo mieć jakiś głupi zestaw zawierający wszystko oprócz interfejsu w niektórych przypadkach. Czy nie powinno być sposobu na stworzenie interfejsów typu ducktype? Na przykład, jeśli masz dwa obiekty z metodą, która przyjmuje interfejs jako parametr, a każdy zespół ma oddzielne, ale identyczne interfejsy, możesz zamienić te dwa. Jestem pewien, że istnieją przypadki, w których chcemy mieć dobre, „ścisłe” zależności interfejsu, które mamy w tej chwili, ale także możliwość „miękkich interfejsów” może być dobrym pomysłem? Czy też koncepcja jest zbyt zawiła i nadaje się do zastosowania w zbyt niewielu sytuacjach (jak na przykład dziedziczenie wielokrotne). Czy istnieją języki, które nie są całkowicie skatalogowane, które rozwiązały ten problem i czy jest być może jakiś wzorzec projektowy, którego można użyć, aby uniknąć zależności? **Przykład:** Zespół A: interfejs publiczny ISomeInterface { ReadBooks(); Pisać listy(); } Public ClassA : SomeInterface { } Zestaw B: publiczny interfejs ISomeOtherInterface { ReadBooks(); Pisać listy(); } public class ClassB { public DoStuff (ISomeOtherInterface someOtherInterface) { .... } } Tutaj chciałbym mieć Assembly C, które odwołuje się do A i B i zrobić: ClassA classA = new ClassA(); ClassB classB = new ClassB() classB.DoStuff(classA jako ISomeOtherInterface); Nie ma bezpośredniej zależności między A i B, ale nadal można ich używać razem. Myślę, że w tym przypadku mógłbym stworzyć klasę adaptera, ale wydaje się to niezgrabne i w niektórych przypadkach nieodpowiednie. Konkretne rzutowanie to jedna droga, inną to zadeklarowanie interfejsu jako dynamicznego (lub cokolwiek), a następnie sprawdzenie tylko, czy interfejsy są identyczne (ale nie, że są tym samym interfejsem). Trzecim sposobem byłaby możliwość określenia „dynamicznego” w parametrach, aby obiekt mógł zezwalać lub nie zezwalać na tego rodzaju interfejsy. Być może powinno być nawet na odwrót, chyba że zadeklarujesz interfejs jako „jasny”, zawsze możesz to zrobić.


title: Jak skuteczne są narzędzia do kompresji CSS, Javascript i HTML i czy warto kompresować pliki?

text: Przyjrzałem się zminimalizowanym wersjom jQuery, a także różnym narzędziom do kompresji CSS i HTML online. Próbowałem skompresować kilka plików CSS i uzyskałem kompresję tylko 20-30%. Czy warto używać tych narzędzi do kompresji i czy zapewniają one znaczną poprawę wydajności? Szukam narzędzi do kompresji plików ASP.NET (.aspx).


title: Czy to dobry pomysł, aby egzaminy były wykonywane na komputerze?

text: W niektórych uczelniach studenci mogą korzystać z IDE i Internetu, aw mojej trzeba spisać swoje rozwiązanie na papierze. O ile wiem, wykonanie poprawnego, nietrywialnego programu za pierwszym razem jest prawie niemożliwe. Byłoby dobrze bez używania komputerów, gdyby moi nauczyciele ocenili moje _podejście_ zamiast mojego _kodu_ -dosłownie-... niestety tak nie jest. Które z nich to bardziej zwykłe, „pisemne” czy „kodowane” egzaminy? A który sposób jest najbardziej odpowiedni? **Edytuj** \- zmieniono tytuł pytania (kiedyś _Czy uczniowie powinni mieć prawo do egzaminów przy użyciu komputera?_)


title: Problemy (takie jak utrzymanie) w rozwoju z niepopularnym językiem

text: W moim zespole opracowuję jakąś aplikację z samym clojure(lisp). Zaczyna się jako mała aplikacja. Nie ma problemu. Ale ponieważ ma funkcje i rozszerza obszar, staje się ważnym programem. Martwiłem się o konserwację czy coś. Nikt w moim zespole nie zna clojure ani seplenienia ani nie interesuje się takimi językami jak oni. Czy to nie jest złe programowanie w niepopularnych językach? (dla własnej zabawy?) Czy powinienem używać bardziej popularnych języków? (przynajmniej takich jak python) Jestem pewien, że opuszczę zespół, -- nie mówiąc, że odchodzę. :)-- nikt by tego nie utrzymał. Ten program zostanie zniszczony, a niektóre rozwiną się z innym językiem. Bardzo podoba mi się jednak rozwój z clojure, natrafiłem na to, że to może nie być dla mojego zespołu. Co o tym myślisz? Myślę, że wielu programistów kochających niepopularne języki zajęło się podobnym problemem.


title: .NET Reflector nie jest już darmowy – co wszyscy o tym sądzą?

text: Nadchodząca wersja .NET Reflector, która pojawi się w marcu, nie będzie już dostępna w wersji darmowej. .NET Reflector zaczynał jako darmowe narzędzie napisane przez programistę Lutz Roeder i szybko stał się niezbędny dla wielu programistów. Po około czterech latach sprzedał go firmie RedGate, która od tego czasu utrzymuje darmową wersję, a rok temu wersję „Pro”, która dodaje możliwości i zaczyna się od 99 USD za miejsce. Nowa wersja nie będzie już darmowa, będzie kosztować 35 USD za wersje inne niż Pro, a istniejące bezpłatne wersje będą nadal działać do końca maja. Z jednej strony denerwujące jest to, że istniejące darmowe wersje umrą i oczywiście wolałbym, aby pojawiła się darmowa wersja. Z drugiej strony szanuję, skąd pochodzi RedGate, a koszt licencji nie jest zbyt wysoki. Dodatkowo może zachęcać do częstszych aktualizacji. **EDYTUJ:** Początkowo powiedziałem, że to 35 USD dla wszystkich, ale zgodnie z tym FAQ nadal będzie dostępna wersja Pro.


title: Stopień z programowania online, którego pracodawcy nie zlekceważą?

text: Mam już licencjata z zupełnie innej dziedziny, ale zamierzam rozpocząć karierę programisty. Jednak w tym momencie podróżowanie do szkoły byłoby dla mnie bardzo trudne. Czy są jakieś dyplomy z programowania online, które są równie cenne (pod względem zdobycia pracy), jak te z uczelni?


title: Czy powinienem poświęcić zwięzłość kodu, aby zapewnić jak najwęższy zakres zmiennych?

text: W wielu językach (np. Perl i Java - czyli dwa języki, z którymi najczęściej pracuję) możliwe jest zawężenie zakresu zmiennych lokalnych poprzez zadeklarowanie ich w bloku. Chociaż dodaje to dodatkową długość kodu (nawiasy otwierające i zamykające bloki) i prawdopodobnie zmniejsza czytelność, czy powinienem tworzyć bloki wyłącznie po to, aby zawęzić zakres zmiennych do instrukcji, które używają zmiennych i zachować zasadę najwęższego zakresu, czy to poświęcenie zwięzłość i czytelność tylko po to, by niepotrzebnie przestrzegać uzgodnionej zasady „najlepszych praktyk”? Zwykle deklaruję zmienne lokalne do funkcji/metod na początku funkcji, aby ułatwić czytelność, ale nie mogłem tego zrobić i po prostu tworzyć bloki w całej funkcji i deklarować zmienne w całym kodzie - w tych blokach - w celu zawężenia ich zakresu.


title: Raportowanie stanu kompilacji w projekcie javascript

text: Mam projekt javascript, który używa Grunta i kilku wtyczek, takich jak: * jshint * qunit * requirejs Optimizer Nie wszyscy programiści uruchamiają zadania grunt lokalnie (np. jshint, qunit), więc mogą nie wiedzieć, czy kod, który zadeklarowali, ma zagadnienia. Skonfigurowanie podstawowego zadania obserwacyjnego jest dość łatwe, ale wysłanie e-maila do zespołu po błędzie/ostrzeżeniu było mniej oczywiste, niż się spodziewałem. Spodziewałem się znaleźć coś takiego jak grunt-contrib-emailstatus do wysyłania wiadomości e-mail z ładnie sformatowanym statusem, ale jak dotąd nie natknąłem się na to. Czy tęskniłem za tym? Jeśli nie, jaka jest tutaj zalecana praktyka? W przeszłości widziałem takie rzeczy jak Cruise Control, Jenkins lub Hudson, które radzą sobie z raportowaniem stanu kompilacji, ale wydaje się, że to zbyt duży młotek na ten gwóźdź. Z drugiej strony próba użycia crontab do wysyłania wiadomości e-mail wydaje się zbyt mała.


title: Kontrolowanie plików cookie za pomocą wielu zakładek

text: Mam osobliwy problem. Moja aplikacja ma różne poziomy uwierzytelniania. Jeden określony poziom użytkownika (super użytkownik) musi mieć możliwość korzystania z aplikacji jako inny użytkownik (użytkownik podrzędny), który ma niższe uprawnienia. Zdecydowaliśmy, że gdy superużytkownik wybierze bycie użytkownikiem podrzędnym, otworzy się kolejna karta w przeglądarce i załaduje uprawnienia użytkownika podrzędnego oraz odpowiedni plik cookie. Problem, jaki mamy, to: **jak możemy uzyskać odwołanie do nowego pliku cookie w tej nowej karcie?** Superużytkownik będzie mógł otworzyć wiele kart, a każda karta musi odwoływać się do własnego pliku cookie.


title: Jak nazwać koncepcję, gdy moja pętla akceptora jest obsługiwana przez jakąś rzeczywistą aplikację, podczas gdy wszystkie usługi są wtyczkami dla tej aplikacji?

text: Powiedzmy, że mamy aplikację (serwer), która w jakiś sposób dołącza do siebie wtyczki (usługi) w postaci bibliotek .dll lub .so. Czy jest jakaś ładna krótka nazwa dla takiego modelu zachowania serwera?


title: Jak wyświetlić moje zmiany na SourceForge?

text: Chcę połączyć się z projektem Source Forge dla podania o pracę, ale nie mogę znaleźć miejsca na liście zatwierdzeń użytkownika. Jeśli wejdę do > https://sourceforge.net/u/USER_NAME/profile/ Widzę tylko projekt, nad którym pracowałem (który prowadzi tylko do strony projektu, a nie do mojej indywidualnej aktywności), a następnie są Dane osobowe i umiejętności lista. Jak dostać się do rzeczywistego kodu użytkownika?


title: Jak skrócić czas potrzebny na zmianę zmiennych zależnych od środowiska (QA/Dev/Prod)

text: Pracuję nad projektem Java i napisałem małą wtyczkę do istniejącego projektu. Napisałem to na moim Macu (dev), QA jest na Windowsie, a Prod na Unixie. W kodzie wykonuję określone wywołania API do innego programu. Na moim Macu tylko czytam plik. W Dev wykorzystuje ścieżkę do pliku Windows do wykonywania zewnętrznych programów CLI. Prod będzie taki sam. Jestem świadomy plików właściwości, powinienem użyć pliku właściwości do tego, aby szybko przełączać środowiska. W tej chwili wystarczy dużo komentować/odkomentować, aby wszystko działało.


title: Jakie są główne wąskie gardła dotyczące przenośności Javy?

text: Wiadomo, że Java jest przenośna; _"skompiluj raz, uruchom w dowolnym miejscu"_. Wiem, że to często prawda, ponieważ wiele razy używałem **jar** lub **war** bez żadnych problemów międzyplatformowych. Mimo to zastanawiam się, czy to zawsze prawda. Na przykład aplikacje Swing wyglądają inaczej na różnych platformach operacyjnych. Ponadto JDK-1.7 jest nadal wersją zapoznawczą dla systemu Mac OS X. _**Jakie są więc najczęstsze problemy, które dowodzą, że aplikacje Java nie są całkowicie międzyplatformowe?_**


title: Jakie są najważniejsze rzeczy, które należy wiedzieć o rozwoju iPhone'a?

text: Na przykład właśnie dowiedziałem się dzisiaj o NARC. Nigdy nie publikuj niczego, chyba że ustawiłeś go jako „Nowy, Przydzielony, Zainicjowany lub Skopiowany”. To właśnie naprawiło kilka różnych błędów w mojej aplikacji, których nie mogłem znaleźć. Jakie inne rzeczy są bardzo ważne dla rozwoju iPhone'a? _**EDIT_** Nie mam pojęcia, jak stworzyć tę społeczność Wiki.


title: Używając kilku języków w różnych projektach, jak zachować prostą składnię?

text: Kontekst: W tym semestrze biorę kilka zajęć, na których będę kodować. Oto lista możliwych języków, których będę używał: * Java * C (poziom systemowy i wbudowany) * C++ (programowanie konkursowe) * VHDL (do pracy z FPGA) * Python * Schemat Czy możliwe jest utrzymanie wszystkich tych języków w głowie? Jak może jeden kod bez konieczności wyszukiwania materiałów referencyjnych za każdym razem, gdy zaczynają działać?


title: Wyjaśnienie algorytmu GSP

text: Próbowałem zaimplementować algorytm GSC w C++, jednak potrzebuję pomocy w doprecyzowaniu definicji: http://en.wikipedia.org/wiki/GSP_Algorithm > 1. Algorytm GSP wykonuje wiele przejść do bazy danych. W pierwszym przebiegu liczone są wszystkie > pojedyncze elementy (1-sekwencje) > Zasadniczo oznacza to, że masz coś takiego? : std::vector<int> numberSequence = GenerateSequence(); std::vector<in> numberSequenceFrequence; numberSequenceFrequence.resize(numerSequence .size()); for(int i = 0; i <SekwencjaLiczb.rozmiar(); i++) {CzęstotliwośćSekwencjiLiczb[i] = ZliczanieLiczbWystąpieńWWektorze(SekwencjaLiczb[i]); } A potem dla części 2: > 1. Tworzony jest zestaw kandydujących 2-sekwencji i wykonywane jest kolejne przejście > w celu zidentyfikowania ich częstotliwości. > Ale jak skonstruować zbiór kandydujących 2-sekwencji? Nie jestem do końca pewien, co mają na myśli. Czy to oznacza, że **X** liczba elementów z `numberSequence` z najmniejszą liczbą w `numberSequenceFrequence` jest usuwana z `numberSequence`, a proces się powtarza? Zgodnie z tym: > Pokolenie Kandydatów. Mając zbiór ciągów częstych (k-1)-częstych > F(k-1), kandydaci do następnego przebiegu są generowane przez połączenie F(k-1) > ze sobą. Faza przycinania eliminuje każdą sekwencję, przynajmniej jedna z podsekwencji > nie występuje często. Czy oznacza to usunięcie ostatniego elementu wektora w każdym kroku? > Faza przycinania eliminuje każdą sekwencję, przynajmniej jedna z podsekwencji > nie występuje często. Ta część sugeruje, że muszę pracować z wektorami wektorów, więc myślę, że całkowicie przegapiłem punkt. I wreszcie: > Liczenie wsparcia. Zwykle do wydajnego zliczania podpór stosuje się wyszukiwanie oparte na drzewie mieszającym. Wreszcie niemaksymalnie częste sekwencje są > usuwane. Definicja **niemaksymalna** oznacza coś, co nie jest porównywalne, ale „int” jest zawsze porównywalne z „int”: http://en.wiktionary.org/wiki/nonmaximal


title: Jak programowo wyłączyć diodę LED na USB?

text: Chciałbym dowiedzieć się, jak programowo wyłączyć diodę LED na dysku flash USB. Nie znalazłem żadnych samouczków ani dobrego źródła, aby zacząć z tym. Jestem gotów spróbować przepisać lub debugować sterowniki, jeśli będzie to wymagane. Mam doświadczenie w programowaniu (dowolny język, najlepiej C lub Python). Mam doświadczenie z OllyDBG i IDA PRO. Mam pewne doświadczenie w inżynierii (małe urządzenia, takie jak Arduino). Nie interesuje mnie odłączanie diody od płytki, ani zamykanie jej czarną taśmą klejącą. Muszę to zrobić ręcznie za pomocą jakiegoś skryptu, narzędzia lub przepisując sterownik. Widziałem wiele takich pytań, ale żadne z nich nie ma żadnych informacji, które można wykorzystać. Próbowałem również skontaktować się z niektórymi osobami, które odpowiedziały na podobne pytanie, ale jak dotąd bez powodzenia. Byłbym bardzo wdzięczny, gdyby ktoś udzielił mi informacji lub wskazówek, jak to zrobić. PS Potrzebuję tego na początek innego projektu. Chcę wyłączyć diodę LED w kamerce USB, którą mam, ale nie wiem od czego zacząć, więc myślę, że łatwiej będzie najpierw zrobić z pendrivem. Również chcę to zrobić w systemie Windows. Ale jeśli jakaś informacja jest dostępna dla Linuksa, chętnie się z nią zapoznam. Wszelkie informacje dotyczące dowolnego dysku flash lub kamery internetowej będą w porządku. * * * Myślę, że wielu z was pomyliłem. To pytanie nie dotyczy wyłączania LED w **kamerce internetowej**. Chodzi o wyłączenie diody LED na **dysku flash**. Zwykły dysk flash USB, na którym nie można zrobić nic trudnego, jeśli dioda LED zostanie wyłączona. Jestem pewien, że mają opinię do mrugnięcia. Na przykład podczas przesyłania danych na dysku flash dioda LED miga. Gdy jest nieaktywny, dioda jest włączona lub wyłączona. Oczywiście zależy to od modelu i producenta pendrive'a. Ale jeśli ktoś może wskazać, jak to zrobić na dowolnym dysku flash i wskazać, gdzie go kupić (eBay, Amazon lub jakikolwiek inny e-sklep), chętnie to wypróbuję.


title: Licencja programu : Open-Source i komercyjna?

text: Obecnie programuję nowe oprogramowanie, szukam informacji na temat ochrony mojej koncepcji i mojego kodu źródłowego. Dokładam, że jestem całkiem nowy w licencjonowaniu. Ponieważ jestem bardzo zaniepokojony Open-source i dzieleniem się ze społecznością, z drugiej strony jestem zdziwiony, ponieważ chcę trochę zarobić na mojej pracy (około 1 roku wolnego czasu, możesz sobie wyobrazić ilość brakowało piw w pubie!). Więc szukam podwójnej licencji, która jest zgodna i umożliwia dystrybucję kodu źródłowego oprogramowania, ale zmusza firmy do uzyskania licencji komercyjnej lub do negocjacji bezpośrednio ze mną. Ale myślę, że jest to całkowicie sprzeczne z licencjami podobnymi do GPL. Co o tym myślisz?


title: tworzenie aplikacji mobilnych noob

text: Znam c, większość c++, trochę asemblera, konsolę win32 itd. Szukam darmowego, wieloplatformowego, c/c++, emulatora itd. Jestem początkującym w świecie aplikacji mobilnych, więc jestem Stracony. Niektóre przychodzą na myśl na tej liście: http://en.wikipedia.org/wiki/Mobile_application_development Airplay SDK, Aqua, BatteryTech, DragonFireSDK, IwGame Engine, Symbian, Windows Mobile Nie chcę używać interfejsu API, który jest uważany za przestarzały.


title: Egzekwowanie jednolitego podejścia Scrum do wszystkich zespołów w ramach działu

text: Tam, gdzie pracuję, ostatnio zmieniliśmy rozwój Agile na Scrum. Przeszliśmy przez typowe bóle wzrostu, ale osiągnęliśmy podejście, które wydaje się działać na razie (czy to zadziała na dłuższą metę, to inne pytanie!). Oczywiście kierownictwo działu jest zadowolone, że przejście na Scrum działa. Ale zaczynają robić coś, co wydaje mi się niewłaściwe. Kierownictwo będzie obserwować zespół, zobaczyć, co dla niego działa i przepisać to całemu działowi. Rzeczy takie jak: * Definicja „Gotowe” * Które wartości punktów narracji mogą być użyte do wskazywania narracji (np. pominięcie 8 z sekwencji fib., ponieważ 1, 2, 3, 5, 13 itd. były jedynymi użytymi podczas sprint, który zaobserwowali) * Mówienie zespołom, że muszą skalibrować swoją wartość punktową na poziomie 1, aby „zaktualizować etykietę interfejsu użytkownika” i ograniczyć ją do górnej granicy 20 * (chociaż nie wszystkie nasze projekty mają klientów i nie wszyscy programiści mają doświadczenie w zakresie interfejsu użytkownika) * Mówienie zespołom, aby używały szacunkowej liczby punktów narracji równej 100, aby oznaczać „później podzielimy tę historię” * Namawianie zespołów, aby korzystały z szacowanej liczby punktów narracji w nieskończoności, aby oznaczać „to jest epopeja” lub „potrzebujemy więcej informacji”. Rozumiem, że próbujesz być pomocny, ale czy wszystkie powyższe rzeczy nie powinny być specyficzne dla zespołu Scrum? Oznacza to, że to, co działa dla jednej grupy osób w jednym projekcie, może nie mieć sensu dla innej grupy w innym projekcie. Obawiam się, że wchodzimy w bardzo nakazowe i sztywne podejście Agile. Czy mam usprawiedliwienie, myśląc o tym, czy też przesadzam? ## Edytuj Dla wyjaśnienia... przez "Zarządzanie" i "Menedżer" nie mam na myśli Właściciela Produktu. Mam na myśli każdego menedżera spoza Zespołu Scrumowego, ale w Dziale Oprogramowania.


title: jak odfiltrować wymagania „must-have” od „miło mieć”?

text: Budując oprogramowanie od podstaw, trzeba przeprowadzić szczegółową ocenę potrzeb i dowiedzieć się, czego **naprawdę** potrzebują klienci/interesariusze. Podczas przeprowadzania wywiadów z użytkownikami końcowymi, organizowania warsztatów lub bezpośredniego udziału w procesie biznesowym, dla którego napisane jest oprogramowanie, pojawia się wiele wymagań, które są bardzo ważne, są to wymagania „must-to-have”. W tym samym procesie klienci wymieniają niektóre funkcjonalności, które są **powiązane** z** oprogramowaniem, ale nie rozwiązują żadnego problemu, więc powiedz, że są to funkcje, które warto mieć. mieć możliwość zmiany koloru interfejsu lub zarządzania niektórymi procesami, które oprogramowanie może wykonać bez ich ingerencji. Powinien istnieć jakiś wzorzec zarządzania tego rodzaju wymaganiami. Jak odróżnić te 2 rodzaje funkcji? Jak oszacować, czy dodatkowa funkcja dodaje wartość do oprogramowania, czy tylko zwiększa zakres projektu? Poza tym, jak przekonać klientów, że funkcje „fajne do posiadania” są w jakiś sposób przydatne, ale nie do końca konieczne.


title: Rozwój programowania funkcjonalnego?

text: Ostatnio zauważyłem, że funkcjonalne języki programowania zyskują na popularności. Ostatnio zauważyłem, że Tiobe Index pokazuje wzrost ich popularności w porównaniu z ubiegłym rokiem, chociaż większość z nich nie dociera nawet do 50 najpopularniejszych języków według tego indeksu. I tak jest od dłuższego czasu. Programowanie funkcjonalne po prostu nie stało się tak popularne jak inne modele (np. programowanie obiektowe). Zauważyłem jednak odradzające się zainteresowanie potęgą programowania funkcjonalnego, a teraz, gdy wielordzeniowe są coraz bardziej popularne, programiści zaczęli wykazywać zainteresowanie innymi modelami współbieżności, eksplorowanymi już w przeszłości przez języki takie jak Haskell i Erlang. Z dużym zainteresowaniem obserwuję, że mimo braku dużej akceptacji społeczności, pojawia się coraz więcej tego typu języków. Clojure (2007), Scala (2003), F# (2002) to tylko trzy przykłady ostatniej dekady. Ja sam zainwestowałem trochę czasu w naukę Haskella i Scali. I odnajduję wielki potencjał w paradygmacie, który był dla mnie zupełnie nowy, mimo że byłem tam tak długo. I oczywiście moim największym pytaniem jest to, czy którekolwiek z nich naprawdę stanie się na tyle popularne, aby rozważyć włożenie w nie jakiegokolwiek wysiłku, ale jest to pytanie, na które nawet Mandrake nie był w stanie odpowiedzieć, pomimo całego zamieszania, jakie ludzie robią w ich sprawie. . Chcę zapytać: * W jakich scenariuszach powinienem rozważyć funkcjonalne języki programowania lepiej dopasowane do danego zadania? Oprócz tak popularnego ostatnio problemu wielordzeniowego programowania równoległego. * Gdybym zdecydował się przejść na funkcjonalny język programowania, które Twoim zdaniem są największymi pułapkami, z którymi się zmierzę? (Oprócz zmiany paradygmatu i trudności w ocenie wyników z powodu leniwej oceny). * Przy tak wielu funkcjonalnych językach programowania, jak wybrać ten, który lepiej odpowiada Twoim potrzebom? Wszelkie zalecenia dotyczące dalszych badań będą mile widziane. Przeszukałem sieć w poszukiwaniu opinii i wygląda na to, że cała ta nowa popularność bierze się z pomysłu, że teraz miał uderzyć w ścianę Prawa Moore'a, a funkcjonalne języki programowania przyjdą i bohatersko nas uratują. Ale jeśli tak jest, powiedziałbym, że istnieje więcej prawdopodobieństw, że istniejące popularne języki dostosują się do paradygmatu. Niektórzy z was, mając większe doświadczenie w codziennej pracy z tymi językami, być może mogą zaoferować więcej wglądu w ten temat. Wszystkie Twoje opinie zostaną lepiej docenione i dokładnie rozważone. Z góry dziękuję!


title: Korzystanie z licencjonowanego kodu źródłowego BSD

text: Ktoś napisał bibliotekę .NET do korzystania z Google Maps API (link do projektu). Pobrałem całe repozytorium i są tam tylko pliki źródłowe, brak LICENSE.txt, readme itp. Jednak myślę, że Google każe ci wybrać licencję podczas tworzenia nowego projektu, więc autor określił "Nową licencję BSD". To, co chciałbym zrobić, to pobrać źródło i przerobić je (może zawierać JSON.net, dodać funkcje itp.) I zachować je na moim koncie github. Mam więc kilka pytań z tym związanych: * Czy licencja jest ważna, mimo że autor nie posiada wyraźnego pliku z jego nazwiskiem, prawami autorskimi itp.? * Jeśli licencja jest ważna, czy mam po prostu umieścić jego nazwisko i rok w szablonie licencji BSD? * Ogólnie rzecz biorąc, jeśli do projektu jest dołączona licencja, w jaki sposób mogę się upewnić, że postępuję właściwie? Czy po prostu zostawiłbym ich informacje o licencji bez zmian, a następnie dodałbym własne? * Czy nad tym nie zastanawiam się, a niektóre z tych licencji po prostu sprowadzają się do „rób, co chcesz, tylko nie pozywaj mnie” (to takie moje odczucia, ponieważ byłbym zachwycony, gdyby ktoś chciał użyć mojego kodu do czegokolwiek) ?


title: Jakie wartości w aplikacji powinny być konfigurowalne?

text: Jakie wartości w aplikacji powinny być konfigurowalne lub w inny sposób niekodowane na stałe? Czy różni się to w zależności od typu aplikacji (partia a interfejs użytkownika) i czy istnieją jakieś opublikowane standardy lub wskazówki na ten temat (IEEE, ACM, dostawca itp.)?


title: Dlaczego Embarcadero kazał mi podpisać zrzeczenie się?

text: Po prostu zalogowałeś się do sieci Embarcadero Developer Network i otrzymałeś to: > KONTROLA EKSPORTU W OPROGRAMOWANIU EMBARCADERO Twoje członkostwo w EDN i dostęp do > Oprogramowanie Embarcadero podlega Twojej zgodzie i zgodności z > następującymi warunkami: > > -Zgadzasz się, że kontrola eksportu w USA prawa regulują korzystanie z Embarcadero > Oprogramowania. > > -Nie jesteś obywatelem, obywatelem ani rezydentem rządu Kuby, Iranu, Sudanu, Korei Północnej, Syrii ani żadnego kraju, > na który Stany Zjednoczone nałożyły embargo lub zakaz > i nie jesteś pod ich kontrolą eksport. > > -Nie będziesz dostarczać ani eksportować Oprogramowania Embarcadero, bezpośrednio lub > pośrednio, do wyżej wymienionych krajów ani do obywateli, obywateli lub rezydentów tych krajów. > > -Nie figurujesz na listach Departamentu Skarbu Stanów Zjednoczonych > Specially Designated Nationals, Specially Designated Terrorists i > Specially Designated Narcotic Traffickers, ani nie znajdujesz się na liście Denial Orders Departamentu Handlu Stanów Zjednoczonych. > > -Nie będziesz dostarczać ani eksportować Oprogramowania Embarcadero, bezpośrednio lub > pośrednio, do osób z wyżej wymienionych list. > > -Nie będziesz używać Oprogramowania Embarcadero do jakichkolwiek celów > > zabronionych przez prawo Stanów Zjednoczonych, w tym do rozwoju, projektowania, wytwarzania lub produkcji > > > Oprogramowania Embarcadero i produkcji > nuklearnej, chemicznej lub broń biologiczna masowego rażenia. Myślę, że to BS, ale jakie szaleństwo zmusza firmy takie jak Embarcadero do przestrzegania tych bardzo wysokich standardów przez programistów? Co to jest „Oprogramowanie Embarcadero”? Czy to oznacza, że nie mogę umieścić łagodnej gry wideo na stronie internetowej, która może mieć środowisko uruchomieniowe, które może pobrać Irańczyk, który uwielbia scrabble. A może „Oprogramowanie Embarcadero” odnosi się do wszystkiego, co opracowuję za pomocą Delphi.


title: Jakie są inne niż XML przykłady „kodowania” projektu GUI?

text: Próbowałem myśleć nieszablonowo, jak można zaprojektować graficzne interfejsy użytkownika w kodzie (nie projektant graficzny!). Natknąłem się na trzy sposoby, w jakie to się robi: 1. XML 2. Surowy kod (utwórz okno, utwórz pole tekstowe, dodaj pole tekstowe do okna itp.) 3. HTML i przyjaciele Jestem pewien, że ktoś to zrobił coś innego niż te trzy. Czy istnieją jakieś przykłady frameworków lub języków, które pozwalają na kodowanie GUI przy użyciu formatu innego niż te trzy?


title: Jakich technik używasz podczas rozmów z programistami?

text: Zdaję sobie sprawę, że było wiele dyskusji na ten temat i często przeradzają się one w dogmaty dotyczące tego, czy zadajesz pytania typu „100 logicznych piratów”, czy też skłaniasz ich do pisania „fizz buzz”. Interesuje mnie, jakie techniki i pytania okazały się skuteczne w przypadku _ciebie_ podczas rozmowy kwalifikacyjnej z potencjalnymi programistami. Jedna technika na odpowiedź, abyśmy mogli na nie głosować.


title: Testowanie (deterministycznych) algorytmów z wieloma lub trudnymi do udowodnienia poprawnych poprawnych odpowiedzi

text: Chciałbym to przedmowa, że to pytanie jest podobne, ale moje pytanie nie dotyczy przypadkowości, tylko wybrednego determinizmu, więc odpowiedź „użyj znanego ziarna” tak naprawdę nie ma zastosowania. Podobnie, to pytanie jest podobne, ale znowu nie spodziewam się, że algorytm kiedykolwiek zawiedzie - po prostu nie wiem, w jaki sposób będzie poprawny. To pytanie pojawiło się podczas testowania algorytmów grafowych. ale bynajmniej nie ogranicza się do nich. Niektóre algorytmy, takie jak A*, mogą mieć wiele poprawnych odpowiedzi. W zależności od dokładnej implementacji możesz otrzymać jedną z kilku odpowiedzi, z których każda jest równie poprawna. Może to jednak utrudnić ich testowanie, ponieważ nie wiesz, który z nich wyplunie z wyprzedzeniem, a ręczne obliczenie odpowiedzi jest bardzo czasochłonne. W moim konkretnym przypadku poradziłem sobie z tym, modyfikując Floyd-Warshall, aby wypluł _każdą możliwą_ najkrótszą ścieżkę i spędziłem czas na testowaniu tego. Miał tę zaletę, że był dobrą cechą samą w sobie. Następnie mógłbym przetestować inne funkcje pod kątem znanych poprawnych ścieżek z FW (jeśli zwrócona ścieżka jest jedną ze ścieżek zwróconych przez FW dla tej pary początek/koniec, jest to poprawne). Oczywiście działa to tylko w przypadku gęstych wykresów ze względu na sposób działania FW, ale nadal jest to miłe. Jednak nie zawsze może to być opłacalne dla wszystkich algorytmów z tą cechą. Jak dotąd najlepszą odpowiedzią, jaką wymyśliłem, jest testowanie cech poprawnej odpowiedzi, a nie samej poprawnej odpowiedzi. Aby wrócić do algorytmów najkrótszej ścieżki, możesz porównać koszt zwróconej ścieżki ze znanym kosztem właściwym i upewnić się, że ścieżka jest prawidłowa. To działa, ale istnieje ryzyko, że nie zweryfikujesz wszystkiego poprawnie, im więcej jest kryteriów poprawności, zwłaszcza jeśli sama weryfikacja jest złożona (np. gdy istnieją poprawne algorytmy, weryfikacja minimalnego drzewa rozpinającego jest znanym trudnym problemem; prawdopodobnie trudniejszym niż konstruowanie samego MST), w takim przypadku musisz teraz szeroko przetestować swój kod testowy. Co gorsza: prawdopodobnie musisz skonstruować MST, aby przetestować algorytm weryfikacji MST, więc masz teraz świetny scenariusz, w którym test MST opiera się na działaniu algorytmu weryfikacji MST, a test algorytmu weryfikacji MST opiera się na działaniu kodu generowania MST. Wreszcie jest „tani sposób”, który polega na obserwowaniu wyników, weryfikowaniu ich ręcznie, a następnie na twardym kodowaniu testu, aby przetestować wyniki, które właśnie zweryfikowałeś, ale to nie jest świetny pomysł, ponieważ być może będziesz musiał poprawiać test za każdym razem zmień trochę implementację (czego ma unikać automatyczne testowanie). Oczywiście odpowiedź zależy do pewnego stopnia od dokładnego algorytmu, który testujesz, ale zastanawiałem się, czy istnieją jakieś „najlepsze praktyki” w zakresie weryfikacji algorytmów, które mają kilka określonych, deterministycznych „poprawnych” wyników, ale te dokładne poprawne wyniki są trudne do wiedzieć z wyprzedzeniem, a może nawet trudno zweryfikować po fakcie.


title: Jakie diagramy, inne niż diagram klas i diagram przepływu pracy, są przydatne do wyjaśniania działania aplikacji?

text: Pracuję nad małym projektem Delphi, składającym się z dwóch jednostek. Jedna jednostka służy do GUI, a druga do zarządzania danymi, parsowania plików, iteracji list i tak dalej. Zrobiłem już diagram klas i mój przepływ pracy wygląda jak diabli - jest zbyt skomplikowany, nawet dla każdego. Rozważałem wykonanie diagramu przepływu danych, ale byłoby to jeszcze bardziej złożone. Nie przydałby się też diagram przypadków użycia. Czy brakuje mi jakiegoś typu diagramu, który mógłby w jakiś sposób reprezentować relację między moimi dwoma jednostkami?


title: Czy zawijanie byte[] dla silniejszego pisania jest dobrą praktyką?

text: Pracuję nad biblioteką opartą na Javie, która korzysta z żądań PKCS #10. Dostępne są biblioteki PKCS #10 dla Javy (biblioteki Sun i IBM, które są dostarczane z odpowiednimi JDK) oraz biblioteka Bouncy Castle o otwartym kodzie źródłowym. Wolałbym nie łączyć mojej biblioteki z inną przez API, więc moją pierwszą myślą było stworzenie wrappera. Jednak PKCS #10 jest potencjalnie złożony, więc zakres opakowania rozszerzyłby się dość szybko, a użytkownicy tego opakowania prawdopodobnie „rozpakowaliby” opakowanie i używali jednej z wyżej wymienionych bibliotek do wszelkich ciężkich zadań, szczególnie jeśli używają PKCS #10 już we własnych aplikacjach. Moją pozostałą opcją jest zapewnienie prostego opakowania wokół tablicy bajtów. Czy dostarczanie bardzo cienkiego opakowania tylko ze względu na pisanie jest dobrą praktyką?


title: Nie rozumiem, jak wdrożyć MVP/MVC dla moich wymagań programowych

text: Ostatnio zdecydowałem się rozpocząć tworzenie systemu opartego na kliencie/usługach przy użyciu WCF i kanału Duplex (oddzwanianie z usługi do klienta). Klienci będą się zachowywać jak „slave”, to znaczy będą łączyć się tylko z serwerem i od tego momentu tylko serwer komunikuje się z nimi. W końcu serwer może zażądać, aby klienci przesłali mu "strumienie danych" (częste aktualizacje nowych treści/obiektów). Chcę, aby moje oprogramowanie było jak najbardziej luźno powiązane, ale nawet czytając o różnych wzorcach, takich jak MVC i MVP, nie wydają się one być zaprojektowane do spełniania moich konkretnych wymagań. Jaka jest najlepsza architektura kodu lub wzorzec dla mojego problemu? Biorąc pod uwagę technologie, których używam?


title: Strategia bezpiecznego utrzymywania repozytorium offline przy użyciu git

text: Używam git do wersjonowania. Jeszcze wczoraj pracowałem nad refaktoryzacją mojej bazy kodu Pythona. Po dodaniu testu stwierdziłem, że wprowadziłem błąd w jednym z rozwiązań projektu Euler. Więc sprawdziłem poprzednią wersję offline, znalazłem różnicę i wróciłem do najnowszej wersji i naprawiłem problem. Trochę później odkryłem, że z tego powodu powstał bałagan. Używam .gitignore, aby pozostawić wiele niepotrzebnych plików lub rzeczy WIP poza git. Odkryłem, że korzystając z kasy i wracając do najnowszej wersji, usunięto niektóre pliki, które nie zostały zaewidencjonowane. Teraz stwierdzam, że nowe repozytorium, które trzymam w ignorowanym folderze, zostało wyczyszczone. Do tej pory nie miało wiele, ale i tak wszystko przepadło. Więc jestem zdezorientowany, co jest dobrym sposobem na zachowanie nienaruszonej bazy kodu offline na wypadek, gdyby było wiele takich folderów/plików, których nie chcę zaewidencjonować? Również jak zorganizować codebase na local dla nowych projektów? Po prostu robisz kopie zapasowe na dysku?


title: Zarządzaj wydaniami ClickOnce dla różnych stron

text: Zmagam się z zarządzaniem wydaniami oprogramowania. Najpierw kilka ogólnych informacji: * Jest to aplikacja ClickOnce * Śledzę wydanie, często ćwiczę * Jest około 30 stron obsługiwanych z tym oprogramowaniem * Potrzebuję pełnej kontroli, która aktualizacja zostanie dostarczona do której strony * Nie każda strona może uzyskać najnowsza aktualizacja/wydanie * Każda strona ma wielu klientów, z których każdy może pobrać najnowszą aktualizację obsługiwaną przez konkretną stronę. Tak więc moje wymagania są w przybliżeniu. Pozwólcie, że wyjaśnię, co myślałem o tym, jak to rozwiązać. * Chciałbym utworzyć witrynę „wdrożeniową” (asp.net), która będzie obsługiwać wszystkie żądania * Istnieją dwa punkty końcowe, jeden do pobrania klienta i drugi, w którym klient sprawdza dostępność aktualizacji * Każda ze stron ma więc osobny punkt końcowy, taki jak DeploymentSite /party1 i inny dla DeploymentSite/party2 * Pliki aplikacji powinny nadal być przechowywane scentralizowane. Pomyślałem więc, że będzie to możliwe do zarządzania za pomocą mage.exe z następującymi krokami 1. Zbuduj aplikację i zapisz nową wersję w repozytorium/folderze plików aplikacji 2. Uzyskaj strony które powinny zostać zaktualizowane (plik konfiguracyjny, baza danych cokolwiek) 3. Uruchom mag.exe, aby utworzyć nową aplikację i manifest wdrożenia dla każdej strony na liście aktualizacji z nową lokalizacją pliku aplikacji (1.0.2) ten personel mage.exe. Nie mogę stworzyć odpowiednich plików z potrzebną bazą kodu. Jak sprostać tym wymaganiom?


title: Jak powinienem przetestować funkcję logiczną z wieloma możliwymi permutacjami?

text: Kiedy piszę test jednostkowy, zwykle dostarczam kontekst (zwykły obiekt lub obiekt mocked/stubbed), który ustawiam w pewien sposób, a następnie mogę uruchomić oświadczenie w kontekście: uwaga: kod jest w pseudokodzie; groovy jak składnia: test mójTest() { def o = getTestContext(); o.string = "testme" o.number = "2" attach o.mult() == "testme testme" } Ale jak zorganizować test, gdy trzeba przetestować złożone wyrażenie logiczne, które przyjmuje wiele parametrów? EDYCJA: Zamieniłem jednowierszowe wyrażenie na coś bardziej czytelnego, aby uniknąć zamieszania. //to nie jest prawdziwa klasa, to jest przykład. Nazewnictwo jest złe, dla zwięzłości //wyrażenie pochodzi ze sfery losowości, więc prawdopodobnie można je zmienić i uprościć, ale nadal istnieje złożone wyrażenie świata rzeczywistego. wyliczenie Typ {X,Y,Z} class C { boolean a,b,c,d; Wpisz t; boolean isEnabled(boolean anotherFlag) { def warunek1 = (a || b) def warunek2 = (c && d) def dobryTyp1 = t == X || t == Y def dobryTyp2 = innaFlaga && t == Z || t == Z && !warunek1 return ( warunek1 || warunek2 ) && (goodType1 || goodType2) } } Wszystkie testy dla tego rodzaju metod, które do tej pory przeczytałem, są bardzo szczegółowe, niekompletne i trudne do zrozumienia. A szkoda, że tak mała linijka kodu, nawet „złożona”, generuje okropne testy. Próbowałem podzielić wyrażenie logiczne na mniejsze podmetody, ale czasami nie jest to takie wygodne, a liczba permutacji jest nadal wysoka. Zwykle również dzielę wyrażenie na zmienne pośrednie, ale to nie pomaga w świecie testów jednostkowych... Jak mam przetestować coś takiego, aby kod testowy pasował do zwięzłości testowanego kodu i kompletności, która musi zapewnić, że mój kod działa zgodnie z oczekiwaniami ? **Edycja: o zachowanym rozwiązaniu.** Refaktoryzacja jest rzeczywiście dobrym rozwiązaniem, ale naprawdę nie chcę ręcznie „rozwijać” wszystkich kombinacji w moich testach: jest gadatliwa, brzydka i dobra, trudno ją zrozumieć. Jednak zachowam tę odpowiedź jako wstępny obowiązkowy krok: rozbij wyrażenie na mniejsze części przed czymkolwiek innym. Po zakończeniu refaktoryzacji, a wynik testu nadal będzie zawierał testy kombinacyjne, skorzystam z proponowanego rozwiązania TruthTable. Po prostu wygeneruję kombinacje i nie zadeklaruję wszystkiego. Znalazłem ten interesujący, ale nieaktualny artykuł o kombinacji testowej w Groovy. Narzędzie, o którym mówili, jest poza radarem wyszukiwarek, więc musi być martwe! Jednak użyję tego samego wzorca: attachThat(permutacje, oczekiwania, instanceObject) Gdzie * permutacja to wszystkie możliwe wartości, które można przypisać do właściwości w „skondensowanej mapie”: (a:[prawda, fałsz], b:[prawda, fałsz ], ...) * oczekiwanie to wszystkie kombinacje, które zwracają określoną wartość, wszystkie inne kombinacje będą sprawdzane pod kątem wartości domyślnej.


title: Synchronizacja interfejsu internetowego i usług asynchronicznych innych firm

text: Szukam koncepcji, podejść, a nawet frameworków/bibliotek, które pomogą mi niezawodnie synchronizować stan z internetowego interfejsu użytkownika do usługi innej firmy. Na przykład: tworząc ui klienta irc JavaScript, potrzebujesz własnego backendu do obsługi połączenia IRC. Protokół IRC jest asynchroniczny w taki sposób, że wysyłasz polecenie do serwera, a serwer w końcu odpowie zdarzeniem zmieniającym stan twojego połączenia irc. W podobny sposób interfejs użytkownika JavaScript/internetowy jest asynchroniczny, jeśli chodzi o odzwierciedlanie zmian w tym stanie. W moim rozumieniu są dwa główne problemy, które mam z wdrożeniem czegoś takiego. Zastosowanie: Dołączanie do kanału: 1. W JavaScript UI wpisuję polecenie, które wywoła wywołanie AJAX(?). Na serwerze to żądanie wyzwala wykonanie polecenia IRC. W tym momencie potrzebuję nasłuchiwania zdarzeń na możliwe odpowiedzi, które serwer może mi udzielić i określić, czy dołączyłem do danego kanału, czy nie. Idealnie powinno to spowodować zaktualizowanie interfejsu użytkownika z komunikatem o błędzie lub otwarciem okna kanału 2. Na IRC możesz również zostać zaproszony przez kogoś do dołączenia do kanału lub możesz zostać wyrzucony z kanału. Następnie musisz zareagować na zmiany stanu połączenia irc i odpowiednio zaktualizować interfejs użytkownika. Czy to rozwiązany problem?


title: Alternatywy dla profesjonalnej kontroli wersji

text: Współpracujemy z kilkoma nie programistami (pisarzami), którzy muszą przyczynić się do jednego z naszych projektów. Teraz po prostu nie podoba im się pomysł używania Gita (lub czegokolwiek w tym zakresie) do kontroli wersji ich pracy. Myślę, że dzieje się tak dlatego, że po prostu nie uważają za opłacalne owijanie głowy pokrętnymi koncepcjami kontroli wersji. (kiedy po raz pierwszy przedstawiłem im rozgałęzianie i łączenie — wyglądali, jakbym ich obrażał.) Teraz nie jesteśmy w stanie ich edukować ani przekonać do korzystania z tego. Po prostu próbujemy znaleźć alternatywy, aby uzyskać wersję całej ich pracy (a jest to, czego potrzebujemy) — a oni uzyskują łatwy przepływ pracy i skoncentrują się na tym, co robią. Wpadłem na kilka pomysłów... * powiedz im, aby zapisywali swoją pracę jako osobny plik za każdym razem, gdy dokonają jakiejś nietrywialnej zmiany, a następnie użyj po naszej stronie diffa, aby po prostu śledzić zmiany. * napisz program (w Pythonie), który w jakiś sposób zaimplementuje „kamienie milowe” w CSSEdit. _**O projekcie:_** _Jest to system przetwarzania języka naturalnego (napisany w C + Python). Zatrudniliśmy kilku autorów do przygotowania danych wejściowych do systemu w różnych językach. A gdy rozwijamy oprogramowanie, będziemy potrzebować tych autorów, aby wprowadzali zmiany w swoich danych wejściowych (artykułach). Czasami zmiany są bardzo małe (słowo lub dwa), a innym razem duże._ _Powodem, dla którego musimy kontrolować te zmiany, jest to, że każda mała/duża zmiana danych wejściowych może radykalnie zmienić wyjście systemu._


title: Wyświetlaj sformatowany tekst w podpowiedzi

text: W tej konkretnej witrynie, po najechaniu kursorem myszy na określony region, wyświetla się coś, co można kliknąć. Znam podpowiedzi, ale z mojego doświadczenia korzystam tylko z podpowiedzi do wyświetlania tekstu statycznego, a nie tekstu html, który można kliknąć. http://www.cry.org/projects/projects.html Jaka technologia Twoim zdaniem jest tutaj używana? Czy to jest wskazówka?


title: Czy wszyscy potrzebują ram, aby działać lepiej?

text: Pracowałem na złożonym systemie napisanym w Javie. Jest tworzony za pomocą wielu programów java i wielu skryptów powłoki, które je wywołują, a także niektórych zadań cron, które je planują. System jest trudny do utrzymania. Pliki wejścia/wyjścia/błędu/OK były rozprowadzane w różnych miejscach systemu przez różnych programistów. Aby wiedzieć, co się dzieje, muszę sprawdzić plik konfiguracyjny, aby zobaczyć, gdzie są odpowiednie pliki, i przejść tam, aby sprawdzić stan programu, przeglądając niektóre logi lub pliki ok (pusty plik z rozszerzeniem .ok aby wskazać powodzenie zaplanowanej pracy). Co więcej, jestem zmęczony marnowaniem czasu na połączenie/obiekt JDBC, który musi jawnie otwierać się i zamykać. Słyszałem, że ludzie komplementują słynne frameworki Struts Spring Hibernate (SSH). Nigdy nie dotykałem żadnego z nich, czy pomogłyby mi stworzyć lepszy projekt, który jest łatwy w utrzymaniu?


title: Metodologia projektowania dla rozwoju systemów interoperacyjnych?

text: **Nieco tła** Firma, w której pracuję, tworzy aplikacje bazodanowe od około 1980 roku i do niedawna większość z tych systemów była samodzielnymi systemami „silosowymi”. Jednak w ciągu ostatnich kilku lat zaobserwowaliśmy większy zwrot w kierunku gromadzenia „inteligencji” we wszystkich systemach spełniających wymagania naszych klientów. Na przykład system, który może gromadzić dane o aktach dentystycznych ludzi, może wymagać połączenia z systemem, który zbiera dane o aktach optyka, udostępniania informacji o tej samej osobie i zapewniania możliwości wyszukiwania w obu systemach (ma to sens, chociaż przykład I' używany jest fikcyjny). W powyższym fikcyjnym przykładzie systemy dentystyczne i optyczne mogą, ale nie muszą być napisane przez firmę, w której pracuję (innymi słowy, przyglądamy się zarówno interfejsom opracowanym wewnętrznie, jak i interfejsom do systemów od dostawców zewnętrznych). **Co zrobiliśmy do tej pory** Mamy podstawowy interfejs API usług internetowych ( **.asmx** ) dla jednego z naszych produktów, ale jestem zaniepokojony zarządzaniem zmianami, jeśli chodzi o jego utrzymanie- na bieżąco, ponieważ dodajemy nowe funkcje do głównego produktu (w zakresie udostępniania nowych funkcji przez API bez naruszania kompatybilności ze starszymi interfejsami). Wyprodukowaliśmy również jedną usługę **WCF**. Sztywne umowy nieco bardziej mnie uspokajają niż praca z usługą ASMX, ale myślę, że powstrzymuje nas brak doświadczenia w firmie, więc szukam wskazówek dotyczących najlepszych praktyk, z którymi mogę się zapoznać. pomóż nam poprowadzić (lub przynajmniej wskazać nam właściwy kierunek). **Pytanie** * **Czy istnieje szczególna metodologia lub praktyka programistyczna do projektowania systemów, aby zmaksymalizować ich zdolność do łączenia się z innymi systemami?** * **Czy istnieją dobre zasoby online (lub offline) dotyczące tych praktyk programistycznych ( zakładając, że istnieją)?** Wszelkie inne porady, których możesz udzielić na podstawie powyższych informacji, byłyby mile widziane, ale nie są niezbędne. Programujemy głównie w Microsoft .NET (głównie ASP.NET, z niektórymi aplikacjami formularzy Windows) z zapleczem bazy danych SQL Server/Oracle, chociaż spodziewam się, że praktyki programistyczne mogą być niezależne od języka. (Użyłem tagu .NET po namyśle, ale mogę go później usunąć...!) Dzięki za poświęcony czas.


title: Przenosisz starszą aplikację na testowalną platformę?

text: Posiadamy aplikację internetową, która zawiera serwis internetowy z ponad 50 metodami. Aplikacja jest obecnie instalowana w wielu witrynach i jest obecnie utrzymywana przez jednego programistę. Aplikacja jest obecnie systemem jednego użytkownika, w którym wszystkie dane są przechowywane w plikach XML. Jednym z naszych głównych zadań jest uczynienie go systemem wieloużytkownikowym, a jednocześnie umieszczonym w bazie danych (RDBMS lub NoSQL, jeszcze nie zdecydowane). Oprócz innych nowych funkcji chcemy, aby zespół programistów (około 5) pracował nad innymi nowymi funkcjami. Z tego co widziałem aplikacja nie jest testowalna. Nie ma jednostek testowych, a cały kod jest w zasadzie w metodach usługi sieciowej. Muszę stworzyć framework, aby inni programiści mogli po prostu rozpocząć pracę nad swoimi funkcjami za pomocą TDD, a następnie, gdy mamy już bazę danych, możemy ją zmienić w późniejszym terminie. Myślałem o przeniesieniu całego kodu do bibliotek, a następnie wprowadzeniu UNITY i frameworków testowych/mockingowych, aby zapewnić niektóre usługi, których będą potrzebować inni programiści. W ten sposób poprzez odwrócenie kontroli mają przynajmniej interfejsy, z którymi mogą pracować. Nie jestem pewien, czy jest to właściwa droga, czy powinienem skupić się na innym obszarze. Myślałem o umieszczeniu testów jednostkowych wokół oryginalnego kodu, ale cały kod zmieni się później, więc może to być bezcelowe na dłuższą metę. Mamy około 6 tygodni, zanim zaangażujemy innych programistów. Każda pomoc byłaby mile widziana.


title: Jaka jest różnica między słowem słownikowym „Schemat” a terminem komputerowym „Schemat”

text: Co za różnica? Moim zdaniem termin „Schemat” mogę zastąpić słowem „Schemat”. Czy mogę?


title: Jak w ziemi CHRW tworzyć kody Unicode, biorąc pod uwagę, że akceptuje tylko 65k możliwych danych wejściowych?

text: http://babelstone.blogspot.com/2005/11/how-many-unicode-characters-are- there.html mówi, że istnieje 1 milion znaków Unicode, z których około 240k jest już przypisanych. 1 milion > 240k > 65k Jednak http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.chrw mówi, że chrw akceptuje 65k znaków. Nie tylko, że chrw akceptuje liczbę całkowitą. Integer ma 4 bajty w vb.net po prawej i może przechowywać znacznie więcej niż 65k znaków. Liczby się nie zgadzają, więc czego mi brakuje?


title: Terminologia OOP w Ruby i C++

text: Uczęszczam na klasę C++ w mojej szkole. Odkąd programowałem w Ruby, znam kilka rzeczy związanych z OOP. Ale w C++ istnieją funkcje składowe, zmienne składowe i funkcje statyczne. W Rubim mamy metody instancji, zmienne instancji i zmienne klas. I jest ich więcej... Jakiś powód, dla którego są różne? Czy są to dość różne poziomy OOP? A może po prostu jakieś różnice w tradycji tych ekosystemów?


title: DDD – Zagregowane korzenie – Radzenie sobie z wydajnością i współbieżnością

text: Po pierwsze, przyznam, że jestem nowicjuszem w DDD i muszę przeczytać „niebieską księgę”. Tworzę system, który ma AggregateRoot typu „Match”. Każdy mecz może mieć kolekcję "Votes", a także właściwość "VoteCount" tylko do odczytu, która jest zwiększana, gdy użytkownik odda lub odrzuci mecz. Ponieważ wielu użytkowników może głosować na dopasowanie w tym samym czasie, głosy muszą być dodawane/usuwane z dopasowania, a liczba głosów musi być zwiększana/zmniejszana jako jedna niepodzielna operacja obejmująca blokady zapisu (z blokadami obsługiwanymi przez bazę danych). (Potrzebuję VoteCount jako statycznej wartości w bazie danych, o którą będą odpytywać inne procesy/komponenty.) Wydaje mi się, że gdybym trzymał się ścisłego DDD, zakodowałbym tę operację jako: 1. Usługa aplikacji otrzyma obiekt żądania głosowania 2. Usługa następnie pobierze obiekt Match z repozytorium Match 3. Usługa następnie wywoła jakąś metodę na obiekcie Match, aby dodać głosowanie do kolekcji i zaktualizować VoteCount. 4. Repozytorium będzie następnie utrzymywało tę instancję Match z powrotem do bazy danych Jednak takie podejście nie jest możliwe dla mojej aplikacji z 2 głównych powodów, jak widzę: 1. Używam MongoDB na zapleczu i nie mogę zapakować tego typu odczyt-zapis operacji na transakcję, aby zapobiec nieczystym odczytom danych dopasowania i związanych z nimi głosów i liczby głosów. 2. Jest wysoce nieefektywny. Wycofuję wykres całego obiektu tylko po to, aby dodać głosowanie i zwiększać liczbę głosów. Chociaż jest to bardziej wydajne w bazie dokumentów niż w relacyjnej, nadal wykonuję niepotrzebną operację odczytu. Zagadnienia 1 i 2 nie stanowią problemu podczas wysyłania pojedynczego obiektu Vote do repozytorium i wykonywania jednej instrukcji atomic update przeciwko Mongo. Czy głosowanie w tym przypadku może być uważane za „zagregowane” i zasługujące na własne repozytorium i status zagregowany?


title: Jak wytłumaczyć nie-programistom, że programowanie nie jest powtarzalnym zadaniem?

text: Niektórzy ludzie uważają, że programowanie to po prostu wielokrotne pisanie na klawiaturze. Nic z tego nie jest prawdą. Przede wszystkim jest o wiele więcej do zrobienia niż faktyczne wpisywanie kodu, na przykład architektura projektu i tak dalej. Po drugie, może to być bardzo zróżnicowane, nie powtarzające się zadanie, z ciągle nowymi wyzwaniami. Jak wyjaśnić, że programowanie _nie_ jest powtarzalnym zadaniem dla **nie-programistów**?


title: Jakie są dobre zadania na kurs wprowadzający, aby dotrzeć do dzisiejszych studentów?

text: Okresowo prowadzę **wprowadzenie do kursu programowania w Javie**. Chcę dać moim uczniom kilka ekscytujących **zadań, z którymi mogą się odnieść lub które uznają za interesujące**. Przynajmniej chcę zadań, które mają sens i mają wewnętrzną spójność (na przykład, niektóre bardzo złe ćwiczenia programistyczne wydają się być wymyślone tylko po to, aby użyć najnowszej opisanej konstrukcji programistycznej). Aby dać ci wyobrażenie o zakresie, **oto, co jest omawiane** : * Przypisania muszą być w Javie, można użyć jakiejś zewnętrznej biblioteki, ale musiałby to być prosty interfejs API, a nie pełny framework * Zmienne, Prymitywy i łańcuchy * Wejście i wyjście konsoli * `if`, `for`, `while` * Operatory arytmetyczne i logiczne * Prosta grafika z rysowaniem linii i kształtów * Metody statyczne * Tablice jednowymiarowe Uczniowie nie będą zagłębiać się w zaawansowane tematy ( np. brak rekurencji, brak nacisku na dziedziczenie). Dlatego _nie_ szukam skomplikowanych projektów: "Niech napiszą kompilator C. Zrobiłem to, gdy miałem 5 lat i tylko tak się nauczyłem!" _Jeżeli masz pomysły, które są bardziej zaawansowane niż zakres, zamieść je w pytaniu „Wyzwanie” połączonym poniżej, a nie w tym._ Zamiast tego szukam interesujących pomysłów, które można zrealizować w krótkim programie. Na przykład: * Uczniowie mogą napisać konsolową wersję generatora „Nazwa Gwiezdnych Wojen”. To jest efektywne czytanie Strings i używanie `substring`, ale myślę, że to zabawne. Podobną odmianą byłby program „Mad Libs”. _Użyłem tego pięć lat temu i być może jest już "nieaktualny"._ * Używając dostarczonego trygu, uczniowie mogą rysować regularne wielokąty i tworzyć ciekawe spiralne kształty. * Nie jest również wykluczone użycie prostej klasy animacji z większością dostarczonego do nich kodu. A jeśli znasz usługę na Twitterze lub Facebooku, do której można uzyskać dostęp za pomocą prostego interfejsu API, bardzo bym o tym wiedział. Pamiętaj, że to pytanie różni się od pytania „Wymagające pytania dotyczące Javy dla początkujących”. Nie szukam wyzwań per se, po prostu interesujących. Myślę, że jeśli uczniowie pracują nad czymś, w czym mogą łatwo odpowiedzieć „dlaczego ktokolwiek miałby kiedykolwiek chcieć to zaprogramować?” wtedy nauczą się lepiej. Nawet proste problemy, takie jak obliczanie mil na galon, mogą być dobre. Chociaż, jeśli istnieje sposób, aby zaktualizować go, aby był bardziej odpowiedni, tym lepiej. Jeśli masz ćwiczenie z innego miejsca (książki lub strony internetowej), podaj źródło. Aby pomóc Ci pomyśleć o typowym świeżaku, sprawdź **listę Beloit Mindset**, która zawiera wiele przykładów, które z pewnością sprawią, że poczujesz się staro.


title: Jak mogę automatycznie cofnąć wyewidencjonowanie niezmodyfikowanych plików?

text: Od czasu do czasu zdaję sobie sprawę, że pliki, które nie zostały zmodyfikowane, zostały wyewidencjonowane przez mój Visual Studio. Jest tak dlatego, że coś zmieniłem i cofnąłem, lub po prostu dlatego, że Visual Studio zdecydowało się pobrać plik bez oczywistych powodów (np. jeśli zmodyfikujesz kod winform, Visual Studio automatycznie pobierze skojarzony .Designer.cs za Ciebie) Ponieważ mam zwyczaj robienia różnic dla wszystkich moich zameldowań, byłoby miło, gdybyś mógł je dostrzec na pierwszy rzut oka (lub zdarzenia, aby automatycznie cofnąć wymeldowanie) Czy ktoś znalazł rozwiązanie tego problemu?


title: Jaki jest termin opisujący obiekty reprezentujące zarówno logikę, jak i dane?

text: Powodem, dla którego zadaję to pytanie, jest to, że chcę wiedzieć, jak prawidłowo wywołać architekturę, w której klasy mają dane lub logikę, ale nie oba. Wiem, że jest to sprzeczne z orientacją obiektową i hermetyzacją. Chcę używać odpowiednich terminów do omawiania tej architektury. * * * EDIT: Czytając otrzymane odpowiedzi, widzę, że moje pytanie nie było jasne. Uważam też, że dokonana zmiana nie skierowała pytania w kierunku, w którym zmierzałem. Powtórzę pytanie w inny sposób. Załóżmy, że pracujesz w C#, Javie lub innym języku OO. Masz 2 projekty: DESIGN A: class Car { // data int numberOfWheels; Samochód silnikowySilnik; // metody public void StartCar(); } DESIGN B: class Car { // ta klasa zawiera tylko dane (byt, DTO, cokolwiek) int numberOfWheels; Samochód silnikowySilnik; } class CarStarter { public void StartCar(Car aCar); } W DESIGN B niektóre klasy są używane jako struktury danych/DTO/entycje (zawierają tylko dane i nie powinny zawierać metod). Inne klasy zawierają logikę i pracę z klasami danych. Załóżmy teraz, że masz projekt/architekturę, w której PROJEKT B powinien być stosowany w całym tekście, a nie projekt A. Szukałem albo terminu opisującego PROJEKT B, albo terminu/pojęcia OOP, które składa się z PROJEKTU A. Najlepiej oba. Jeśli chodzi o termin OOP, myślę, że może to być enkapsulacja. Z Wikipedia Encapsulation > Konstrukcja języka, która ułatwia łączenie danych za pomocą metod > (lub innych funkcji) operujących na tych danych. Jednak nadal nie wiem, jak nazwać DESIGN B.


title: Jak negocjować z firmą w celu opracowania oprogramowania?

text: Jestem programistą, tworzę oprogramowanie, które powinno mieć od 50k do 100k linii kodu. Chciałbym zatrudnić firmę do opracowania interfejsu do mojego narzędzia z innym oprogramowaniem poprzez napisanie wtyczki. Ta firma robiła to z powodzeniem w przeszłości i polecono mi ich używać. Jednak nigdy wcześniej nie negocjowałem i nie wiem, jak to się robi. Słyszałem, że w handlu detalicznym jedna strona prosi prawników, aby włożyli jak najwięcej rzeczy, a druga usuwała jak najwięcej. Słyszałem, że w innej branży dystrybutorzy lub wydawcy obiecują duży procent tantiem, ale nigdy ich nie zobaczysz, nawet jeśli produkt dobrze sobie radzi. Jak negocjować z firmą programistyczną w sprawie cen i ewentualnie harmonogramu tej wtyczki? Co oni podejrzewają, że zrobię? Czego powinienem od nich oczekiwać?


title: Jak obliczyć minimalną liczbę swapów, aby posortować listę na miejscu?

text: Sortowanie na miejscu to zasadniczo wymiana elementów bez użycia dodatkowej pamięci, prawda? Jak mogę znaleźć minimalną liczbę swapów wymaganą dla listy? A C D Q R Z E // wejście | | | > > > <<< // ruch A C D E Q R Z // wyjście Zamiana: A C D Q R Z E zamień Q na E, ACDERZQ zamień R na Q, ACDEQZR zamień R na Z, ACDEQRZ. Gotowe. 3 zamiany. Przesuwanie elementów w lewo lub w prawo jest zasadniczo zamianą, ale chcę mieć optymalną liczbę do wyrywania elementu z linii i zamiany jego miejsca na inny.


title: Jak wykorzystać funkcje Clearcase

text: Używamy Clearcase w naszym biurze i na podstawie mojej, przyznaję, niewielkiej wiedzy na temat Clearcase, po prostu _wydaje się_ to naprawdę nadęte narzędzie do kontroli źródła. Słysząc, jak znajomi mówią o Clearcase, wiem, że jest naprawdę potężny. **Moje pytanie brzmi: jakie cechy Clearcase sprawiają, że jest on „potężny” i jakie są dobre wskazówki i triki, które pozwolą Ci w pełni wykorzystać możliwości Clearcase?**


title: Czy szybkie czytanie powinno być stosowane podczas czytania książek technicznych?

text: > **Możliwe powielenie:** > Jak ludzie czytają duże książki techniczne? Jest znanym faktem, że czytanie Nauki i Techniki wymaga największej uwagi, aby przynajmniej zrozumieć to, co się czyta. W dobie szybkich zmian platform, szczególnie w branży informatycznej, musimy czytać ogromną i różnorodną ilość tekstu. Na ile to możliwe w przypadku książek o technologii szybkiego czytania? Rozumiem, że nie ma żadnej obiektywnej odpowiedzi na to pytanie, ale jestem zainteresowany poznaniem metod, które można wykorzystać do skutecznego szybkiego czytania w książkach związanych z programowaniem/programowaniem.


title: Czy powinienem użyć generatora parsera, czy powinienem umieścić własny kod leksera i parsera?

text: Jakie **konkretne** zalety i wady każdego sposobu pracy nad gramatyka języka programowania? Dlaczego/kiedy powinienem rzucić własną? Dlaczego/Kiedy powinienem używać generatora?


title: Do opanowania języka programowania C niezbędna jest pełna znajomość biblioteki standardowej?

text: Obecnie studiuję C z książki K&R. W niektórych przykładach autorzy wprowadzają nowe funkcje, moje pytanie brzmi, aby opanować C konieczne jest poznanie wszystkich funkcji, które są częścią standardowej biblioteki?. Załóżmy, że nauka kosztuje dodatkowy czas. UWAGA: chcę opanować język i jak mówi K&R; biblioteka standardowa nie jest częścią języka. Dziękuję


title: Zapytanie o klucz/wartość magazynu

text: Nie wiem, czy na to pytanie można w miarę sensownie odpowiedzieć (i dlatego zostanie zamknięte), ale zaryzykuję: Jakie są możliwe problemy (i rozwiązania), które można napotkać podczas tworzenia mechanizmu zapytań do magazynu kluczy/wartości/ bazy danych (jak na przykład redis)? Wszystkie wartości będą składać się tylko z dokumentów JSON, a wszystkie dane będą znajdować się tylko w pamięci RAM. Mechanizm zapytań powinien mieć możliwość wyszukiwania/zapytania o dane na podstawie wartości pól dokumentu, więc zakładam, że jednym z problemów może być wydajność na podstawie liczby dokumentów w bazie danych (można to jednak obniżyć poprzez partycjonowanie dokumentów na podstawie ich typu, np. postów, uwagi, ...).


title: Przykładowy projekt złego kodu motywujący do refaktoryzacji / dobry projekt

text: Jest to coś w rodzaju przeciwieństwa Czy istnieje projekt open-source, który może być przykładem dobrze napisanego kodu?. Uczę inżynierii oprogramowania na studiach licencjackich i chciałbym mieć blob kodu zorientowanego obiektowo, który demonstruje ścisłe sprzężenie, złą abstrakcję, niską enkapsulację, słabą konserwację, prace. Czy ktoś ma dobry przykład? Coś, co jest strawne (na przykład w ciągu godziny lub mniej), byłoby świetne. Z góry dziękuję.


title: Jakie są różnice między inżynierami QA a inżynierami oprogramowania?

text: Widzę to tak, że jeśli piszesz kod, który robi coś użytecznego, to jesteś inżynierem oprogramowania, ale z tego, co wiem, inżynierowie QA wydają się mieć kompleks niższości. Wygląda na to, że inżynierowie QA znacznie mniej niechętnie nazywają siebie programistami niż inżynierowie oprogramowania. Czy istnieją jakieś realne powody tego podziału i postrzegania, że inżynierowie oprogramowania są „prawdziwymi” programistami?


title: Czego potrzebuję, aby zostać ekspertem ASP.net MVC

text: Ukończyłem informatykę. Miałem całkiem dobrą znajomość Javy. Mam około roku doświadczenia w formularzu ASP.net C# Web. Jakie jeszcze rzeczy muszę wiedzieć, jeśli chcę zostać ekspertem w ASP.net MVC, który potrafię zrobić złożoną witrynę eCommerce?


title: Co powinien umieć zrobić kompetentny programista Java?

text: Czego powinieneś oczekiwać od siebie, a czego inni powinni oczekiwać od Ciebie, nazywając siebie kompetentnym programistą Java? Czy ktoś ma pomysły na projekt lub problem, który pomógłby zmierzyć czyjeś "java-smarts"?


title: Jak przyspieszyć operację parsowania XML?

text: Obecnie mam skonfigurowany skrypt php do parsowania xml. Czasami skrypt jest ustawiony jako dołączanie na stronie, a innym razem jest dostępny za pośrednictwem wywołania ajax. Problem polega na tym, że czas ładowania tej konkretnej strony jest bardzo długi. Zacząłem myśleć, że php, które napisałem, aby znaleźć to, czego potrzebuję w XML, został napisany słabo, a mój skrypt jest bardzo zasobożerny. Po wielu badaniach i testach problem rzeczywiście nie leży w moich skryptach (może mógłbyś uznać to za problem z moimi skryptami), ale wygląda na to, że załadowanie poszczególnych źródeł xml zajmuje dużo czasu. Mój kod wygląda tak: $source_recent = 'mój kanał xml'; $source_additional = 'inny kanał, którego potrzebuję'; $xmlstr_recent = file_get_contents($source_recent); $feed_recent = nowy SimpleXMLElement($xmlstr_recent); $xmlstr_additional = file_get_contents($source_additional); $feed_additional = nowy element SimpleXMLE($xmlstr_additional); We wszystkich moich testach powyższy kod zajmuje czas, a nie dodatkowe przetwarzanie, które wykonuję poniżej. Czy i tak jest to obejście, czy jestem na łasce czasu ładowania adresów URL xml? Jedna szalona myśl, którą musiałem obejść, to ładowanie zawartości xml do bazy danych co jakiś czas, a następnie po prostu zapytaj o to, czego potrzebuję. Myśli? Pomysły?


title: Jaka jest różnica między usługą WCF a prostą usługą sieci Web w programowaniu przy użyciu .NET Framework?

text: Moje pytania to: 1. Jaka jest różnica między usługą WCF a prostą usługą sieci Web w .NET Framework? 2. Co może zrobić usługa WCF, czego nie może zrobić usługa sieci Web platformy .NET? Innymi słowy, jakie są ograniczenia usług sieci Web platformy .NET, które zostały przezwyciężone w usługach WCF? Rozumiem, że WCF są oparte na REST, a usługi sieci Web .NET są oparte na protokole SOAP. Ale muszę wiedzieć więcej. W jaki sposób deweloper podejmie decyzję projektową, czy będzie tworzyć usługę sieci Web, czy usługę WCF?


title: Kroki, które należy podjąć, aby stworzyć Backlog Produktu, aby rozpocząć nasz projekt ze Scrum

text: Mały zespół (3 lub 4) pracuje nad dość dużym projektem, którego ukończenie może zająć 1 rok. Zasadniczo przeprojektowujemy istniejące oprogramowanie (które było programowane przez 5-6 lat i było używane bez żadnych wskazówek). Obecnie mamy listę rzeczy, które chcielibyśmy mieć (funkcje). Mamy ich około 25. Jak skutecznie przekształcić je w szereg zadań zaległych, a także zbudować nasze specyfikacje z tego miejsca. Wszelkie zasoby lub pomoc byłyby mile widziane, ponieważ wszyscy jesteśmy dość nowi w procesie projektowania.


title: Czy warto zmusić serwer WWW do parsowania plików HTML pod kątem kodu PHP?

text: Nie pamiętam, na którą stronę spojrzałem i podchwyciłem tę ciekawostkę, ale ktoś zasugerował, że powinieneś nadal analizować PHP do plików .PHP i nie modyfikować htaccess swojego serwera WWW, aby zawierał parsowanie PHP w plikach .HTML. Czy to prawda? Czy jest jakiś ogólnie uzgodniony powód, aby zrobić to w taki czy inny sposób?


title: Projektowanie API obejmujące standardowe i niestandardowe ustawienia

text: Załóżmy, że klasa pozwala na pewien rodzaj konfiguracji, która ma pewne dobrze znane wartości domyślne, ale ma również możliwość zdefiniowania wartości niestandardowej. Załóżmy na przykład, że chcesz zezwolić użytkownikom na skonfigurowanie tytułu osoby. Mogą wybierać spośród zestawu standardowych wartości (pan, pani, pani itd.), ale mogą również określić niestandardowe (dr). Jaki jest najbardziej elegancki sposób umieszczenia tego w API? Kilka przykładów w Javie: public class Person { public enum Title {MR, MRS, MS, CUSTOM}; setTitle(Tytuł tytułu, Ciąg customTitle); } Ten jest dość kiepski, ponieważ za każdym razem, gdy podajesz cokolwiek innego niż Title.CUSTOM, drugi argument jest po cichu ignorowany. Więc może: public class Osoba { public enum Title { PAN, PANI, MS, CUSTOM}; setTitle(tytuł tytułu); setCustomTitle(Tytuł ciągu); } Ta metoda też mi się nie podoba, ponieważ nie jest od razu jasne, że wywołanie jednej z nich spowoduje nadpisanie efektów drugiej metody. Czy istnieje bardziej elegancki interfejs, który przeoczam?


title: Tworzenie własnego frameworka PHP

text: Zastrzeżenie: Nie chcę rozpoczynać żadnej wojny z ogniem, więc nie będzie nazwy żadnego frameworka. Używałem wielu z istniejących frameworków PHP i moje doświadczenie w każdym przypadku było podobne: na początku wszystko jest ładne, ale w chwili, gdy potrzebujesz czegoś niestandardowego, masz wiele problemów, aby naprawić proste problemy. W przypadku frameworków zgodnych z wzorcem projektowym MVC występują pewne problemy z implementacją każdej warstwy, na przykład jest dużo kodowania używanego do modelu i dostępu do danych z wykorzystaniem ORM, a prezentacja to niewiele więcej niż czysty phtml. Niektóre frameworki używają własnych wrapperów dla istniejącej funkcjonalności PHP, aw niektórych przypadkach poważnie ograniczają oryginalną funkcjonalność. W zależności od frameworka możesz mieć dodatkowe problemy, takie jak brak dokumentacji, powolny lub nieistniejący cykl rozwoju i, co nie mniej ważne, szybkość. Kiedyś stworzyłem własny framework, który wykonując swoje zadanie i używany w kilku różnych aplikacjach po kilku latach więcej doświadczenia z PHP nie wydaje się być idealnym elementem kodowania. Mógłbym napisać własny framework i wykorzystać dodatkowe doświadczenie, które zebrałem przez te lata, aby go ulepszyć, z drugiej strony mam świadomość, że jest sporo lepszych programistów pracujących nad tworzeniem/uaktualnianiem istniejących frameworków. Czy w ogóle ma sens pisanie własnego frameworka PHP, skoro jest tak wiele możliwości do wyboru?


title: Obsługa opcjonalnych zależności GPL

text: Załóżmy, że mam bibliotekę A, która jest objęta dwuklauzulową licencją typu Free BSD. Biblioteka A opcjonalnie zależy od biblioteki B (dostępność zależności jest konfigurowana w czasie kompilacji), która jest licencjonowana na licencji GPLv3. Jeśli rozprowadzę oba pakiety razem, licencja będzie musiała być na licencji GPL. Ale czy nadal mogę rozpowszechniać bibliotekę A na licencji FreeBSD? Jak wskazać, że licencja zmienia się, gdy włączone jest korzystanie z biblioteki B? Czy muszę rozpowszechniać dwie różne wersje, czy mogę mieć tylko jedną, która zawiera zarówno licencje, jak i stany, które obowiązują na jakich warunkach? Jakiś przykładowy projekt, na który mogę rzucić okiem, aby go zobaczyć?


title: Czy istnieje prawdziwa różnica między analizą dynamiczną a testowaniem?

text: Często testowanie jest traktowane jako dynamiczna analiza oprogramowania. Jednak pisząc moją pracę dyplomową recenzent zwrócił mi uwagę, że analiza dynamiczna polega na analizie kulis programu – m.in. profilowanie i że to nie to samo co testowanie, bo to „analiza”, która zagląda do środka i obserwuje. Wiem, że „analiza statyczna” to nie testowanie, czy więc powinniśmy oddzielić tę „analizę dynamiczną” również od testowania? Niektóre książki odnoszą się w tym sensie do analizy dynamicznej. Może powiedziałbym, że testowanie to jeden ze sposobów analizy dynamicznej? Jeśli chodzi o definicje testowania: > IEEE 829 rozszerza ideę na „analizę”, obejmując tym samym „testowanie statyczne”. > A ISTQB robi pełny krok i obejmuje zarówno „dynamiczne, jak i statyczne”. > Testowanie jest zarówno dynamiczne, jak i statyczne. Więc może to tylko kwestia semantyki? Jeśli testowanie uważa się za analizę, to jego zarówno statyczna, jak i dynamiczna analiza jest podejściem testowym.


title: Jak oprogramowanie systemowe jest przechowywane w komputerze?

text: Zwykle mamy dużo oprogramowania systemowego wewnątrz naszego komputera, takiego jak systemy operacyjne (które zawierają różne programy obsługi przerwań itp.), asemblery i kompilatory, sterowniki. Moje pytanie brzmi, jak przechowujemy te informacje na komputerze? Czy te wszystkie programy są przechowywane w formacie instrukcji maszynowych wewnątrz komputera w określonych miejscach w PC-ROM? Czy też są przechowywane tak, jak w języku wysokiego poziomu (takim jak C), w którym są napisane, a następnie kompilowane przy każdym wywołaniu programów?


title: Jakie są klasyfikowane jako DRY, KISS, SOLID itp.?

text: **Czy coś takiego jak DRY jest wzorcem projektowym, metodologią, czy czymś pomiędzy?** Nie mają konkretnych implementacji, które mogłyby być koniecznie zademonstrowane (nawet jeśli możesz łatwo zademonstrować przypadek NIE używając czegoś takiego jak KISS... zobacz The Codzienne WTF dla mnóstwa przykładów), ani nie wyjaśniają w pełni procesu rozwoju, jak zwykle to robi metodologia. Gdzie to pozostawia tego typu „zasadę kciuka”?


title: Czy istnieje wzorzec projektowy do modelowania przepływu wykonywania zadań?

text: W mojej aplikacji mam zestaw zadań do wykonania: * Każde zadanie przechodzi przez stany „nie rozpoczęto”, „rozpoczęto”, „ukończono”, „nie powiodło się” itp. * Każde zadanie ma zestaw warunków wstępnych i po- warunki. * Zadanie nie może się rozpocząć, dopóki warunki wstępne nie zostaną spełnione i powinno zostać oznaczone jako nieudane, jeśli nie spełnia warunków postu. Na przykład powiedzmy, że zadanie importuje plik tekstowy do bazy danych. Warunkiem wstępnym byłoby sprawdzenie, czy plik źródłowy istnieje, a warunkiem końcowym sprawdzenie, czy dane istnieją w bazie danych. Oprócz tych warunków przed i po, czasami praca jest również uzależniona od ukończenia innych prac. Łatwo jest utworzyć tabelę zadań i mieć tabelę zależności dla zadań, ale czy faktycznie można skonfigurować te kontrole przed i po walidacji w bazie danych (tak, aby nie trzeba było wprowadzać żadnych zmian w kodzie, jeśli te warunki ulegną zmianie lub nowe warunki są dodane)? Nawet jeśli jest to jakoś możliwe, czy jest to dobry pomysł? Istnieje wymóg, aby ten model był ogólny, aby inne aplikacje również mogły z niego korzystać, nawet jeśli kontrole walidacji, które mają być wykonywane, są zupełnie inne dla innych aplikacji.


title: Niezawodna bezpieczna wymiana danych między usługą napisaną na .NET a aplikacją kliencką na iOS

text: Mam serwis napisany na .NET działający na firmowym serwerze. Został zaprojektowany w celu wykonania bardzo prostej czynności, aby otrzymać żądanie za pośrednictwem nazwanych potoków WCF z innej usługi działającej lokalnie na tym samym serwerze, przetworzyć je i wysłać odpowiedź za pośrednictwem nazwanych potoków z powrotem. Żądanie odpowiedzi to po prostu dość mały tekst w formacie XML. A teraz muszę to jakoś połączyć z naszą wewnętrzną aplikacją na iOS, aby zrobić to samo, ale ze zdalnym połączeniem przez Internet. Nie jestem zbyt doświadczony w rozwoju Objective-C na iOS i nie jestem pewien, jak postępować. Rozważałem dodanie punktu końcowego TCP do tej samej usługi WCF, ale nie jestem pewien, jak będzie to niezawodne, a ponadto będę musiał użyć pewnego rodzaju szyfrowania „ręcznie” na obu końcach połączenia. Mogę dowolnie rozszerzać lub zmieniać kod zarówno serwera .NET, jak i klienta iOS Objective-C, ale nie jestem pewien, jak zapewnić niezawodność, a przede wszystkim bezpieczeństwo przesyłania danych między serwerem a klientem. W tej chwili rozważam przepisanie mojej części serwisowej na aplikację internetową, ponieważ i tak działa ona na zasadzie żądanie-odpowiedź, ale jakie byłoby najlepsze podejście? Czy byłoby możliwe wystarczająco efektywne wykorzystanie punktu końcowego HTTPS WCF z klientem systemu iOS?


title: Czy istnieją języki programowania, w których zmienna może naprawdę znać swoją nazwę?

text: W PHP i Pythonie można iterować po zmiennych lokalnych i jeśli istnieje tylko jeden wybór, gdzie wartość pasuje, można powiedzieć, że wiesz, jaka jest nazwa zmiennej, ale to nie zawsze działa. Kod maszynowy nie ma nazw zmiennych. C kompiluje się do asemblera i nie ma żadnych natywnych możliwości odbicia, więc nie zna swojej nazwy. (Edycja: zgodnie z odpowiedzią Antona preprocesor może znać nazwę zmiennej). Czy istnieją języki programowania, w których zmienna zna swoją nazwę? Staje się to trudne, jeśli zrobisz coś takiego jak `b = a`, a `b` nie stanie się kopią `a`, ale odniesieniem do tego samego miejsca. _**EDYTUJ:_** Dlaczego na świecie miałbyś tego chcieć? Przychodzi mi do głowy jeden przykład: sprawdzanie błędów, które może przetrwać automatyczną refaktoryzację. Rozważ ten fragment C#: private void CheckEnumStr(string paramName, string paramValue) { if (paramName != "kucyk" && paramName != "koń") { string wyjątekMessage = String.Format( "Nieoczekiwana wartość '{0}' parametr o nazwie '{1}'.", paramValue, paramName); wyrzuć nowy ArgumentException(exceptionMessage); } } ... CheckEnumStr("a", a); // Var 'a' nie zna swojej nazwy - nie przetrwa naiwnego auto-refaktoryzacji Istnieją inne biblioteki dostarczane przez Microsoft i inne, które pozwalają sprawdzić błędy (przepraszam, że nazwy mi umknęły). Widziałem jedną bibliotekę, która za pomocą zamknięć/lambd może wykonać sprawdzanie błędów, które może przetrwać refaktoryzację, ale nie wydaje się to idiomatyczne. Byłby to jeden z powodów, dla których mógłbym chcieć języka, w którym zmienna zna swoją nazwę.


title: Jaka jest najlepsza praktyka w zakresie projektowania witryn i znaczników teraz, gdy przeglądarki mobilne są powszechne?

text: W 2008 roku smartfony były małym rynkiem i powszechne było projektowanie witryn o stałej szerokości – powiedzmy 900 lub 960 pikseli – z wyśrodkowaniem strony, jeśli okno przeglądarki było większe. Wielu projektantów twierdziło, że płynna szerokość była lepsza, ale ponieważ ekrany użytkowników zwykle wahały się od 1024x768 do 1920x1080, płynna szerokość pozwalała na dłuższą długość linii niż optymalna dla ułatwienia czytania, a wiele witryn (w tym Stack Exchange) używa stałej szerokości. Teraz, gdy urządzenia mobilne są powszechne, jakie jest najlepsze podejście do obsługi zarówno przeglądarek stacjonarnych, jak i mobilnych? * Załóż oddzielną witrynę mobilną (np. mobile.example.com) * Udostępniaj różne CSS na urządzenia mobilne; Jeśli tak to jak? Podsłuchiwanie przeglądarki po stronie serwera czy reguła @media? * Używasz Javascriptu lub czegoś, aby dynamicznie dostosować stronę do klienta? Czy wszystkie witryny powinny być responsywne? * Jakiś układ płynny * Coś jeszcze?


title: Jak mogę stwierdzić, czy mój komputer ma architekturę Harvarda czy von Neumanna?

text: Rozumiem, że różnica między tymi dwiema architekturami polega na oddzieleniu instrukcji od danych w architekturze Harvarda. Ale skąd mam wiedzieć, na jakim systemie sięgam? Czy można napisać program, który określi, czy system to von Neumann czy Harvard? Czy może istnieć inna architektura, czy te architektury są jedynymi znanymi?


title: Dlaczego japońska branża oprogramowania nie jest tak silna jak ich technologia sprzętowa?

text: Podziwiam japońską technologię i ich innowacyjność. Zawsze wydają się być o krok przed wszystkimi innymi. Ale dlaczego ich branża oprogramowania nie jest tak rozwinięta? Dlaczego nie ma żadnych japońskich systemów operacyjnych, zaawansowanych silników gier, aplikacji do tworzenia treści cyfrowych 3D? Chciałbym zobaczyć ich podejście do tego i myślę, że może to wnieść wiele innowacji. Btw wspomniałem o oprogramowaniu 3D, ponieważ branża animacji jest tam również silna, ale używają do tego oprogramowania z Ameryki Północnej.


title: Jak naprawdę opanować MySQL?

text: Używam mysql od tego samego czasu co PHP. Jednak czuję się około 10x pewniej w PHP; lub jakikolwiek inny język programowania. Ale wydaje mi się, że naprawdę nie potrafię naprawdę pojąć SQL. Mam na myśli, że mogę wybierać, aktualizować, wstawiać, usuwać, dołączać itp., ale jeśli chodzi o bardziej złożone rzeczy, jestem zagubiony. Jak napisać bardziej skomplikowaną instrukcję select, jak właściwie używać indeksów, jakiego silnika użyć itp. Z jakiegoś powodu naprawdę uważam, że dokumentacja mysql jest trudna do naśladowania, ale ta z php jest łatwa do naśladowania. Zaczynam myśleć, że być może mój mózg jest po prostu okablowany w sposób, który sprawia, że programowanie od początku jest mylące. Nie wiem. Większość ludzi uważa, że Regex jest tak zagmatwany, ale dla mnie ma to bardziej naukowy sens niż tworzenie instrukcji sql. Proszę nie zrozumcie mnie źle, nie nienawidzę SQL, bardzo mi się podoba, chcę tylko lepiej to zrozumieć. Jaki jest najlepszy/najszybszy sposób, aby naprawdę opanować MySQL? Kiedy mówię „mistrz”, nie mam na myśli guru wśród guru, mam na myśli wystarczająco mądrego, aby samodzielnie rozwiązać większość pytań, które zadaję w SO bez potrzeby pomocy.


title: Rozważanie wydajności i redukcja kodu dla szablonów

text: Próbuję zdecydować, czy może to być dobry pomysł, aby pomóc zmniejszyć rozmiar niektórych moich słowników zasobów xaml w dużym projekcie. Z wyjątkiem tego, że martwię się o potencjalne problemy z wydajnością na tej trasie, więc mam nadzieję, że uzyskam wgląd od innych biegłych technicznie ludzi. Na przykład, powiedzmy, że istnieją dziesiątki kontrolnych szablonów `Style`, które ujednoliciłem, aby używać wspólnych konwencji nazewnictwa w ich obiektach i obsłudze. Aby był to bardziej przejrzysty przykład, powiedzmy, że masz takie rzeczy, jak przyciski/pola tekstowe/rozdzielacze siatki/pola wyboru itp. itd. Wszystkie mają swój własny szablon stylu, ale wszyscy powiedzieliby „Obramowanie”, które jest domyślnie zwinięte, ale każdy ma ta sama widoczność przełączająca „DoubleAnimation” w odpowiednim „Storyboard” dla stanu MouseOver zgodnie z definicją w „VisualStateManager”, co w zasadzie powoduje, że w kółko powtarza się dokładnie to samo „DoubleAnimation” dla dziesiątek kontrolek dla tego stanu MouseOver. Moje pytanie brzmi, czy mógłbym potencjalnie negatywnie wpłynąć na wydajność, gdybym każdy z tych nadmiernie powtarzających się „Storyboardów” stał się ich własnym zasobem, zamiast powtarzać to samo w kółko na każdym szablonie stylu; <VisualState x:Name="MouseOver"> <Storyboard> <DoubleAnimation .../> </Storyboard> </VisualState> Czy zamiast tego mogę wziąć ten obecnie powtarzany dokładnie ten sam „Storyboard” i zrobić coś takiego bez negatywnego wpływu ( i miejmy nadzieję, że nawet poprawi) wydajność tak dużego projektu jak; <Storyboard x:Name="TheRepetitiveAnimation"> <DoubleAnimation ..../> </Storyboard> Następnie na każdym wystąpieniu w każdym szablonie zamiast powtarzania całej animacji, mogłem po prostu zrobić; <VisualState x:Name="MouseOver> <BeginStoryboard Storyboard="{StaticResource TheRepetitiveAnimation"/> </VisualState> Ponieważ gdybym mógł to zrobić w ten sposób, prawdopodobnie mógłbym usunąć co najmniej kolejny tysiąc wierszy z moich słowników zasobów, wymieniając wielowierszowe powtarzające się animacje z jednowierszowym odwołaniem do głównego „Scenorysu” w ten sposób. Z wyjątkiem tego, że robię to dla tak wielu szablonów kontrolnych, które odwołują się do tego samego scenorysu dla wszystkich tego samego wystąpienia, mogą dawać przeciwne wyniki tego, co Próbuję to zrobić.Która polega po prostu na zmniejszeniu rozmiaru/śladu całego XAML i, miejmy nadzieję, nawet przyspieszeniu procesu.Wszelkie myśli są mile widziane, na zdrowie.


title: SQL Server + projekt bazy danych i pola nieobowiązkowe

text: Tworzę aplikację, która pozwala użytkownikowi przesłać maksymalnie 20 zdjęć, prostym sposobem jest oczywiście dodanie 20 kolumn do mojej tabeli bazy danych, ale jeśli użytkownik prześle tylko 1 obraz, pozostałe kolumny stają się zbędne. Czy ktoś może mi doradzić, jak to zaprojektować wydajniej? Dziękuję.


title: Co mogę zrobić bez iPhone'a SDK i Xcode?

text: Chcę stworzyć aplikację na iPhone'a, nie mam Xcode'a ani iPhone'a SDK (ani macbooka, ale planuję kupić). Co można zrobić bez tych produktów? Edycja: zamierzam wydać go w AppStore (wiem, że potrzebuję do tego komputera Mac)


title: Jakie oprogramowanie powinniśmy napisać? Jaką technologię powinniśmy dostarczyć?

text: Podoba mi się, że firmy takie jak Twitter i Facebook mogą przesuwać granice technologii. Ale zastanawiam się, jaki jest cel Twittera i Facebooka? Dlaczego napisali to oprogramowanie, a nie coś bardziej przydatnego? Czy uważasz, że programiści mają jakiś rodzaj odpowiedzialności za pracę nad technologią, która może przyczynić się do postępu ludzkości, czy też powinni po prostu opracować coś, czego chcą niektórzy użytkownicy? Na przykład inżynier mostu lub architekt buduje rzeczy, które mogą rozwiązać trudny problem i być może istnieje wyraźna potrzeba. Ale nikt nie potrzebuje konta na Facebooku. Uwaga: niektórzy przyznali, że Twittera i Facebooka można używać w sytuacjach kryzysowych, takich jak kryzys w Japonii. Ale to po tym, jak popularny stał się Twitter. Nie sądzę, aby głównym celem Twittera było ułatwianie znajdowania osób zaginionych podczas kryzysu.