title: Publikowanie wewnętrznej aplikacji webowej w internecie dla znacznie większej niż dotychczas grupy użytkowników

text: Moja firma opracowała aplikację webową opartą na GWT (Google Web Toolkit) i Ext GWT w przeglądarce, serwerze aplikacji JBoss i Oracle w backendzie. Aplikacja pozwala użytkownikom różnych działów tej samej firmy, pracujących w różnych lokalizacjach, współpracować w celu zastosowania dość złożonego procesu zatwierdzania naprawdę drogiego sprzętu technicznego. Nazwijmy tę aplikację app 1. Aplikacja jest oparta na oknie dialogowym, używając komponentu pulpitu Ext GWT, aby udostępnić aplikację MDI w oknie przeglądarki. Jest używany produktywnie od ponad roku. Opracowano również inną aplikację, aplikację 2, która oferuje określony podzbiór funkcji aplikacji 1. Przez podzbiór rozumiem, że \- niektóre okna dialogowe nie są dostępne (np. do administrowania danymi głównymi lub ustawieniami systemu) \- niektóre okna dialogowe są ponownie używane, ale brakuje niektórych pól wejściowych lub wyświetlania \- niektóre dane są filtrowane (użytkownicy będą widzieć tylko podzbiór informacji dostępnych dla użytkowników aplikacji 1) \- niektóre okna dialogowe są całkowicie identyczne Obecnie aplikacja 2 jest, ale nie ma nikogo korzysta z niej, ponieważ nie została ona oficjalnie opublikowana dla nikogo i nikt nie ma konta, na które można by się zalogować. Celem na 2012 rok jest udostępnienie aplikacji 2 wielu nowym użytkownikom. Będą one pracować w różnych firmach w różnych lokalizacjach w całych Niemczech i potencjalnie sąsiednich krajach (Austria, Szwajcaria, Francja, ...). Nie jest możliwe zebranie wszystkich nowych użytkowników i przeprowadzenie kilkudniowego szkolenia, aby nauczyć się obsługi aplikacji i procesu. Dokumentacja, która istnieje do tej pory, to instrukcja obsługi, plik PDF zawierający ponad 100 stron, który można znaleźć za pomocą znaku „?” menu. Obie aplikacje zostały opracowane przez moją firmę dla innej firmy. Żaden z tych dwóch nie ma dużego doświadczenia w dostarczaniu i wspieraniu publicznej aplikacji internetowej dla reszty świata. Co więc możemy zrobić, aby zapewnić ludziom informacje i pomoc w korzystaniu z tej aplikacji? Oto środki, które do tej pory wymyśliłem: * Podaj stronę startową (tylko statyczny HTML) przed ekranem logowania, który opisuje (w skrócie!) czym jest ta aplikacja i dlaczego użytkownicy chcieliby się zalogować i z niej korzystać. Ponadto, jak uzyskać login i gdzie znaleźć wsparcie * Utwórz wycieczkę z przewodnikiem po krótkich filmach (stworzonych za pomocą Camtasia Studio) o długości maksymalnie 3 minut każdy. Przeprowadzą one krok po kroku przez najważniejsze przypadki użycia. Myślę o czymś takim https://sourcing.thyssenkrupp.info/lvportal/external/guidedtour/tk_uk_files/uk_html.html który powstał kilka lat temu w bardzo podobnej sytuacji * Ekran startowy, który się wyskoczy natychmiast po zalogowaniu. Wyświetli listę linków do poleceń z krótkim tekstem objaśniającym dla najczęstszych przypadków użycia. Ponadto zapewni bezpośredni link do przewodnika i podręcznika użytkownika * Zorientowana na zadania lista liczy się dla użytkownika (jak w każdym wierszu coś w rodzaju "Elementy, na których musisz zrobić X", "Elementy, na których musisz zrobić Y” itp.). Ta lista zostanie zintegrowana z tłem okna pulpitu w przeglądarce lub umieszczona w zadokowanym obszarze po lewej stronie samego pulpitu * Rozważam również stronę z najczęściej zadawanymi pytaniami. Ale oczywiście nie było jeszcze żadnych pytań, więc nie wiemy, co tam umieścić. Pomysł polega więc na tym, aby łatwo aktualizować stronę ze statyczną zawartością HTML. A może miniaturowy CMS zintegrowany z samą aplikacją. Wszelkie uwagi dotyczące tych środków oraz wszelkie dalsze sugestie są mile widziane.


title: Jak zaimplementować funkcję „samozniszczenia” w bezpłatnej wersji próbnej mojego oprogramowania?

text: Istnieje ciągły argument między bezpłatnym okresem próbnym a modelem freemium (tj. Dożywotnią wersją ich oprogramowania z ograniczonymi i/lub uproszczonymi funkcjami) za umożliwienie potencjalnym klientom i użytkownikom przetestowanie uruchamiania ich produktu. Po moich badaniach mogę stwierdzić, że bezpłatna wersja próbna jest sposobem na kontynuację zarówno z korzyścią dla użytkownika korzystającego z oprogramowania, jak i dla korzyści dostawcy, zarówno pod względem sprzedaży, jak i maksymalizacji użytkowania. Istnieje wiele czynników wpływających na bezpłatne oprogramowanie próbne, które mogą znacznie zmaksymalizować wykorzystanie użytkownika, takie jak długość bezpłatnego okresu próbnego. Jedno słowo kluczowe, które powtarza się w moich badaniach na temat „freemium”, to „frustrujące”. Wiele osób zdecydowało się odinstalować oprogramowanie zamiast korzystać z oprogramowania, w którym niektóre funkcje były dla nich niedostępne. Jednocześnie użytkownicy ci nigdy nie mieli okazji korzystać z „płatnych” funkcji. Nie wiedząc i ukrywając się przez własnych dostawców, którzy sprzedają oprogramowanie, nie wiedzą i nie mogą wiedzieć, jakie korzyści przyniosą funkcje Pro. Bez uprzedniego ich użycia użytkownik nie będzie wiedział, że ma poczucie „potrzeby” czegoś. Co prowadzi mnie do kolejnego punktu bezpłatnego modelu próbnego. Niektóre opinie użytkowników bezpłatnej wersji próbnej brzmią: „Nie wyobrażam sobie korzystania z tego oprogramowania bez funkcji Pro”. Wraca to do punktu „użytkownik nie wie, że czegoś potrzebuje, dopóki najpierw nie zrozumie uczucia posiadania”. Osoby, które miały 14 dni na korzystanie z funkcji „pełnej” wersji, powiedziały, że nie wyobrażają sobie, by nie posiadały lub nie korzystały z udostępnionych tam funkcji. Więc kiedy minęło czternaście dni, byli bardziej skłonni do wydawania pieniędzy niż ktoś, kto nigdy nie doświadczył wszystkich funkcji. Długość bezpłatnego okresu próbnego jest również ważnym czynnikiem, który wywiera trwałe wrażenie na użytkownikach. W eksperymencie przeprowadzonym przez Visual Website Optimizer zauważyli, że w przypadku 14-dniowego bezpłatnego okresu próbnego w porównaniu z 30-dniowym bezpłatnym okresem próbnym, podczas gdy liczba rejestracji i instalacji była taka sama, wykorzystanie 14-dniowego okresu próbnego wzrosło o 102%. To z kolei zwiększyło również ich dochody. Innym bardzo ważnym punktem, o którym należy wspomnieć, jest to, że „zaoferowanie użytecznej iw pełni funkcjonalnej bezpłatnej wersji produktu” jest BARDZO WAŻNE. W pełni funkcjonalne bezpłatne wersje próbne są skuteczne w zdobywaniu informacji w mediach, a ta reklama dla nowego oprogramowania i/lub dostawców oprogramowania jest dość kluczowa. Innym ważnym aspektem jest to, jak ważne jest, aby użytkownicy przekazywali informacje zwrotne. Rozważ, w pełni funkcjonalnej, ograniczonej czasowo, bezpłatnej wersji próbnej, możliwość wyrażania opinii przez użytkowników. Inną ważną cechą naszego oprogramowania jest zapotrzebowanie na dane telemetryczne, czyli ilościowe i kompleksowe dane o tym, jak użytkownik korzysta z naszego oprogramowania. Niektóre statystyki użytkowania mogą znajdować się w legalnym szarym obszarze, ponieważ przepisy różnią się w zależności od lokalizacji w Stanach Zjednoczonych i na świecie. Jednym ze sposobów rozwiązania tego problemu prawnego jest skorzystanie z funkcji umożliwiającej zbieranie anonimowych statystyk użytkowania. Funkcja opt-in oznaczałaby umożliwienie użytkownikowi wyłączenia gromadzenia statystyk, a jednocześnie użytkownik musi być bardzo świadomy tego, co robi zbieranie anonimowych informacji o użytkowaniu. Ważne jest, aby JASNE było dla użytkownika, jakie dane będą gromadzone, co „my” z nimi zrobimy, i aby w każdej chwili można było go łatwo wyłączyć, w tym umożliwić mu zmianę zdania na jego włączenie lub wyłączenie. W przypadku bardziej szczegółowych statystyk, takich jak śledzenie poszczególnych działań użytkowników, może to prowadzić do problemów prawnych. Eclipse IDE rejestruje szczegółowe statystyki użytkowania, ale robi to za pełną zgodą użytkownika. Być może będziemy musieli przygotować formularz zgody z naszym zespołem prawnym. Zbiór informacji o użytkowaniu Eclipse gromadzi następujące informacje: 1\. Wtyczki uruchamiane przez system. 2\. Polecenia dostępne za pomocą skrótów klawiaturowych i czynności wywoływane za pomocą menu lub pasków narzędzi. 3\. Kiedy skupimy się na „widoku” edytora. 4\. Informacje o systemie, takie jak wersja używanego oprogramowania, używany system operacyjny. 5\. Opis błędów wewnętrznych. Kill Switch Przełącznikiem awaryjnym naszego oprogramowania można zarządzać, rejestrując początkowe dane, szyfrując je za pomocą soli, a gdy jest to nieprawidłowa data, to znaczy użytkownik próbował ją zmienić, wyłączałoby to oprogramowanie. Inną opcją jest posiadanie uwierzytelniania internetowego podczas instalacji, rejestrowanie tej daty w centralnej internetowej bazie danych i sprawdzanie daty za każdym razem, gdy aplikacja jest otwierana. Po wyłączeniu oprogramowania możemy usunąć ważne biblioteki DLL. Nie można brać pod uwagę opcji zapłaty za wygenerowanie raportu. * * * Jestem zainteresowany wdrożeniem bezpłatnej wersji próbnej do mojego istniejącego oprogramowania. Planuję mieć okres próbny trwający 14 dni. Po 14 dniu moje oprogramowanie poprosi użytkownika o zapłacenie za wersję płatną lub nie będzie w stanie z niej korzystać. Bezpłatna wersja próbna jest całkowicie odblokowana, co oznacza, że dostępne są wszystkie płatne funkcje. Jednak mój dylemat dotyczy „najlepszego” sposobu zaimplementowania tego, co zrobić, aby uzyskać rozwiązanie końcowe. Czy usuwam ważne biblioteki DLL? Masz system uwierzytelniania użytkowników podczas instalacji lub użytkowania? Zaszyfruj początkową godzinę i datę użycia solą, a jeśli jest to nieprawidłowa data (czyli próbują zmienić początkową datę), wyłączyć oprogramowanie? Chcę wiedzieć, jakie są skuteczne środki wyłączania oprogramowania.


title: Co to jest URL RESTful połączonego elementu?

text: Będzie to usługa internetowa, która zwraca obiekt JSON. Obecnie używam technologii C# i po prostu używam ASP.Net MVC do tworzenia wywołań. To nie jest strona internetowa, więc SEO nie jest problemem. Natknąłem się na wiele przypadków, w których chcę uzyskać „następny” lub „poprzedni” element na liście. Na przykład mam usługę, która zwraca polecane zdjęcie. http://myservice.com/photos/123, który zwraca JSON {"name": "At_The_Concert", "id": "123", "src": "http://myservice.com/photostore/123.jpg "} Klient (Ajax, urządzenie mobilne itp.) tej usługi chce wiedzieć, jaki będzie „następny” element. Walczę o to, jaki powinien być adres URL. * http://myservice.com/photos/123/next * http://myservice.com/photos/next/123 * http://myservice.com/nextphotos/123 lub może właściwość id powinna być tylko parametrem http://myservice.com/photos/next?photoId=123 A może to jest całkowicie błędne i powinno wyglądać tak: http://myservice.com/photos/?method=getNextPhoto&photoId=123 chociaż z routingiem .Net może łatwiej napisać to jako http://myservice.com/photos/method/getNextPhoto?photoId=123 Jestem stosunkowo nowy w usługach internetowych i REST. Dostaję podstawowy CRUD do REST, ale nie wiem, jaka jest najlepsza praktyka tworzenia bardziej niestandardowych url, w tym przypadku „następne” zdjęcie. Czy istnieje przyjęta praktyka RESTful?


title: Pozostawianie komentarzy „Inne”

text: Powiedzmy, że mam w kodzie niezbyt intuicyjną instrukcję `if`, ale tylko wtedy, gdy jesteś nowy w bazie kodu: def set_markets(markets=None): """ Zaakceptuje 'all' jako rynki do ustawienia wszystkich rynki włączone. Dla poszczególnych rynków przekaż listę int. """ if markets: if type(markets) == list: markets = ','.join(map(str, markets)) self._set_markets(markets) Dla tych, którzy się zastanawiają: istniejący system, z którym mam do czynienia (baza danych), oczekuje listy liczb całkowitych z interfejsu użytkownika. Ten kod robi to z zaplecza, więc wybrano listę int, ponieważ najlepiej odzwierciedla to, co użytkownik mógłby w inny sposób nakarmić. Rzeczy związane z 'rynkami' są przekazywane z innej klasy, więc nawet jeśli wygląda na to, że zajmuje ponad 5 wierszy, jest to bardziej jak ~50 wierszy. Moje pytanie brzmi, czy uważasz to za bardziej czytelne? Dlaczego lub dlaczego nie? def set_markets(markets=None): """ Zaakceptuje 'all' jako rynki, na których będą ustawiane wszystkie rynki. Dla poszczególnych rynków przekaż listę int. """ if markets: if type(markets) == list: markets = ','.join(map(str, markets)) # else: # rynki są ustawione na "wszystkie" self._set_markets(markets) EDIT: Ten kod wygląda gorzej niż jest, ponieważ pominąłem szczegół: if ` Brak` jest podawany dla `rynków` (parametr domyślny), wtedy nie zmodyfikuje ustawień rynków bazy danych. Oto, co mam teraz: if markets is not None: if isinstance(markets, list): markets = ','.join(map(str, markets)) else: markets = 'all' self._set_new_header_markets(markets)


title: Optymalizacja generowania kodu dla wyrażeń w kompilatorze

text: Nie wiem, czy to pytanie ma prostą odpowiedź, czy nie, ale muszę tylko zapytać. Czytam ten samouczek (nie wiem, czy jest to dobrze znana seria, ale nazywa się „Zbudujmy kompilator!” autorstwa Jacka Crenshawa). To fajna seria, w której stopniowo uczysz się, jak skonstruować kompilator (tak naprawdę jest to nauka przez działanie). Już w drugim rozdziale poczułem potrzebę optymalizacji niektórych rzeczy. W serii poczyniono pewne ustępstwa, aby wszystko było proste: nie ma różnicy między skanerem leksykalnym (choć wydaje mi się, że jest on wprowadzony w dalszej części serii) a generowaniem kodu: robi się je za jednym zamachem. Ponadto autor w dużym stopniu polega na stosie przy tworzeniu kodu do obsługi wyrażeń. (Ponadto wyjściem jest kod asemblera, nie wiem, czy jest to normalne dla kompilatorów, więc pomyślałem, że o tym wspomnę...) Na przykład parsowanie wyrażenia 5 + (7 * 3 - 21 / 3 ) (i zapisanie wyniku w eax) daje mniej więcej następujący kod (ja używam x86 asm, w przeciwieństwie do serii, więc to jest kod asemblera, który dał mój kompilator): push 5 ; Te wiersze są generowane przez prosty parser liczb push 7 ; Ten parser odkłada swój wynik na stos push 3 ; (jak większość innych funkcji parsujących) pop eax ; Kod mnożenia pop ebx mul ebx push eax push 21 ; Wynik parsowania tych liczb push 3 pop ebx ; Kod podziału pop eax div ebx push eax pop ebx ; Kod odejmowania pop eax sub eax, ebx push eax pop eax ; Kod dodawania pop ebx add eax, ebx push eax Jak widać, kod do obsługi dodawania, odejmowania, mnożenia itp. może pozostać taki sam za każdym razem, gdy wykonywana jest operacja. Jest to bardzo wygodne, ale oczywiście generowany kod asemblera jest bardzo powolny i ezoteryczny. Pisząc ręcznie, należałoby raczej napisać coś takiego: mov eax, 21 div 3 mov ebx, eax mov eax, 7 mul 3 sub eax, ebx add 5 Moje pytanie brzmi, czy jest jakiś sposób na optymalizację wyjścia kompilatora. Oczywiście, że jest, ale czy istnieje jakiś konkretny sposób, aby mój kod był bardziej podobny do drugiego, tj. Nie używaj tak intensywnie stosu, ale zamiast tego polegaj na rejestrach do przekazywania wartości. Sam myślałem o przeanalizowaniu całego wyrażenia i przedstawieniu go wewnętrznie jako struktury przypominającej drzewo (przypuszczam, że jest to rodzaj rzeczy, którą robi parser leksykalny) przed wygenerowaniem kodu, ale nie jestem do końca pewien, jak postępować. Z drugiej strony jest optymalizacja przez wizjer i możliwość optymalizacji kodu asemblera po jego wygenerowaniu, ale nie mam pojęcia, na ile to będzie skuteczne. Generowanie lepszego kodu w pierwszej kolejności wydaje mi się logiczne i bardziej wykonalne. Wiem, że istnieje wiele dostępnych technik optymalizacji mojego kodu (na przykład ciągłe składanie, które zredukowałoby całe wyrażenie do 19. Celowo nie używałem tego rodzaju optymalizacji, aby lepiej przedstawić mój punkt widzenia), mam nadzieję na jeden technika, która jest odpowiednia do tego typu rzeczy.


title: Przychody z terenów poprzemysłowych czy z terenów poprzemysłowych? (próba poznania miary wysiłku włożonego w te dwie osoby)

text: Mam na myśli wielkie pytanie: ilu programistów jest typu brownfield ("przedsiębiorstwa") w porównaniu do greenfield (cały nowy kod, od podstaw). Ciągle czytam zapierające dech w piersiach artykuły o najnowszych technologiach, tylko po to, by dowiedzieć się, że to po prostu nie będzie działać w naszym kodzie oprogramowania dla przedsiębiorstw. Ludzie nie są gotowi do automatycznego testowania (ponieważ logika znajduje się w obsłudze kliknięć i/lub bazie danych). Ludzie nie są gotowi na narzędzia ORM, ponieważ mamy przerażającą ilość logiki w przechowywanych procesach i wyzwalaczach. Ludzie nie są gotowi na WPF, ponieważ nasze istniejące rzeczy to wszystkie WinForms. Nie możemy pobrać najnowszej wersji Reactive Extensions, ponieważ istniejący kod używał RX 1.0 i są przełomowe zmiany, które będą wymagały więcej wysiłku testowego niż jest to uzasadnione zwrotem. Itd., itd., itd. Bardzo niewiele artykułów wydaje się być skierowanych do deweloperów terenów zdegradowanych, z jakiegokolwiek powodu (nie można sprzedawać reklam artykułów, które zaczynają się od "prawdopodobnie nie możesz tego użyć, ale..."? ). Tak więc naprawdę się zastanawiam: czy branża programistyczna jest po prostu pełna programistów od podstaw, opracowujących nowe projekty dla klientów, które są następnie publikowane i cieszą się krótkim istnieniem, aż do całkowitego zastąpienia z jakiegokolwiek powodu? A może są hordy programistów pracujących na terenach poprzemysłowych, pracujących po cichu w kopalniach oprogramowania ADO.NET T/SQL VB.NET, patrzących tęsknie na słońce Entity Framework 5.0 i Haskella, i tak dalej? Jak to w ogóle mierzymy? Wynagrodzenia (wynagrodzenia??) wypłacane inżynierom oprogramowania* w dwóch kategoriach? Jak to mierzymy? Może... przychody generowane ze sprzedaży wspomnianego oprogramowania? (Zakłada się, że kiepskie stare oprogramowanie sprzedawane przez XYZ Corp. faktycznie ma opiekunów). **Moje pytanie: Czy ktoś ma jakieś liczby, które mówią o tym, jak duża część branży to tereny zielone a tereny brunatne?**


title: Czy istnieje sprawdzona koncepcja uwierzytelniania odwrotnego certyfikatu witryny internetowej?

text: Zamierzamy ujawnić niektóre z naszych wewnętrznych danych aplikacji na zewnątrz za pośrednictwem witryny internetowej. Rzeczywiste szczegóły witryny nie są zbyt interesujące, zostanie zbudowana przy użyciu ASP.NET/IIS itp., co może mieć znaczenie. Dzięki temu zasadniczo szukam mechanizmu do uwierzytelniania użytkowników przeglądających moją witrynę. Brzmi to trywialnie, nazwa użytkownika/hasło jest zazwyczaj w porządku, ale chcę więcej. Teraz przeczytałem dużo o SSL/x.509, aby zdać sobie sprawę, że CA stwierdza, że wszystko jest w porządku i że użytkownik może nam zaufać. Ale chcę zaufać użytkownikowi, chcę, aby _użytkownik_ został odrzucony, jeśli _on_ nie ma poprawnych poświadczeń. Widziałem system bankowości internetowej, w którym bank wydaje certyfikat, który jest instalowany na komputerze użytkownika (w rzeczywistości był oparty na karcie inteligentnej). Jeśli witryna nie może wykryć/wykorzystać pary kluczy, zostaniesz natychmiast odrzucony! To brutalne, ale konieczne. Czy istnieje mechanizm, dzięki któremu mogę wykonać następujące czynności: 1. Wygenerować certyfikat dla użytkownika 2. Wydać certyfikat, aby mógł go zainstalować, może być zainstalowany na > 1 komputerze 3. Jeśli ich certyfikat nie jest dostępny, wszystkie dostęp 4. Następnie używany jest standardowy schemat nazwy użytkownika/hasła 5. Używany SSL przy użyciu ich certyfikatu, gdy są już "w" To naprawdę musi już istnieć, proszę wskaż mi właściwy kierunek! Dzięki za pomoc :)


title: Korzystanie z licencjonowanej biblioteki MS-PL do użytku wewnętrznego firmy

text: Chcę użyć biblioteki na licencji MS-PL w oprogramowaniu własnościowym, ale będzie ona działać w mojej firmie, bez zewnętrznej dystrybucji. Czy licencja zezwala na tego rodzaju użytkowanie, czy stanowi naruszenie licencji?


title: Propozycja ustawienia parametrów aplikacji webowej

text: Tworzę aplikację internetową na GWT. Używam wzorca MVP z aktywnościami i miejscami. Mam plik konfiguracyjny xml zawierający niektóre parametry, które mają być używane przez aplikację. Zawartość tego pliku xml jest wysyłana do klienta za pomocą HttpRequest; Używam klasy singleton do przechowywania informacji z pliku xml. W tej chwili aplikacja pobiera dane, gdy użytkownik uruchamia aplikację na stronie głównej, co działa dobrze. Teraz, ponieważ korzystam z działań i miejsc, użytkownik może dodać stronę do zakładek i uruchomić aplikację na dowolnej innej stronie (Miejsce). I tu pojawia się problem: skoro część informacji z pliku xml wykorzystuję do ustawienia jakichś widżetów ui, muszę sprawdzić, czy plik konfiguracyjny xml został odczytany, a aplikacja ma już parametry (robię to sprawdzając klasa singletona). Ale plik xml jest odczytywany za pomocą HttpRequest, więc mam błędy, ponieważ aplikacja potrzebuje pewnych parametrów do zainicjowania niektórych widżetów interfejsu użytkownika, ale te parametry nie są gotowe na czas. Myślałem o użyciu synchronicznego żądania, aby rozwiązać problem, ale wydaje się to skomplikowane i nie polecane. Chciałbym więc usłyszeć inne sugestie. Dziękuję.


title: Lepsza kontrola nad aktualizacjami kodu

text: Pokrótce wyjaśnię moją sytuację. Mam stronę w PHP, ta strona jest oparta na niestandardowym frameworku + niektóre "wtyczki" wykonane ad hoc. Jestem jedynym deweloperem tego. Do tej pory po prostu testuję lokalnie wszelkie zmiany, niż przesyłam pliki php przez FTP. Nie czuję się już z tym komfortowo. Baza kodu znacznie się rozrosła i potrzebuję jakiegoś systemu, który pomaga śledzić zmiany (linia po linii) i może łatwo przywrócić starą wersję, jeśli coś pójdzie nie tak. Czy jest na to dobre rozwiązanie? Uwaga: Nigdy nie używałem czegoś takiego jak kontrola wersji lub subversion, ponieważ uważam, że to za dużo w tej sytuacji (jestem jedynym programistą i potrzebuję tylko podstawowej funkcji) Uwaga 2: Coś z fajnym interfejsem internetowym byłoby idealne, mogę zapłacić za też dobra obsługa Jak teraz znalazłem: * http://beanstalkapp.com/ * http://github.com/ * http://www.codespaces.com/ * http://codesion.com/ * https: //bitbucket.org/


title: Dlaczego wzorzec projektowy nie jest nazywany wzorcem implementacyjnym?

text: Uważam, że większość wzorców projektowych dotyczy implementacji modelu takiego jak mvc lub zmiany implementacji przy niższych kosztach. Wszystko to dzieje się w fazie wdrażania oprogramowania. Dlaczego więc nie nazwać ich wzorcami implementacji?


title: dokładna odpowiedź na pytanie „co to jest j2ee?” - rozmowa kwalifikacyjna

text: Chciałbym zapytać, czy ktoś z Was zna dokładne znaczenie JEE. To dlatego, że mojemu koledze zadano to pytanie podczas rozmowy kwalifikacyjnej i „nie był w stanie właściwie odpowiedzieć”… mówić słowami swojego rozmówcy. A kiedy powiedział mi, co powiedział swojemu rozmówcy, naprawdę się zdziwiłem, bo to mniej więcej to, na co sam bym odpowiedział – w zwięzłej formie pierwszy akapit tego artykułu. > J2EE (Java 2 Platform, Enterprise Edition) to platforma Java przeznaczona do > obliczeń w skali mainframe typowych dla dużych przedsiębiorstw. Firma Sun Microsystems > (wraz z partnerami branżowymi, takimi jak IBM) zaprojektowała J2EE w celu uproszczenia > tworzenia aplikacji w środowisku warstwowym cienkiego klienta. J2EE upraszcza > tworzenie aplikacji i zmniejsza potrzebę programowania i > szkolenia programistów poprzez tworzenie standaryzowanych, modułowych komponentów wielokrotnego użytku > oraz poprzez umożliwienie warstwie obsługi wielu aspektów programowania > automatycznie. Wydaje się, że to nie wystarczy, ponieważ ankieter poprosił o „bardziej precyzyjną i mniej ogólną definicję”. Czy naprawdę istnieje bardziej precyzyjna definicja JEE? A może mój kolega po prostu znalazł najbardziej wybrednego ankietera w historii? :)


title: Jak mogę testować jednostkowo klasę, która wymaga wywołania usługi sieciowej?

text: Próbuję przetestować klasę, która wywołuje niektóre usługi sieci Web Hadoop. Kod ma mniej więcej postać: method() { ...użyj klienta Jersey do stworzenia WebResource... ...wyślij żądanie... ...zrób coś z odpowiedzią... } Np. istnieje metoda tworzenia katalogu, metoda tworzenia folderu itp. Biorąc pod uwagę, że kod dotyczy zewnętrznej usługi sieciowej, nad którą nie mam kontroli, jak mogę to przetestować? Mógłbym próbować kpić z klienta/odpowiedzi usługi sieciowej, ale to łamie wytyczną, którą często widziałem ostatnio: „Nie kpij z obiektów, których nie jesteś właścicielem”. Mógłbym skonfigurować fikcyjną implementację usługi sieciowej - czy nadal stanowiłoby to "test jednostkowy", czy też byłby to test integracyjny? Czy po prostu nie jest możliwe przeprowadzenie testów jednostkowych na tak niskim poziomie - jak poradziłby sobie z tym praktykujący TDD?


title: Pytanie o prosty problem projektowy

text: W pracy natknąłem się na metodę. Utworzył zapytanie i zwrócił String na podstawie wyniku zapytania, takiego jak de ID klienta. Jeśli zapytanie nie zwróciło ani jednego klienta, zwróciłoby wartość null. W przeciwnym razie zwróciłby String z ich identyfikatorami. Wyglądało to tak: String error = getOwners(); if (error != null) { throw new Exception("Nie można usunąć, właścicielem mieszkania jest: " + błąd); } ... Ignorując fakt, że getCustomers() zwraca null, gdy zamiast tego powinna zwrócić pusty String, dzieją się dwie rzeczy. Sprawdza, czy mieszkanie należy do kogoś, a następnie je zwraca. Myślę, że bardziej czytelną logiką byłoby zrobienie tego: if (isOwned) { throw new Exception("Nie można usunąć, właścicielem mieszkania jest: " + getOwners()); } ... Problem polega na tym, że pierwszy sposób robi z jednym zapytaniem to samo, co ja z dwoma zapytaniami do bazy danych. Jakie byłoby do tego dobre rozwiązanie z dobrym designem i wydajnością?


title: Czy potrzebuję bazy danych, aby zaimplementować funkcjonalność AJAX w mojej aplikacji?

text: Jestem nowy w konstruowaniu i projektowaniu aplikacji internetowych, więc proszę o poradę (Django to mój framework). Próbuję zakodować witrynę typu „jak to zrobić”, instruującą użytkowników krok po kroku, jak wykonać określone zadanie. Chciałbym, żeby nawigacja strony wyglądała mniej więcej tak... http://technet.microsoft.com/en-us/library/aa991542.aspx ...w którym jest nawigacja przypominająca drzewo na lewe okienko zawierające listę wszystkich kroków (np. Krok 1, Krok 2 itd.), które rozwijają i ładują instrukcje dla każdego kroku do prawego okienka. Nie chcę za każdym razem ponownie ładować strony, co prowadzi mnie do AJAX. W tym momencie nie jestem pewien, jak to zaimplementować. Czy mam przechowywać kod HTML/CSS w bazie danych, który zostanie pobrany, gdy użytkownik kliknie określone linki? Czy też mogę zapisać HTML/CSS do moich plików szablonów z opcją `display: hidden`, aby zmienić na `display: block` po kliknięciu odpowiednich linków?


title: Jak radzić sobie z pojęciem czasu w testach UI/Integracji

text: Istnieje kilka dobrze znanych technik radzenia sobie z pojęciem czasu w testach jednostkowych. Pozwalają one na pisanie testów jednostkowych, które zawsze działają w określonym czasie, dzięki czemu wynik testu jest przewidywalny i można go zweryfikować. Jednak te techniki nie działają w przypadku testów integracyjnych/testów interfejsu użytkownika, ponieważ test i sama aplikacja są oddzielone (w bardzo dużym stopniu w aplikacjach internetowych, w których testowana aplikacja może zostać wdrożona na osobnym serwerze). Załóżmy na przykład, że opracowujemy system spotkań, który musi zaimplementować przycisk „zaproponuj pierwszą dostępną datę spotkania”. Jeśli przycisk zostanie kliknięty, musi zasugerować pierwszą dostępną szczelinę czasową na następny dzień roboczy. Oznacza to, że jeśli przycisk zostanie kliknięty w dowolny dzień tygodnia z wyjątkiem piątku, powinien sugerować przedział na następny dzień, ALE w piątek i sobotę powinien sugerować przedział na poniedziałek. Jak postąpić z testowaniem tego wymagania? _(Wiem, że można obejść ten problem w tym konkretnym przykładzie, ale bądź cierpliwy - zawsze zdarzają się sytuacje, w których test nie może dostarczyć danych do pracy. Nie chciałem podawać zbyt skomplikowanego przykładu.)_


title: Nie można wyjaśnić klientowi, że przyjmuje projekt w niewłaściwy sposób

text: Będąc młodszym programistą potrzebującym trochę pieniędzy na nowy sprzęt, natknąłem się na wiele stron internetowych freelancerów i bardzo szybko zdobyłem pierwszego klienta. Kompletne zarządzanie projektami, CRM i prosta strona księgowa dla małych firm. Ponieważ omawialiśmy warunki, zaproponowałem GAE/Python/Bootstrap/NDB, ponieważ jest to coś, co bardzo mi się podoba, ponieważ od dwóch lat pracuję nad projektami GAE na moim stażu. Omawiamy wynagrodzenie, warunki, nieujawnianie i proponuję swoje podejście do projektu (podążałem ścieżką, której dokładnie się nauczyłem). Proponuję najpierw pracę nad backendem w trzech fazach: * Firma/System użytkownika + Zarządzanie projektami * CRM * Analityczna/prosta księgowość (intuicyjna integracja, jak później dodał) Następnie rozpocząłem dwutygodniowy okres tworzenia i testowania interfejsu użytkownika. Najpierw zapytałem go, jakie funkcje chciałbyś, abym rozwinął we wszystkich trzech fazach. Odpowiedział, że nie ma czasu na przygotowanie dokumentu, o który go prosiłem, co uznałem za śmieszne, i poprosił mnie o przygotowanie jednego, a on go zredaguje. Oczywiście, że nigdy nie redagował. Dobra, pierwszy znak klienta, który nie ma jasnego obrazu tego, czego chce. Kupił szablon i zapytał, kiedy zaczynamy testować. Wdrożyłem więc aplikację z tylko PM i loginem firmy/użytkownika po dwóch tygodniach, tylko po to, by powiedzieć, że nie może testować niczego, co nie jest tym szablonem. Zrobiłem replikę motywu, dosłownie, ponieważ nie możemy użyć rzeczy, które ma rzeczywisty motyw (wymyślna skrzynka odbiorcza, kalendarz itp.), Powiedziałem sobie cokolwiek. Pierwszym podejściem, jakie podjąłem, było utworzenie base.html i base-nav.html oraz rozszerzenie ich w innych szablonach, aby kod i inne rzeczy można było łatwo przetestować. Zrobiłem to przez bootstrap. Powtórzył, że nie może tego sprawdzić. Teraz zmagam się ze stroną html, która ma 4 tysiące linii, muszę przyciąć, aby utworzyć base.html Rozszerzę o inne szablony, ze wszystkimi absurdalnymi ilościami plików statycznych, które są całkowicie niezorganizowane w plikach szablonów i z szef, który chce przetestować. Nie wie nawet, co chce przetestować. Wysłałem zrzuty ekranu, wdrożyłem aplikację, codziennie rozmawiałem, ale to nie wystarczy, by przekonać go, że powinniśmy skupić się najpierw na backendzie, a nie na frontendzie. To jak budowanie samochodu – najpierw chce zbudować zewnętrzne części i ograniczyć silnik, zamiast najpierw zbudować silnik, a potem dostosować do niego zewnętrzną część. Czy masz jakieś wskazówki, jak podejść do tego i rozwiązać ten problem? szablon - http://www.keenthemes.com/preview/index.php?theme=metronic_admin


title: Najlepsze praktyki dotyczące testowania jednostek repozytorium generycznego?

text: Jak mogę testować jednostkowo moje ogólne repozytorium? Kod testowania jednostkowego: [TestClass] public class UnitTestLanguage { private IUnityContainer _unityContainer; prywatne IUnitOfWork _uow; prywatny IGenericRepository<Language> _languageRepository; [TestInitialize] public void TestInitialize() { _unityContainer = new UnityContainer(); _uow = _unityContainer.Rozwiąż<JednostkaPracy>(); _languageRepository = _uow.GetRepository<Język>(); } [TestCleanup] public void TestCleanup() { _uow = null; _unityContainer = null; _languageRepository = null; } [TestMethod] public void TestMethodInsertLanguage() { var newLanguage = new Language { Name = "test_language" }; _languageRepository.Insert(nowyJęzyk); var wstawionyRowCount = _uow.SaveChanges(); var wstawionyJęzyk = _languageRepository.Find(nowyJęzyk.Id); _languageRepository.Delete(nowyJęzyk); var deleteRowCount = _uow.SaveChanges(); Assert.AreEqual(wstawionyJęzyk.Nazwa, nowyJęzyk.Nazwa); Assert.AreEqual(1, wstawionyRowCount); Assert.AreEqual(1, deleteRowCount); } } Używam czegoś takiego jak powyżej. Ale nie wiem, czy to jest właściwy sposób testowania repozytorium. Nie mogę znaleźć przydatnego samouczka/artykułu. Jak powinno wyglądać testowanie jednostkowe z ogólnymi operacjami CRUD repozytorium?


title: Czy rodzic z dziećmi powinien mieć DefaultChild, czy dziecko powinno mieć właściwość Default?

text: Który z poniższych dwóch modeli ma większy sens? Skłaniam się ku pierwszemu, ponieważ domyślne dziecko może być tylko jedno. Przykłady są w C#, ale myślę, że można to zastosować również w innych językach. Tutaj `DefaultChild` przechowuje jeden z elementów w `Children`. class Parent { int ID { get; ustawić; } Dziecko Domyślne Dziecko { get; ustawić; } IEnumerable<Dziecko> Dzieci { get; ustawić; } } class Child { int ID { get; ustawić; } } Tutaj jeden z elementów w `Children` ma `Default` ustawiony na `true`, podczas gdy inne mają ustawione `false`. class Parent { int ID { get; ustawić; } IEnumerable<Dziecko> Dzieci { get; ustawić; } } class Child { int ID { get; ustawić; } bool Domyślnie { get; ustawić; } } * * * Konkretna sytuacja: do `Użytkownika` w naszym systemie dołączony jest jeden lub więcej `Klienta`. Podczas logowania, jeśli wspomniany „Użytkownik” ma domyślnego „Klienta”, od razu pracują pod tym „Klientem”. Jeśli nie, muszą wybrać „Klienta”, w ramach którego będą pracować. Po zalogowaniu mogą przełączać się między „Klientami”.


title: Podstawowa konwencja zawartości okna C#

text: Uczę się C# przy użyciu programu Visual Studio Express 2012 i nie mogę znaleźć źródła w Internecie, które wyjaśnia konwencję zawartości okna. Mam na myśli to, jaki jest właściwy sposób zmiany kontekstu / przekazywania zmiennych z głównego okna do różnych kontekstów? Udało mi się zmienić zawartość mojego okna, tworząc i edytując nowe klasy UserControl. Jeśli chodzi o przekazywanie parametrów, eksperymentowałem z posiadaniem statycznego okna głównego z polami publicznymi i przekazywaniem wartości pól głównego okna przez funkcje akcji (z niewielkim sukcesem). Czy jest odpowiedni sposób obsługi zmiany kontekstu okna głównego, tworząc wiele klas kontroli użytkownika? Jeśli tak jest, czy powinienem utworzyć drzewo z głównym oknem jako głównym i klasami usercontrol jako elementami potomnymi? Większość pytań, które znajduję podczas wyszukiwania odpowiedzi, obraca się wokół formularzy lub nowych okien, co prowadzi mnie do pytania, czy kontrola użytkownika jest właściwym elementem do zmiany kontekstu. Jeśli brakuje mi samouczka lub prostego wyjaśnienia z góry przepraszam :D


title: pająk sieciowy na facebooku

text: Właśnie zasubskrybowałem stronę na Facebooku, która zamieszcza linki do różnych projektów open source lub archiwów kodu. Chciałbym zapisać te linki i opisy w lokalnej bazie danych. Jak mogę to zrobić? Słyszałem coś o koncepcji pająków internetowych i znam trochę php i java, ale nie wiem, jak mogę rozwiązać problem z góry. Dziękuję Ci!


title: Co jest złego w takim podejściu do CSS?

text: Mam statyczną stronę Jekyll. Strona jest budowana _raz_ na moim komputerze, a następnie wysyłana na serwer w postaci zwykłych plików HTML, graficznych i CSS, do obsługi przez zwykły serwer HTTP. Ten proces budowy obejmuje silnik szablonów, który musi sklejać ze sobą różne komponenty. Na przykład to jest szablon dla moich postów i stron (jedyny inny szablon, jaki posiadam, to dla strony głównej, która ma dość dużo wspólnego z tą): <!DOCTYPE html> <html> <head> {% include head .html %} <link rel="stylesheet" href="/css/main.css"> {% if page.title == "Tautologiczna Kaskada" %} <title>Tautologiczna Kaskada</title> {% else %} <title>Tautologiczna kaskada: {{ page.title }}</title> {% endif %} </head> <body> <div class="site"> {% include header.html %} {{ content }} {% include footer.html %} </div> </body> </html> Najważniejszą częścią do zauważenia jest tutaj sekcja `body`. Zasadniczo umieszcza przetworzony plik przecen między dwoma plikami HTML. Obecnie posiadam tylko jeden, główny plik CSS, z którego korzystają WSZYSTKIE strony. Uważam, że takie podejście jest trochę niepraktyczne. Wszystko jest tam zdefiniowane i robi się bałagan. Połącz to z moją ogólną nieznajomością czegokolwiek poza podstawowym CSS, a otrzymasz coś zbliżonego do koszmaru. Mój pomysł jest taki: wbudowany CSS dla wszystkich tych części, które sklejam. Zatem header.html miałby swój CSS w swoim pliku, footer.html miałby swój CSS, a plik opisujący treść we własnym pliku. **Czy to prawidłowe rozwiązanie mojego problemu? Czy jest coś nie tak z tym podejściem?**


title: Czy sprawdzanie typów obiektów za pomocą identyfikującej zmiennej składowej jest złą praktyką?

text: **Preambuła:** tworzę prostą grę planszową w C++, w której postacie AI poruszają się po polach na planszy. Istnieją różne rodzaje kwadratów, każdy odziedziczony po klasie abstrakcyjnej, każdy z innym wpływem na postać AI. Na przykład niektóre to sklepy, w których postać może kupować rzeczy, inne to miejsca pracy, w których postacie otrzymują pieniądze itp. Podobnie są różne postacie AI (również odziedziczone po klasie abstrakcyjnej), które podejmują różne decyzje. Niektórzy pracują więcej niż inni, niektórzy jedzą więcej niż inni itd. Problem polega na tym, że postać AI musi znać typ kwadratu, aby podjąć decyzję, co zrobić. W tej chwili sprawdzenie typu za pomocą ciągu typu nazwa-typ jako zmiennej składowej jest najłatwiejszym rozwiązaniem, ale wydaje się strasznie nieeleganckie i niezbyt pomocne, jeśli chodzi o dodawanie nowych typów kwadratów i znaków AI. **Pytanie:** Czy sprawdzanie typu obiektu przez pytanie o identyfikator, który jest w tym celu umieszczany w jego klasie, jest złą praktyką? Czy złą praktyką jest używanie innych metod identyfikacji typu w czasie wykonywania, takich jak dynamic_cast i typeinfo w celu kontrolowania przepływu wykonywania? **Przykład:** Poniżej klasy Square (dostępnej przez currentSquare() znajduje się funkcja składowa getType(), która zwraca ciąg z nazwą typu: //Normalny znak AI voiddecyduj() { if(currentSquare()- >getType()=="HOME") { watchTV(); sleep(); } if(currentSquare()->getType()=="WORKPLACE") { work(); } } //Ilość zwierząt na imprezę unieważnia decyzję () { if(currentSquare()->getType()=="HOME") { moveTo(getGameBoard()->closestBar()); } if(currentSquare()->getType()=="STANOWISKO") { spać();         }      }


title: Ile informacji o błędzie powinno być pokazane użytkownikowi?

text: Aplikacje zawsze mogą zgłaszać błędy. Jeśli taki błąd wystąpi, należy powiadomić użytkownika, ponieważ to, o co poprosił aplikację, nie powiodło się. Jednak ile informacji należy podać użytkownikowi? Myślę, że większość z nas zgadza się na niepokazywanie śladu stosu (czy ślad stosu powinien znajdować się w komunikacie o błędzie przedstawianym użytkownikowi?), ale nie mogę znaleźć pytania o resztę zawartości błędu ani o tym, co pokazać użytkownik. Na przykład język obsługujący wyjątki (.net, java) ma typ wyjątku do udostępnienia, w którym wystąpił wyjątek, i nieco wyjaśniający komunikat do wyjątku. Czy to również powinno być ukryte przed użytkownikiem? Czy mimo to powinniśmy to pokazać? A może powinniśmy pokazać ogólny komunikat? czy też powinniśmy pokazać jeden z wielu komunikatów w oparciu o podstawowy wyjątek?


title: Zaawansowane techniki dywersji, czego mi brakuje?

text: Zacząłem używać SVN około 9 miesięcy temu i co najmniej zmieniło to zasady gry. Chociaż czuję, że wciąż jestem trochę zagubiony. Czuję, że muszę wykorzystać o wiele więcej, aby naprawdę przyspieszyć tworzenie aplikacji. **Na przykład** chciałbym móc poddać wszelkie niestabilne/poważne zmiany w jakimś „podrepozytorium” czy coś takiego. Zauważyłem, że duże zmiany utrudniają drobne poprawki, które są dość pilne. Jak mogę przesłać jedną prostą aktualizację bez przesyłania niekompletnego lub uszkodzonego kodu?


title: Wzorzec projektowy dla kontroli interfejsu użytkownika i dostawcy do wywoływania zdarzeń kontroli

text: Mam formant interfejsu użytkownika, który używa klasy dostawcy do implementacji rzeczywistej logiki złożonego zadania. Tak więc kontrola deleguje dostawcę do wykonania jakiejś pracy. Ale dostawca również musi pracować z kontrolką; musi odpalić niektóre zdarzenia na kontrolce. Szukałem dobrego wzorca projektowego, jak ta dwójka mogłaby ze sobą współpracować, ale nie byłam pewna żadnego. Nie chciałem, aby dostawca bezpośrednio wywoływał zdarzenia w kontrolce. Myślałem o metodach na kontrolce, które mógłby wywołać, ale też nie wiem, czy mi się to podoba. Jakieś pomysły, myśli? Jaki jest dobry wzorzec projektowy, którego dostawca może użyć do wyzwolenia powiadomienia za pośrednictwem kontrolki? Każde zdarzenie może również wymagać przekazania parametrów niestandardowych.


title: Jak radzić sobie z rozwojem strony zewnętrznej?

text: Obecnie pracuję nad projektem sieci społecznościowej, którego design jest opracowywany przez inną firmę, z którą mamy do czynienia. Poinformowaliśmy ich, że potrzebujemy zadania o wysokim priorytecie, aby zakończyć projekt JAK NAJSZYBCIEJ. Powiedzieliśmy im, że czego potrzebujemy w zadaniu, a partia powiedziała: „Czym się zajmujesz kodowaniem czy projektowaniem?”? Czy to ich troska o to, że zajmuję się projektowaniem lub kodowaniem? Kiedy daliśmy im zadanie, jak może zadać pytanie, co robię? Pytam więc mojego szefa, co robić, a on powiedział, żeby mu powiedzieć, że „potrzebujemy HTML i CSS”. On wykonał zadanie. O co dokładnie ten facet pyta? Nie chcę ponownie wchodzić w taką sytuację. Chcę sam radzić sobie z takimi sytuacjami, nie rozmawiając z szefem. Czego mi tu brakuje?


title: Ukryj linie (logicznie rzecz biorąc) w apletach

text: Rozwijam aplikację, w której rysuję dużą liczbę linii (kolor jest podany jako czarny) i aktualizuję je tam, gdzie muszę je usunąć z ekranu. Pomyślałem o dopasowaniu ich koloru do tła, abym mógł je ukryć. Wydaje się to proste i działa, ale w sensie praktycznym mam 10000 punktów i prawie 20000 linii do narysowania i ponieważ większość linii nakłada się lub krzyżuje ze sobą, widok jest tak obrzydliwy. Potrzebuję więc jakiejś funkcji, aby faktycznie usunąć te wybrane linie między dwoma znanymi punktami z ekranu. Nawet jeśli mam problem z kolorem tła, mogę dokładnie dopasować domyślny kolor tła apletów. Czy ktoś może mi zasugerować rozwiązanie lub kolor?


title: Pomaganie nowemu programiście stać się bardziej samodzielnym i nie pytać mnie o tak wiele?

text: Obecnie pracuję nad projektem z nowym programistą. Jak mogę pomóc mu przyspieszyć pracę? Często zadaje mi pytania, a ja paruję z nim zaprogramowane w backbone.js (część projektu). Teraz chcę, żeby sam zajął się projektem, abym mógł skoncentrować się na innych rzeczach, aby przyspieszyć proces. Nie chce wyszukiwać rzeczy w Google ani pytać na forum, jeśli pojawi się jakiś problem. Po prostu przychodzi do mnie. Co on powinien zrobić? Co powinienem zrobić? Kiedy go zmuszam, robi rzeczy szybko. Jak mogę go zmotywować do samodzielnej pracy?


title: Interakcja z danymi przy użyciu wielu baz danych/serwerów

text: Wszystkie projekty, z którymi miałem do czynienia do tej pory wymagały tylko jednej bazy danych na jednym serwerze. Chciałbym dowiedzieć się więcej o tym, jak projekty, które wymagają skalowania, przenoszą się do wielu baz danych i/lub serwerów, aby pomóc w zarządzaniu obciążeniem. Jestem świadomy wysokiej skalowalności, ale szczególnie interesują mnie przykłady kodu lub dodatkowe zasoby, w których mógłbym przeczytać więcej na ten temat. Na przykład: * Jak konstruowane są łączenia między dwiema tabelami w wielu bazach danych? (Przydałby się tutaj przykład kodu). * Czy istnieją specjalne strategie śledzenia, które tabele znajdują się w której bazie danych? * Czy kod aplikacji musi wiedzieć, że jedna lub więcej baz danych jest rozmieszczonych na wielu serwerach? Jeśli nie, na jakim poziomie są filtrowane żądania? * Kiedy nadszedł czas, aby przejść poza konfigurację 1 bazy danych/1 serwer? Jak często trzeba to robić?


title: Czy ma sens standaryzacja uwzględniania utworzonej daty i pola daty ostatniej aktualizacji we wszystkich tabelach bazy danych?

text: Moja szefowa obecnie próbuje zastosować pewne standardy programistyczne do naszego zespołu, więc wczoraj mieliśmy spotkanie, aby omówić standardy, które w większości szły dobrze, dopóki nie wspomniała: * Wszystkie tabele DB będą miały kolumny CreatedDate i LastUpdatedDate, aktualizowane przez wyzwalacze. W tym momencie nasz zespół doznał schizmy opinii; połowa z nas uważa, że robienie tego na wszystkich stołach to duży nakład pracy przy niewielkich korzyściach (pracujemy nad projektami o stałym budżecie, więc wszelkie koszty pochodzą z zysków naszej firmy); druga połowa uważa, że pomoże to we wsparciu projektów. Jestem mocno w byłym obozie. Chociaż rozumiem, że niektóre przypadki zewnętrzne spowodowałyby, że dodatkowe kolumny poprawiłyby podatność na wsparcie, moim zdaniem ilość pracy, która byłaby wymagana, aby dodać kolumny w pierwszej kolejności, a także konserwacja, spowodowałaby, że spędzilibyśmy mniej czasu na większej liczbie ważne rzeczy, takie jak testowanie jednostkowe lub obciążeniowe. Jestem też całkiem pewien, że te dodatkowe kolumny sprawiłyby, że korzystanie z ORM-ów byłoby bardziej niezręczne - pamiętając, że używamy głównie C# i Oracle, co na początku nie jest zbyt przyjemne w ORM-ie. Więc moje pytanie jest dwojakie: * Czy jestem we właściwym obozie? Nie twierdzę, że mam znane na całym świecie umiejętności w zakresie baz danych, więc może to być banalnie łatwy dodatek bez niepożądanych skutków ubocznych. * Jak poradziłbyś sobie z sytuacją, w której spotkanie o standardach przeradza się w mecz żużlowy? Jak naprawdę mogę sprzedać, że ten standard nie pomoże nam na dłuższą metę?


title: Musisz dowiedzieć się grafiku przez e-mail

text: Myślimy więc, że moglibyśmy chcieć ułatwić przesyłanie grafików, wysyłając nasz system grafików pracy e-mailem do pracownika. Następnie pracownik powinien wypełnić grafik i odesłać go pocztą elektroniczną w celu przetworzenia. Czy ktoś wie, że niektórzy piszą o tym, jak inni to zrobili? Wygooglowałem, ale bez powodzenia. Dzięki za wszelkie przemyślenia/wejścia.


title: Jak języki funkcjonalne radzą sobie z liczbami losowymi?

text: Chodzi mi o to, że w _niemal_ każdym tutorialu, który przeczytałem o językach funkcjonalnych, jedną z największych zalet funkcji jest to, że jeśli wywołasz funkcję z tymi samymi parametrami dwa razy, będziesz **zawsze** skończyć z tym samym wynikiem. Jak, u licha, zrobić funkcję, która pobiera ziarno jako parametr, a następnie zwraca losową liczbę na podstawie tego ziarnka? Mam na myśli, że wydaje się to sprzeczne z jedną z rzeczy, które są tak dobre w funkcjach, prawda? A może kompletnie czegoś tu brakuje?


title: Modelowanie logowania i uwierzytelniania na kliencie mobilnym iOS

text: Zaraz zaczynam pracę nad V2 aplikacji mobilnej i chciałbym przyjąć podejście bardziej obiektowe. Przede wszystkim dlatego, że uważam, że dzięki temu kod jest łatwiejszy w utrzymaniu, ale dodatkową korzyścią jest łatwiejsza testowalność. V1 aplikacji jest dość skoncentrowany na kontrolerze. Login ViewController ma swoje pola logowania i trafia do backendu przez AFNetworking, zgłasza błędy w razie potrzeby i otrzymuje token, który jest bezpiecznie przechowywany do późniejszego wykorzystania. Jest tylko jeden użytkownik. Kiedy użytkownik się wylogowuje, wszystkie lokalne dane są usuwane, więc zasadniczo bieżący użytkownik jest „globalny” i może być zerowy (potrzebuje logowania) lub nie (nie potrzebuje). Sytuację komplikuje oczywiście idea wygaśnięcia tokena. Zasadniczo każde żądanie sieciowe (zarówno jawne GET, jak i asynchroniczne, opóźnione POST) może zakończyć się niepowodzeniem, ponieważ token wygasł i chcemy, aby użytkownik ponownie się uwierzytelnił. Model V1 ekranu logowania podczas uruchamiania, jeśli nie ma aktualnego użytkownika, nie jest łatwo rozszerzany na ten model i czuję, że brakuje mi obiektu, przez który mógłbym wszystko przekierować. Authenticator, który udostępnia token lub wyświetla ekran logowania, jeśli go nie ma. Wtedy moglibyśmy zrobić coś takiego - gdy jakiekolwiek żądanie się nie powiedzie, usuwamy bieżący token i ponawiamy żądanie. Żądanie prosi wystawcę uwierzytelnienia o token, a wystawca prosi użytkownika. Lub coś. Jak można to lepiej modelować? Czuję, że kod musi być scentralizowany, ale jest to trudne, ponieważ żądania są używane w aplikacjach. To prawie tak, jakby warstwa filtrująca była potrzebna do centralnej obsługi błędów uwierzytelniania, ale inne błędy / sukcesy, gdziekolwiek są potrzebne (w bloku sukcesu / niepowodzenia).


title: Gdzie umieścić dziennik zmian, aby wyświetlić ostatnie zmiany użytkownikowi?

text: Chcę utworzyć dziennik zmian dla mojej aplikacji, aby wyświetlić zestaw ostatnich zmian użytkownikowi. Ale nie jestem pewien, gdzie to umieściłem. Czy tworzę plik tekstowy i w nim piszę? Gdzie mam więc umieścić ten plik tekstowy? Czy może użyć akcji na pasku menu i wyświetlić dziennik zmian w nowym oknie po kliknięciu akcji?


title: Najlepszy sposób na obsługę wartości null w Javie?

text: Mam kod, który kończy się niepowodzeniem z powodu NullPointerException. Na obiekcie, w którym obiekt nie istnieje, wywoływana jest metoda. Jednak to skłoniło mnie do zastanowienia się nad najlepszym sposobem, aby to naprawić. Czy zawsze koduję defensywnie dla wartości null, aby w przyszłości sprawdzać kod dla wyjątków wskaźnika null, czy też powinienem naprawić przyczynę wartości null, aby nie wystąpiła dalej. Jakie są Twoje myśli?


title: Przedmioty CS, które student musi znać

text: Na studiach nigdy nie interesowałem się teorią. Nigdy tego nie czytałem. Bez względu na to, jak bardzo się starałem, nie byłem w stanie czytać rzeczy i praktycznie nie wiedziałem, co się właściwie dzieje. Jak na przykład na moim kursie z teorii automatów, mój profesor powiedział mi wszystko, co może się wiązać z matematycznym aspektem tej teorii, ale ani razu nie wspomniał, gdzie będzie to praktycznie stosowane. To tylko przykład. Udało mi się też zaliczyć szkołę i odbyć staż w firmie, w której wykonałem projekt i na szczęście nie przejmowali się moimi ocenami, ponieważ były powyżej średniej. Teraz interesuje mnie, z jakich przedmiotów uczeń CS powinien być absolutnie i pozytywnie świadomy? Tematy, które mogą mieć znaczenie w branży. Dzieje się tak dlatego, że mam trochę wolnego czasu i lepiej je rozumiem. Jakie są twoje sugestie? Jak dla jednego, algorytmy to jeden temat.


title: Jaki jest najlepszy rynek dla niezależnych programistów?

text: Potrzebuję naprawdę utalentowanego, pracowitego programisty, który zna Cocoa i Objective C dla mojej aplikacji na iPhone'a. Szukam partnera a nie tylko programisty. To dość duży projekt, który wymaga utalentowanego programisty. Co byś powiedział, to najlepszy rynek dla kogoś takiego. Sprawdziłem digitalpoint i sitepoint, ale tak naprawdę są one przeznaczone do mniejszych projektów.


title: Jak poprawić relacje z rekruterami?

text: Ja osobiście zawsze mam problemy z rekruterami i ich ciągłym spamem. Zwykle dostaję mnóstwo maili z ofertami pracy, nie związanych z tym, co robię. Albo nie mają pojęcia, co robię. Albo mówią, że mają pracę w mojej dziedzinie, ale zmuszają mnie do przebrnięcia przez godziny papierkowej roboty tylko po to, by dowiedzieć się, że nie mają prawdziwego kierownika. Albo moje CV zawierało słowo kluczowe, którego szukali, ale to słowo kluczowe jest jak 1-10% tego, co robię, a nie mój główny zestaw umiejętności zawodowych. Chodzi mi o to, że chcę mieć bardziej grzeczny, dokładniejszy, mniej marnujący czas innych. Więc chcę wymyślić formularz, który mogę utworzyć w Gmailu, aby automatycznie wysłać do wszystkich rekruterów, aby pomóc im informować, edukować i szkolić ich, aby lepiej sobie ze mną radzili. Dzięki temu wiedzą dokładnie, co mi wysłać, aby nie tracić czasu. Nie gramy w tagi e-maili/telefonów, tylko po to, by dowiedzieć się, że nie mają pojęcia, co robię, ani jak znaleźć pasującego kierownika pracy. Chcę, żeby to była poprawa moich relacji i doświadczenia z rekruterami, bo szczerze mówiąc większość z nich marnuje mój czas. Dzwonią do mnie do pracy, nie biorąc pod uwagę, że nie mogę odbierać telefonów w pracy, a mieli już mój adres e-mail. Przeważnie mnie denerwują, ale jestem zmęczony tym, że muszę być niegrzeczny, aby przekazać swój punkt widzenia. Chcę, aby natychmiast upewnili się, że wiedzą, co mogę i co zrobiłem (Czy przeczytałeś moje CV?) i mają rzeczywistych potencjalnych klientów gotowych do zatrudnienia / wywiadu wkrótce lub teraz. Wszelkie sugestie, jak poprawić komunikację, aby nie marnować sobie nawzajem czasu. Z pewnością nienawidzę być niegrzecznym lub niewłaściwym, ale kiedy po prostu marnują tak dużo mojego czasu, nie wiem, co jeszcze mogę zrobić. Więc dziękuję za poświęcony czas. Żeby było jasne, potrzebuję twojej pomocy w napisaniu listu, który mogę wysłać do każdego rekrutera, który e-mail to ja, jak najlepiej współpracować ze mną i innymi osobami w karierze IT/Web.


title: Czy istnieje inne uzasadnienie użycia klas abstrakcyjnych/interfejsów w C++ i Javie?

text: Według Herba Suttera należy preferować interfejsy abstrakcyjne (wszystkie czyste funkcje wirtualne) od klas abstrakcyjnych w C++, aby możliwie jak najdalej oddzielić implementację. Chociaż osobiście uważam tę zasadę za bardzo użyteczną, niedawno dołączyłem do zespołu wielu programistów Java i w kodzie Java ta wskazówka wydaje się nie istnieć. Funkcje i ich implementacje bardzo często znajdują się w klasach abstrakcyjnych. Tak więc, czy Herb Sutter źle zrozumiałem, nawet dla C++, czy też istnieje ogólna różnica w użyciu funkcji abstrakcyjnych w C++ w porównaniu z Javą. Czy klasy abstrakcyjne z kodem implementacyjnym są bardziej sensowne w Javie niż w C++, a jeśli tak, to dlaczego?


title: Dlaczego możesz mieć statefulness w klasie statycznej w java?

text: Bawiłem się dzisiaj Javą i czytałem o statycznych klasach wewnętrznych. Dlaczego możesz mieć „stanowość” wewnątrz statycznej klasy wewnętrznej. Na przykład: class externalClass { static class Test { private String a; String getA() { return a; } void setA( Ciąg noweA) {a = noweA; } } } Czy coś nie rozumiem? Wygląda na to, że nie powinieneś być w stanie zachować mutowalnego stanu wewnątrz klasy, która jest oznaczona jako statyczna. Co więcej, wygląda na to, że nie powinieneś być w stanie stworzyć instancji czegoś, co jest klasą statyczną, powinien to być statyczny singleton. Być może ktoś mógłby mnie poprawić, jeśli robię błędne założenie, lub wyjaśnić, dlaczego autorzy Javy postanowili to umożliwić. EDYCJA: Czuję się tak, jakbym mylił słowo kluczowe `final` i `static` w java, ponieważ zmienne `final` nie mają stanu. Jednak nadal wydaje się _bardzo_ dziwne, że można utworzyć instancję klasy statycznej.


title: Czy to normalne, że pragniesz uznania i uznania?

text: Pracuję dla międzynarodowej organizacji zajmującej się rozwojem produktów. Pracuję bezpośrednio dla osoby, która założyła indyjskie skrzydło organizacji. Pracuję niesamowicie ciężko i staram się wykonywać najlepszą możliwą pracę. Ale po 6 miesiącach pracy tutaj trudno mi pozostać zmotywowanym do robienia wszystkiego, co w mojej mocy, ponieważ bez względu na to, jak bardzo się staram, nie otrzymuję żadnego potwierdzenia, że zrobiłem coś dobrze lub źle. Często to, co widzę, że muszę zrobić, aby coś zrobić, nie leży w konwencjonalnej mądrości tego, jak powstaje oprogramowanie. Problem dręczy mnie tak bardzo, że rozważam przeprowadzkę do innej firmy. Nie wiem, czy oczekiwanie od czasu do czasu „dobrej pracy” jest złe. Ale wydaje mi się, że odrobina szczerego uznania pomoże mi poprawić sytuację. Czy to po prostu złe, żeby go potrzebować? Czy miałeś podobne doświadczenie?


title: Czy jest jakiś dobrze znany projekt VBify C i uczynienie C jako języka RAD?

text: Mam dwa pytania: `Pytanie nr 1: Czy istnieje jakiś dobrze znany projekt do **VBify** C? **VBify** oznacza tutaj **ułatwienie jak w VB.NET** i uczynienie C dobrze obsługiwanym w IDE tak jak VB.NET, czyli z następującymi funkcjami: uzupełnianie słów, opis argumentów funkcji i wszystko tak samo z rozwojem VB.NET przy użyciu Visual Studio. `Pytanie #2`: Czy jest jakaś dobrze znana próba uczynienia C językiem **RAD (Rapid Application Development)**?


title: Czy są jakieś badania naukowe na temat szkodliwego wpływu hałaśliwego miejsca pracy na produktywność?

text: Pracuję w otwartym biurze, w którym panuje typowy hałas biurowy (ludzie rozmawiają i przechodzą obok). Jest po prostu zbyt głośny i niespokojny, żebym mógł w nim pracować. Próbowałem i próbowałem coś zmienić, ale bezskutecznie. Jestem w punkcie, w którym zaczynam szukać nowej pracy, ale pomyślałem, że dam jej jeszcze jedną szansę i spróbuję uzasadnić moją sprawę badaniami. Pamiętam, jak czytałem o badaniach nad tym, jak hałas i zakłócenia wpływają w szczególności na pracę z wiedzą, a zwłaszcza na rozwój oprogramowania. Może jestem kiepski w wyszukiwaniu, ale po prostu nie mogę znaleźć prac naukowych poświęconych hałasowi i pracy wymagającej dużej koncentracji. PS: Chociaż doceniam wskazówki, jak eliminować hałas (muzyka, biały szum itp.), Ogranicz swoją odpowiedź do linków do artykułów naukowych. Dziękuję.


title: Co powinno, a czego nie powinno znajdować się w pliku nagłówkowym?

text: Jakie rzeczy absolutnie nigdy nie powinny być zawarte w pliku nagłówkowym? Jeśli na przykład pracuję z udokumentowanym standardowym formatem branżowym, który ma wiele stałych, czy dobrą praktyką jest zdefiniowanie ich w pliku nagłówkowym (jeśli piszę parser dla tego formatu)? Jakie funkcje powinny znaleźć się w pliku nagłówkowym? Jakie funkcje nie powinny?


title: Jak stworzyć i opublikować użyteczną bibliotekę Java

text: Ostatnio pracowałem nad klasą Java, która generuje permutacje na listę obiektów. W każdym razie chciałbym, aby ta biblioteka była oferowana publicznie, więc mam kilka pytań: * Większość bibliotek, które widzę, ma takie skomplikowane nazewnictwo pakietów, w szczególności zawierające `com`/`org`. Czy istnieje dla nich konwencja, czy wystarczy pakiet "permutacji"? * Czy istnieje określony format ich publikacji? Czy powinienem dołączyć oddzielne WAR dla kodu źródłowego / javadoc? * Mam pliki w repozytorium GitHub. Myślę, że mogę tam obsłużyć pliki, ale jak sprawić, by ludzie znaleźli moje repozytorium?


title: Kroki w celu utrzymania dobrej bazy danych błędów

text: Utrzymywanie bazy błędów jest ważne dla każdego projektu. Jestem przyzwyczajony do przechowywania następujących informacji w bazie danych błędów * Data wydania, godzina * Do kogo jest przydzielony * Czy problem został rozwiązany, czy nie * Jeśli zostanie rozwiązany, to data i godzina rozwiązania Czy to wystarczy do utrzymania dobrej bazy danych błędów?


title: jaki jest cel strzał?

text: Uczę się programowania funkcjonalnego z Haskellem i staram się uchwycić pojęcia, najpierw rozumiejąc, dlaczego ich potrzebuję. Chciałbym poznać cel strzałek w funkcjonalnych językach programowania. Jaki problem rozwiązują? Sprawdziłem http://en.wikibooks.org/wiki/Haskell/Understanding_arrows i http://www.cse.chalmers.se/~rjmh/afp-arrows.pdf. Wszystko, co rozumiem, to to, że są one używane do opisywania wykresów do obliczeń i że umożliwiają łatwiejsze kodowanie w stylu bezpunktowym. W artykule założono, że styl bezpunktowy jest ogólnie łatwiejszy do zrozumienia i napisania. Wydaje mi się to dość subiektywne. W innym artykule (http://en.wikibooks.org/wiki/Haskell/StephensArrowTutorial#Hangman:_Main_program) zaimplementowana jest gra w kata, ale nie widzę, jak strzałki czynią tę implementację naturalną. Mogłem znaleźć wiele artykułów opisujących koncepcję, ale nic o motywacji. Czego mi brakuje?


title: Co dokładnie oznacza „przenośność”?

text: Bardzo dobrze wiem, że java jest językiem przenośnym... i to kod bajtowy sprawia, że jest przenośny.. Jednak uczyłem się również, że C jest językiem przenośnym. **„Programy napisane w C są przenośne, tj. programy napisane dla jednego typu komputera lub systemu operacyjnego mogą być uruchamiane na innym komputerze lub systemie operacyjnym”.** Zatem jaka jest różnica między przenośnością języka C a przenośnością Javy? czy możemy powiedzieć, że C jest również językiem przenośnym, takim jak java? Wiem, że przenośność java może dotyczyć różnych aplikacji, takich jak Mac, PC, telefon komórkowy..i C nie mogą być używane w takich przypadkach..Ale moje pytanie nadal brzmi, jak przenośność różni się w obu językach? Proszę, wyczyść moje zmieszanie. Z góry dziękuję..


title: Pokój rozmów dla aplikacji Ruby on Rails — czy powinienem to zrobić za pomocą EventMachine czy Node.js?

text: Mam pokój rozmów dla aplikacji Rails jest zaimplementowany w staromodny sposób, przy użyciu Ajax Polling. To nie jest skalowanie i zaśmieca mój dziennik, więc chcę dokonać ponownej implementacji za pomocą Websocket/degradacji HTML5 EventMachine do flasha lub Node.js. Biorąc pod uwagę, że reszta aplikacji znajduje się w Railsach, jakie są zalety i wady każdej z tych dwóch alternatyw?


title: Znajdowanie heurystyki A* dla grafu skierowanego

text: W poprzednim pytaniu pytałem o znalezienie trasy (lub ścieżki, jeśli wolisz) w mieście. To wszystko jest eleganckie. Wybrałem rozwiązanie z algorytmem A*, który naprawdę wydaje się odpowiadać moim potrzebom. To, co mnie zastanawia, jest heurystyczne. Jak znaleźć taki w środowisku bez stałej odległości między 2 węzłami? Oznacza to, że nie każde 2 węzły mają między sobą taką samą odległość. Mam węzły (węzły), ulice z wagą (które mogą być również jednokierunkowe), węzeł początkowy/końcowy (ponieważ początek i koniec są zawsze w tym samym miejscu) oraz węzeł celu. W zwykłym przypadku po prostu skorzystałbym z tej samej drogi, którą dotarłem do celu, aby wrócić, ale ponieważ jedna z ulic mogła być jednokierunkowa, może to nie być możliwe. ### Główne pytanie Jak znaleźć heurystykę w grafie skierowanym?


title: Jak trenujesz odświeżacze?

text: Szkolenie odświeżaczy stało się moim obowiązkiem. Pracuję w dobrej małej firmie i chcą, żebym szkolił świeżo upieczonych (studentów MCA/BCA). Ale nie jestem ekspertem w dziedzinie szkolenia. Czy ktoś może mi w tym pomóc? Kilka wskazówek/wskazówek i coś nowego/innego, aby ich szkolić. Jaką ostrożność należy zachować podczas ich komunikowania? Jak oczyścić umysł pokryty uczelnianym środowiskiem? Proszę pomóż mi.


title: Dlaczego #include <iostream.h> jest złe?

text: Czytałem inny wątek, w którym facet zapytał o książki o C++ dla początkujących, a jeden z programistów, który odpowiedział, napisał to: > Kilka ostrzeżeń: unikaj wszystkich książek, które przedstawiają "hello world" z hasłem > > > #include <iostream.h> > Otworzyłem książkę o C++ i na pewno zawiera nagłówek iostream, jak w powyższym przykładzie. Dlaczego jest tak źle? O jakich innych wskazówkach należy pamiętać podczas nauki C++? Tło: Jestem biegły w C i zacznę uczyć się C++ w następnym semestrze.


title: Wartości Falsey vs null, undefned lub pusty ciąg

text: Pracowałem z jQuery przez lata. Jednak ostatnio zacząłem zagłębiać się w język JavaScript. Ostatnio słyszałem o wartościach „prawdziwych” i fałszywych. Jednak nie do końca ich rozumiem. Obecnie mam kod, który wygląda tak: var fields = options.fields || ['id', 'zapytanie']; Muszę określić, czy pola są puste, niezdefiniowane lub mają długość 0. Wiem, że długa droga jest do zrobienia: if ((pola === null) || (pola === niezdefiniowane) || (pola. length === 0)) { ... } Moje pytanie jest takie samo: if (!fields) { ... } Dziękuję!


title: Sesja w serwisach internetowych RESTful, jak to działa?

text: W usługach internetowych, skąd serwer wie, które żądanie należy do której sesji? Wiem, że w przypadku aplikacji internetowej serwer sieciowy sprawdza plik cookie (lub parametr zapytania sessonId w przypadku wyłączenia plików cookie), aby wiedzieć, z którą sesją jest powiązane żądanie. Ale w przypadku żądania, które pochodzi od klienta reszty, skąd serwer o tym wie?


title: Dlaczego rzeczywiste parametry nazywane są „argumentami”?

text: Skąd pochodzi słowo „argument” (w sensie programowania)? tj. Dlaczego rzeczywiste parametry są nazywane „argumentami”? Znaczenia nie wydają się ze sobą powiązane i nigdzie nie znalazłem żadnego wyjaśnienia. * * * **Uwaga** na temat terminologii: * Parametry „formalne” (znane również po prostu jako „parametry”) są nazwami „zastępczymi” (powiedzmy, `x`) -- _deklarowanymi_ parametrami funkcji. * Parametry „rzeczywiste” (znane również jako „argumenty”) to _wartości rzeczywiste_, które są _przekazywane_ do funkcji (powiedzmy, `5`), dlatego użyłem tego terminu powyżej, aby uniknąć nieporozumień.


title: Płynne przejście od pracownika do właściciela firmy

text: Obecnie pracuję dla firmy, dużej firmy. Mam umowę, z której wynika, że muszę poprosić o pozwolenie na inną pracę. Przypuszczam, że bardzo standardowe. Chciałbym zacząć wypróbowywać pomysły na start-upy. Niektóre z nich działają bez przenoszenia pieniędzy (napisz program, wypuść go jako shareware lub coś w tym stylu i zobacz, czy ludzie są zainteresowani), to proste. Ale niektóre pomysły muszą przenieść pieniądze. Jednym z nich jest, w pewien sposób, jak Amazon's Turk Machine, gdzie pieniądze powinny być zaangażowane od pierwszego dnia. Bez konieczności proszenia o pozwolenie od mojego obecnego pracodawcy i konieczności zakładania firmy, jak mogę wypróbować ten pomysł?


title: Czy istnieje system kontroli wersji, który może pokazywać zmiany w określonej metodzie lub funkcji?

text: Czasami dobrze byłoby móc powiedzieć coś takiego: (git|svn|hg|etc) diff Foo.c:main (git|svn|hg|etc) log log Foo.c:main, aby zobaczyć zmiany wprowadzone w konkretna funkcja w pliku źródłowym od ostatniego zatwierdzenia lub pełna historia zmian. Moje pytanie jest dwojakie: 1. Czy istnieje coś, co to robi? 2. Czy takie narzędzie byłoby praktyczne? Musiałoby wykonać proste parsowanie kodu w każdej wersji w celu porównania różnych wersji funkcji; czy koszty ogólne nie byłyby zbyt duże, aby była wydajna?


title: Czy w MVP prezenterzy powinni tworzyć instancje i kontrolować innych prezenterów?

text: Zaimplementowałem aplikację używającą MVP z GWT, która bardzo dobrze sprawdza się w widokach, które mają jeden cel. Teraz przekształcił się w widoki, które osiągają wiele celów w jednym oknie. Więc teraz mam widok widoków, przy czym każdy widok ma swój własny prezenter. Użyłem tego przykładu jako modelu do budowania aplikacji, spójrz. „Widok widoków” ma również własnego prezentera, który tworzy instancje (lub odbiera) prezenterów dla każdego z pozostałych widoków, których potrzebuje, aby spełnić swój cel. Ujawniam interfejsy zdarzeń za pośrednictwem tych prezenterów, aby prezenter „widok widoków” mógł się podłączyć, słuchać i reagować na to, co dzieje się w innych prezenterach i widokach. Moje pytania to: * Czy nadal przestrzegam zasad MVP, czy też gdzieś naruszyłem rozdział obaw, każąc prezenterom tworzyć/odbierać i kontrolować innych prezenterów? aka Czy powinienem to robić? * Jakie są inne wzorce projektowe do tworzenia interfejsów, które składają się również z innych złożonych interfejsów? ## Aktualizacja W odpowiedzi na pytanie Roberta Harveya pojawia się trudność w przekazywaniu obiektów z prezentera widoku do prezentera „widoku widoków” po wyzwoleniu zdarzenia. Na przykład przycisk oznaczy ClickEvent, a dołączony do niego program obsługi będzie musiał pobrać obiekt danych powiązany z ClickEvent za pomocą innej metody ujawnionej przez prezentera widoku. To działa, ale czuję, że później spowoduje to więcej problemów, ponieważ tego rodzaju obsługa obiektów staje się coraz bardziej złożona.


title: Czy istnieje licencja na sprzedaż oprogramowania ze źródłami, aby kupujący mógł dokonywać modyfikacji bez roszczenia własności do kodu lub jego dystrybucji?

text: Chciałbym sprzedać oprogramowanie, które ma kilku konkurentów typu open source. Dlatego chciałbym dołączyć kod źródłowy do plików binarnych, aby firma kupująca mogła go dowolnie modyfikować. Jedynym haczykiem jest to, że kod źródłowy NIE będzie należał do firmy, innymi słowy, chciałbym zachować prawa autorskie i własność do kodu, aby móc sprzedawać innym firmom itp. Czy istnieje nazwa licencji dla tego rodzaju Model? Kupujący może zobaczyć kod, zmodyfikować go zgodnie z własnymi potrzebami, ale nie może przejąć na własność kodu, innymi słowy, jest on licencjonowany do określonego zastosowania/potrzeby i **nie może przekazać ani pokazać kodu nikomu innemu** . Nabywcami częściej będą firmy w tym modelu, innymi słowy, będą mogli przejąć kontrolę nad produktem poprzez modyfikację kodu źródłowego, ale nie będą mogli przejąć na własność oryginalnego kodu ani zrobić z nim niczego poza pierwotny cel, dla którego go kupili. To wciąż zamknięte źródło. **Tylko firmy, które kupują produkt, są uprawnione do przeglądania i modyfikowania kodu, ale nigdy do jego dystrybucji.**


title: Czy stażyści i stanowiska na poziomie podstawowym będą bardziej dbać o algorytmy lub projekty/doświadczenie?

text: Jestem 3 miesiące na naukę javy, czytam najpierw java i zrobiłem 4 rzeczy na moim githubie + wiele drobiazgów. Zacząłem też uczyć się androida w tym miesiącu, ale teraz rzucam się i obracam, nie wiedząc o moim następnym kroku. Zgłosiłem się do kilku prac i nie oddzwoniłem, ale przynajmniej zostałem zauważony. Z wykształcenia jestem biznesem i mam doświadczenie w QA. Dużo się nauczyłem, ale nigdy tak naprawdę nie widziałem potrzeby uczenia się algorytmów lub wielkiej notacji. Zauważyłem, że większość ludzi, którzy o tym mówią, idzie na studia i aplikuje do google lub firmy z dużą fortuną 500. Czytałem tak wiele historii sukcesu ludzi uczących się programowania w ciągu 1 roku bez żadnego doświadczenia i nigdy nie rozmawiali o algorytmach i nadal mieli pracę, ale tak, większość z nich była programistami internetowymi lub androidami. Słyszałem również, że zadają uczniom pytania dotyczące algorytmów, ponieważ wiedzą, że studenci mogą nie mieć dużego portfolio, więc jeśli mam dobre portfolio, czy to neguje potrzebę skupienia się na algorytmach? Nie wiem, jakiego rodzaju kariery chcę, więc aplikuję do czegokolwiek java/android, ale nie do pracy w sieci, ponieważ nie jestem zainteresowany. Znam html/css/rdmbs/sql. TBH, po prostu naprawdę chcę spędzić następny miesiąc lub dwa, ucząc się więcej androida i aplikować o pracę po tym, jak wprowadzę kilka aplikacji na rynek. Chcę też dokończyć tworzenie projektów java, aby nauczyć się core java. Problemem jest czas, jestem bezrobotny i każdy miesiąc mija źle dla pracodawcy. Nie chcę spędzić 2 miesięcy na nauce androida niż 2 miesięcy na zabawie z javą, jeśli po tym wszystkim muszę jeszcze spędzić kilka miesięcy na nauce algorytmów. Czuję, że jeśli to konieczne, czy powinienem rzucić wszystko i skupić się na algorytmach wywiadu i tak dalej? Niechętnie nauczę się czegoś, czego nie będę używał TYLKO do rozmowy kwalifikacyjnej, przynajmniej na moim obecnym poziomie stażysty. Studiowałem wcześniej javascript i jquery, ale nigdy ich nie używałem, a kiedy o tym myślę, to tak, jakbym nigdy ich nie studiował. Kieruję do małych firm lub startupów, które chcą, aby stażysta rozwijał się i szkolił. Czy te pytania dotyczące algorytmów zadaje się głównie osobom dążącym do wielkiej czwórki? dzięki za wszelkie wskazówki, mam obecnie kilka pdfów na temat algorytmów i darmowy kurs MIT do obejrzenia ... nie jestem pewien od czego zacząć ...


title: Czy moje rozumienie abstrakcyjnych typów danych jest prawidłowe?

text: Po przeczytaniu wielu stron na różnych stronach doszedłem do wniosku, że abstrakcyjny typ danych pomaga oddzielić wykorzystanie struktury danych od jej implementacji. Możemy łatwo mapować dane do struktury danych, używając już dostępnej abstrakcji. Ta abstrakcja nazywa się ADT. Proszę mi powiedzieć, czy dobrze to zrozumiałem. Również jeśli możesz podać mały przykład, będzie to bardzo pomocne. Jeśli wolisz podać dowolny kod w swoim przykładzie, C lub Python będą dla mnie pomocne. **Dodatek:** Są bardzo specjalną implementacją abstrakcji danych. Tym, co odróżnia je od innych przykładów abstrakcji, jest to, że ADT są konstrukcjami teoretycznymi. Konstrukcje teoretyczne, które pomagają mapować lub reprezentować dane w pożądanej strukturze danych. Są z nimi powiązane atrybuty lub operacje. Te operacje mogą być stosowane na danych, które zostały zmapowane do ADT. W jaki sposób dane są faktycznie przechowywane w ADT lub jak działają operacje są ukrywane. EDYCJA: Wcześniej powiedziałem: „ADT jest jak plan struktury danych”. Kilka odpowiedzi wyjaśniało, dlaczego tak nie jest. Nie rozumiałem dokładnie, czym jest „plan” i to był powód, dla którego użyłem tego terminu. Więc teraz usunąłem go z mojego oryginalnego tekstu.


title: Wiele klas o tej samej nazwie, ale różnych przestrzeniach nazw?

text: Udało mi się uruchomić jakiś kod (C#, jeśli ma to znaczenie), który ma klasy, które mają tę samą nazwę, ale różnią się ich przestrzeniami nazw. Wszystkie mają tendencję do przedstawiania tej samej logicznej rzeczy, ale często są różnymi „widokami” tego samego obiektu. Różne przestrzenie nazw są czasami częścią tego samego rozwiązania, a nawet tej samej biblioteki dll. Mam swoje przemyślenia, ale nie mogłem znaleźć niczego ostatecznego w tej praktyce, co można by uznać za sprytne wykorzystanie dostępnych narzędzi lub wzór, którego można by uniknąć. To pytanie o smerfowe imiona dotyka tego, ale z innej strony. Ujednoznacznienie nazw prawdopodobnie wymagałoby arbitralnego i wszechobecnego przedrostka, który to pytanie chciało wyeliminować. Jakie są wytyczne dotyczące tej praktyki?


title: Jak Twój zespół podchodzi do kontroli jakości kodu technicznego?

text: Po raz pierwszy nasz zespół stosuje rygorystyczne podejście do kodu technicznego QA. Identyfikujemy pracę z kontrolą jakości, wybierając klasy najwyższego poziomu i poddając je kontroli jakości oraz wszystko, co wywołuje lub używa poniżej (i co nazywają/używają itp.). Uważam, że nasze pokrycie kodu QA jest dość bliskie 100% i jest to dla mnie otwierające oczy pod względem ulepszeń zarówno kodu, jak i projektu, a także wczesnego wykrywania błędów. Na pewno będę promować to w przyszłości, ale zastanawiałem się, jak inne zespoły podchodzą do QA kodu technicznego. Czy masz rygorystyczne podejście? Czy dążysz do sprawdzenia wszystkiego? Czy robi to jedna lub dwie osoby, czy też jest to równomiernie rozłożone w zespole? Czego szukasz podczas kontroli jakości? Wszelkie myśli docenione!


title: API zawsze zwraca JSONObject lub JSONArray Najlepsze praktyki

text: Tworzę API, które zwróci dane w formacie JSON. Chciałem również po stronie klienta stworzyć klasę narzędziową do wywoływania tego API. Coś takiego: JSONObject sendGetRequest(Url url); JSONObject sendPostRequest (URL URL, HashMap postData); Jednak czasami API odsyła tablicę obiektu `[{id:1},{id:2}]` Mam teraz cztery możliwości (): * Wykonaj test metody dla `JSONArray` lub `JSONObject` i odeślij ` Obiekt`, który będę musiał rzucić w wywołującym * Utwórz metodę zwracającą `JSONObject` i jedną dla `JSONArray` (np. `sendGetRequestAndReturnAsJSONArray`) * Spraw, aby serwer zawsze wysyłał `Array` nawet dla jednego elementu * Spraw, aby serwer zawsze send `Objects` wrapping my Array Wybieram dwie ostatnie metody, ponieważ myślę, że dobrze byłoby zmusić API do wysyłania spójnych typów danych. Ale jaka byłaby najlepsza praktyka (jeśli taka istnieje). Zawsze wysyłać tablice? czy zawsze wysyłaj przedmioty?


title: Dlaczego Linq to Entity Sum zwraca wartość null, gdy zestaw wyników jest pusty?

text: Istnieje wiele pytań na Stack Overflow dotyczących metody rozszerzenia Linq to Entity / Linq to SQL Sum, o tym, jak zwraca wartość null, gdy zestaw wyników jest pusty: 1, 2, 3, 4, 5, 6, 7 i wiele więcej, a także wpis na blogu omawiający ten problem tutaj. Czuję, że jest to niespójność we wdrożeniu Linq. Zakładam w tym momencie, że nie jest to błąd, ale działa mniej więcej zgodnie z założeniami. Rozumiem, że istnieją obejścia (na przykład rzutowanie pola na typ dopuszczający wartość null, dzięki czemu można połączyć się z `??`), a także rozumiem, że dla bazowego kodu SQL oczekiwany jest wynik NULL dla pustego zestawu wyników. Ale ponieważ wynik rozszerzenia Sum dla typów niepodlegających wartości null również nie dopuszcza wartości null, **dlaczego Linq to SQL / Linq to Entity Sum zachowuje się w ten sposób?**


title: Oddzielenie komponentów oprogramowania poprzez konwencję nazewnictwa

text: Obecnie oceniam alternatywy do refaktoryzacji zarządzania sterownikami. W mojej wielowarstwowej architekturze mam Baseclass * `DAL.Device` //moje encje Interfejsy * `BL.IDriver` //obsługuje przetwarzanie danych między aplikacją a urządzeniem * `BL.IDriverCreator` //tworzy `IDriver` z `Device ` * `BL.IDriverFactory` //obsługuje żądania tworzenia sterowników Każda specjalizacja `Device` ma odpowiadającą implementację `IDriver` i odpowiadającą jej implementację `IDriverCreator`. W tej chwili mapowanie jest naprawione poprzez sprawdzenie typu w warstwie biznesowej / `DriverFactory`. Oznacza to, że każdy nowy sterownik wymaga a) zmiany kodu w `DriverFactory` i b) odwołania się do nowej implementacji/asemblera `IDriver`. Z punktu widzenia klienta oznacza to, że każdy nowy sterownik, używany lub nie, wymaga złożonej rewalidacji środowiska sprzętowego, ponieważ jest to proces krytyczny. Moją pierwszą inspiracją było użycie konwencji caliburn micro, takiej jak nazwa, patrz Caliburn.Micro: Xaml Made Easy * `BL.RestDriver` * `BL.RestDriverCreator` * `DAL.RestDevice` Po otrzymaniu `RestDevice`w ramach `IDriverFactory` mogę załaduj wszystkie biblioteki dll sterowników przez odbicie i wykonaj podział nazw/porównanie (wyodrębnienie xx z xxDriverCreator i xxDevice) Innym pomysłem byłby niestandardowy atrybut (który również prowadzi do porównywania ciągów). Moje pytanie: czy to dobre podejście ponad granicami warstw? Jeśli nie, jakie byłoby dobre podejście?


title: Zapobiegaj wcięciom podczas formatowania CSS

text: W Visual Studio 2013, kiedy formatuję mój kod CSS (`Ctrl`+`K`+`F`), czasami moje właściwości CSS są wcinane w hierarchię. Na przykład: .a { kolor:czerwony; } .a .b {kolor:niebieski; } Staje się: .a { kolor:czerwony; } .a .b { kolor:niebieski; } Kiedy wolałbym: .a { color:red; } .a .b { kolor:niebieski; } Czy istnieje sposób zmodyfikowania programu Visual Studio, aby zapobiec temu wcięciom?


title: Jak zarządzać bezpieczeństwem tych samoobsługowych interfejsów API, aby upewnić się, że żądanie dostępu do danych jest uwierzytelniane?

text: Załóżmy, że będę pracować nad aplikacją korporacyjną. Powiedzmy, że mam 11 modułów w aplikacji i musiałbym opracować **Dashboardy** dla każdej roli w organizacji, dla której zamierzam tworzyć aplikację. Zdecydowaliśmy się użyć **Asp.Net Web Api** i zwrócić dane json z naszego interfejsu API. Zamierzamy dołączyć 11 samodzielnie hostowanych projektów web api w naszej aplikacji (jedno **self hosted web api** ) dla każdego modułu. Wszystkie 11 modułów jest podłączonych do jednej **bazy danych serwera SQL 2012.** Następnie, gdy API będzie gotowe, będziemy musieli utworzyć Business Dashboards (w oparciu o role w organizacji). Więc teraz mój klient web api to Asp.Net Mvc application.Asp.Net mvc będzie zużywał te web API. Oto część, dla której dokonano wszelkich wyjaśnień. Jak zarządzać zabezpieczeniami wszystkich 11 samodzielnie hostowanych interfejsów API? Jak mam nadejść tylko uwierzytelnione żądanie? Jeśli uwierzytelnię użytkownika za pomocą loginu i hasła, a następnie przekieruję użytkownika do odpowiedniego Dashboardu przeznaczonego dla roli, jaką ma użytkownik i ładuję dane przez konsumpcję web apis. Jak mam się upewnić, że przychodzące żądanie dostępu do danych jest uwierzytelnione?


title: Struktura modeli w PHP/MVC

text: Mam kilka klas, które są skomponowane z modeli generowanych przez ORM. przykład1: Na przykład Report.php (Model) używa modelu Document.php wygenerowanego za pomocą ORM. Na podstawie obiektu dokumentu tworzony jest raport. Chciałbym poznać kilka sugestii nazw dla ścieżki folderu Report.php. Wyraźnie należy do folderu /Model, ale w jakim podfolderze? przykład2: CustomTagFilter.php usunie niektóre znaczniki html z ciągu html. Chciałbym znaleźć jasną nazwę ścieżki dla tego rodzaju Modeli. Jakieś sugestie ? /Modele/[SUGESTIA]


title: Projektowanie powiązanych produktów dla różnych rynków: MEF?

text: Mam nadzieję, że to pytanie nie jest zbyt otwarte... Zostałem poproszony o wzięcie 3 letniej aplikacji (.NET 4.0, WPF, WCF, EF 4, SQL 2008), która została zaprojektowana dla bardzo specyficznego rynku X i " ponowne wykorzystanie” go na inny bardzo specyficzny rynek Y. Aby jeszcze bardziej skomplikować sprawy, firma wspomniała również o trzecim rynku Z, ale może to być rok i później. Ale to na pewno nadchodzi. Termin przygotowania aplikacji Y do wprowadzenia na rynek jest agresywny. Może to być do negocjacji, ale załóżmy, że to kwestia 2-3 miesięcy. Pracuję w firmie od jakiegoś czasu i byłem bardzo blisko zaangażowany w początkowe tworzenie aplikacji X i nadal jestem zaangażowany w utrzymanie. Nowa „aplikacja” Y jest interesująca, ponieważ istnieje pewna „nakładka” między cechami wymaganymi dla X i Y. Na przykład niech A, B, C, D i E będą cechami i niech ' (pierwszy) oznacza ulepszenie cecha. Wszystkie poniższe scenariusze są prawidłowe: ---X---|---Y--- … ---Z--- (w dół drogi) A | A B | B’ C’ | C | DE | Niektóre elementy można łączyć z X na Y bez zmian (A). Niektóre elementy z X muszą zostać ulepszone, zanim będą mogły zostać połączone w Y (B). Niektóre obiekty w X w ogóle nie będą znajdować się w Y (E), a Y będzie zawierać obiekty, których nie ma w X (D). Masz pomysł. Oto moje pytania: (1) W oczach wyższej kadry kierowniczej ostatecznie widzą 3 różne aplikacje - po jednej dla każdego rynku: X, Y, Z. Co więcej, widzą 3 różne kopie tej samej funkcji A, które będą musiały przejść do każdej aplikacji. Jak wspomniano, mogą pojawić się pewne ulepszenia, które sprawią, że wybrane produkty zostaną wybrane, ale w istocie są one prawie identyczne. Czasami jestem winny znajdowania wymówek, aby korzystać z najnowszych trendów programistycznych, ALE myślę, że jest tu mocny argument biznesowy za wykorzystaniem Managed Extensibility Framework (MEF). Po co mieć 3 różne aplikacje fizyczne (a tym samym 3 bazy kodu), skoro może to być naprawdę jedna aplikacja „następnej generacji” z funkcjami, które można podłączyć za pośrednictwem czegoś takiego jak MEF? Istnieje kilka korzyści, które coś takiego jak MEF może przynieść do stołu. Czy rozwiązanie rozszerzające, takie jak MEF, wydaje się ważne w takim przypadku? (2) Biorąc pod uwagę ograniczony czas na wprowadzenie aplikacji Y na rynek… (a) Czy powinienem zachować konserwatywne podejście i po prostu dać kierownictwu to, o co prosi, tj. zrobić dokładną kopię X i zmodyfikować ją pod kątem Y? Być może po tym, jak Y trafi na rynek, przyjdzie czas na opracowanie bardziej idealnego i rozszerzalnego rozwiązania? Moje wcześniejsze doświadczenia z tą firmą sprawiły, że dema stały się pełnoprawnymi produktami w mgnieniu oka – jeśli zrozumiesz ;) Zmodyfikowanie kodu X może być trudniejsze, aby działał dla Y, zamiast tworzyć Y od podstaw i importuj funkcje X. (b) Zostawiając na razie X sam, czy powinienem utworzyć Y z myślą o MEF. Funkcje z X można łatwo zaimportować do Y. Jeśli zostanie to zrobione prawidłowo, Z powinno być łatwe do zaimplementowania. Prawdopodobnie będzie to ryzykowne przedsięwzięcie, aby wrócić i zająć się X, aby dopasować się do tych ram, ponieważ jest tak szeroko stosowany, ale można to zrobić z boku bez określonego terminu. Muszę to przekazać kierownictwu wyższego szczebla. Jakieś rady lub przemyślenia?


title: Czy któryś z języków OF obsługuje mechanizm gwarantujący, że nadpisana metoda wywoła bazę?

text: Myślę, że może to być przydatna funkcja językowa i zastanawiałem się, czy jakieś języki już ją obsługują. Pomysł polega na tym, że: klasa C wirtualna instrukcja F1 instrukcja2 i klasa D dziedziczy C override instrukcja F1 instrukcja2 C.F() Byłoby zastosowane słowo kluczowe do C.F() takie, że usunięcie ostatniego wiersza kodu powyżej spowodowałoby błąd kompilatora, ponieważ mówi "Ta metoda może zostać zastąpiona, ale implementacja tutaj musi działać bez względu na wszystko".


title: Wcześniejsze zakończenie iteracji

text: Chciałbym mieć trochę informacji na ten temat dla osób pracujących z metodologiami zwinnymi... W obecnym projekcie okazuje się, że opracowywanie naszych zaplanowanych historyjek użytkownika kończy się na jakiś czas przed końcem iteracji, a wysiłek związany z testowaniem i akceptacja biznesowa jest tym, co jest najważniejsze. faktycznie ciągnąc nas dłużej pod koniec. Oznacza to, że deweloperzy, o których mowa, mają wolny czas i zasadniczo przechodzą do backlogu iteracji+1 i rozpoczynają tam pracę nad kartami, zanim nasze obecne karty iteracyjne zostaną „skończone”. Jako kierownik iteracji chcę położyć temu kres – chcę bardziej zorientowanego na zespół podejścia, w którym grupa przejmuje odpowiedzialność za wykonanie wszystkich kart, w przeciwieństwie do „Cóż, programista jest skończony, więc co mam dalej programować?” Problem, z którym się zmagam, to przekonanie do tego zespołu. Z jednej strony rozumiem, dlaczego programiści nie chcą testować kodu, który napisali (oczywiście piszą testy jednostkowe, ale ich nastawienie może mieć wpływ na ręczne testowanie). Zespół postrzega pracę naprzód jako ułatwienie naszych kolejnych iteracji, ponieważ wiele pracy wykonujemy przed rozpoczęciem. Widzę to jako pieprzenie całego systemu planowania/rzeczywistości - ale trudno jest przekonać zespół, dlaczego to ma znaczenie. Jaką radę możecie udzielić chłopakom i dziewczynom? Jak powstrzymać deweloperów przed posuwaniem się naprzód? Co powinni robić zamiast tego? Jak duży jest to problem w schemacie rzeczy, jeśli nadal coś się dzieje?


title: Zasoby dotyczące zabezpieczania modeli domen?

text: Mam dobre zasoby w zakresie bezpieczeństwa, modelowania domen i wzorców architektury. Zauważyłem wyraźny brak jakichkolwiek sugestii, jak i gdzie zintegrować zabezpieczenia z budowanymi przeze mnie systemami. Wyobrażam sobie, że najbardziej ma zastosowanie kontrola dostępu, ponieważ uwierzytelnianie i wiele innych form bezpieczeństwa wydaje się być oczywiście warstwą ponad modelem i jest dość łatwe do oddzielenia i znalezienia miejsca. Kontrola dostępu do działań wydaje się bardziej szarą strefą. Czy są na to jakieś dobre zasoby? Wolę dobrze napisane książki, ale inne zasoby są również mile widziane.


title: Jak używać TFS jako systemu śledzenia zapytań?

text: Używamy już tfs do zarządzania defektami w kodzie itp. Dodatkowo potrzebujemy sposobu na "zrozumienie domeny i wymagań produktów". Zwykle bez tfs wymieniamy e-maile z konsultantami i otrzymujemy odpowiedzi na pytania/zapytania. Jeśli jest to implementacja funkcji, czasami „znajdujemy” konflikty w samej implementacji. A kiedy tak się stanie, usertory jest modyfikowane, a ulepszenie/błąd zgodnie z tym jest zgłaszany w TFS. Czasami bardzo ważne jest, abyśmy wrócili do podjętych decyzji lub pytań, na które chcieliśmy uzyskać odpowiedzi. Dlatego musimy być w stanie śledzić, jak ewoluował ten „pomysł dotyczący wymagań” lub „zapytanie w trosce”. Jak to się dzieje, że możemy użyć TFS do śledzenia tego wszystkiego? Czy podnosimy w związku z tym element „problemu”? A może podnosimy przedmiot "bug"? Główne rzeczy, które idealnie przyjrzelibyśmy się w systemie śledzenia zapytań to: 1. Obszar: Może być modułem, podmodułem, domeną. Czasami może to być "Ogólne" - aby zająć się sprawami związanymi z domeną lub, w przypadku bardziej szczegółowego adresowania modułów, podmodułów. Weźmy pod uwagę to drugie, gdybyśmy śledzili to w arkuszach Excela, napisalibyśmy po prostu `module1,submodule2`; tj. w sposób oddzielony przecinkami. Chciałbym tutaj w przyszłości móc wyszukiwać wszystkie zapytania związane z `submodule2`. 2. Odpowiedzi: Jest to zapis rozmów pomiędzy konsultantem a innymi interesariuszami. W prostym przypadku byłyby to tylko akapity. Każdy paragraf zaczynałby się nazwą i datą ujętą w nawiasy, a następującą po nich odpowiedzią...każdy paragraf byłby jak wątek - podobnie jak wątek na forum 3. Podjęte działanie: Chcielibyśmy wiedzieć, jak zapytanie zostało zamknięte, jakie były dane wejściowe, jakie zmiany nastąpiły w związku z tym, itp. itd. Są to pola, których chyba potrzebowałbym w takim systemie poza pewnymi oczywistymi, takimi jak status, adres do, resoved by itp. Jestem otwarte na wszelkie inne dziedziny, które są w pewnym sensie ważne. Podsumowując moje pytanie: jak możemy zarządzać „zapytaniami” w systemie? Gdzie najlepiej przechowywać dane dotyczące tych trzech pól, o których wspomniałem powyżej (np. czy mądrze jest przechowywać odpowiedzi w tagu historii zakładając, że otwieramy błąd dla zapytania)?


title: Jakie są powody niekorzystania z usługi kontroli wersji innej firmy?

text: Ostatnio zauważyłem pewien trend w moich projektach. Używam do uruchomienia własnego serwera SVN na moim VPS, ale ostatnio gwóźdź trafił do trumny, gdy mój ostatni projekt został przeniesiony z mojego serwera do repozytorium Mercurial na Bitbucket. Jakie są tego konsekwencje? (pomijając zmiany w systemach kontroli wersji) Wygląda na to, że nastąpiła ogromna eksplozja hostingu z kontrolą wersji, a firmy takie jak Bitbucket oferują nawet prywatne repozytoria za darmo, a Github i inne tego typu usługi są teraz wyjątkowo tanie. Ponadto, korzystając z nich, czerpiesz korzyści z szybkości i stabilności ich infrastruktury. Jakie są obecnie powody, aby hostować własną kontrolę wersji? Jedynym prawdziwym powodem, jaki przychodzi mi do głowy, jest to, że twój kod źródłowy jest ściśle tajny.


title: Ustawianie źródłowego adresu IP z gniazdami posix

text: Czy aplikacja może zażądać gniazda (tcp) i ustawić adres źródłowy bez używania gniazd surowych? (adresy byłyby powiązane z interfejsami. [bez podszywania się]). Byłoby to połączenie klienta tcp, a nie bind() do określonego adresu.


title: Standardy kodowania Microsoft dla kontrolek ASP.NET

text: Nie mogę znaleźć żadnych standardów/konwencji nazewnictwa w MSDN dla nazewnictwa formantów ASP.NET. Jeden z następujących standardów jest zwykle używany przez programistów: * `lblAddress` * `AddressLabel` * `Address` Zgodnie z nazwą członków typu MSDN, powinniśmy traktować formanty ASP.NET jako pola, a zatem używać Pascal Case (np. ` Adres Etykieta`)?


title: Czy istnieją powody, aby nie akceptować oprogramowania dostarczanego jako maszyna wirtualna?

text: To pytanie o logistykę, a nie o kwestie techniczne. Moja firma zleciła na zewnątrz niektóre prace związane z oprogramowaniem wbudowanym. W szczególności zapłaciliśmy wykonawcy za opracowanie dla nas systemu wbudowanego, ponieważ nie mamy odpowiedniej wiedzy wewnętrznej, aby zrobić to sami (mamy tylko programistów aplikacji desktopowych). Wykonawcy skończyli więc oprogramowanie i zapytali, czy mogą nam je dostarczyć na maszynie wirtualnej. Maszyna wirtualna to maszyna z systemem Windows 8 zawierająca wstępnie skonfigurowane środowisko CodeWarrior IDE z kodem źródłowym jako projekt CodeWarrior. Chodzi o to, że pozwoli nam to na wprowadzanie zmian w kodzie w maszynie wirtualnej, która jest już skonfigurowana do dalszego rozwoju tego projektu. Czy są jakieś wady tego sposobu, w przeciwieństwie do tego, że poprowadzą nas przez proces konfigurowania naszych własnych maszyn programistycznych, aby wprowadzać zmiany w kodzie projektu? Jedynym problemem, jaki mogę przewidzieć, jest to, że maszyna wirtualna działa wolno i odbudowanie projektu zajmuje dużo czasu, gdy wprowadzamy zmiany w kodzie. Ale z drugiej strony podoba mi się pomysł uzyskania wstępnie skonfigurowanego środowiska programistycznego systemu wbudowanego, dzięki czemu nie muszę dodawać kolejnego IDE na moim komputerze do tworzenia aplikacji. Naprawdę nie mogę wymyślić dobrego powodu, dla którego nie miałbym zaakceptować dostarczenia VM, ale chciałem po prostu uruchomić go przez tę społeczność na wypadek, gdyby czegoś mi brakowało.


title: Zmienna wolna od rachunku lambda

text: Oto coś z „Składni i semantyki języków programowania” Slonnegera: > Zmienna może występować zarówno jako związana, jak i wolna w tym samym wyrażeniu lambda: > na przykład w λx.yλy.yx pierwsze wystąpienie y jest wolne, a pozostałe dwa > są związane. Zakładam, że wolna zmienna to y zaraz po λx. a ograniczenie y to λy.y, które mogę intuicyjnie uchwycić. Czyli ((λx.yλy.yx)a)b) zredukowałoby się do (yλy.ya)b), a następnie do bba ? Czy ktoś może wyjaśnić, jak do tego doszło? W końcu jest to wyrażenie b dwa razy. Czy ktoś może podać więcej przykładów zmiennych związanych i wolnych?


title: Po co mieć konstruktor opakowujący podczas przechowywania funkcji w typie danych?

text: Nigdy nie mogę zrobić zbyt wielu tutoriali Haskella. Zawsze jest coś do dopracowania i nauki. Tak więc pracuję nad rozdziałem 10 Real World Haskell i wszystko ma sens. _but_ Dlaczego newtype Parse a = Parse { runParse :: ParseState -> Either String (a, ParseState) } tożsamość :: a -> Parse tożsamość a = Parse (\s -> Right (a, s)) getState :: Parse ParseState getState = Parse (\s -> Right (s, s)) putState :: Parse () putState = Parse (\s -> Right ((), s)) Dlaczego nie po prostu wpisać Parse a = ParseState -> Albo String (a, ParseState) tożsamość :: a -> Parse tożsamość a = \s -> Right (a, s) getState :: Parse ParseState getState = \s -> Right (s, s) putState :: Parse ( ) putState = \s -> Right ((), s) Innymi słowy, jaki jest tutaj cel wzoru zawijania i odwijania (który, jak widzę, jest używany w wielu różnych miejscach w Haskell)? Otrzymujemy ten sam typ danych `Parse Whatever`, ale bez dodatkowego pośrednictwa.


title: Analogia klasy będącej obcinaczem do ciastek i obiektów będących ciasteczkami

text: Natknąłem się na analogię, że _klasa jest obcinaczem do ciasteczek, a ciasteczka są obiektami_ podczas czytania Code Complete. Nie rozumiem, dlaczego narysowano tę analogię. Jak to się ma do koncepcji obiektów będących instancjami ich klas w czasie wykonywania?


title: Refaktoryzacja: Czy to nie jest tylko wymyślne słowo na uporządkowanie kodu?

text: Zanim ukazała się książka Martina Fowlera „Refactoring: Improving the Design of Existing Code”, główne zmiany w kodzie nazywaliśmy „rearchitekturą”, a drobne zmiany „oczyszczaniem”. IMO, techniki refaktoryzacji to wszystko zdroworozsądkowe / oczywiste rzeczy, które robimy od zawsze. Czy uważasz, że refaktoryzacja była kiedykolwiek czymś nowym? Być może jest to tylko sposób na nakłonienie kierownictwa do przydzielenia czasu na czyszczenie kodu?


title: Dlaczego usługi IIS domyślnie odtwarzają pulę aplikacji co 1740 minut?

text: Dlaczego usługi IIS domyślnie odtwarzają pulę aplikacji po określonym czasie? Czy istnieje jakiś konkretny powód inny niż być może większość aplikacji internetowych nie rozsądnie zarządza pamięcią? Biorąc pod uwagę, że prawidłowo zarządzasz pamięcią aplikacji, czy można bezpiecznie wyłączyć tę funkcję? Jakie są potencjalne wady i zalety wyłączenia lub utrzymania recyklingu?


title: Czy programowe czyszczenie historii przeglądarki jest akceptowaną najlepszą praktyką?

text: Kolega naciska na wyczyszczenie historii przeglądarki klienta (tj. przycisku Wstecz), gdy wylogowuje się z naszej aplikacji internetowej. Czy uważa się to za dobrą praktykę? Wydaje mi się, że jest to naprawdę natrętne. Jeśli tylko warunkowo, jakie warunki muszą być spełnione, aby ta praktyka była użyteczna?


title: Projektowanie dużej bazy danych z wieloma źródłami

text: Miałem za zadanie przeprojektować, a w najgorszym razie zoptymalizować strukturę bazy danych dla hurtowni danych. Obecnie baza danych zawiera 4 inne bazy danych źródłowych (które mają zostać rozszerzone do liczby X innych), z których wszystkie mają własne struktury danych, konwencje nazewnictwa itp. W tej chwili pakiet SSIS z dnia na dzień pobiera dane z różnych źródeł i następnie dla każdego źródła zamienia dane w ustandaryzowany, użyteczny format. Tabele te są następnie dołączane do siebie, tworząc 60-metrowy rząd, 40-kolumnowy bestia!. Ta tabela jest następnie używana na różne sposoby, od modułu OLAP do interfejsu internetowego. Struktura istnieje od bardzo dawna, a w pracy udało mi się udowodnić zalety normalizacji i właśnie tą drogą chciałabym iść. Problem polega na tym, że nocny proces trwa tak długo, że nie chcę poświęcać dodatkowego czasu na normalizację ostatniej tabeli w coś użytecznego. Czy ktoś może zaoferować jakiś wgląd lub pomysły na najlepszy sposób na skuteczną restrukturyzację lub optymalizację bazy danych? Edycja: Wszystkie bazy danych to MS SQL Server 2008 R2 Z góry dziękuję CM


title: Jak stworzyć scentralizowany mechanizm aktualizacji dla hostowanego CMS?

text: Jesteśmy zespołem opracowującym hostowany system CMS (coś w rodzaju WordPress.com, ale na platformie .NET) i chcemy, aby każda witryna była aktualizowana wraz z aktualizacją naszego oprogramowania. Nasz system CMS nie jest **wielodostępny** , tzn. każda witryna jest pełną kopią szablonu witryny i ma indywidualną bazę danych, pliki i foldery, i będzie **wdrożona na wielu serwerach** (2000 witryn na serwer) . Teraz nasz problem polega na tym, że nie możemy dowiedzieć się, jak zaktualizować wszystkie te witryny w sposób scentralizowany, bez uruchamiania procesu aktualizacji przez użytkowników (ponieważ jest to rozwiązanie hostowane, a nie lokalne). Na przykład wyobraź sobie, że chcemy dodać moduł do tych witryn i wyobraź sobie, że mamy ponad 10 000 witryn na 5 serwerach. Zainstalowanie tego nowego modułu na 10 000 witryn jest **naprawdę naprawdę** okropne. Albo wyobraź sobie, że chcemy dodać nowy szablon. Znowu kopiowanie plików szablonów do 10 000 witryn jest niepraktyczne. Czy istnieje znany wzorzec takiej **aktualizacji/uaktualnienia rozproszonego rozwiązania hostowanego**?


title: Klasa a struktura

text: W C++ i innych językach, na które ma wpływ, istnieje konstrukcja o nazwie Structure (`struct`), a druga to `class`. Oba są zdolne do przechowywania funkcji i zmiennych. Niektóre różnice to: 1. Klasa otrzymuje pamięć na stercie, a `struct` otrzymuje pamięć na stosie 2. Zmienne klasy są domyślnie prywatne, a w `struct` są publiczne Moje pytanie brzmi: czy `struct` jest w jakiś sposób porzucony dla klasy? Jeśli tak, dlaczego? Poza powyższymi różnicami, `struct` może robić te same rzeczy, co klasa. Więc po co go rezygnować?


title: Kiedy należy przenieść pracę na GPU zamiast na CPU?

text: Tworzone są nowsze systemy, takie jak OpenCL, abyśmy mogli uruchamiać coraz więcej kodu na naszych procesorach graficznych, co ma sens, ponieważ powinniśmy być w stanie wykorzystać jak najwięcej mocy naszych systemów. Jednak we wszystkich tych nowych systemach wydaje się, że procesory graficzne są lepsze niż procesory pod każdym względem. Ponieważ procesory graficzne mogą wykonywać obliczenia równoległe, wielordzeniowe procesory graficzne wydają się być znacznie lepsze niż wielordzeniowe procesory; będziesz w stanie wykonać wiele obliczeń na raz i naprawdę poprawić szybkość. Czy nadal istnieją pewne przypadki, w których przetwarzanie szeregowe jest nadal lepsze, szybsze i/lub wydajniejsze niż równoległe?


title: Czy oprogramowanie w środowisku profesjonalnym wymaga licencji?

text: **Tło** : Piszę własne oprogramowanie - nie ma ono absolutnie żadnego kontaktu ze światem zewnętrznym - ale korzystam z różnych bibliotek, które same mają pewną strukturę licencyjną. Na przykład GPL wymaga, aby oprogramowanie, które ponownie wykorzystuje fragment kodu na licencji GPL, również było objęte licencją GPL. Czy to wymaga, aby moja wewnętrzna aplikacja miała wyraźną licencję GPL, czy jest to rozumiane w sposób dorozumiany? Czy używanie kodu na licencji AGPL wymaga, aby mój kod był dostępny dla współpracowników korzystających z wewnętrznego systemu? **Pytanie** : Czy moje oprogramowanie wewnętrzne musi mieć wyraźną licencję, aby było zgodne z licencjami takich bibliotek? W jakich przypadkach oprogramowanie wewnętrzne musi mieć własną licencję?