title: ASP.NET MVC vs WCF dla REST API + użycie strony internetowej

text: Myślę, że dyskusja na temat korzystania z usług programistycznych w porównaniu z interakcjami międzyludzkimi jest jasna. Ale gdybym miał stworzyć aplikację, która korzysta zarówno z programistycznego API, jak i strony internetowej korzystającej z danych połączonych tym samym API, czy skłaniam się ku korzystaniu tylko z ASP.NET? Jak łatwo jest zintegrować ASP.NET i WCF w celu pracy nad tą samą aplikacją?


title: Rozwiązanie dla organizacji freelancerów

text: Jako freelancer pracujący zarówno nad płatnymi, jak i osobistymi projektami, zawsze dzielę swój czas między ogromną liczbę małych i dużych projektów/zadań/drobnych szczegółów. Opracowałem małe, specjalnie zakodowane rozwiązanie do organizowania mojego czasu i zadań. Jakie jest najlepsze rozwiązanie do organizowania i zarządzania projektami, zadaniami i listą rzeczy do zrobienia jako freelancer? Może to obejmować zarówno płatne, jak i bezpłatne usługi, programy lub inne rozwiązania internetowe. Wiem, że powiedzenie „najlepsze” może być subiektywne, więc przeformułuję pytanie na „co uważasz za najskuteczniejsze rozwiązanie dla siebie i dlaczego?”.


title: Co jest przeciwieństwem abstrakcji?

text: Jak rozumiem, abstrakcja jest terminem, którego używamy, gdy więcej znaczeń powstaje z czegoś prostszego bez zmieniania go. Pochodzi od łacińskiego czasownika abstrahere (odciągnąć). Na przykład tekst jest tylko jedną abstrakcją danych binarnych — podobnie jak mapy bitowe. Tak więc w komputerach tekst i mapy bitowe istnieją na wierzchu (są zaimplementowane w kategoriach) danych binarnych. Moje pytanie brzmi: jaki jest termin przeciwny? Jeśli chcę poznać możliwe bardziej podstawowe rzeczy, które bitmapy można zaimplementować w kontekście danych innych niż binarne — takie jak płytki w przypadku mozaiki lub łaty tkaniny w przypadku kołdry patchworkowej — o co proszę? Czy jest na to słowo? Abstrakcja kojarzy się z uogólnieniem, a proces odwrotny to specjalizacja. IDK czy to pomaga.


title: Czy COBOL jest dochodowy?

text: Kiedyś wpadłem na ten szalony pomysł, że mógłbym nauczyć się COBOL. Deweloperzy COBOL starzeją się i przechodzą na emeryturę, ale wciąż jest dużo starszego kodu, który wymaga konserwacji. Ludzie mówili mi, że doprowadziło to do niedoboru programistów COBOL, co skutkuje dużą ilością dostępnej pracy i może być potencjalnie bardzo dochodowe! (nie moja jedyna motywacja, szczerze!) Czy jest w tym jakaś prawda, czy może to trochę mit?


title: Strategie wdrażania licznika atomowego

text: Zasadniczo mam zmienną licznika, która jest zmniejszana i często odpytywana. Są trzy opcje implementacji tego, które przychodzą mi do głowy: Numer 1: private volatile int count; public void Finished() { Interlocked.Decrement(liczba ref); } public bool Gotowe() { liczba zwrotów == 0; } Liczba 2: liczba prywatnych int; public void Finished() { Interlocked.Decrement(liczba ref); } public bool Gotowe() { return Volatile.Read(liczba ref) == 0; } Liczba 3: struct AtomicInteger { private int wartość; public int Get() { return Volatile.Read (wartość ref); } // inne metody } // W aktualnej klasie: private AtomicInteger count; public bool Gotowe() { return count.Get() == 0; } Pierwszy z nich wyświetla ostrzeżenie kompilatora z powodu przekazania zmiennej nietrwałej przez referencję. Z drugiej strony z definicji zmiennej jasno wynika, że dostęp do zmiennej jest równoczesny, co jest wyraźnym sygnałem ostrzegawczym dla każdego, kto patrzy na kod. Jeśli kiedykolwiek uznam, że rzeczywiście potrzebuję długiej, ta metoda już nie działa. Druga nie daje żadnych ostrzeżeń, ale po przeczytaniu `private int count` nie jest jasne, że zmienna jest używana jednocześnie, więc musi to być wyraźnie określone w komentarzu (w rzeczywistości miałem błąd, w którym użyłem normalnego czytać w asercji zamiast `Volatile.Read` \- taka łatwa rzecz do przeoczenia.) Z drugiej strony zmiana zmiennej na long nie wprowadza żadnej dodatkowej pracy. Podoba mi się numer 3 i nie powinien powodować żadnych narzutów wydajnościowych w porównaniu z innymi rozwiązaniami po inliningu. Minus: duplikacja kodu dla każdego prymitywu. Z drugiej strony kod jest dość prosty i można go kopiować i wklejać bez obaw o problemy i jest mało prawdopodobne, aby kiedykolwiek się zmienił. Jakieś uwagi na temat zalet/wad każdej metody, które przeoczyłem lub co byłoby uważane za idiomatyczne w C#?


title: Czy wszystkie żądania HTTP, w tym poświadczenia, powinny być wykonywane przy użyciu POST, nawet jeśli w rzeczywistości jest to tylko żądanie danych?

text: Załóżmy, że istnieje żądanie, które będzie wyszukiwać listę elementów z usługi wymagającej autoryzacji (np. znajduje się za domeną Basic Authentication). Gdyby usługa nie wymagała uwierzytelnienia, zawsze wysyłałbym to żądanie jako GET (to idempotentne). Ale ponieważ poświadczenia znalazłyby się w ciągu zapytania, zasadniczo jestem zobowiązany do zrobienia tego jako POST. Czy jest jakaś alternatywa dla tej metody?


title: Dlaczego istnieje przekonanie, że VB.NET jest dobry dla małych i średnich aplikacji, a nie dla projektów klasy korporacyjnej?

text: Bardzo kocham VB.NET. Kodowanie VB.NET w Visual Studio przypomina pisanie wiadomości. Płynnie, szybko i prosto. Każdy błąd zostanie natychmiast powiadomiony. Możliwości OO VB.NET są wystarczająco dobre. Ale często w dyskusji na temat języków .Net pojawia się przekonanie, że VB.NET jest dobry dla małych i średnich aplikacji, a nie dla projektów na dużą skalę? Dlaczego istnieje taka percepcja? A może brakuje mi czegoś związanego z VB.NET?


title: Klient = HTML5 + CSS3 + JS + Jquery. Serwer =?

text: Chcę zbudować większość funkcjonalności na kliencie. Jednak nie jestem do końca pewien, który framework do tworzenia stron internetowych po stronie serwera może zapewnić mi ładny punkt końcowy REST do obsługi zasobów, logiki biznesowej itp. Pochodzę ze świata JAVA EE, gdzie JSF jest głównie oparty na stanach i komponentach (oba ich zalety i wady, po prostu wolałbym nie trzymać drzewa komponentów itp. Jednak... Kiedyś budowałem szablony w Facelets, jak mogę to teraz zrobić, jeśli nie używam JSF / Facelets jako mojej prezentacji warstwa? Lub jak utworzyć tabele HTML iterujące po kolekcjach itp.? Jestem otwarty na używanie dowolnego języka/frameworka. Widzę dużo dyskusji, ale tak naprawdę nie ma wartościowego wkładu. Być może muszę jeszcze szukać we właściwych miejscach. Dużo ludzi mówi o JS + RESTful ws... Czy jest to rzeczywiście możliwe dla całej strony internetowej? Myślę, że jeśli porzucę swój framework webowy oparty na komponentach, będę musiał sam zaimplementować wiele rzeczy, takich jak warunkowo renderowane części witryny, iterowanie danych w celu budowania siatek, tabel, obsługa operacji wielostronicowych, przeglądanie danych z zakresem. Może ktoś mógłby mi też powiedzieć: postradałeś zmysły? Przejdź na hybrydę lub nie rób tego. Wszelkie wskazówki pomogą.


title: Podstawowe funkcje dla podstawowego języka? Sugestie DSL?

text: W końcu zacząłem rozumieć złożoność tworzenia interpretera i kompilatora. Zbudowałem kilka wersji TinyBasic, 1964 (Dartmouth) Basic i moje własne rozszerzenia dla tych języków, zanim doszedłem do tego punktu. Najnowszym projektem jest ten, który nazywam Open Source Basic... ponieważ nie mogłem wymyślić innych cech języka, które mogłyby zainteresować ludzi. Aby móc otworzyć źródło języka i zrozumieć, jak wykonywane są niektóre złożone rzeczy (jak wykonuje się skanowanie, parsowanie, interpretowanie i kompilowanie), Open Source Basic jest najpierw interpretowany na język oparty na stosie. Ten język oparty na stosie jest następnie interpretowany i wykonywany natychmiast lub przekształcany w plik wykonywalny CLR. Moje pytania sprowadzają się do tego: * **Jakie są podstawowe cechy/konstrukcje języka opartego na Basicu?** Mam już te podstawowe konstrukcje: Przypisania, Wyrażenia, Zmienne, niektóre funkcje (Random, ToUpper, ToLower), Pętla (dla i do while/do), If (blok i pojedyncza linia) Decyzje Else, wejście i wyjście oparte na konsoli (Input) i wyjście (Print) oraz podprogramy (jeszcze bez parametrów). * Kiedy „zakończę” dodawanie podstawowych konstrukcji do mojego języka – jak mam się rozgałęzić? W jakich domenach? Innymi słowy, **w jakim kierunku powinien podążać mój podstawowy język open source, gdy wszystkie ogólne konstrukcje działają?** Dziękuję za poświęcony czas, Dominik


title: Jak zorganizować fabryki w projekcie .Net?

text: Dopiero zaczynam rozumieć koncepcję fabryk i chcę ich użyć w moim następnym projekcie (używam iniekcji zależności, więc użycie fabryk ułatwi tworzenie instancji obiektów). Mam kilka podstawowych pytań: 1. Czy ma sens mieć jedną klasę fabryczną na warstwę aplikacji (GUI, BLL, DAL), na klasę, czy tylko jedną klasę fabryczną do wszystkiego? 2. Jaka jest typowa konwencja nazewnictwa klas fabrycznych? Dodatek: 1. Jeśli tworzę fabrykę na klasę w projekcie .Net, czy powinienem po prostu utworzyć jeden plik klasy o nazwie Factories.cs, który będzie zawierał wszystkie moje klasy fabryczne? Jeśli nie, jakie byłoby lepsze podejście?


title: Strategia rozgałęziania dla częstych wydań

text: Mamy bardzo częste wydania i używamy Gita do kontroli wersji. Kiedy wspominam o częstotliwości, załóżmy, że zawiera ona również poprawki błędów i wydanie funkcji. Wszystkie wydania są ostatecznie łączone w „główną linię”. Kiedy wydanie jest wdrożone w środowisku produkcyjnym i jeśli zostanie zidentyfikowany błąd, ludzie zaczynają go naprawiać w tej samej gałęzi, z której wdrożono najnowszą wersję na produkcji. Nie tworzą nowej gałęzi naprawiania błędów dla tego samego. Czuję, że to nie jest właściwa droga. Komponentów jest kilka, a każdy komponent ma innego właściciela, a co za tym idzie inną perspektywę. Choć nie rozpocząłem z nimi rozmów, jestem pewien, że będzie duży opór. Głównym problemem, który mogliby przytoczyć, byłoby: „Tworzenie i śledzenie oddziałów wymaga dużo pracy, zwłaszcza w przypadku tak częstych wdrożeń na produkcji. Pochłonie to wiele wysiłku programistów”. Czy uważasz, że naprawienie błędu na tej samej gałęzi, z której wykonano wydanie, to dobry pomysł? Jeśli tak, jak sobie z tym radzisz? Używasz tagów? Wiem, że najlepsze praktyki mogą nie zawsze mieć zastosowanie ze względu na kilka czynników, ale mimo to chciałbym wiedzieć, jakie może być dobre podejście do tworzenia gałęzi w scenariuszu, w którym wydania/naprawy błędów zdarzają się niemal codziennie. **Edytuj:** dziękujemy wszystkim za podzielenie się opiniami i przydatne linki. Myślę, że głównym problemem, jaki mam tutaj, jest to: _Czy uważasz, że naprawienie błędu w tej samej gałęzi, z której wykonano wydanie, jest dobrym pomysłem?_ Czy to podejście jest w porządku na dłuższą metę, czy też mylimy rzeczy tylko po to, by to sobie uświadomić później?


title: niebezpieczeństwa związane z używaniem eval() do dynamicznego tworzenia obiektów — czy jest to ważny argument w kulturze wyrażających zgodę dorosłych?

text: Czytałem na jawne ostrzeżenia stackoverflow przed użyciem eval() do tworzenia obiektów. Powodem, który wydaje się być podany, jest to, że złośliwy kod może zostać wstrzyknięty, a obiekty utworzone na ślepo mogą zagrozić systemowi. Czy jednak ten argument o złośliwych zamiarach nie jest unieważniany przez argument zgody na dorosły? Przykładowy kod: class Test(object): def __init__(self, vala, valb, valc): self._vala = vala self._valb = valb self._valc = valc def __repr__(self): return "<Test(vala= {0}, valb={1}, valc={2})>".format(self._vala, self._valb, self._valc) testlist = [dict(cls="Test", vala="to jest vala ", valb="to jest valb", valc="to jest valc"), dict(cls="Test", vala="to jest vala II", valb="to jest valb II", valc="to jest valc II")] mytestobjects = [] dla testu na liście testowej: newobj = eval(test['cls'])(**{klucz: wartość klucza, wartość w test.items() jeśli klucz != "cls"} ) mytestobjects.append(newobj) print(mytestobjects)


title: Jak rozwijasz i wersjonujesz interfejs?

text: Załóżmy, że masz interfejs `IFoo`: public interface IFoo { void Bar(string s); int Quux(obiekt o); } W wersji 2 twojego API musisz dodać do tego interfejsu metodę `Glarg`. Jak to zrobić bez naruszania istniejących użytkowników API i zachowania kompatybilności wstecznej? Jest to skierowane głównie do .NET, ale może również dotyczyć innych frameworków i języków.


title: Przechowywanie haseł aplikacji internetowych, aby można je było odzyskać

text: **Wersja skrócona** Mój szef chce, abym przechowywał hasła _user_ do aplikacji internetowej ASP.NET Web Forms, którą opracowujemy w postaci zwykłego tekstu, aby użytkownik z uprawnieniami administratora mógł kliknąć przycisk i odzyskać bieżące hasła dla konta, które kontroluje. _Nie chcę tego robić_ , ponieważ bardzo zależy mi na bezpieczeństwie i prywatności użytkowników aplikacji internetowej, z którą jestem w jakikolwiek sposób związany. Jaki byłby dobry sposób na przechowywanie haseł w postaci zaszyfrowanej, którą jednak nadal można odszyfrować? Nie mogę liczyć na to, że użytkownicy mają adres e-mail, więc wysłanie użytkownikowi linku do zresetowania hasła nie wchodzi w grę. Przeczytaj poniższe, aby uzyskać więcej kontekstu. ** Trochę kontekstu** Ta aplikacja została napisana przez osoby, które nie mają pojęcia, jak należy pisać oprogramowanie. Dużo zduplikowanego kodu, wszędzie ryzyko wstrzyknięcia SQL, żadnych testów jednostkowych, jedno nowe połączenie jest tworzone i otwierane dla każdego zapytania... nazwij złą praktykę, znajdziesz ją w tej bazie kodu. Hasła są obecnie przechowywane jako proste MD5 oryginalnego ciągu, który jest słaby i okropny iw ogóle, ale wciąż trochę lepszy niż czysty tekst. Właśnie zakończyłem wdrażanie żądania funkcji, w którym administrator, o którym mówiłem, może kliknąć przycisk i automatycznie utworzyć konto dla każdego zarządzanego przez niego pracownika z losowym hasłem. Czuję się wkurzony podczas pisania tego, ale jednym z wymagań było _wyeksportowanie poświadczeń w arkuszu kalkulacyjnym Excel_. Co zrobiłem. To samo w sobie jest złe, ale wtedy mój szef powiedział: „A co, jeśli użytkownik zgubi arkusz kalkulacyjny? Wiesz, użytkownicy są głupi. Musi być sposób na odzyskanie haseł”. Huk. Niestety, nakłonienie go do słuchania ludzi, którzy wiedzą, o czym mówią, nie wchodzi w grę. Oczywistą sugestią byłoby „GTFO”, wiem, ale zapewniam, że to coś, co zrobię tak szybko, jak to możliwe. W międzyczasie muszę oszukiwać i udawać, że przechowuję hasła w postaci zwykłego tekstu, a jednocześnie robię wszystko w najlepszy możliwy sposób, aby chronić hasła moich użytkowników. **EDYTUJ** Z jakiegoś powodu ludzie, którzy odpowiadają, zakładają, że jestem dziewczyną, więc dla porządku chciałbym wyjaśnić, że jestem facetem. Nie żeby to miało jakieś znaczenie, ale hej ;)


title: Do czego najczęściej używane są języki funkcjonalne?

text: Zastanawiałem się, do jakich języków funkcjonalnych są głównie używane? Czytałem o nich i czytałem o Haskellu i innych. Niektóre wydają się być po prostu „akademickimi” językami, co nie ma dla mnie sensu, więc mam nadzieję, że uda mi się lepiej zrozumieć ich zastosowanie w rzeczywistych zastosowaniach.


title: Czy rozsądne jest, aby zasoby REST były w liczbie pojedynczej i mnogiej?

text: Zastanawiałem się, czy zamiast bardziej tradycyjnego układu, takiego jak ten: api/Products GET // pobiera produkty według identyfikatora PUT // aktualizuje produkty według identyfikatora DELETE // usuwa (produkty według identyfikatora POST) // tworzy produkt(y) Czy bardziej przydatne byłoby posiadanie liczby pojedynczej i mnogiej, na przykład: api/Product GET // pobiera produkt według id PUT // aktualizuje produkt według id DELETE // usuwa produkt według id POST // tworzy API produktu/Products GET // pobiera kolekcję produktów według id PUT // aktualizuje kolekcję produktów według id DELETE // usuwa kolekcję produktów (nie same produkty) POST // tworzy kolekcję produkty oparte na przekazanych parametrach filtra Tak więc, aby utworzyć kolekcję produktów, możesz wykonać: POST api/Products {data: filters} // zwraca api/Products/<id> A następnie, aby się do niego odwołać, możesz wykonać: GET api /Products/<id> // zwraca tablicę produktów Moim zdaniem główną zaletą robienia rzeczy w ten sposób jest to, że pozwala to na łatwe buforowanie kolekcji produktów. Można na przykład przeznaczyć godzinę życia na kolekcje produktów, drastycznie zmniejszając w ten sposób połączenia na serwerze. Oczywiście obecnie widzę tylko dobre strony robienia rzeczy w ten sposób, jakie są minusy?


title: Większość pracy programisty zajmuje się mapowaniem?

text: Podczas całej mojej pracy pracowałem z ORM, WS, usługami integracyjnymi, viewmodelem i tak dalej. Wspólną rzeczą we wszystkich tego rodzaju pracach jest to, że musiałem tworzyć mapowania i nie zawsze dostępne frameworki są wystarczające, aby pomóc w tym mapowaniu. Zastanawiam się nad pytaniem: czy jest to spójna część procesu rozwoju zajmująca się mapowaniem? Przydałoby się opracować narzędzie do rozwiązywania tego typu problemów? tj. sqlClient.AddParameterWithValue("przełącznik", SqlDbType.TinyInt, user.IDUser); sqlClient.AddParameterWithValue("IDUtente", SqlDbType.Int, user.IDUser); tj. GetSQLParameter("@switch", SqlDbType.TinyInt, 1), _ GetSQLParameter("@IDUtente", SqlDbType.Int), _ tj. MappingFramework.Mapper.CreateMap<DataRecordWrapper, User>() .ForMember(dest => dest. IDUser, opt => opt.MapFrom(src => src.GetInt("switch"))) .ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.GetString("IDUtente") ))


title: Pomóż zidentyfikować wzorzec reagowania na aktualizacje

text: Istnieje jednostka, która jest aktualizowana ze źródeł zewnętrznych. Zdarzenia aktualizacji odbywają się w losowych odstępach czasu. Po zaktualizowaniu jednostka musi zostać przetworzona. Wiele aktualizacji może być multipleksowanych. Innymi słowy, istnieje potrzeba przetwarzania najbardziej aktualnego stanu encji. Podczas przetwarzania występuje punkt bez powrotu, w którym aktualny stan (i stan jest spójny, tj. nie jest dokonywana częściowa aktualizacja) encji jest zapisywany gdzie indziej, a przetwarzanie jest kontynuowane niezależnie od wszelkich nadchodzących aktualizacji. Każdy kolejny zestaw aktualizacji musi wyzwalać przetwarzanie, tzn. system nie powinien zapominać o aktualizacjach. A dla każdego podmiotu nie powinno być więcej niż jedno uruchomione przetwarzanie (przed punktem bez zwrotu), czyli stan podmiotu nie powinien być przetwarzany więcej niż raz. Więc to, czego szukam, to wzorzec anulowania bieżącego przetwarzania przed punktem bez powrotu lub porzucenia wyników przetwarzania, jeśli nadejdzie aktualizacja. Głównym wyzwaniem jest zminimalizowanie warunków wyścigu i utrzymanie integralności. Jednostka siedzi głównie w bazie danych z niektórymi plikami na dysku. A system jest w .NET z usługami sieciowymi i kolejkami wiadomości. To, co przychodzi mi na myśl, to tabela przypominająca kolejkę bazy danych. Przychodząca aktualizacja wstawia wiersz do tej tabeli i rozpoczyna się przetwarzanie. Przetwarzanie gromadzi niezbędne dane przed punktem bez powrotu, a po osiągnięciu tej bariery zagląda do tabeli kolejki i sprawdza, czy są nowsze aktualizacje dla encji. Jeśli pojawią się nowe aktualizacje, przetwarzanie jest po prostu wyłączane, a jego dane odrzucane. W przeciwnym razie dane przetwarzania są utrwalane i wykraczają poza punkt bez powrotu. Choć dla mnie wygląda to na rozwiązanie, nie jest całkiem eleganckie i sądzę, że ten scenariusz może być obsługiwany przez jakieś oprogramowanie pośredniczące. Gdybym używał do tego kolejek wiadomości, istnieje potrzeba uzyskania dostępu do API kolejki w punkcie bez powrotu, aby sprawdzić, czy istnieją nowe wiadomości. I temu podejściu również brakuje elegancji. Czy istnieje nazwa tego wzorca i istniejące rozwiązanie?


title: Dodanie obsługi svn do naszego repozytorium git

text: Korzystamy z SVN od kilku lat. Niedawno przerzuciliśmy się na git, ponieważ niektórzy członkowie organizacji zauważyli, że jeśli nasz serwer SVN umrze, nasz zespół jest ugotowany. Do tej pory opracowaliśmy coś z przepływem pracy git, jednak niektórzy członkowie zespołu naprawdę nie lubią tego procesu git. Chcą po prostu kliknąć plik prawym przyciskiem myszy, a następnie nacisnąć Zatwierdź SVN (używamy tortoiseSVN) bez martwienia się o to pchanie i ciągnięcie. Zostałem poproszony o zapewnienie wsparcia SVN dla naszego repozytorium przy jednoczesnym aktualizowaniu repozytorium git (hostowanego na github). Przepływ pracy, który sobie wyobrażam, polega na tym, że wszyscy będziemy robić normalne rzeczy z SVN, jak poprzednio, a potem raz na jakiś czas po prostu wypycham github, aby wykonać kopię zapasową naszych plików. Jakie są opcje używania git wyłącznie do celów tworzenia kopii zapasowych (jedna osoba zarządzałaby repozytorium git), podczas gdy wszyscy korzystają z repozytorium SVN? Czytałem o git-svn, ale wydaje się, że to zupełnie inne narzędzie. Może ktoś może to wyjaśnić? Gdybym sprawdził repozytorium svn za pomocą git-svn, czy byłbym w stanie na nim operować za pomocą tortoiseSVN? A może wszyscy inni mogą korzystać ze zwykłego kasy SVN, podczas gdy ja utrzymuję kasę git-svn?


title: Świetny lunch i nauka tematów

text: Niedawno wznowiliśmy lunch w zakresie nauki dla działu programowania w firmie, w której pracuję. Wszystkich nas zapytano, czy mamy jakieś pomysły na sesję i czy bylibyśmy zainteresowani zrobieniem prezentacji. Mam kilka pomysłów na różne tematy, takie jak: _Jak myśleć jak użytkownik podczas projektowania interfejsu użytkownika_ lub _Różnice w HTML5_ Kilku współpracowników, którym rzuciłem te pomysły, wygląda na to, że im się podobają. Chciałbym jednak trochę więcej pomysłów, zanim zagłębię się w tworzenie prezentacji. **Jakie są świetne lunche i tematy do nauki?**


title: Potrzebujesz przebudować aplikację - jak?

text: Dla naszego głównego systemu mamy małą aplikację monitorującą, która znajduje się poza naszą siecią i okresowo próbuje się zalogować, aby sprawdzić, czy system nadal działa. Mamy jednak problem z monitorem, ponieważ zestaw komponentów komunikacyjnych (Asta 3 w aplikacjach Delphi) nie zawsze się łączy. Ogólnie powiedziałbym, że jest niezawodny w około 95%, ale pozostałe 5% zabija monitor, ponieważ będzie próbował się zalogować i zawiesić przy próbie połączenia (brak limitu czasu w komponencie). To naprawdę nie jest problem po stronie klienta, ponieważ klienci nie rozłączają się i ponownie łączą wielokrotnie w tej samej instancji aplikacji, ale potrzebuję sposobu, aby upewnić się, że monitor działa i działa nadal, nawet gdy komponent ulegnie awarii w biegu. Mam kilka pomysłów na to, w jaki sposób uruchomić program, a główną ideą jest umieszczenie komunikacji w wątkowym module danych, aby w przypadku awarii jednego wątku inny wątek mógł później przetestować i program będzie działał dalej. Czy to brzmi jak słuszna droga? Jakieś inne pomysły, jak zapewnić niezawodną aplikację monitorującą z mniej niż 100% niezawodnym komponentem? Dziękuję. PS Nie jestem pewien, czy te tagi są najbardziej odpowiednie. Próbowałem uwzględnić „niezawodność systemu” jako jedną, ale nie wystarczająco dużo reputacji, aby stworzyć.


title: Jaka jest branżowa norma dotycząca standardu nazewnictwa dla obsługi zdarzeń obiektów gui w C#

text: Załóżmy, że masz obiekty przycisku w formularzu ze zdarzeniem kliknięcia (c#/.Net). Jak zwykle nazywa się obsługę zdarzeń w całej branży? * fooButton_Click * fooButtonClick (lub jeśli lubisz węgierski) * btnFoo_Click * btnFooClick Gdy visual studio tworzy procedurę obsługi zdarzeń, domyślnie podkreśla + EventName. Wydaje się to naruszać normę używania camelCasing i UppderCamelCasing zamiast oddzielania słów podkreśleniem. Czy jest jakiś powód, aby to zmienić, czy praktycznie wszyscy podążający za tym, co robi Visual Studio?


title: Przykłady aplikacji internetowych, które działają całkowicie offline przy użyciu HTML5

text: Chciałbym sprawdzić kilka rzeczywistych aplikacji internetowych, które działają offline przy użyciu HTML5 (pamięć podręczna aplikacji i pamięć lokalna, jak sądzę). Nie jestem w stanie znaleźć żadnego. Mogę znaleźć wiele eksperymentów, ale nie aplikacji z rzeczywistymi użytkownikami. Dlaczego?


title: Jak bezpiecznie uzyskać dostęp do baz danych z urządzenia mobilnego?

text: Prowadziłem badania dotyczące dostępu do bazy danych z urządzeń mobilnych. Jest tak wiele różnych sposobów na zrobienie tego. Istnieje również wiele sposobów, aby je zabezpieczyć. Jaki jest dobry sposób na bezpieczny dostęp do bazy danych z urządzenia mobilnego? Biorąc również pod uwagę mój konkretny przypadek, w którym mam istniejącą usługę WCF, która robi wszystko, czego potrzebuję dla aplikacji, chciałbym ją ponownie użyć. Pracuję nad wykorzystaniem wywołań jsonp do serwisu oraz rozwijam aplikacje na iOS, Android i Windows Phone. Połączenia są zabezpieczone przez HTTPS, a ja wdrażałbym jakąś politykę uwierzytelniania dla połączeń. Ale jak bezpieczne byłoby to wszystko? Muszę się martwić o naprawdę wrażliwe dane. Używam HTML5 i JS do tworzenia aplikacji, aby zachować jednolitość i mniej trudności w zarządzaniu na wszystkich platformach. Jak uzyskać dostęp do bazy danych i zabezpieczyć swoje dane?


title: Co liczy się jako IDE?

text: Ostatnio czytasz pytanie Jakich języków używasz bez IDE? Jedno pytanie zadane w kilku odpowiedziach brzmiało: „Czy Notepad ++ i IDE?” Jedna z odpowiedzi na pierwotne pytanie brzmiała "Brak, używam vima...", co oznacza, że vim jest IDE. Ale inna odpowiedź sugerowała, że vim nie jest IDE. Więc gdzie jest linia? A co z notatnikiem, ed lub nano? Czy jedyną techniką kodowania inną niż IDE jest technika motylkowa?


title: Czy wywoływanie metod przez wiele obiektów jest złą praktyką?

text: Mam kod, który wygląda tak: tr.t.findIndexSmoothed(arg0.getX(), arg0.getY()); "tr" i "t" są obiektami. Czy złą praktyką jest dotarcie do całej hierarchii obiektów w celu wywołania metod? Jedyny powód, jaki przychodzi mi do głowy, to pękanie enkapsulacji, a jeśli tak jest, czy ktoś może mi powiedzieć, dlaczego stanowi to problem? Czy ta struktura kodu w jakikolwiek sposób ogranicza wydajność?


title: Zmiany wersji: Jak duże są problemy ze zgodnością w projekcie?

text: Na przykład, jeśli weźmiemy pod uwagę ActionScript 2.0 (oparty na obiektach, ale programowanie nie implementuje zbyt dużego OOP) w porównaniu z 3.0 (wysoce OOP), to jak zupełnie nowy język skryptowy w sensie podejścia, stylu programowania, funkcji, które masz pomysł. W PHP widzimy aktualne wersje zaczynające się od 3-5. krótkie zmiany wersji * Pytanie : Deweloperzy pracujący nad PHP czy łatwo jest migrować z wersji na wersję? * Pytanie : Czy są jakieś rozległe problemy ze zgodnością, w przód lub w tył? * Pytanie : Czy Twój projekt do końca trzyma się określonej wersji ? * Pytanie: czy styl programowania zmienia się z wersji na wersję? * Pytanie : Gdybyś musiał zacząć korzystać z PHP, aby przyczynić się do projektu zbudowanego we wcześniejszych wersjach, czy poznanie najnowszej wersji przyniosłoby efekt przeciwny do zamierzonego w tym celu? Kilka powiązanych tematów, na które natknąłem się na SE Jak mam śledzić wersję/zmiany skryptu php? Co się dzieje z PHP 6? * * * Byłoby bardzo pomocne w zrozumieniu, gdybyś mógł odpowiedzieć na ten temat bezpośrednio na zadane pytania.


title: Etykieta: Nasz stary deweloper wyświetla nasz projekt w swoim portfolio bez pozwolenia

text: Zastanawiałem się, jak wygląda sytuacja z podwykonawcą programisty korzystającego z naszego projektu w swoim portfolio. Przeciągnął 8-tygodniową kompilację do ponad roku, narobił nam bałaganu, zniknął w środku na 3 miesiące i kosztował nas pieniądze. Musieliśmy zapłacić komuś innemu za naprawienie wszystkich jego błędów. Zakłada, że może i robi zamieszanie, kiedy sugerowaliśmy, że możemy mu nie pozwolić. Czuję, że mamy pełne prawo do odmowy, biorąc pod uwagę jakość pracy i ramy czasowe tego faceta, spowodował on, że projekt utknął w martwym punkcie. W naszej umowie o pracę stwierdziliśmy, że nie chcemy, aby miał on prawdziwy kredyt tekstowy na samym produkcie, ale z chęcią napiszemy mu referencję, jeśli będzie chciał napisać ofertę pracy na jej odwrocie. Podpisał i zgodził się. Jako ci, którzy zaprojektowali produkt i cały frontend, uważamy, że powinniśmy mieć prawo nie pozwolić mu na wyświetlanie naszego produktu na swojej stronie internetowej. Może nie chcemy, aby świat dowiedział się, że nasz drogi produkt z najwyższej półki został zbudowany przez jednego faceta w Indiach. Być może próbujemy pozycjonować się jako firma, która dostarcza cały pakiet, łącznie ze stroną programistyczną. Czy uważa się za dobrą etykietę, aby najpierw poprosić o pozwolenie przed wyświetleniem oprogramowania w portfolio?


title: Czy menedżerowie pakietów udostępniają zależności typu select-one?

text: Ponieważ jquery jest bardzo powoli wycofywane, pojawia się coraz więcej sytuacji, w których biblioteka X będzie działać z jquery lub zepto.js (ale przynajmniej jeden jest wymagany). Żaden menedżer pakietów, o którym mogę pomyśleć, nie pozwala jednak na wyrażanie takich zależności. Gdybym miał zaproponować tę funkcję – powiedzmy – Bowerowi, czy istnieje precedens, jak mogłaby ona wyglądać?


title: Najlepszy sposób na wyrażenie meta-informacji o brakujących danych?

text: Pracuję w branży IT w służbie zdrowia, dokonując przeglądu procesów zarządzania danymi różnych badań obserwacyjnych. Jednym z problemów, z którymi wielokrotnie się spotykałem, są źle zakodowane dane, zwłaszcza gdy brakuje niektórych wartości. * * * **Tło Intermezzo, pomiń jeśli cierpisz na TL;DR:** Obecnie przeglądam badanie, które zbiera dane na temat pacjentów cierpiących na konkretną chorobę. Pacjenci zazwyczaj przystępują do badania po potwierdzeniu choroby (kilka miesięcy po wybuchu). Jednym z ważnych parametrów jest wynik określonego badania krwi w ostrej fazie choroby, czyli miejmy nadzieję, jak najbliżej wybuchu choroby. Czasami jednak test ten nie był wykonywany, ponieważ nie było na to wskazań lub pacjent zapomniał przynieść kopię wyniku itp. Ważnym aspektem jest tutaj to, że wszystkie dane w DB są generowane z (ton nieposortowanego) papieru i często ludzie nie mają czasu na przejrzenie tego wszystkiego, więc nie wpisują wyniku badania krwi tylko dlatego, że _jeszcze do tego nie dotarły_. * * * Aby "jakoś" zakodować przyczyny braku wartości, widziałem różne schematy: 1. **Użyj pola TEKST(3) dla wartości logicznych** i użyj `n/a`, aby wyrazić, że dane naprawdę nie są dostępne” (np. ponieważ badanie krwi nie zostało wykonane) i „NULL”, aby wyrazić „Może dane gdzieś są, po prostu jeszcze ich nie szukałem”. 2. **Użyj dodatkowego pola w tej samej tabeli**, np. pole logiczne „bloodtest_perf”, gdzie „perf” oznacza „faktycznie wykonane”. Nie podoba mi się pierwsze podejście, ponieważ pozwala na wpisanie „tak”, „y”, „ja”, „TAK” itp. i spędzasz większość czasu na czyszczeniu zamiast na analizie danych. Drugie podejście też nie jest dużo lepsze, ponieważ w najlepszym przypadku otrzymujesz dane pozorne, a w najgorszym niespójne: __ TBL_TEST1 __________________________________ | ID_patyku | test1_perf | test1_data | test1_res | +----------------------------------------------+ | 12345 | nie | NULL | NULL | | 12345 | tak | 2011-05-13 | 20,0 | +----------------------------------------------+ Najbardziej rozsądny moim zdaniem rozwiązaniem byłoby utworzenie `TBL_TEST1_METADATA`, który zawiera wpis IFF test1, który nie został wykonany, który określa, dlaczego nie, ale ludzie (klinicyści z podstawową wiedzą o dostępie do MS) nie są wystarczająco wykształceni i nie są chętni do poświęcić dużo czasu na zaprogramowanie logiki wymaganej do zapisywania wartości w dwóch tabelach z jednego formularza programu Access. Moim dylematem jest to, że widzę dziesiątki lat danych pacjentów tracących z powodu niewystarczającej jakości danych, podczas gdy nie mogę znaleźć pragmatycznych rozwiązań, które „DB-amatorzy” mogliby wdrożyć w akceptowalnym czasie, ponieważ mam (też?) obsesję na punkcie robienia to _właściwy sposób [tm]_. Czy brakuje mi tego, co oczywiste? A może jedynym sposobem na poprawę sytuacji jest wysłanie lekarzy na zajęcia z programowania lub zapewnienie im „sługa programowania”, który zrobi to za nich? PS: Chciałbym zadać to pytanie **onhealthcare IT.SE.com**, ale propozycja nie otrzymała jeszcze wystarczającej uwagi, aby przejść do wersji beta.


title: Czy absolutną koniecznością jest zignorowanie/usunięcie wszystkich skompilowanych plików przed zatwierdzeniem?

text: Pracuję nad motywem Drupala. Do jego opracowania będę używał języków "pośrednich", tj. Stylus dla stylów i CoffeeScript dla niektórych skryptów front-endowych. Będę korzystał z usługi hostingowej git, aby móc udostępniać kod między uczelniami. Zamierzam również użyć go do lokalnej aktualizacji kodu, a następnie wepchnąć go do usługi hostingowej, aby później został ściągnięty przez witrynę live drupal. To sprawia, że rzeczy są naprawdę eleganckie. Zauważyłem jednak, że wielu programistów ma tendencję do .gitignorowania całego skompilowanego kodu. Gdyby to była dobra praktyka, bardzo bym chciał, żebym ją zastosował, gdyby nie ten jeden problem: przekompilowanie całego kodu, który jest potrzebny do poprawnego działania motywu. Oznacza to, że kiedy wykonam pull, będę musiał ponownie skompilować cały kod CSS i JavaScript. Teraz, gdybym miał wykonać pull na stronie na żywo, istnieje ryzyko, że użytkownik przejdzie do witryny w momencie, gdy to zrobię. Żadne style i skrypty nie zostaną załadowane po stronie użytkownika, dopóki kod nie zostanie skompilowany. Oczywiście kompilacja trwa około sekundy, a użytkownik prawdopodobnie pomyśli sobie „meh, to było tylko moje połączenie internetowe”. Ale jest też problem, że serwer nie ma zainstalowanych kompilatorów na początku. Więc teraz zrobiłbym pull, ale nie będzie żadnych stylów ani skryptów. Czy absolutną koniecznością jest usunięcie całego skompilowanego kodu, czy też mogę włączyć go do zatwierdzenia?


title: Czy dobrą praktyką jest komentowanie z numerem wydania?

text: Widziałem wiele numerów problemów z komentarzy kodu jQuery (właściwie było 69 numerów problemów w kodzie jQuery). Myślę, że to byłaby dobra praktyka, ale nigdy nie widziałem żadnych wytycznych tej praktyki. Jeśli jest to dobra praktyka, jakie mogą być wytyczne tej praktyki?


title: Udostępnianie połączenia SCTP z wieloma wątkami

text: Mam aplikację, która musi działać w środowisku SCTP, mam pytanie dotyczące dzielenia połączenia między wiele wątków tylko w celu odbierania pakietów, próbowałem z `sctp_sendmsg` i zadziałało bez blokowania wątków (czy to trwało innymi słowy, czy jest to bezpieczne dla wątków). Przetestowałem wiele przypadków z wysłaniem i nie widzę ich niezsynchronizowanych. W każdym razie, wracając do odbierania, czy można utworzyć wiele wątków i wysłać każdemu wątkowi deskryptor sctp, aby rozpocząć odbieranie wiadomości? Czy potrzebuję tutaj zamka, czy jest ok bez zamka? Używam C w Linuksie.


title: Mówi „if ( $a != null && $a == 5)” tak samo jak „if ($a == 5)”

text: Po pierwsze, przepraszam, jeśli odpowiedź zostanie udzielona gdzie indziej. Przeprowadziłem krótkie wyszukiwanie, ale nie byłem pewien, jak zapytać w wyszukiwanych hasłach. Patrzę na jakiś kod i natknąłem się na wiele stwierdzeń takich jak: if ( ($a != empty_or_null_or_notDefined && $a == 5 ) Czy to to samo, co powiedzenie: if ( $a == 5 )? (język to PHP.)


title: W jakich dziedzinach jakość oprogramowania ma takie samo znaczenie jak czas realizacji?

text: Ktoś mi powiedział, że jeśli oprogramowanie spełnia oczekiwania klientów, to jest dobrej jakości. Ale pracowałem z projektantami interakcji (z tymi samymi ludźmi, którzy sprawili, że interfejs i użyteczność Gmaila są takie fajne!) i uwielbiam z nimi pracować, ponieważ mimo tego, że wymyślili setki zmian w wymaganiach i kładli nacisk na wiele wiele subtelnych szczegółów, gdy oprogramowanie było gotowe, mogłem spojrzeć na produkt i powiedzieć **WOW**! Czasami w firmie liczy się tylko terminowe wykonanie projektu. Dopóki działa i tak długo, jak klient mówi, że jest ok, nikt nie zadaje sobie trudu, aby to poprawić. Nie mówię o pozłacaniu, ale wierzę, że aby programista mógł cieszyć się swoją (no, może i jej ;) ) pracą, powinien móc z dumą powiedzieć, że „Hej, zrobiłem to oprogramowanie” i to przychodzi tylko wtedy, gdy produkt jest dobrej jakości. Oprócz Waszych opinii na ten temat **chciałabym również wiedzieć, w jakich dziedzinach** (np. lotnictwo, finanse itp.) mogę znaleźć firmy (lub można wymienić nazwę firmy), w których jakość produktu jest taka ważne **(i zachęcone przez kierownictwo)** jako ukończenie projektu na czas?


title: Wymuszanie dostępu potomnego do agregacji root przez sam agregowany root

text: **Kontekst** Tworzę aplikację wykorzystując podejście Domain Driven Design. Chcę użyć wzorca projektowego tam, gdzie jest to właściwe i zastosować wszystkie zasady SOLID. **Scenariusz** Mam zamówienie i chcę, aby klienci mogli dodawać do niego wiersze zamówienia. Rozważmy następujący pseudokod: klasa Order OrderLines[] (tylko do odczytu) AddOrderLine(orderLine) klasa OrderLine Product Amount klasa OrderLineFactory OrderLine Create(produkt, kwota) klasa OrderLineRepository Save(orderLine) Teraz dodajmy OrderLine do zamówienia: Order.AddOrderLine( OrderLineFactory.Create(produkt: "Czekoladowe Ciasto", ilość: 3)) Swoją drogą, OrderLineFactory istnieje, ponieważ w moim przypadku istnieje dość złożona logika związana z tworzeniem linii zamówienia. Jest to jeden z głównych powodów stosowania wzorca fabrycznego. **Problem** Problem w tym, że mógłbym to zrobić zamiast tego... orderLine = OrderLineFactory.Create(product: "Czekoladowe Ciasto", ilość: 3) OrderLineRepository.Save(orderLine) ...i obejść `Zamówienie. AddOrderLine`, skutecznie skracając wszelkie kontrole wykonywane tą metodą (np. zabezpieczenie przed duplikatami lub ograniczenie kwoty zamówienia). **Praca w kierunku rozwiązania** Argumentem może być to, że nie powinno być metody `Save` w `OrderLineRepository`, ponieważ OrderLine nie jest zagregowanym katalogiem głównym. To (tak jak chcę) uniemożliwiłoby klientowi przechowywanie samego OrderLine, z wyjątkiem dodania go do Zamówienia i konsekwentnego zapisania Zamówienia. Jednak posiadanie metody `Save` na repozytoriach, które dotyczą agregatów innych niż root, pozwala na bezpośrednie zapisanie zmian w nich wprowadzonych, takich jak: orderLine = orderLineRepository.Get(31923) orderLine.Amount = 5 OrderLineRepository.Save(orderLine) Nie jest w stanie zapisać OrderLine wymagałoby ode mnie czegoś takiego jak... order = OrderRepository.FindByOrderLineId(31923) order.OrderLines[31923].Amount = 5 OrderRepository.Save(order) ...co nie jest wcale takie wydajne lub praktyczny. Mógłbym dodać również wymóg podania (właściwie nadmiarowego) identyfikatora zamówienia, ale to niepotrzebnie obciążałoby klienta. Powiedzmy więc, że chcę pozostać przy mojej metodzie `OrderLineRepository.Save` i nadal znaleźć sposób, aby powstrzymać mojego klienta przed możliwością obejścia mojej metody `Order.AddOrderLine`. Wszystko, o czym teraz myślę, to porzucenie OrderLineFactory i stworzenie usługi domeny, która łączy tworzenie i przypisanie. klasa OrderService AddOrderLine(zamówienie, produkt, kwota) Czyli możemy: order = orderRepository.Get(123) OrderService.AddOrderLine(zamówienie: zamówienie, produkt: "Czekoladowe Ciasto", ilość: 3)) orderRepository.Save(zamówienie) Nie Tak naprawdę nie podoba mi się usługa łącząca wiele problemów tutaj, te związane z tworzeniem i zadaniem. To wymagałoby... fabryki... znowu. W porządku, rozważmy więc fabrykę prywatną, która nie jest dostępna dla klienta, ale dla samej usługi domeny. W moim przypadku utknąłbym w testach jednostkowych i Inversion Of Control. Stworzyłbym zależność, której nie można wstrzyknąć, ponieważ mój klient nie byłby w stanie zarejestrować mojej niepublicznej fabryki. **Podsumowanie** * Chcę, aby mój klient mógł tworzyć wiersze zamówień poprzez klasę Order i w żaden inny sposób * Nie chcę manipulować wieloma problemami w jednej klasie * Chcę, aby tworzenie OrderLine było poza klasą Klasa zamówienia * Chciałbym nadal używać do tego fabryki. Więc trochę tu utknąłem, próbując znaleźć najlepszy sposób na poradzenie sobie z tym. Jakieś sugestie?


title: Tablica: „przydatna!” czy „papier jest lepszy”?

text: Czy ktoś nadal używa tablicy? Jeśli tak, w jaki sposób z niego korzystasz i czy jest to rzeczywiście takie przydatne? A może wolisz papier?


title: Związek między językiem programowania a rozwiązaniami

text: To raczej pytanie filozoficzne/teoretyczne. Interesuje mnie pytanie, w jaki sposób język (w tym przypadku języki programowania) i myśli (= rozwiązania problemów) są ze sobą powiązane. Chcę wiedzieć, czy język programowania wpływa na rozwiązania, które mogę wymyślić. Na przykład: Programuję coś w Haskell (funkcjonalny) iw Javie (OOP). Czy ogólne rozwiązania różnią się zasadniczo, czy też – poza cukrem składniowym – są takie same? Czy nie używam po prostu różnych algorytmów i innego projektu oprogramowania, ale czy zasadniczo zmieniam cały mój punkt widzenia, moją koncepcję i mój pogląd na oprogramowanie, w zależności od paradygmatu, od którego wychodzę? _(Uwaga: "I" oznacza programistę generycznego)_ Wiem, że to pytanie jest dość trudne do odpowiedzi, ale uważam je za bardzo interesujące, więc chciałem się dowiedzieć, czy ktoś ma (i może się podzielić) opinią na temat ten.


title: Jaka jest najlepsza praktyka obsługi użytkownika jako alternatywa dla wyskakujących okienek?

text: Wciąż jestem nowy w projektowaniu/programowaniu stron internetowych. Pracuję nad formularzem wprowadzania danych do systemu wewnętrznego w pracy. W formularzu użytkownik może wybrać biuro z listy wyszukanej w bazie danych. (Zaplecze do tego to PHP i MySQL, jeśli jesteście ciekawi.) Chciałbym dodać funkcjonalność umożliwiającą użytkownikowi dodanie biura do listy, między innymi, przy minimalnej inwazyjności. Nie chcę używać wyskakującego okienka, ponieważ domyślnym zachowaniem przeglądarek firmowych jest blokowanie wyskakujących okienek. Widziałem to, co pokazuje, jak utworzyć alternatywę alertu zamiast nowego okna. Wydaje mi się, że to zasadniczo to samo, a nie ulepszenie, z wyjątkiem tego, że uniemożliwiłoby to przeglądarce umieszczenie kibosha na nowym formularzu. Myślę, że dobrym pomysłem może być również całkowite wyłączenie funkcji popup/alert i wybranie nowego, niewyświetlanego `<div>`, który jest wyzwalany przyciskiem lub podwójnym kliknięciem, autc. i zamknięte w porządku lub anuluj. Tak jak powiedziałem, wciąż jestem nowy w projektowaniu / tworzeniu stron internetowych i zastanawiam się, jaka jest obecnie akceptowana najlepsza praktyka, aby wykonać to zadanie z najlepszym możliwym doświadczeniem użytkownika. Aktualizacja: prawdziwe pytanie brzmi: „Czy istnieje obecnie najlepsza praktyka wykonywania tego zadania z możliwie najlepszym doświadczeniem użytkownika?” Odpowiedź może brzmieć „nie, jest wiele opcji i żadna nie jest bardziej rozpowszechniona”. To, czego szukam, to albo to, albo „tak, obecnie akceptowaną najlepszą praktyką w zakresie doświadczenia użytkownika w tym przypadku jest X”.


title: Wymaganie, aby zmiany kodu w wydaniu były wstecznie kompatybilne ze schematem bazy danych

text: Niedawno natknąłem się na wymaganie związane z naszym procesem wydania/SDLC, które wydaje mi się nieco nietypowe, więc piszę to, aby zapytać, czy ta praktyka jest powszechna, a jeśli nie, czy należy zmienić nasz proces wdrażania, aby wyeliminować uciążliwe ograniczenie. Pracuję dla małego sklepu z oprogramowaniem, który produkuje oprogramowanie dla przedsiębiorstw (więc nie jest to popularna nazwa) i mamy tylko garstkę, ale bardzo dużych klientów. Jest to wieloserwerowa aplikacja do zarządzania systemem działająca w systemie Linux, zapleczu DB, interfejsie internetowym, z wieloma asynchronicznymi operacjami we/wy i wiadomościami. Wdrażamy uaktualnienia około. co 2-3 miesiące, a nasi klienci wdrażają je za pomocą pakietów `deb` lub `rpm` (w zależności od systemu operacyjnego), które im dostarczamy. Wszyscy klienci wdrażają aplikację w środowisku klastrowym, a każda instancja serwera wskazuje na wiele fragmentów bazy danych. Ostatnio pracowałem nad refaktoryzacją starszego typu, która znacząco zmieniła nasz schemat bazy danych. Krótko mówiąc, zreorganizowałem sposób, w jaki przechowujemy niektóre dane, podzieliłem niektóre tabele na wiele nowych, zmniejszyłem narażenie na warunki wyścigu i wprowadziłem odpowiednie zmiany w kodzie. Kiedy przygotowywałem się do zgłoszenia zmian, zostałem poinformowany przez naszego architekta systemów, że „ze względu na sposób, w jaki nasi klienci wdrażają aktualizacje” (każdy serwer i każda baza danych osobno, jeden po drugim i może to zająć dni, jeśli nie tygodnie, w trakcie które niektóre serwery muszą działać), nie możemy mieć ściśle powiązanych zmian i że wszystkie aktualizacje kodu muszą być wstecznie kompatybilne z bazą danych w ciągu jednego cyklu wydawniczego. IOW, **nie możemy usunąć pól z tabel bazy danych, ponieważ we wszystkich konfiguracjach klienta wszystkie serwery wskazują na wszystkie fragmenty bazy danych i musimy umożliwić serwerowi jednoczesną pracę z jednym fragmentem, który jest aktualizowany wraz z innym, który nie jest.** Teraz ja był co najmniej zdezorientowany i zakłopotany tym wymogiem. Wydawało się świadczyć o problemach, że sposób, w jaki nasi klienci lubią wprowadzać zmiany (co zajmuje dużo czasu), a także ich konfiguracja, wymusza na nas równoległe dostarczanie uciążliwej podwójnej funkcjonalności. W moim konkretnym przypadku powiedziano mi, że muszę zachować zrefaktoryzowane pola w starych tabelach dla starszych odczytów podczas zapisywania do nowych tabel, a następnie połączyć pobrane dane. To wydaje mi się, delikatnie mówiąc, niepotrzebnie skomplikowane. Moje pytania są następujące: 1. Czy to wymaganie jest nietypowe dla ogólnej konfiguracji, którą opisałem? Pracowałem tu około sześciu miesięcy i nigdy wcześniej nie pracowałem dla firmy produktowej, zawsze pracowałem na stronie, która tworzyła i wdrażała własne aplikacje (takie jak strona internetowa itp.). Czy ten scenariusz jest powszechny w firmach produkujących oprogramowanie? 2. Czy to zjawisko niezbędnej kompatybilności wstecznej DB wskazuje na problemy ze sposobem, w jaki nasi klienci lubią wdrażać nasze oprogramowanie? Według mojej wiedzy, nasze aktualizacje stosują ręcznie serwer po serwerze, baza danych po bazie danych, zachowując przy tym funkcję produkcyjną. Czy powinni używać czegoś takiego jak „Puppet” lub „Chef”, aby wdrożyć nasze ulepszenia w znacznie krótszym czasie? 3. Jak mam podejść, prezentując potrzebę zmiany tego wszystkiego, co stanowi niedogodność dewelopera, mówiąc co najmniej, konieczność zapewnienia tej rozwidlonej funkcjonalności?


title: Czy korzysta z zewnętrznych repozytoriów zgodnych ze standardem PCI-DSS?

text: Rozważamy użycie BitBucket zamiast wewnętrznego hostowania naszych repozytoriów Git. Czy ktoś wie, czy to łamie jakiekolwiek zasady zgodności PCI? Nie udało mi się znaleźć zbyt wielu informacji na ten temat.


title: Jakie są dostępne narzędzia do tworzenia komercyjnych gier online dla wielu platform i przeglądarek?

text: HTML5+Javascript nie jest opłacalny, ponieważ kod po stronie klienta będzie widoczny, a tym samym możliwy do kradzieży. Flash nie jest opłacalny, ponieważ nie jest obsługiwany na iPadach, a zatem nie jest dostępny na wielu platformach. Powiedziałem, jakie są dostępne narzędzia do tworzenia wieloplatformowych, wieloprzeglądarkowych komercyjnych gier online dla wielu graczy?


title: Od analizy do zastosowania

text: Którą ścieżkę nauki poleciłbyś, aby móc stworzyć kompletną aplikację, od analizy wymagań, projektowania (z różnymi diagramami) po kodowanie i testowanie? Nie jest łatwo zdobyć tę wiedzę, gdy człowiek nie pracuje w firmie programistycznej. Czy w Internecie jest jakiś przykład tego procesu od wymagań do kompletnego wniosku? Nie musi to być bardzo skomplikowane, coś dla początkującego, który zna UML, projektowanie baz danych i kilka języków programowania (poziom średniozaawansowany). Wolę powstałą aplikację w Pythonie lub C (ale w C nie ma klas, więc może tutaj będzie mniej projektowania). Nie lubię za bardzo C++. Java też jest akceptowalna. To jest raczej łatwiejszy przykład tego, czego szukam. Nacisk powinien być położony bardziej na projektowanie, nie muszą być skomplikowane algorytmy, ale raczej pokazać połączenie działającego systemu (np. systemu informatycznego o architekturze 3 warstwowej).


title: Komentowanie kodu AS3 — niebędący interfejsem API

text: Jak skomentować metodę? Jakie są najlepsze praktyki dotyczące komentowania kodu? Przykład: /* Sprawdza, czy kolor jest dozwolony w danym punkcie * danych bitmapowych bieżącego piętra * @param value - kolor do sprawdzenia * @return boolean - jeśli kolor jest dozwolony zwraca true, w przeciwnym razie zwróć false */ private function isAllowed(value:uint):Boolean { //code... } Czy to najlepszy sposób na komentowanie metody? Słyszałem, że używa się tagu @see. Co powinno znajdować się na tym tagu? Zastanawiam się, czy może to być coś, co ma związek z metodą, czy to prawda? Dziękuję.


title: Tłumaczenie obiektów z jednego typu na inny

text: Pracuję nad aplikacją serwer-klient w c# i trzeba wysłać obiekt od klienta do serwera za pośrednictwem WCF. Dla uproszczenia nazwę go WorkingClass, ponieważ jest to praca. public class WorkingClass { public WorkingClass (FileInfo uncompressedFile, FileInfo compressFile) { UncompressedFile = uncompressedFile; Plik skompresowany = plik skompresowany; } public FileInfo UncompressedFile { get; zestaw prywatny; } public FileInfo Plik skompresowany { get; zestaw prywatny; } public void ZipFile() { //plik zip } } Teraz muszę wysłać go na serwer przez WCF. Nie potrzebuję serializacji i wysyłania całych właściwości WorkingClass FileInfo, więc mam prostą klasę, którą wywołam MessageClass, która ma proste ciągi. public class MessageClass { public MessageClass (ciąg uncompressedFileName, ciąg skompresowanyFileName) { UncompressedFileName = uncompressedFileName; CompressedFileName = nazwa_skompresowanego pliku; } public string UncompressedFileName { get; zestaw prywatny; } ciąg publiczny CompressedFileName { get; zestaw prywatny; } } Mogę dodać metodę instancji ToMessage() i metodę statyczną FromMessage do WorkingClass. Lub zamiast statycznej metody FromMessage, mógłbym dodać konstruktor do WorkingClass, który jako parametr przyjmuje MessageClass. Wydaje mi się, że te opcje ściśle wiążą obie klasy, a klasa robocza powinna martwić się tylko o spakowanie pliku, a nie konwersję do komunikacji za pośrednictwem WCF. Czy mogę utworzyć klasę konwertera? Serwer będzie wtedy musiał dokonać konwersji z wiadomości do własnej klasy roboczej. Czy jestem na właściwej ścieżce, aby poradzić sobie z takimi sprawami? Czy istnieje najlepsza praktyka lub wzorzec projektowy, którego mogę przestrzegać?


title: Czy obsługa wyjątków środowiska uruchomieniowego w kodzie nie jest dobrą praktyką?

text: Pracuję nad aplikacją Java i widzę, że wyjątki Runtime są obsługiwane w wielu miejscach. Na przykład spróbuj { //zrób coś }catch(NullPointerException e){ return null; } Moje pytanie brzmi: kiedy dobrą praktyką jest obsługa wyjątków środowiska uruchomieniowego? Kiedy należy pozostawić nieobsłużone wyjątki?


title: Stawanie się organizacją partnerską firmy Microsoft

text: Czy ktoś zna proces stawania się partnerem Microsoft dla organizacji. Jakie są wymagania i proces?


title: Jak bezpieczne jest buforowanie biletu użytkownika w SESSION?

text: Pracuję nad biblioteką kliencką do interfejsu z interfejsem API mojej firmy i generujemy bilet użytkownika, gdy użytkownik loguje się przy użyciu interfejsu API. Oczywiście nie chcę wysyłać biletu użytkownika do klienta w celu ponownego przesłania przy kolejnych żądaniach - czy jest (względnie) bezpieczne dla mnie buforowanie tej wartości w `$_SESSION` dla późniejszych wywołań?


title: Co oznacza ten punkt o pierwszej postaci normalnej?

text: Czytam stronę Wikipedii w pierwszym normalnym formularzu i jestem zdezorientowany ostatnim podpunktem: > 5) Wszystkie kolumny są regularne [tj. wiersze nie mają ukrytych składników, takich jak wiersze > identyfikatory, identyfikatory obiektów lub ukryte sygnatury czasowe]. Czy to oznacza, że „wszystkie informacje o wierszu są zawarte w jego wartościach” (moje słowa)? * * * Rozumiem resztę punktów dotyczących 1NF; tylko ten jestem zdezorientowany.


title: Jaki byłby najlepszy prawdziwy przykład wyjaśniający przydatność dziedziczenia?

text: Próbując wyjaśnić koncepcję dziedziczenia w obiektach obiektowych, powszechnym przykładem jest często przykład ssaków. IMHO, to naprawdę zły przykład, ponieważ doprowadzi nowicjuszy do niewłaściwego wykorzystania tej koncepcji. Co więcej, nie jest to typowy projekt, z którym będą mieli do czynienia w swojej codziennej pracy projektowej. Jaki więc będzie ładny, prosty i konkretny problem, który rozwiążemy za pomocą Dziedziczenia?


title: Biblioteka map: po stronie klienta czy po stronie serwera?

text: Jak już tutaj prosiłem, muszę wdrożyć aplikację Multi-Platform Map. Teraz mam Mapstraction jako opcję, która używa JavaScript do implementacji pożądanej funkcjonalności. Moje pytanie brzmi: „Czy jest jakiś powód/korzyść, aby zaimplementować taką bibliotekę (powiedzmy, adaptery) po stronie serwera (w moim przypadku PHP)?” Ponieważ wszystkie te mapy są oparte na języku JavaScript, istnieje duży powód, aby ponownie użyć JavaScript, aby utworzyć adapter, więc nie byłby on zależny na przykład od PHP, Java lub .NET. Ale czy to wszystko?


title: Czy korzystanie z dynamicznie przypisywanych numerów portów TCP ma wpływ na bezpieczeństwo?

text: Otrzymuję pushback z operacji nasłuchiwania procesu serwera na dynamicznie przypisanym numerze portu (tj. Wiąże gniazdo z numerem portu 0, wyzwalając dynamiczne przypisanie przez system operacyjny, który pobiera za pomocą getsocketname()). Argument był taki, że „stwarza wszelkiego rodzaju problemy związane z firewallem, routingiem, listą ACL i bezpieczeństwem”. Nic na ten temat nie natknąłem się. To jest CentOS, nasze aplikacje są wewnętrzne i ograniczone do zestawu maszyn w sieci LAN, która jest mocno zaporą ogniową ze świata zewnętrznego. Czy ktoś znający się na rzeczy może zaważyć na tym temacie? **UPDATE 1** : FTP również dynamicznie przypisuje numer portu, chociaż nie wiem, czy pochodzi z tego samego zakresu numerów, który widziałem gdzie indziej (32768-61000?). Jak sobie z tym radzą firewalle itp.?


title: Uruchom wyszukiwanie jQuery na zawartości adresu URL

text: Chciałbym utworzyć program/aplikację do iteracji wszystkich postów użytkownika Tumblr i skopiować zawartość każdego z nich. W istocie byłoby to jak Tumblripper, ale oprócz zdjęć pobierz tekst i adresy URL wideo. Wiem, jak usunąć zawartość, zdjęcia i adresy URL filmów z jednej strony Tumblr za pomocą jQuery, jeśli mam do niej dostęp, ale jak mogę uruchomić mój javascript z zawartością innej strony, która nie ma odniesienia do `<script>` plik js? Na przykład mam kod var contentArray = [] var $content = $('.content'); for(var i = 0; i < $content.length; i++) { // Kod do skopiowania zawartości i umieszczenia jej w tablicy } Ale nie mogę po prostu edytować kodu HTML strony Tumblr, aby dodać do niej odwołanie moja strona javascript. To, czego potrzebuję, to coś w rodzaju (teoretycznie) URUCHOM getTumblrsContent.js NA exampleblog.tumblr.com i poproś go, aby przeszedł przez HTML i znalazł każdy div z klasą "content". Jak mogę to osiągnąć? W jaki sposób Tumblripper i inne podobne aplikacje pobierają zawartość ze stron internetowych? Jestem otwarty na używanie innych języków i środków do osiągnięcia mojego celu


title: Czy przy podejmowaniu decyzji o kluczu podstawowym mogę użyć części Data w polu DateTime?

text: Projektuję system płacowy Zaprojektowałem bazę danych z kilkoma tabelami i to pytanie jest związane z następującymi tabelami `PRACOWNIK (Identyfikator_pracownika [pk], Imię i nazwisko,... itd.)` `LOKALIZACJA (Identyfikator_lokalizacji [pk], Imię i nazwisko, Adres , ...itd)` Te dwie tabele mają wiele do wielu relacji, ponieważ jeden pracownik może pracować w kilku lokalizacjach, aw jednej pracuje kilku pracowników. Te dwie tabele są powiązane poprzez tabelę „OBECNOŚĆ”. `OBECNOŚĆ (ID_Pracownika, ID_lokalizacji, Typ_zmiany, Wejście, Wyjście)` Typ zmiany to „Dzień” lub „Noc”, a pola „Przybycie” / „Wyjście” są polami „Data/godzina”. Rodzaj zmiany ustalany jest na podstawie daty w polu "W" . Na przykład, jeśli pole pracownika „W” to powiedzmy – „22.06.2014 19:30:00”, to typ zmiany to „Noc”, a zmiana to 22.06.2014. (jego „czas wyjścia” to „23.06.2014 07:30”; to jest następnego dnia) WARUNKIEM jest to, że Pracownik nie może pracować na tej samej zmianie w tym samym dniu dwa razy, nawet w dwóch lokalizacjach. Ale pracownik może pracować Dzień w jednej lokalizacji i Noc w innej lokalizacji. Moja początkowa tabela wyboru klucza podstawowego ATTENDANCE brzmiała „(Identyfikator pracownika + W)”, ale jest to błędne, ponieważ pracownik może pracować na tej samej zmianie tego samego dnia, jeśli czas „W” jest nieco inny w dwóch przypadkach. Teraz wiem, że kluczem podstawowym powinno być coś w rodzaju `(Identyfikator_pracownika + Shift_Type + Shift_Date)`. Ale problem polega na tym, że nie mam pola Data w tabeli OBECNOŚĆ. Ale mam pole `In`, które jest polem `DateTime`. Mając nadzieję, że moje rozumienie problemu jest poprawne... Moje pytanie brzmi, bez dodawania kolejnego pola do tabeli OBECNOŚCI jako `Shift_Date`, czy istnieje możliwość uzyskania części Date pola `In`, podczas tworzenia ` PRIMARY KEY` dla tej tabeli ?


title: Ciągła integracja z Bamboo i Maven, zarządzanie numerami wersji?

text: Obecnie pracuję nad produktem, który jest podzielony na kilka głównych części: serwer, klient Android, klient pulpitu i biblioteka klas zapewniająca wspólne struktury danych. Obecnie mój zespół używa Mavena (z prywatnym repozytorium Nexusa) i TeamCity do ciągłej integracji, ale mamy mnóstwo problemów z niepowodzeniem kompilacji z powodu problemów z numeracją wersji. Nasze obecne rozwiązanie polega na użyciu wtyczki Auto-Increment Versions dla Mavena, ale za każdym razem, gdy wprowadzamy jakiekolwiek zmiany w naszych plikach pom, musimy ręcznie zaktualizować wersję pliku pom, ponieważ wersja pom w Git jest już nieaktualna. Mój zespół i ja zdecydowaliśmy się przyjrzeć Atlassian Bamboo, a ponieważ wprowadzamy zmiany w naszym przepływie pracy, chcielibyśmy natychmiast rozwiązać te problemy. Oto czego szukamy: 1. Chcemy określić główny i pomocniczy numer kompilacji (na przykład 0.3) i wdrożyć powstały artefakt w naszym repozytorium jako major.minor.auto-incrementing-build-number (na przykład 0.3.2, 0.3.3, 0.4.0). 2. Chcemy, aby było to jak najbardziej automatyczne, ponieważ mamy kilku programistów i tylko jedna osoba popełni błąd, aby zakłócić pracę wszystkich. 3. Wolelibyśmy, aby ta funkcja była dostępna w Bamboo, jeśli to możliwe, ponieważ funkcja „klonowania projektu” Bamboo pozwoliłaby nam szybko powielić tę funkcjonalność w wielu aplikacjach, a także uchronić wszystkie nasze pliki pom przed mnóstwem dodatkowego kodu do zarządzania wersjami. Czy ktoś miał jakieś doświadczenie w robieniu czegoś takiego za pośrednictwem Bamboo, czy jest inne podejście, które powinienem rozważyć, aby to ułatwić?


title: Ajax - Odpowiadanie na błędy biznesowe

text: To może brzmieć jak kolejne z tych pytań z „najlepszym sposobem” lub „najlepszą praktyką”, ale nie mogłem znaleźć niczego powiązanego, co mogłoby dać mi trochę światła. Scenariusz... Mam kilka połączeń ajaxowych. Wszystko działa dobrze. Dzwonię, odbieram wyniki, zmieniam pola, wartości, kolory. Nic ciekawego tutaj. Ale wczoraj, wczoraj pisałem kolejną metodę ajax. Zasadniczo dwa pola daty do zwrócenia liczby dni bez dni świątecznych. Znowu nic ciekawego tutaj... aż do momentu, w którym mógłbym podać nieważne daty. Teraz moje pytanie ... w interakcji ajax, ilekroć mam scenariusz, w którym dane przekazywane przez wywołanie ajax są nieprawidłowe (zrozum, że są nieprawidłowe, formatowanie jest nieprawidłowe lub dane nie pasują do jakiejś działalności), ** powinny Odpowiadam na każde wywołanie ajax, które zawiera dane nieodpowiednie dla moich procesów po stronie serwera ze statusem http innym niż 200 lub tworzę model z błędami, komunikatami i wszystkim?** Znalazłem ludzi, którzy robią jak modele AjaxRespond i odpowiadają na to. Chodzi mi o to, że jeśli dane nie są dobre, mogę odpowiedzieć na status http 200 i zająć się modelem ajax, aby sprawdzić, czy są błędy, czy nie, ale mógłbym również odpowiedzieć na 500 i upewnić się, że jest błąd. Widzę tu dwie perspektywy. 1- wywołanie powiodło się ze strony javascript/ajax i dlatego 200 jest logicznym sposobem odpowiedzi. Ten brzmi jak „Mam dobre i złe wieści”. 2- połączenie powiodło się, ale dane zostały przerwane, a zatem zwrócono 500 (lub inny odpowiedni status). To jest bardziej logika biznesowa w try/catches.


title: C++ Web Development: Chcąc minimalistycznego startu

text: Obecnie pracuję na kierunku Informatyka i chcę zbudować własną bibliotekę Web Server. Problem? Każde wyszukiwanie, które przeprowadziłem podczas interakcji z witrynami internetowymi, wskazuje na „Użyj tej biblioteki, która została zbudowana przez kogoś innego” — zamiast wyjaśniać podstawy wysyłania i odbierania informacji. Nie proszę o wiele - chcę tylko wpisać na stronie internetowej pojedynczy znak alfanumeryczny, nacisnąć przycisk i wysłać ten jeden bajt informacji do programu w C++, bez pomocy niestandardowego biblioteka.


title: Efektywne przetwarzanie każdego liścia pod węzłem w drzewie

text: **Wersja skrócona:** W drzewie (niebinarnym) z wieloma poziomami potomstwa, gdzie każdy węzeł może mieć wiele liści, jaki jest najlepszy sposób na zliczanie liści spełniających określony warunek dla danego węzła? **Długa, zawiła wersja:** załóżmy, że masz foldery, które mogą zawierać więcej folderów. W produkcji mój system ma maksymalnie około 15 warstw folderów. Każdy folder może zawierać dokumenty. Gdy użytkownik przechodzi do folderu, musi wiedzieć, ile dokumentów znajduje się w tym folderze łącznie. Muszą również wiedzieć, ile z tych dokumentów zostało „oflagowanych”. Dokumenty mogą być oflagowane, jeśli po pewnym czasie nie zostały zaktualizowane. Jest to określane na podstawie wpisów historii — weź ostatni wpis historii dla folderu, jeśli jest większy niż X, oznacza to, że jest oflagowany. W tej chwili przechodzę przez wszystkie foldery> podfoldery> etc> dzieci, aby sprawdzić wpis historii i liczyć rekursywnie. Robi się to teraz dość wolno, więc potrzebuję nowego podejścia. Wymyśliłem dwie opcje, ale chcę wiedzieć, czy istnieje lepsze podejście lub która z nich jest najlepsza. **opcja 1** : Za każdym razem, gdy dodajesz lub usuwasz dokument, wykonaj iterację wykresu nadrzędnego i inkrementuj/zmniejszaj właściwość „DocumentCount”, która jest przechowywana w encji Folder. Oznacza to, że dodawanie/usuwanie ma minimalny wpływ na wydajność. Ale problem polega na tym, że faktycznie muszę policzyć całkowitą liczbę dokumentów, a także całkowitą liczbę dokumentów, które są oflagowane (poprzez sprawdzenie wpisów historii), więc oznacza to, że będę potrzebować innego pola i innego procesu do wywołania, gdy to nastąpi zmiany statusu. Wprowadza to jeszcze większą złożoność, ponieważ sprawdzanie, czy coś jest oflagowane, jest wywołaniem metody, a nie właściwością. **Opcja 2:** Wykonanie zadania czasowego i zaktualizowanie właściwości "documentCount" i "unopenedDocumentCount" każdego folderu w systemie wymagałoby wielu cykli procesora i wydaje się marnotrawstwem. **opcja 3** : Właśnie o tym pomyślałem - być może iterowanie po każdym dokumencie i sprawdzanie, czy dokument jest bezpośrednim lub odległym dzieckiem węzła docelowego przed oceną, byłoby lepsze niż iterowanie przez rekurencję. Wydaje mi się, że byłoby to lepsze dla węzłów znajdujących się wysoko w drzewie, ale iterowanie po każdym dziecku dla węzła niskiego poziomu byłoby śmieszne. Hmmm... Kusi mnie, aby zaimplementować opcję 1.. jakie są inne opcje?


title: Obsługa par kluczy publiczno-prywatnych w ekosystemie Windows

text: Zastanawiałem się, jak zaprojektować infrastrukturę dla jednej z naszych aplikacji biznesowych z następującym wymaganiem: * **Dane napisane przez jakiegoś użytkownika mogą być odczytywane tylko przez tego użytkownika i jego przełożonego oraz trzecią osobę do zdefiniowania** Myślę o użyciu jakiegoś algorytmu asymetrycznego, takiego jak RSA do szyfrowania danych. Możemy wygenerować parę kluczy publiczny-prywatny dla każdego użytkownika i przechowywać klucz publiczny każdego z nich otwarcie w bazie danych, ale jak powinniśmy obsługiwać klucz prywatny? Jeśli pewnego dnia pozwolimy użytkownikom zarządzać swoim kluczem prywatnym, będziemy mieli wielki ból głowy, jeśli któryś z nich zgubi swój klucz. Jeśli klucz prywatny stanie się w jakiś sposób publiczny, dane również staną się publiczne, co spowoduje, że architektura będzie nieważna. Nasza infrastruktura jest mocno zorientowana na Microsoft: wszystkie aplikacje to ASP.Net MVC3, naszą bazą danych jest SQL Server 2005, a do uwierzytelniania użytkowników i podstawowych danych, takich jak e-mail/numer telefonu, używamy Active Directory. Jak zaprojektowalibyście rozwiązanie tego problemu? Podsumowując: To nie jest aplikacja bankowa ani finansowa, to rodzaj osobistego systemu informacji zwrotnej 360 stopni. EDYCJA: Dodanie większej liczby wymagań, mając nadzieję, że będzie to bardziej jasne: * Ta baza danych będzie w środowisku produkcyjnym, do którego programiści nie mają dostępu; * Po przywróceniu bazy danych programiści nie powinni mieć możliwości odzyskania danych; * Administrator nie powinien mieć możliwości przeglądania danych poprzez WYBIERANIE wierszy w tabelach; EDYCJA 2: Informacje o zleceniu. Bounty przeszedł do odpowiedzi z większą liczbą głosów przewagi, chociaż osobiście uważam, że żadna z udzielonych odpowiedzi nie odnosiła się do pytania poprawnie. Z tego powodu przyznaję nagrodę, ale nie zaznaczam odpowiedzi jako poprawnej.


title: Jaką pomoc powinienem udzielić podczas rozmów technicznych?

text: Jestem proszony o występ lub udział w wielu wywiadach technicznych. Zadajemy pytania logiczne i proste problemy programistyczne, które rozmówca powinien umieć rozwiązać na papierze. (Wolałbym, żeby mieli dostęp do klawiatury, ale to jest problem na inny czas.) Czasami wyczuwam, że ludzie wiedzą, jak podejść do problemu, ale są zawieszeni przez nerwowość lub odgadnięcie pytania ( nie są to pytania podchwytliwe). Nigdy nie słyszałem, żeby mój szef udzielał jakiejkolwiek pomocy lub wskazówek. Po prostu dziękuje rozmówcy za odpowiedź (niezależnie od tego, czy jest dobra, czy zła) i przechodzi do następnego pytania lub problemu. Ale wiem coś na temat króliczej nory, co porażka i nerwy mogą cię sprowadzić na dół, i jak to osłabia twój umysł, i nie mogę przestać się zastanawiać, czy udzielanie od czasu do czasu niewielkiej pomocy ostatecznie pomogłoby nam skończyć z bardziej zdolnymi programistami więcej nieudanych rozmów kwalifikacyjnych. Czy powinienem udzielać wskazówek i pomocy zdezorientowanym rozmówcom (a jeśli tak, to jak daleko powinienem się posunąć, wciąż będąc uczciwym wobec bardziej przygotowanych kandydatów)?


title: Łączenie aplikacji jednostronicowej i DDD z REST API

text: Tworzę aplikację internetową, która po stronie klienta składa się z aplikacji pojedynczej strony (z Durandal), a po stronie serwera witryny ASP.NET MVC z projektem opartym na domenie. Oba są połączone za pomocą REST Api (Web API). Mam relację między dwoma podmiotami, która na poziomie bazy danych jest wiele-do-wielu. (Hotele <=> Typy pokoi). Ponieważ w DDD najlepszą praktyką nie jest tworzenie relacji wiele-do-wielu, zbudowałem go tak, aby można było nawigować po nim tylko od typu pokoju do hotelu (ponieważ hotel może istnieć bez typów pokoi, ale typ pokoju powinien zawsze być powiązany z typem pokoju hotel). Sama relacja również ma atrybuty (na przykład dostępność). Moim obecnym problemem jest jednak powiązanie hotelu z rodzajem pokoju. Zgodnie z praktykami DDD dodałbym metodę `AddHotel` do klasy RoomType. Problem polega na tym, że w SPA można edytować wszystkie atrybuty typu pokoju (zdjęcia, opis, ...) i powiązane hotele w jednym widoku. Po edycji tych atrybutów aktualizacja jest przesyłana za pośrednictwem interfejsu API reszty. Oznacza to, że wszystko zostaje przesłane w jednym wywołaniu do serwera. Jak ustrukturyzować serwer i interfejs API oparty na reszcie, aby: * domena pozostała na miejscu i istniała poprawna walidacja wewnątrz klasy RoomType * można było publikować aktualizacje atomowe z aplikacji jednostronicowej przez resztę * nie ma duplikacji kodu w serwer i aplikacja jednostronicowa


Uważam, że komentowanie w kodzie jest bardzo ważne, ale ostatnio przeglądałem kod, który sprawił, że zacząłem się zastanawiać nad tym. //z powodu braku pewności w programowaniu internetowym, zostawiając tę notatkę na razie Jaki jest właściwy poziom szczegółowości komentowania kodu? EDYCJA: Oczywiście powyższy komentarz jest szokujący, dlatego zadaję pytanie. Ostatnio zauważyłem, że komentarze w tekście w kodzie w moim miejscu pracy są irytujące. Zamiast się denerwować, chcę odkryć akceptowalny poziom szczegółowości dla komentowania kodu w społeczności.


title: Jaką złożoność dodają frameworki DI?

text: Obecnie najbardziej przychylna odpowiedź na bardzo niedawne pytanie stwierdza, że > kontenery DI są wzorcem „oprogramowania dla przedsiębiorstw”, używanym, gdy obiekt > wykres jest bardzo duży i złożony. Podejrzewam, że 95% aplikacji nie > tego wymaga. z czym zdecydowanie się nie zgadzam. Może pomyliłem się z terminologią, ale dla mnie framework DI oznacza po prostu "coś, co łączy moje obiekty razem". Czy czegoś mi brakuje? Używam Guice nawet do naprawdę małych projektów (jak 10 klas), aby je uprościć. Jasne, to plik JAR 400 KB, ale nie o to bym się troszczył. W przypadku małego projektu prawie nigdy nie potrzebuję żadnej konfiguracji, a jedynym "narzutem" jest dodanie adnotacji `@Inject`. Tak więc naprawdę zastanawiam się, jaką dodatkową złożoność powodują frameworki DI? ### Aktualizacja adresująca odpowiedzi W projekcie klasy 82 mam * 32 adnotacje `@Inject` * 15 `@Singleton` i 1 `@ProvidedBy` * 4 dostawców (z których wszystkich potrzebuję również bez DI jako to są moje fabryki) * 1 Moduł zawierający jedną linię * 0 linii XML !!! To wszystko. Jasne, to mały projekt, ale dokładnie o to mi chodziło. Dodatkową pracą było kilka „słów” zamiast „linii”. Używam wyłącznie iniekcji konstruktora, aby uzyskać niezmienne "łatwe" obiekty. Za każdym razem, gdy pojawia się nowa zależność, dodaję ostatnie pole, pozwól, aby RequiredArgsConstructor Lomboka zajął się deklaracją, a Guice zadbał o prawidłowe wywołanie.


title: Struktura interfejsu API REST

text: Mam interfejs API REST, który wygląda podobnie do poniższego, w którym osoba może należeć do organizacji (ale nie musi), a osoba ma wiele elementów. Przedmioty mogą również należeć do organizacji zamiast do osoby. /people/:personId /people/:personId/items /organisations/:orgId/items /organisations/:orgId/people/:personId/items poprawna struktura adresu URL do użycia? ### Opcja 1 /organisations/:orgId/people/items?personId=1&personId=2 ### Opcja 2 /organisations/:orgId/items?personId=1&personId=2 ### Opcja 3 /items?personId=1&personId= 2


title: Dlaczego i z jakich powodów programiści mogą nie lubić „codziennego scrum”?

text: Codzienny scrum ma swoje zalety, takie jak: 1. Zespół jest skoordynowany ze sobą 2. Każdy wie, jaka ilość zadania została wykonana 3. Wykres spalania staje się coraz bardziej kompletny 4. Tablica zadań jest aktualizowana 5. Nie tyle trwa, 15 minut nikogo nie zabije Jednak ostatnio (po 6 miesiącach wdrażania i używania scrum) mam wrażenie, że nasi programiści nie lubią już tak bardzo codziennego scrum. Ludzie po prostu aktualizują tablicę zadań, nie wyjaśniając wystarczająco dużo i wydaje się, że są nią znudzeni. Widzę, że kiedy z jakiegoś powodu tego nie trzymamy, stają się bardzo szczęśliwi. Po prostu nie wiem, co może być w tym nie tak. Czy są gdzieś wymienione powody, dla których „codzienny scrum” może mieć dla zespołu wady? Jakie mogą być powody, dla których programiści są zmęczeni codziennym scrumem?


title: Zarządzanie kontrolą wersji dużych projektów

text: Jestem przyzwyczajony do kontroli wersji, w szczególności aktualnie używam Mercurial. Mam pewne wątpliwości, jak sprawić, by działała w dużych zespołach, gdzie istnieje duże prawdopodobieństwo, że nad tym samym plikiem będzie pracowało więcej osób. Podam przykład z Mercurialem (ale każdy zdecentralizowany system będzie mniej więcej taki sam). Załóżmy, że mamy serwer centralny i trzech programistów Alice, Bob i Carl. Cała trójka postanawia rozpocząć pracę w tym samym momencie i wszyscy ściągają z serwera. Przypadkowo zdarza się, że pracują na tym samym pliku. Alice kończy jako pierwsza i przekazuje swoje zmiany na serwer. Wtedy zarówno Bob, jak i Carl kończą, mniej więcej w tym samym czasie. Przed naciskaniem sprawdzają, czy pojawiło się coś nowego i znajdują zatwierdzenie Alice. Więc ciągną to, a każdy łączy zmiany lokalnie. Następnie Bob wciska to, a Carl wprowadza zmiany. To, co się tutaj dzieje, to to, że na serwerze są dwie głowy: jedna autorstwa Boba i jedna autorstwa Carla, i obie zawierają scalenia z pracą Alice. Kto teraz wyciągnie z serwera, znajdzie trochę bałaganu. Oczywiście można po prostu połączyć głowy Boba i Carla, ale to może nie być takie proste. Bob i Carl mogli mieć różne pomysły na połączenie się z pracą Alice. Gdy tylko więcej osób zacznie pracować nad projektem, sprawy mogą pójść jeszcze gorzej. Tak więc, chociaż teoretycznie rozumiem, jak ma działać scalanie, nie jest dla mnie jasne, jak sprawić, by wszystko było możliwe do zarządzania w dużym projekcie. > Jak ludziom udaje się rozwiązywać konflikty, gdy nad tym samym plikiem pracuje > wiele osób, prawdopodobnie po różnych scaleniach w różnej kolejności?


title: Opcje inne niż C dla projektów osadzonych? Nienawidzę preprocesora

text: C jest niesamowitym prostym językiem, idealnym do programowania bliskiego sprzętowi, ale preprocesor jest do bani w porównaniu ze współczesnymi językami. Czy istnieje alternatywa/dodatek do preprocesora c, który dodaje nowoczesne funkcje do wstępnego przetwarzania C (np. import vs include)? W szczególności szukam przestrzeni nazw (lub czegoś podobnego), czytelnego języka makr i mocniejszego języka makr (z refleksją). Czy też muszę przyjrzeć się realnym alternatywom dla C do wykonywania programowania wbudowanego (moje własne projekty, a nie praca kontraktowa, w której biorę lub przekazuję projekt) Jestem świadomy D, ale tak naprawdę nie zastanawiałem się nad używaniem go do wbudowanych . *edytuj Nie wierzę, że nikt mi na to nie wskazał! eLua


title: Wiele do wielu w OOP: Klasa A tworzy instancję klasy B, która jest instancją klasy A, która

text: Mapuję Field1 na Field2. Obiekt mapy tworzy instancję obiektu pola i odwrotnie, tworząc nieskończoną pętlę. To jest w PHP. pole klasy { chronione $maps; // obiekt mapCollection. wszystkie mapowania tego pola na inne } class map { protected $field1; // pole obiektu chronione $field2; // pole obiekt } class mapCollection { protected $maps; // tablica obiektów map } Mapowania i zestawy pól są przechowywane w bazie danych, gdzie każde z nich ma unikalny identyfikator. Postanowiłem więc zezwolić na pobieranie ich za pomocą ich identyfikatorów w konstruktorach. pole klasy { chronione $maps; // mapuj obiekt public __construct($id = 0 ) { if(!empty($id) ) { $this->maps = // pobierz mapsCollection. dane z bazy danych } } } mapa klas { protected $field1; // pole obiektu chronione $field2; // obiekt pola public __construct($id = 0 ) { if(!empty($id) ) { $this->field1 = // pobierz dane pola1 z bazy danych $this->field2 = // pobierz dane pola2 z bazy danych } } } class mapCollection { protected $maps; // tablica obiektów map public __construct($field_id) { // pobierz mapy z bazy danych według identyfikatora pola foreach($dbdata as $map_id) { $this->maps[] = new map($map_id); // tworzy instancję nowej mapy, która tworzy instancję nowego pola itd. } } } Jak mam to zrobić?


title: Kiedy jeden z czterech wątków wykonuje pierwszą linię w run(), to w tym samym czasie co zrobią pozostałe trzy wątki?

text: Mam cztery instancje wątków i wykonują one kod `run()` podany poniżej: public void run(){ System.out.println("1st line :"+Thread.CurrentThread().getName()); System.out.println("Druga linia :"+Wątek.BieżącyWątek().getName()); System.out.println("3 linia :"+Wątek.BieżącyWątek().getName()); System.out.println("4 linia :"+Wątek.BieżącyWątek().getName()); System.out.println("5 linia :"+Wątek.BieżącyWątek().getName()); System.out.println("6. wiersz :"+Wątek.BieżącyWątek().getName()); } Kiedy jeden z czterech wątków wykonuje pierwszą linię, to w tym samym czasie co zrobią pozostałe trzy wątki? Albo czekają na wykonanie pierwszej linii, czy będą kontynuować inne linie kodu?


title: Korzystanie z 2 konstruktorów: jednego, który wstrzykuje zależności i drugiego, który je tworzy

text: Zacząłem używać TDD po raz pierwszy w projekcie, który rozpocząłem niedawno. Mam kilka obiektów z zależnościami i strukturami, które wyglądają mniej więcej tak: public class MyClass { private readonly IDependency1 _dependency1; prywatne tylko do odczytu IDependency2 _dependency2; public MojaKlasa(IDependency1 d1, IDependency2 d2) { _dependency1 = d1; _zależność2 = d2; } public MojaKlasa() { _dependency1 = new Dependency1(); _dependency2 = nowa zależność2(); } } Do testów używam obiektów Mock dla zależności, ale w implementacji czasami pozwalam konstruktorowi na dodanie konkretnego obiektu. Wydaje mi się, że oszukuję, robiąc to, ale nie jestem pewien, dlaczego w praktyce jest to złe. Czy jest to uważane za złą praktykę? Jeśli tak, dlaczego?


title: Dlaczego musimy zadeklarować publiczne API podczas korzystania z wersji semantycznej?

text: z semver.org: > **Oprogramowanie używające wersjonowania semantycznego MUSI deklarować publiczne API**. To API > może być zadeklarowane w samym kodzie lub istnieć wyłącznie w dokumentacji. > Jakkolwiek to się robi, powinno być precyzyjne i wyczerpujące. Dlaczego jesteśmy zmuszeni zadeklarować publiczne API? Dlaczego nie mogę go użyć na własnej stronie internetowej, która nie ma interfejsu API? Być może mylę się z definicją. Dla mnie jest to część witryny przeznaczona dla innych programistów (np.: `api.example.com`), która umożliwia im zapytanie o moją stronę i otrzymanie wyniku w postaci danych strukturalnych (json, xml...).


title: Obrazy przesłane przez użytkowników: ograniczyć rozmiar pliku na interfejsie czy zmniejszyć na zapleczu?

text: Zastanawiałem się, jaka jest standardowa/najlepsza praktyka w zakresie zarządzania obrazami przesłanymi przez użytkowników. Oczywiście musi istnieć sposób na ograniczenie rozmiarów plików, ale jaka jest tutaj najlepsza i najczęstsza praktyka – ograniczyć rozmiar obrazu, który może przesłać użytkownik, czy zmniejszyć rozmiar po przesłaniu go na zaplecze? Dzięki za wszelkie wskazówki! Rozpoznać


title: Gdzie obiekt w CQRS+ES powinien być w pełni zainicjalizowany: w konstruktorze, czy przy zastosowaniu pierwszego zdarzenia?

text: Wydaje się, że w społeczności OOP panuje powszechna zgoda, że konstruktor klasy nie powinien pozostawiać obiektu częściowo lub nawet całkowicie niezainicjowanego. > **Co mam na myśli przez „inicjalizację”?** Z grubsza mówiąc, proces _atomowy_ >, który wprowadza nowo utworzony obiekt w stan, w którym zachowują > wszystkie jego niezmienniki klasy. Powinna to być pierwsza rzecz, która przytrafia się > obiektowi (powinna być uruchamiana tylko raz na obiekt) i nic nie powinno być > dozwolone, aby uzyskać dostęp do niezainicjowanego obiektu. (Stąd częste rady, aby wykonać > inicjalizację obiektu bezpośrednio w konstruktorze klasy. Z tego samego powodu, metody `Initialize` są często niemile widziane, ponieważ łamią one > atomowość i umożliwiają zdobycie i użycie, obiekt > który nie jest jeszcze w dobrze zdefiniowanym stanie.) **Problem:** Gdy CQRS jest połączony ze źródłem zdarzeń (CQRS+ES), gdzie wszystkie zmiany stanu obiektu są przechwytywane w uporządkowanej serii zdarzeń ( strumienia zdarzeń), zastanawiam się, kiedy obiekt faktycznie osiąga stan w pełni zainicjowany: na końcu konstruktora klasy, czy po zastosowaniu pierwszego zdarzenia do obiektu? > **Uwaga:** nie używam terminu „zagregowany korzeń”. Jeśli wolisz, zastąp go za każdym razem, gdy czytasz „obiekt”. **Przykład do dyskusji:** Załóżmy, że każdy obiekt jest jednoznacznie identyfikowany przez jakąś nieprzezroczystą wartość „Id” (pomyśl o identyfikatorze GUID). Strumień zdarzeń reprezentujący zmiany stanu tego obiektu można zidentyfikować w magazynie zdarzeń za pomocą tej samej wartości `Id`: (Nie martw się o poprawną kolejność zdarzeń.) interface IEventStore { IEnumerable<IEvent> GetEventsOfObject(Id objectId); } Załóżmy dalej, że istnieją dwa typy obiektów `Klient` i `Koszyk na zakupy`. Skupmy się na „Koszyku na zakupy”: po utworzeniu koszyki są puste i muszą być powiązane z dokładnie jednym klientem. Ten ostatni bit jest niezmiennikiem klasy: obiekt `ShoppingCart`, który nie jest powiązany z `Customer`, jest w nieprawidłowym stanie. W tradycyjnym OOP można to zamodelować w konstruktorze: Partial class ShoppingCart { public Id Id { get; zestaw prywatny; } public Klient Klient { get; zestaw prywatny; } publiczny koszyk (identyfikator, klient klienta) { this.Id = id; this.Klient = klient; } } Nie wiem jednak, jak modelować to w CQRS+ES bez konieczności odroczenia inicjalizacji. Skoro ta prosta inicjalizacja jest w rzeczywistości zmianą stanu, czy nie musiałaby być modelowana jako zdarzenie?: parts class CreatedEmptyShoppingCart { public ShoppingCartId { get; zestaw prywatny; } publiczny identyfikator klienta { get; zestaw prywatny; } } // Uwaga: `ShoppingCartId` nie jest właściwie wymagany, ponieważ ten identyfikator musi być // znany z góry, aby można było pobrać strumień zdarzeń z magazynu zdarzeń. Musiałoby to oczywiście być pierwszym zdarzeniem w strumieniu zdarzeń dowolnego obiektu `ShoppingCart`, a obiekt ten zostałby zainicjowany dopiero po zastosowaniu do niego zdarzenia. Jeśli więc inicjalizacja stanie się częścią „odtwarzania” strumienia zdarzeń (co jest bardzo ogólnym procesem, który prawdopodobnie działałby tak samo, niezależnie od tego, czy dla obiektu `Klient` czy obiektu `ShoppingCart` lub dowolnego innego typu obiektu)… * Czy konstruktor powinien być bez parametrów i nic nie robić, pozostawiając całą pracę jakiejś metodzie `void Apply(CreatedEmptyShoppingCart)` (która jest bardzo podobna do metody `Initialize()`)? * A może konstruktor powinien otrzymać strumień zdarzeń i odtworzyć go (co sprawia, że inicjalizacja jest ponownie niepodzielna, ale oznacza, że konstruktor każdej klasy zawiera tę samą ogólną logikę „odtwórz i zastosuj”, tj. niechciane powielanie kodu)? * A może powinien istnieć zarówno tradycyjny konstruktor OOP (jak pokazano powyżej), który prawidłowo inicjuje obiekt, a _następnie_ wszystkie zdarzenia poza pierwszymi są do niego `nieważne Apply(…)`? Nie oczekuję od odpowiedzi dostarczenia w pełni działającej implementacji demo; Byłbym bardzo szczęśliwy, gdyby ktoś mógł wyjaśnić, gdzie moje rozumowanie jest błędne, lub czy inicjalizacja obiektu naprawdę _jest_ "bolesnym punktem" w większości implementacji CQRS+ES.


title: Czy jakiekolwiek języki programowania obiektowego obsługują „konstruktory zbiorowe”?

text: Ostatnio zastanawiałem się, że czasami kilka obiektów jest od siebie zależnych (np. jeśli zawierają cykliczne odniesienia) i dlatego przydatne byłoby ich tworzenie w ramach jednej atomowej operacji, która zapewnia, że po zbudowaniu nowe obiekty spełniają pewne kolektywne ograniczenie . W tym celu można by mieć konstruktory, które mogą stworzyć więcej niż jeden obiekt. Programista umieściłby wtedy cały kod w jednym konstruktorze, upewniając się, że po utworzeniu obiektów o1, ..., on spełniają wszystkie wymagane ograniczenia (np. wszystkie połączenia między nowymi obiektami są już na miejscu). Sam wymyśliłem termin **konstruktory zbiorowe**, ponieważ nigdy nie słyszałem o takiej funkcji, ale równie dobrze może istnieć przyjęta nazwa dla tego pojęcia. Czy jest więc jakiś język programowania obsługujący tego rodzaju konstruktory? Jeśli nie, czy pomysł został już wypróbowany?


title: Narzędzia i/lub metody regularnego przeglądu kodu zespołu ds. rozwoju zdalnego

text: Zlecamy rozwój niewielkiemu zespołowi programistów offshore. Nasz wewnętrzny proces weryfikacji kodu jest ręczny, papierowy, oparty na modelu kaskadowym, wymagającym dostarczenia „wielkiego wybuchu”. Nie można go zmienić. Wcześniejsze doświadczenia pokazują, że ci programiści są biegli i wiarygodni, jednak nadejdzie czas, aby dostarczyć, ogólne koszty recenzji stają się trudnym obciążeniem dla wszystkich zaangażowanych, a problemy są wykrywane zbyt późno. Używamy CVS do naszego repozytorium źródłowego. Biorą kopię repozytorium CVS, otrzymując regularne aktualizacje najnowszej bazy kodu i używają GIT lokalnie do zarządzania swoimi zmianami. Gdy będziesz gotowy do dostarczenia, wyślij nam archiwum tarball z aktualnym klonem CVS z włączoną ich pracą. Następnie dokonujemy przeglądu kodu i ewidencjonujemy go. Szukamy łańcucha narzędzi do obsługi procesu przeglądu kodu, w którym możemy przeprowadzać regularne, lekkie przeglądy poza naszym wewnętrznym procesem, tak abyśmy mogli to zrobić po uruchomieniu procesu wewnętrznego ” przejdź szybko”, ponieważ przejrzeliśmy już większość kodu. Ograniczenia polegają na tym, że tamte systemy i nasze są odłączone. Używamy sneaker net do przesyłania plików między nami. Najlepsze, co możemy zrobić, to mieć w domu jedną maszynę, która VPN jest w ich systemie. Źródłem jest kod komercyjny i nie można go umieszczać w miejscu, w którym jest wystawiony na Internet. Jedną z opcji, którą zasugerowali, jest Gerrit – którą planują wykorzystać na swojej stronie. Czy istnieje sposób na udostępnianie i synchronizowanie bazy danych gerrit między witrynami, biorąc pod uwagę ograniczenia sieci sneakersów? Czy ktoś jeszcze ma rozwiązanie tego rodzaju problemu?


title: Nazywanie komponentów UI w edytorze internetowym

text: Zajmuję się tworzeniem internetowego edytora kodu źródłowego. Opracowuję wszystko (zakładki, menu kontekstowe itp.) z elementów HTML. Jak wymyślić nazwy kontrolek interfejsu użytkownika? Czy jest jakaś książka, przewodnik lub projekt, z którego mogę się nauczyć, jak nazywać rzeczy?


title: Jak wybrać metodę rozwoju?

text: Istnieje wiele badań akademickich/przemysłowych dotyczących różnych metod rozwoju (Scrum, XP, wodospad itp.), które mówią nam, jak zrobić to dobrze i takie tam. Ale nigdy nie widziałem czegoś, co podpowiadałoby, jak wybrać metodę, która będzie lepsza dla danego projektu. Wiem, że bardzo ważnym aspektem jest to, do czego przyzwyczajeni są programiści. Ale powiedzmy, że kompletuję nową grupę od podstaw i że każdy programista na świecie jest chętny do współpracy ze mną. :) Jakie aspekty projektu powinienem wziąć pod uwagę, decydując się na Scrum, XP, TDD, ect.? A może jest to sprawa całkowicie ludzka, niezależnie od tego, co się rozwija? * Powiedziałem, że wszyscy programiści są dostępni, ale możesz skomentować, że mają wiedzę o domenie lub inne cechy w odpowiedziach. Np. „Jeśli zdecydujesz się zatrudnić osoby bez znajomości domeny, `MethodX` jest lepszy niż `MathodY`, ponieważ…” jest całkowicie pożądaną odpowiedzią.


title: Jak przydatny jest wiersz poleceń?

text: Jako początkujący programista chciałem wiedzieć, czy jest jakiś użytek lub dobry w nauce pisania poleceń w wierszu poleceń? Jeśli tak, jak użyteczny jest interfejs wiersza poleceń i gdzie jest używany? PS Również zasugeruj mi dobre zasoby, aby się tego nauczyć, jeśli to możliwe.


title: Problemy ze zrozumieniem modelu COCOMO

text: W podstawowym Modelu COCOMO służącym do oszacowania czasu rozwoju oprogramowania Wysiłek : a * KLOC^b = X osobo-miesięcy Czas rozwoju : c * Wysiłek^d = Y miesięcy gdzie a , b , c , d są stałymi wyprowadzonymi z tabela poniżej w zależności od typu twojego projektu oprogramowania ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/jr2lO.png) > Pytanie 1 Zakładając X = 10 , wysiłek będzie równy 10 osobo-miesięcy . Czy 10 osobo-miesięcy oznacza, że nakład pracy wymagany do ukończenia tego projektu wyniesie 1 miesiąc, jeśli pracuje nad nim 10 osób **LUB** Czy 10 osobo-miesięczny czas oznacza, że nakład pracy wymagany do ukończenia projektu wyniesie 10 miesięcy, jeśli mamy Pracuje nad tym 10 osób. > Pytanie 2 Czy stałe mają jakieś jednostki SI, takie jak jednostka wysiłku SI to osobo-miesiące Jestem zdezorientowany terminologią


title: Certyfikacja architektury korporacyjnej

text: Chcę przejść od programisty do architekta korporacyjnego. Posiadam 13-letnie doświadczenie w różnych środowiskach, od aplikacji biznesowych linii SME po systemy bankowości inwestycyjnej dla przedsiębiorstw. Posiadam certyfikaty w wielu technologiach, w tym Java/.NET/SQL. Na czym powinienem się skupić w ciągu najbliższych 12 miesięcy, co przyniesie pewną wagę potencjalnym pracodawcom i nada wiarygodności mojej aplikacji na stanowisko w architekturze korporacyjnej, bez doświadczenia? Obecnie przyglądam się TOGAF 9.1. Czy istnieją inne konkurencyjne lub uzupełniające metodologie, które powinienem zbadać?


title: Różnica między zaokrąglaniem USP i IEEE

text: Próbuję zrozumieć różnicę między różnymi metodami zaokrąglania: Nasza aplikacja oferuje dwa różne rodzaje zaokrąglania: * IEEE * USP (GMP) zaokrąglanie. http://www.usp.org/sites/default/files/usp_pdf/EN/USPNF/USP34-NF29General%20Notices.pdf W naszych testach jednostkowych wydają się robić to samo dla testowanych przypadków. Jednak nie znalazłem w biurze nikogo, kto mógłby wyjaśnić, co oznacza wybór trybu zaokrąglania IEEE


title: Dlaczego maszyny wirtualne muszą być „maszynami stosowymi” lub „maszynami rejestrującymi” itp.?

text: (Jest to pytanie bardzo początkujące). Studiowałem trochę o maszynach wirtualnych. Okazuje się, że wiele z nich jest zaprojektowanych bardzo podobnie do komputerów fizycznych lub teoretycznych. Czytałem, że na przykład JVM jest „maszyną stosu”. Oznacza to (i popraw mnie, jeśli się mylę), że przechowuje całą swoją „pamięć tymczasową” na stosie i wykonuje operacje na tym stosie dla wszystkich jego opkodów. Na przykład kod źródłowy `2 + 3` zostanie przetłumaczony na kod bajtowy podobnie do: push 2 push 3 add Moje pytanie brzmi: JVM są prawdopodobnie napisane przy użyciu C/C++ i tym podobnych. Jeśli tak, dlaczego JVM nie wykonuje następującego kodu w C: `2 + 3`..? Chodzi mi o to, dlaczego potrzebuje stosu, lub w „rejestrach” innych maszyn wirtualnych - jak w fizycznym komputerze? Podstawowy fizyczny procesor zajmuje się tym wszystkim. Dlaczego twórcy maszyn wirtualnych nie wykonują po prostu interpretowanego kodu bajtowego za pomocą „zwykłych” instrukcji w języku, w którym zaprogramowano maszynę wirtualną? Dlaczego maszyny wirtualne muszą emulować sprzęt, skoro rzeczywisty sprzęt już to za nas robi? Znowu bardzo początkujące pytania. Dzięki za pomoc


title: szybkie prototypowanie w projektowaniu i rozwoju projektu

text: Obecnie pracuję nad projektem w wolnym czasie (głównie 3-4 godziny od poniedziałku do piątku i do 6 godzin w niedziele) i uważam, że redmine jest bardzo przydatny do prowadzenia rejestru zadań programistycznych. Jednak są pewne rzeczy, zwłaszcza gdy próbujesz prototypować lub burzyć mózgi nad przeprojektowaniem zestawu powiązanych klas, że najlepszym narzędziem, jakie znalazłem do tego celu, nadal jest **kartka papieru i długopis**. Chcę zrozumieć, czy może po prostu brakuje mi możliwości poprawnej pracy z istniejącymi narzędziami. Czy uważasz, że korzystanie z notatnika lub dziennika jest nieuniknioną częścią projektowania oprogramowania? czy są lepsze alternatywy? jak organizujesz pracę z długopisem i innymi narzędziami do zarządzania oprogramowaniem, takimi jak redmine?


title: Jaki jest najlepszy sposób na podział pracy między programistów

text: Mój zespół i ja przebudowujemy witrynę, którą opracowaliśmy około dziesięć lat temu i chcemy to zrobić w Agile. Więc po tym, jak spędziłem dużo czasu na czytaniu (prawdopodobnie za mało) mam problem z pytaniem, jak podzielić pracę między programistów. Będę bardziej szczegółowy i powiem, że strona jest podzielona na osobne moduły, które nie są ze sobą zbytnio zintegrowane. Jaki jest najlepszy/najbardziej akceptowany sposób podziału pracy pomiędzy programistów? * Dając każdej osobie inny moduł do pracy. * Przypisz wszystkich programistów do tego samego modułu i podziel pracę na różne części modułu (UnitTesting, DAL i Mapping, Logika, UI) * Przypisz wszystkich programistów do tego samego modułu i podziel pracę według różnych logik (Na przykład każdy programista jest odpowiedzialny za konkretną logikę (prawdopodobnie metodę w BL) i to UnitTesting, DAL i Mapping oraz UI... A może coś zupełnie innego?


title: Czy są jeszcze jakieś firmy/ośrodki akademickie, które używają mainframe'ów z lat 60-70?

text: Jako młody inżynier oprogramowania często słyszę, jak inni koledzy opowiadają o czasach kart perforowanych i „komputerów wielkości pokoju”. Najwcześniejsze wspomnienia komputerów, które mam, dotyczą MS DOS i Windows 3.1. Moje pytanie brzmi, czy nadal istnieją firmy, ośrodki akademickie lub agencje rządowe, które nadal używają komputerów mainframe z lat 60.-70. w swojej codziennej działalności? Jeśli tak, czy możesz pomyśleć o miejscu, które pozwoliłoby odwiedzającym obserwować taką maszynę przy pracy? Wiem, że istnieje kilka muzeów, które posiadają takie eksponaty, ale nie wyobrażam sobie działającego.


title: Jak naprawić złe podstawy?

text: Jestem rodzimym programistą PHP od około roku. Kocham PHP i bardzo łatwo się go nauczyłem, ale po drodze nabrałem złych nawyków, ponieważ nigdy nie miałem formalnego wykształcenia w zakresie programowania. Wykonanie pracy w PHP jest całkiem łatwe bez pisania najlepszego kodu. Chcę więcej pracować z innym językiem; nie dlatego, że nie lubię PHP, ale dlatego, że chcę mieć czystą kartę, aby nauczyć się podstaw programowania. Chcę pozostać przy tworzeniu stron internetowych, więc wydaje się, że Ruby lub Python są tam, gdzie się skłaniam, chociaż jestem otwarty na inne sugestie. Ważniejszym pytaniem jest, jak mam podejść do nauki tego nowego języka, aby naprawdę stać się dobrym programistą, a nie facetem, który może „wykonać zadanie”?


title: Jak umożliwić klientom uruchamianie dowolnego kodu tak bezpiecznie, jak to możliwe?

text: Chciałbym zaoferować usługę, w której klienci mogą napisać dowolny kod java, wysłać go do mnie, a ja uruchomię go dla nich na Amazon EC2. Moje pytanie brzmi: jak mogę to zrobić bez ujawniania danych jednego klienta innemu klientowi? W tej chwili myślę, że każdy klient może zostać umieszczony w piaskownicy jako własny użytkownik na poziomie systemu operacyjnego z ograniczonymi uprawnieniami. Czy to wystarczy? Rozumiem, że jest to trudny problem, ale wydaje się, że jest to problem, który rozwiązuje wiele osób, takich jak projektanci systemów operacyjnych dla wielu użytkowników i sami Amazon, więc jestem optymistą, że może być dobre podejście.


title: Jak czysto funkcjonalne języki programowania radzą sobie z szybko zmieniającymi się danymi?

text: Jakich struktur danych możesz użyć, aby usunąć i zastąpić O(1)? Albo jak możesz uniknąć sytuacji, kiedy potrzebujesz wspomnianych struktur?


title: Programowanie optymistyczne i pesymistyczne - Zapewnienie, że wiele zadań zostanie wywołanych tylko raz dla konkretnego rekordu

text: Załóżmy, że masz 10 rekordów bazy danych, które musisz przetworzyć w następujący sposób: 1. Start 2. Pobierz 2 rekordy z bazy danych z flagą „Przetwarzane” ustawioną na „false” 3. Wywołaj zewnętrzną usługę sieciową z niestandardowymi danymi z tych 2 rekordów. 4. Zaktualizuj te 2 rekordy w bazie danych i ustaw je jako 'Processed' = 'true' 5. Przejdź do 1 **Co może się stać w tym scenariuszu?** 1. - 2. Podczas pobierania rekordów może wystąpić błąd z bazy * w porządku, w następnej rundzie postaramy się je odzyskać. 3. Może wystąpić błąd podczas wywoływania zewnętrznej usługi WWW * to też jest w porządku, gdyż w następnej rundzie spróbujemy ponownie wysłać te 2 rekordy 4. Może wystąpić błąd podczas wywoływania bazy danych w celu aktualizacji przetworzonego rekordu * **co do zrobienia?** Czy jesteś optymistą, że to się nigdy nie stanie? * pamiętaj, że już wysłałeś te 2 rekordy za pośrednictwem usługi sieciowej i nie możesz wysyłać ich ponownie za wszelką cenę * jedną z opcji jest wywołanie aktualizacji bazy danych w pętli, dopóki nie zostanie pomyślnie uruchomiona!? 5. - **Pytanie brzmi, jak poradzisz sobie z tą sytuacją?** _**_**UPDATE**** Ilustracja kodu: loop { db = baza danych ws = webservice trans = db.open_transaction recs = trans .query_for_two_records_and_update_processed_to_true ws_response = ws.send_text_messages(recs) if (ws_response == sukces) { trans.commit() // co byś zrobił, jeśli to się nie powiedzie? } else { trans.rollback() } }


title: Włamanie do administracji bazami danych

text: Jestem zupełnie nowy na tej stronie i nie mogę się doczekać interakcji z każdym z was. W czerwcu kończę studia z tytułem licencjata w dziedzinie komputerowych systemów informatycznych z nadzieją, że w przyszłości zostanę DBA. Obecnie biorę klasę bazy danych i studiuję SQL Server/T-SQL na boku. Moje doświadczenie w IT ogranicza się do zarządzania bazą danych Access u mojego ostatniego pracodawcy przez dwa lata. Jakie są szanse na zdobycie niższego stanowiska DBA po ukończeniu studiów?


title: Dyrektywa AngularJS vs Usługa vs Kontroler

text: Zaraz zacznę wdrażać prośbę o zmianę na wewnętrznej stronie mojej firmy, która sprawdzi kilka pól i podświetli je, jeśli spełniają określone wytyczne. Na przykład, jeśli data urodzenia jest dzisiejsza, to pole będzie zarysowane, a etykietka będzie zawierać „Życz im wszystkiego najlepszego!”. Specyfikacje proszą o wczytanie po zakończeniu renderowania reszty strony, aby nie wydłużyło to czasu ładowania. Ponieważ jestem nowy w AngularJS, nie jestem pewien, w jaki „właściwy” sposób należy to zrobić. Problemy: Ponieważ obejmuje to dodawanie obramowań i obrazów oraz atrybutów tytułu (manipulacja DOM), wydaje się, że powinienem użyć dyrektywy. Jednak nie będzie to wielokrotnego użytku ani „krótkie”, jak wydaje się większość dyrektyw. Połowa danych, które muszę sprawdzić, zostanie zwrócona w pierwotnym wywołaniu przy ładowaniu strony, więc chciałbym to zapisać i nie marnować kolejnego połączenia na ponowne ich uzyskiwanie, co sprawia, że myślę, że usługa byłaby fajna do przechowywania wszystkich tych danych. Wiem, jak to wszystko zrobić w kontrolerze, ale to zły, zły kod :P Jakieś pomysły, jak najlepiej to zrobić? Zasadniczo będę potrzebować wywołania http, aby sprawdzić wszystkie dane, które zwrócą obiekt z wartościami bool dla każdego typu „Call Out”, który muszę wykonać. Następnie przejdę przez tę listę i jeśli wartość to prawda, dodaję obramowanie, obraz i tekst podpowiedzi. Nie jestem pewien, czy to pytanie jest wystarczająco jasne, więc jeśli chcesz, abym dodał jakieś szczegóły, zapytaj. Dziękuję Ci!