title: Walidacja pola UI we wzorcu MVP

text: Chcę zweryfikować dane podane przez użytkownika przed ich przetwarzaniem. Moje interfejsy użytkownika mają pola tekstowe, głównie kombinacje i są pewne pola, które użytkownik musi podać dane, w niektórych polach tylko niektóre typy danych mogą być akceptowane, takie jak teksty, daty/godziny, liczby itp. Jeśli chodzi o datę/godzinę, powinien sprawdzić, czy podane dane mieszczą się w poprawnym zakresie. Moje pytanie to **Q1. Gdzie przeprowadzić walidację we wzorcu MVP?** Moje opcje to 1. Zaimplementuj walidację jako usługę dostępną dla Prezenterów. (Poprzez DI na przykład) 2. Wykonaj walidację w samym interfejsie użytkownika w zdarzeniu takim jak KeyPress. 3. Sam prezenter zajmuje się walidacją. **Q2. Jak przeprowadzić walidację.** Moje opcje to ja. Wszystkie kontrolery, takie jak pola tekstowe w widoku, są zawarte we właściwościach (Getters / Setters) public string Age { get { return txtAge.Text; } ustaw { txtWiek.Tekst = wartość; } } ii. UI uruchamia zdarzenie Validate(sender, e) iii. Prezenter słucha i łączy go z handlerem, który następnie wywołuje metodę Validate() iv. W metodzie Validate() wykryje, że kontroler zgłosił zdarzenie (nadawca) i odczyta odpowiednią właściwość, aby uzyskać wartość w kontrolerze. v. Następnie sprawdzi typ z typem w modelu i zdecyduje o poprawności, a następnie ostrzeże użytkownika Problem polega na tym, że być może będę musiał ujawnić wszystkie kontrolery za pomocą właściwości ciągu, ponieważ w przeciwnym razie da wyjątki, gdy użytkownik wprowadzi nieprawidłowy typ.


title: Używanie AngjularJS z Twitter Bootstrap

text: Chcę zrefaktoryzować starszą aplikację OLD i nadać jej nowy wygląd... więc chcę użyć Twitter Boostrap do interfejsu użytkownika... Dużo się też bawiłem z AngularJS... czy to jest powszechne używać ich w połączeniu? Czy to w ogóle właściwe pytanie? Zrobiłem około godziny "googlowania" na ten temat i widzę, że wiele osób korzysta z części CSS w ładowaniu początkowym w Angularze, jednak czy coś zyskam (lub cokolwiek stracę), włączając również plik bootstrap .js porcja, jak również? Dziękuję.


title: Czy skróty md5 umożliwiają wykrywanie zsynchronizowanych plików?

text: Musimy opracować własny system zarządzania plikami w aplikacji webowej Java. Musimy zsynchronizować pliki między naszym głównym serwerem a serwerami klienckimi i dowiedzieć się, czy wszystkie serwery klienckie mają wszystkie najnowsze wersje plików. Nasze pliki są w formacie pdf, doc i xls zmieniają się co jakiś czas w miarę potrzeb. Co myślimy o użyciu sumy kontrolnej MD5, aby znaleźć hashcode plików na serwerze głównym i przechowywać go w bazie danych. To samo byłoby w bazie danych Client Servers. Po porównaniu rekordów w bazie danych dowiemy się, czy serwery klienckie są zsynchronizowane, czy nie. Proszę zasugerować, czy istnieją lepsze sposoby na zrobienie tego samego.


title: Miejsca do przechowywania podstawowych danych

text: Używam PHP. Buduję w pełni modułowy CMS, który jest przeznaczony dla publiczności. Niektórzy mogą postrzegać to jako framework, ale zamierzam napisać do niego zestaw rozszerzeń, które sprawią, że będzie to CMS :P Ponieważ jest całkowicie modułowy, mam problem z załadowaniem rozszerzeń. Praktycznie muszę uzyskać listę aktywnych rozszerzeń, aby móc je załadować do mojej klasy bazowej. Ładuję je, odczytując niektóre nagłówki plików, które zawierają pole „zależność”. To pole decyduje o kolejności, w jakiej muszę tworzyć instancje obiektów. Problem polega na tym, że przy starcie CMS nie mam interfejsu do bazy danych, bo to też jest rozszerzenie, więc nie mogę przechowywać listy aktywnych rozszerzeń w bazie danych :) Możesz zapytać w pierwszej kolejności, jak są aktywowane rozszerzenia. Cóż - w interfejsie administracyjnym, który również jest rozszerzeniem (oczywiście przy pierwszej instalacji CMS-a będą domyślnie aktywne niektóre rozszerzenia). Czy zapisanie tej listy w pliku tekstowym może być rozwiązaniem? Problem polega na tym, że wiele hostów nie radzi sobie zbyt dobrze ze skryptami podczas zapisu plików. A skoro ten CMS jest publiczny to mogę mieć tu problem?


title: Oblicz czas transferu z uwzględnieniem utraty przewodności i prędkości w obwodach

text: Opierając się na moim ograniczonym zrozumieniu, jak działają komputery, wyprowadziłem następujące pytanie. Gdy przenosisz rzeczy przez obwody, obwody nagrzewają się. Gdy się nagrzewają, tracą przewodnictwo i ostatecznie zwalniają. Jak więc obliczyć przybliżony czas przesyłania dużej ilości plików, biorąc pod uwagę spadek prędkości czy spadek przewodności na przewodach? Dla wyjaśnienia mówię konkretnie o urządzeniach lokalnych, takich jak HDD na HDD na tym samym pulpicie. Czy jest to w ogóle temat względny? Zauważyłem spowolnienie w starszych dyskach, ale myślę, że było to spowodowane samym dyskiem, a nie obwodami. Byłoby to jednak przydatne w starszych systemach.


title: Czy MVC nie powinien być MCV?

text: Model jest definiowany jako pierwszy, następnie kontrolery są uruchamiane na podstawie żądania użytkownika i generują widoki (wyjście). Więc powinno być M->C->V, prawda?


title: Analiza zmian .NET BCL — zastosowania wykraczające poza zaspokojenie ciekawości

text: > Jest to część serii pytań, które skupiają się na projekcie Abstrakcja >, którego celem jest wyabstrahowanie pojęć używanych w projektowaniu językowym w formie > ramy. Istnieje siostrzany projekt Abstrakcja o nazwie > OILexer, który ma na celu skonstruowanie parsera z plików gramatycznych, bez > wstrzykiwania kodu na dopasowania. > > Niektóre inne strony związane z tymi pytaniami, związane z > typowaniem strukturalnym, można znaleźć tutaj, a łatwość obsługi, którą można znaleźć tutaj, pytanie dotyczące > pisania kompilatora kompilatora można znaleźć tutaj. Meta-temat powiązany > z zapytaniem o ramy i odpowiednie miejsce do publikowania można znaleźć > tutaj. >> Jednym z kroków w tym procesie było zbudowanie własnego parsera metadanych ECMA-335. Ponieważ mam tendencję do tworzenia narzędzi do budowania narzędzi, ostatnio zdecydowałem się na analizę > z góry na dół w bibliotekach klas bazowych .NET. Przyszłym celem > będzie wykorzystanie go do konstruowania bibliotek, które reprezentują BCL, aby pomóc > w szybkim generowaniu kodu (więcej o tym później, jeśli kogoś to obchodzi). Chciałem uzyskać podstawowe pojęcie o ogólnych wersjach bibliotek w .NET BCL , więc przeanalizowałem folder Framework przechowywany lokalnie. Robienie tego dla każdej wersji frameworka powinno odzwierciedlać system użytkownika końcowego: w tej chwili celuję w siebie. Pierwszym krokiem w tym celu jest skonstruowanie klasy, która konceptualizuje bibliotekę z wieloma wersjami i w razie potrzeby pobiera każdą iterację. Następnym krokiem jest pobranie wszystkich typów z każdej wersji i porównanie poszczególnych list typów (o dziwo więcej pracy niż powinno). Rezultatem jest dość prosty widok BCL, który rozbija wersję, w której biblioteka została wprowadzona, i wyświetla, które wersje zostały wprowadzone, pogrupowane według przestrzeni nazw. To **powinna** być wyczerpująca lista, która wyklucza typy wprowadzone wraz z samą biblioteką. Można założyć, że jeśli nie ma go na liście, to znajdował się tam od początku istnienia biblioteki. Widok jest bardzo prosty: „+Typ” oznacza, że został dodany, „-Typ” oznacza, że został usunięty, „Typ->Zespół” oznacza, że został przeniesiony w tej wersji. Obiektywna strona tego jest następująca: jeśli jest dokładna, daje podstawowy podział na to, kiedy typ został wprowadzony, przydatny do określenia najniższej wersji .NET potrzebnej do danego elementu funkcjonalności. Następnym krokiem jest analiza składowych, która sprawi, że pierwszy krok będzie wyglądał na łatwy (głównie ze względu na porównanie sygnatur metod, ponieważ każdy typ parametru będzie musiał zostać odwrócony i wyszukany). Ciekawe, czy ta analiza może być później wykorzystana do automatycznego narzędzie, które może określić najniższą wspólną wersję frameworka dla zestawu jako całości (oprogramowanie pisane przez framework kompilatora, który piszę)? Wgląd mile widziany. > PS: Dla tych, którzy zastanawiają się, dlaczego nie używam Reflection, spróbuj użyć > Type.GetType(string) na którymkolwiek z tych: > > > Microsoft.Win32.Registry, mscorlib, Version=1.0.3300.0, Culture=neutral, > PublicKeyToken = b77a5c561934e089 > Microsoft.Win32.Registry, mscorlib, wersja = 1.0.5000.0, kultura = neutralny, > PublicKeyToken = b77a5c561934e089 > Microsoft.Win32.Registry, mscorlib, wersja = 2.0.0.0, kultura = neutralna, > TokenKluczaPublicznego = b77a5c561934e089 > Microsoft.Win32. > > To się nie zawiedzie, ale również nie uzyskasz tego, czego byś się spodziewał, nawet próba załadowania > 2.0 mscorlib według nazwy pliku daje zestaw 4.0. **Edytuj** : Powinienem dodać, że ta analiza skupia się wyłącznie na elementach eksponowanych publicznie. Uzasadnieniem tego jest to, że nigdy nie powinieneś skupiać się na zależnościach wewnętrznej struktury BCL, ponieważ może się ona zmienić bez ostrzeżenia. Jeśli piszesz generator kodu, a wyrażenia, które syntetyzujesz, opierają się na tych typach, twój system prawdopodobnie będzie kruchy jak szkło, jeśli coś zmieni się we frameworku, na przykład łatka aktualizująca wewnętrzną strukturę wersji 2.0. Ze względu na to, jak .NET łączy swoich członków w Common Intermediate Language, jest to bardzo realne prawdopodobieństwo.


title: Czy szpiegowanie testowanej klasy jest złą praktyką?

text: Pracuję nad projektem, w którym wywołania klasowe są na porządku dziennym, ale wyniki są wielokrotnie prostymi wartościami. Przykład ( **nie prawdziwy kod** ): public boolean findError(Set<Thing1> set1, Set<Thing2> set2) { if (!checkFirstCondition(set1, set2)) { return false; } if (!checkSecondCondition(zestaw1, zestaw2)) { return false; } zwróć prawdę; } Pisanie testów jednostkowych dla tego typu kodu jest naprawdę trudne, ponieważ chcę tylko przetestować system warunków, a nie implementację rzeczywistych warunków. (robię to w osobnych testach.) Właściwie byłoby lepiej, gdybym zdał funkcje, które implementują warunki, a w testach po prostu podam trochę makiety. Problem z tym podejściem polega na hałaśliwości: _często używamy leków generycznych_. Działające rozwiązanie; jest jednak uczynienie testowanego obiektu _szpiegiem_ i wyśmiewanie wywołań funkcji wewnętrznych. systemUnderTest = Mockito.spy(systemUnderTest); doReturn(prawda).when(systemUnderTest).checkFirstCondition(....); Problem polega na tym, że implementacja SUT jest skutecznie zmieniana i może być problematyczne zsynchronizowanie testów z implementacją. Czy to prawda? Czy istnieje najlepsza praktyka, aby uniknąć spustoszenia wywołań metod wewnętrznych? Zauważ, że mówimy o częściach algorytmu, więc rozbicie go na kilka klas może nie być pożądaną decyzją.


title: Wyzwania dla doświadczonego kodera w nauce programowania funkcjonalnego?

text: Z jakimi wyzwaniami musiałby się zmierzyć doświadczony programista ze zwykłym doświadczeniem w C++/UNIX, próbując nauczyć się programowania funkcjonalnego? Głównym motywem uczenia się jest uzyskanie świeżej perspektywy, być może pomogłoby to napisać lepszy kod. Jest to jednak dyskusyjne. Czy Haskell powinien być językiem wprowadzającym, czy Prologiem, Lispem czy F#?


title: Konsekwencje „naiwnego” kontra „naiwny”?

text: Podczas korzystania z autokorekty IE „naiwny” został przekształcony w „naiwny”! Moje ustawienia regionalne to Au English, z punktu widzenia wyszukiwania Unicode te dwa nie są podobne. Nie jestem nawet pewien, czy są inne postacie, które są zastępowane, ale z punktu widzenia programistów jakie są konsekwencje i środki zaradcze w takich przypadkach? Czy w SQL jest sposób na zwrócenie wyników zawierających zarówno „naiwne”, jak i „naiwne”? (oczywiście bez kodowania na sztywno lub programowania jawnego). Czy istnieją inne przypadki automatycznej transliteracji, o których należy pamiętać? A może istnieje sposób na radzenie sobie z taką identycznością znaków w innych językach? np. umlaty w języku niemieckim i brak/zawieranie samogłosek w słowach opartych na alfabecie arabskim. Dzięki za wszelkie spostrzeżenia w tej sprawie


title: Aplikacja desktopowa Java przy użyciu MVC + Hibernate

text: Zajmuję się tworzeniem aplikacji desktopowej Java. Planuję wykorzystać architekturę MVC opisaną na stronie Oracle: Java SE Application Design With MVC. Muszę przechowywać dane w bazie danych, więc postanawiam użyć Hibernate, ponieważ jest to bardzo proste, ale istnieje dowolny samouczek, który używa Swing + MVC + Hibernate. Czy można ich używać razem?


title: Sprawdzenie rekordu jest należne na podstawie pola „występujące”

text: Mam rekordy, które mają daty w stosunku do nich i występujące pole zawierające „brak”, „rocznie” i „miesięczny” identyfikator statusu notatka data ostatniej aktualizacji występujący 1 otwarty --- 01.01.2011 01.02.2010 roczny 2 otwarty - -- 05.05.2011 03.05.2011 co miesiąc 3 otwarte --- 06.06.2011 05.06.2011 brak Teraz muszę być w stanie sprawdzić, czy wpłata minęła (ustawiony termin minął), co działa idealnie, jeśli `occurring` jest ustawione na brak, ale nie jestem pewien, jak podejść do tego, gdy jest ustawiony na rok lub miesiąc (tzn. Ten dzień w roku/miesiącu minął) Tak więc z powyższymi zapisami, gdybym miał metoda na rekordzie o nazwie `due?` pod warunkiem, że status jest 'open', musi zwracać `true` każdego roku, gdy minie tę datę, jeśli nie została jeszcze zaktualizowana w ciągu roku. Przepraszam, jeśli to mylące, ale topi mój mózg, próbując o tym pomyśleć, nie mówiąc już o ubraniu tego w słowa.


title: Gdzie przechowywać globalne nieruchomości przedsiębiorstwa?

text: Mam do czynienia z tłumem aplikacji Java, które do działania wymagają różnych globalnych właściwości dla całego przedsiębiorstwa, na przykład: nazwa hosta centralnego RDBMS, nazwa hosta i lokalizacja centralnego portalu samoobsługowego, lokalizacja hosta centralnego LDAP, lokalizacja hosta centralny serwer pocztowy itp. Formalnie każdą aplikację budujemy z plikiem właściwości, w którym wszystkie te właściwości są zdefiniowane. Ale to bardzo złe rozwiązanie, ponieważ jeśli zmieni się nazwa hosta serwera pocztowego, musimy zmienić pliki właściwości dla każdej aplikacji i ponownie wdrożyć wszystkie aplikacje. Naszą ideą jest scentralizowanie tych właściwości, tak aby każda aplikacja mogła pytać o każdą właściwość w czasie wykonywania, na przykład: 1. Pomysł: Umieść plik właściwości w łatwo dostępnym współudziale plików. Jeśli więc musimy zmienić właściwość, każda aplikacja korzysta z nowych właściwości. 2. Pomysł: Umieść właściwości w bazie danych. Główna wada: potrzebujemy zależności od bibliotek klienta bazy danych dla każdej aplikacji. 3. Pomysł: Umieść wszystkie aplikacje na jednym dużym serwerze aplikacji, który zapewnia właściwości systemu dla każdej aplikacji. Główna wada: wymaga wdrożenia każdej aplikacji na jednym serwerze aplikacji. Ale to nie jest realistyczny scenariusz. 4. Pomysł: Usługa internetowa, która zapewnia globalne właściwości dla całego przedsiębiorstwa. Główna wada: niezbyt bezpieczne, ponieważ niektóre właściwości to hasła lub dane uwierzytelniające użytkownika. Jakie inne alternatywy są zalecane? Jaki jest stan techniki?


title: Radzenie sobie ze zbyt skomplikowanym kodem testowym

text: Nasz zespół automatyzacji testów pisze mnóstwo testów automatyzacji dla naszej aplikacji WEBowej, ale wydaje mi się, że ich kod staje się zbyt skomplikowany i gwarantuje, że ktoś też go przetestuje. Czy istnieje najlepsza praktyka dotycząca pisania tych testów automatyzacji? Docenię każdą odpowiedź z konkretnymi danymi wejściowymi od kogoś, kto doświadczył tego problemu. Jeśli ma to znaczenie - używamy jSystem do automatyzacji naszych testów aplikacji WEB - jeśli istnieją frameworki ułatwiające życie - chciałbym o nich usłyszeć.


title: Dlaczego w czasach nowoczesnego informatyki, w „typowych aplikacjach biznesowych” wydajność ma znaczenie?

text: Niektórym z was może się to wydawać dziwne. Jestem hobbystą programistą Java. Opracowałem kilka gier, program AI, który tworzy muzykę, inny program do malowania i tym podobne rzeczy. Powiem Ci, że mam doświadczenie w programowaniu, ale nie w profesjonalnym tworzeniu aplikacji biznesowych. Na tej stronie dużo się mówi o wydajności. Ludzie często zastanawiają się, jaki byłby najbardziej wydajny algorytm w C# do wykonania zadania lub dlaczego Python jest powolny, a Java szybsza itp. Próbuję zrozumieć: **dlaczego to ma znaczenie?** Istnieją konkretne obszary obliczeniowe, w których widzę, dlaczego wydajność ma znaczenie: gry, w których dziesiątki tysięcy obliczeń odbywa się co sekundę w pętli ciągłej aktualizacji, lub systemy niskiego poziomu, na których opierają się inne programy, takie jak systemy operacyjne i maszyny wirtualne itp. normalna, typowa aplikacja biznesowa wysokiego poziomu, dlaczego wydajność ma znaczenie? Rozumiem, dlaczego miało to znaczenie kilkadziesiąt lat temu. Komputery były _znacznie_ wolniejsze i miały znacznie mniej pamięci, więc trzeba było dokładnie przemyśleć te rzeczy. Ale dzisiaj mamy tak dużo pamięci do stracenia, a komputery są tak szybkie: czy **faktycznie** ma znaczenie, czy konkretny algorytm Javy ma wartość O(n^2)? Czy rzeczywiście będzie to miało znaczenie dla użytkowników końcowych tej typowej aplikacji biznesowej? Kiedy naciśniesz przycisk GUI w typowej aplikacji biznesowej, a za kulisami wywołuje on algorytm O(n^2), w dzisiejszych czasach nowoczesnego informatyki - **czy naprawdę czujesz nieefektywność?** Moje pytanie jest podzielone na części dwa: 1. Czy w praktyce w dzisiejszych czasach wydajność ma znaczenie w typowym programie biznesowym? 2. Jeśli tak, **proszę podać rzeczywiste przykłady miejsc w takiej aplikacji, w których ważna jest wydajność i optymalizacje.**


title: Tworzenie aplikacji na iOS na jedno urządzenie – problem z licencją

text: Jako freelancer tworzę aplikację na iOS dla muzeum. To bardzo prosty odtwarzacz wideo, instalowany na jednym iPadzie, który będzie częścią stałej ekspozycji, pełniąc w zasadzie funkcję kiosku. Okazuje się, że iPad jest idealnym urządzeniem do tego, jeśli szukasz małego i niedrogiego ekranu dotykowego. Problem polega na tym, że o ile wiem, żadna z dostępnych opcji programu Apple Developer Program nie pozwoli mi na dystrybucję takiej aplikacji. Odpowiednie opcje to (z powyższego linku): > **Program dla programistów iOS (99 USD rocznie)** Wybierz ten program, jeśli chcesz > rozpowszechniać aplikacje w App Store jako osoba fizyczna, wyłączny właściciel, > firma, organizacja , jednostka rządowa lub instytucja edukacyjna. > > **iOS Developer Enterprise Program (299 USD/rok)** Wybierz ten program, jeśli > chcesz tworzyć własne aplikacje do dystrybucji wewnętrznej w > swojej firmie, organizacji, instytucji rządowej lub instytucji edukacyjnej. Zwykły program wymaga dystrybucji za pośrednictwem App Store. Wersja Enterprise jest przeznaczona do wewnętrznej dystrybucji w ramach _mojej własnej organizacji_. Tak też nie jest w tym przypadku! Wygląda na to, że jestem skazany na naruszenie warunków świadczenia usług Apple (i mogę wymyślić co najmniej dwa sposoby na zrobienie tego: jailbreak lub zmiana daty iPada, aby nie wiedział, że profil udostępniania wygasł). Czy tak jest naprawdę, czy nie pomyliłem się w opisach? Czy ktoś tutaj był w podobnej sytuacji?


title: Jak dokładnie używać wzorca projektowego MVC

text: Przeczytałem dokumentację na stronie dewelopera Apple, która zawiera następujące wytyczne > * Klasa widoku nie powinna zależeć od klasy modelu (chociaż może to być > nieuniknione w przypadku niektórych widoków niestandardowych). > * Klasa widoku nie powinna zależeć od klasy kontrolera pośredniczącego. > * Klasa modelu nie powinna zależeć od niczego innego niż inne klasy > modelu. > * Klasa kontrolera pośredniczącego nie powinna zależeć od klasy modelu > (chociaż, podobnie jak widoki, może to być konieczne, jeśli jest to niestandardowy kontroler > klasa). > * Klasa kontrolera pośredniczącego nie powinna zależeć od klas widoku ani od klas > kontrolerów koordynujących. > * Klasa kontrolera koordynującego zależy od klas wszystkich typów ról MVC. > Rozważmy następujący scenariusz: Mam klasę kontrolera widoku o nazwie `EmployeeViewController`. Mam kilka drobnych komponentów, z których niektóre są tworzone programowo, a niektóre są tworzone za pomocą `xib`. To, co dokładnie robię, to tworzenie wszystkich podwidoków wewnątrz klasy `EmployeeViewController` i dodawanie ich do widoku `EmployeeViewController`, m.in. `[self.view addSubView:…]` Czy lepszym rozwiązaniem jest dla mnie utworzenie oddzielnej podklasy `UIView`, która składa się ze wszystkich komponentów i zainicjować ją raz i dodać w `EmployeeViewController`? Jaki dokładnie jest właściwy sposób wdrożenia MVC? Czy mam tworzyć oddzielne komponenty dla widoku i kontrolera, czy też powinienem układać podwidoki wewnątrz `EmployeeViewController`?


title: Jeden duży projekt czy kilka małych?

text: Osobiście wolałbym pracować nad jednym projektem na raz, zachowując na tym absolutną koncentrację. Uważam, że w tej sytuacji jestem najbardziej produktywny, jednak nie zawsze tak dzieje się w prawdziwym świecie. Czy wolisz pracować nad jednym dużym projektem i być na nim całkowicie skoncentrowanym, czy może pracować nad, powiedzmy, 3-4 małymi projektami jednocześnie, które mogą być nawet opracowane w różnych językach?


title: Ścieżki kodu testów jednostkowych

text: Podczas testowania jednostkowego przy użyciu oczekiwań definiujesz zestaw wywołań metod i odpowiadających im wyników dla tych wywołań. Określają one ścieżkę przez metodę, którą chcesz przetestować. Przeczytałem, że testy jednostkowe nie powinny duplikować kodu. Ale kiedy definiujesz te oczekiwania, czy nie jest to duplikacją kodu, a przynajmniej procesu? Skąd wiesz, że duplikujesz testowaną funkcjonalność?


title: Czy przy szacowaniu zadania należy wziąć pod uwagę liczbę programistów?

text: Nie mam doświadczenia w pracy w zwinnych projektach, ale próbowałem tego kilka razy i zawsze napotykam ten problem podczas szacowania zadania. Czy uwzględniamy w szacunkach liczbę programistów, którzy będą pracować nad zadaniem? Pozwólcie, że wyjaśnię: Zadanie A jest szacowane na jednorazową jednostkę i deweloper 1 będzie nad nim pracował. Zadanie B jest również szacowane na jednorazową jednostkę, a deweloper 2 i 3 będą nad nim pracować razem. Tj. jeśli deweloper 1 zacznie pracować nad zadaniem A w tym samym czasie deweloper 2 i 3 zaczną pracować nad zadaniem B, zgodnie z szacunkami wszyscy skończą w tym samym czasie. Czy szacunek dla zadania B powinien być dwukrotnie wyższy niż dla zadania A, czy taki sam? Problem, jak widzę, polega na tym, że po otrzymaniu i oszacowaniu zadania nie zawsze można wiedzieć, ile osób będzie nad nim pracowało. A jeśli założysz, że dwóch programistów będzie pracowało nad zadaniem przez jedną jednostkę czasu, ale okaże się, że faktycznie zrobi to tylko jeden programista, nie oznacza to automatycznie, że ten programista będzie nad tym pracował przez dwie jednostki czasu. Czy jest jakaś standardowa praktyka w tym zakresie?


title: Rozgałęzianie instalacji/instalatora aplikacji w różnych wersjach?

text: Zastanawiam się, czy powinienem rozgałęziać nasz skrypt instalacyjny/plik projektu (używamy InnoSetup) z każdym wydaniem aplikacji, czy powinienem zachować jeden w skrypcie instalatora, który generuje konfigurację dla wszystkich wersji i gałęzi. ## Tło Używamy gałęzi („wersji konserwacyjnych”) w dużej mierze, ponieważ nasze funkcje są bardzo zależne od klienta i często najpierw wdrażamy poprawkę błędu w określonej wersji klienta, aby utrzymać stabilność. (Tak. Nieoptymalne. Ale to też lubią klienci. Jak najmniej zmian w kodzie, aby nie ryzykować, że ich drogi sprzęt pozostaje bezczynny z powodu regresji.) Więc nasze gałęzie/wersje wyglądałyby tak v150.6 - " gałąź 150" zainstalowana z klientem X v151.7 - gałąź "151" zainstalowana z klientem Y, Z, A i B ... v156.3 - gałąź "156" zainstalowana z klientem C i D vCurrent - Rozwój nowych funkcji - będzie wyprodukować v157 w końcu Sprawdziłem teraz nasz skrypt instalacyjny w kontroli wersji i widziałem już sporo poprawek i usprawnień. W tej chwili, gdy budowana jest nowa wersja serwisowa v151.n+1, automatyczne skrypty kompilacji przenoszą skrypt instalacyjny zaewidencjonowany do gałęzi v151 i tworzą przy jego pomocy konfigurację. Oczywiście wersja v151.8 miałaby nieco przestarzały instalator, chociaż „95%” wszystkich poprawek instalatora miałoby zastosowanie do wszystkich starszych wydań. _W związku z tym rozważam dostosowanie naszych automatycznych skryptów kompilacji, aby zawsze używały skryptu instalacyjnego z gałęzi vCurrent: - także do ustawień nowo utworzonych wersji konserwacyjnych starych gałęzi._ Jakie jest Twoje zdanie na ten temat. **Czy skrypt instalatora/instalatora powinien być** „ściśle powiązany” z wersją kodu źródłowego, czy też cykl życia logiki instalacji powinien być bardziej niezależny od aktualnie instalowanej wersji kodu/plików binarnych, tak aby można było wprowadzić poprawki w logice instalacji używane w wielu różnych (konserwacyjnych) wersjach?


title: Przestrzeń nazw firmy w aplikacjach webowych

text: Większość (dobrych) konwencji dotyczących przestrzeni nazw wymaga przestrzeni nazw z zakresem nazwy firmy. **np** `NazwaFirmy.NazwaKomponentu.x.y.z` Jak dobrze przekłada się to na aplikacje internetowe? W wielu serwisach firma jest określana nazwą serwisu (np. Facebook, MySpace). Czy to zawiłe przestrzenie nazw, sprawiając, że wyglądają tak, jakby mogły dotyczyć tylko jednego projektu? **Na przykład** , załóżmy, że firma tworzy domenę _WitrynaA_ (.com) i jest odtąd nazywana „_WitrynaA_ ”. _WebsiteA_ tworzy dla swojego projektu komponent uwierzytelniania wielokrotnego użytku. Przestrzenują ją w następujący sposób: `WebsiteA.Auth.x.y.z` Rok później _WebsiteA_ tworzy nową stronę internetową _WebsiteB_ i decyduje się na użycie swojego wcześniej utworzonego komponentu `WebsiteA.Auth`. Czy to zasłania przestrzeń nazw? Czy firma powinna używać aliasu oddzielnego od nazwy swojej witryny internetowej jako nazwy firmy w przestrzeni nazw? Mimo wszystko, `WebsiteA.Auth` nie jest bezpośrednio powiązany z _WebsiteA_.com, a `WebsiteA` jest teraz bardziej projektem firmy niż całej firmy.


title: Czy powinienem zbudować własny CMS, czy polegać na gotowym?

text: > **Powiązane** : Czy jako początkujący programista powinienem preferować tworzenie własnych > bibliotek ponad korzystanie z bibliotek innych firm? Czy jako programista PHP na poziomie średniozaawansowanym do zaawansowanego i młody (15 lat) powinienem zbudować zupełnie nowy CMS dla swojej witryny internetowej, czy też polegać na gotowym oprogramowaniu, takim jak WordPress lub Drupal? Nie wydaje mi się, żeby WordPress był wystarczająco potężny/skalowalny, aby poradzić sobie z tym, co próbuję zrobić, a po sporym majstrowaniu przy Drupalu w ciągu ostatnich kilku dni po prostu nie wydaje mi się, żeby odpowiadał moim upodobaniom a także nie jest dobrze udokumentowany, więc mam trochę problemów z wykonaniem pewnych prostych zadań. Chciałbym _uwielbiać_ używać czegoś takiego jak ExpressionEngine, ale nie mam pieniędzy, aby wydać licencję komercyjną, która obecnie kosztuje około 300 USD, więc to nie wchodzi w grę. Początkowo zacząłem kodować moją witrynę jako system tymczasowy, aby moi użytkownicy mogli kupować aktualizacje i inne rzeczy, takie jak waluta w grze, dopóki nie będę mógł utworzyć nowej witryny, ale po tym, jak zacząłem, szybko zdałem sobie sprawę, że muszę ją skalować , więc od tej pory kodowałem z myślą o stworzeniu w pełni działającej strony internetowej. Zajęło to tylko kilka dni, ale wszystkie podstawy są już dostępne (rejestracja, logowanie, modyfikacje konta itp.) i uważam, że byłby to świetny początek dla prywatnego CMS. Ostatnią rzeczą, którą chcę dodać, jest to, że gdybym miał zbudować własny CMS, czy powinienem użyć frameworka PHP, takiego jak CodeIgniter, z którym mam spore doświadczenie? Może inni programiści mogliby mi podpowiedzieć, w co się pakuję.


title: Aby meldować się w małych porcjach i często lub w dużych porcjach, ale rzadko

text: Które podejście jest lepsze podczas pracy z oprogramowaniem do kontroli źródła, takim jak TFS lub VSS? Doświadczyłem różnych podejść i nie mogę powiedzieć, które z nich jest lepsze. Czy powinniśmy pozwolić deweloperom o tym decydować? A może zespół powinien mieć unikalną strategię operacji check-in check-out?


title: Czy SCRUM powinien być używany do projektu, nad którym pracuje tylko jedna osoba?

text: W naszej firmie mamy zespół pracujący jednocześnie nad 3 różnymi projektami, gdzie zazwyczaj w każdy projekt zaangażowana jest tylko jedna lub dwie osoby. Praca projektowa często wiąże się z opanowaniem nowych technologii i/lub rozwiązywaniem błędów, które prowadzą do zadań, które są bardzo trudne do oszacowania. W takiej sytuacji kierownictwo nadal nalega na używanie SCRUM i nie pozwala na alokowanie bufora bezpieczeństwa na koniec sprintu na nieoczekiwane sytuacje. Spotkanie stand-up odbywa się dla całego zespołu, chociaż prawie wszyscy pracują razem nad niepowiązanymi komponentami oprogramowania lub różnymi projektami oprogramowania. * Zastanawiałem się, czy ktoś widział, jak SCRUM działa dobrze w projekcie z jednym programistą i rozmytymi zadaniami i jak sprawiłeś, że proces działa dobrze? * Jak oszacować zadania, które wiązały się z badaniem/opanowaniem nowych technologii (obejmuje to naukę nowych języków programowania, platform i narzędzi programistycznych)? * Czy komuś udało się przekonać kierownictwo do nieużywania SCRUM w poszczególnych projektach, a jeśli tak, to jakie argumenty były najbardziej skuteczne? Dziękuję!


title: Czy w startupach otrzymuje się odpowiednią informację zwrotną na temat jego wyników? A może „huk” przychodzi nieoczekiwanie?

text: Zacząłem pracę w start-upowej firmie. Generalnie tempo jest bardzo szybkie i mam spore oczekiwania. Dla mnie jest inaczej, ponieważ pracowałem w dużej firmie o dużej strukturze, a tempo nie było tak wysokie. Z rozmów z innymi kolegami (oczywiście nie w nowej firmie) doszedłem do wniosku, że w start-upie łatwo jest stracić pracę. Myślę, że ma to jakiś sens, ponieważ firma „walczy” o przetrwanie. Chciałabym wiedzieć, czy ogólnie, jeśli rzeczywiście tak jest i łatwo jest się zwolnić, czy ktoś jest zwykle ostrzegany, jeśli spełnia oczekiwania, czy nie, aby mógł się poprawić? Czy nie ma takich ostrzeżeń? Cóż, jeśli nie są usatysfakcjonowani, czy mówią ci? Czy można nie być zadowolonym i ukryć to? A potem po prostu pozwolić ci odejść? Czy stała/odpowiednia informacja zwrotna o wynikach pracownika jest częścią mentalności start-upu? Szukam porady u kolegów z większym doświadczeniem w tej sprawie. Każdy wkład/rada jest bardzo ceniona.


title: Jak powinienem udokumentować skrypt Pythona?

text: Mam kilka modułów Pythona, które mają być uruchamiane jako skrypty. Jak mam napisać dokumentacje na poziomie modułu i funkcji, aby było jasne, jak uruchomić i używać modułu?


title: Czy w środowisku .NET jest przeciążenie informacji?

text: Kiedyś, jeśli chciałeś stworzyć aplikację N-Tier w .NET, zbudowałeś swój interfejs użytkownika za pomocą WinForm lub WebForms, BLL ze standardowym C#/VB.NET/{.NET Language}, twój DAL z ADO.NET i może dorzucę trochę usług zdalnych. Teraz masz WPF, ASP.NET, ASP.NET MVC, Silverlight, WCF, WCF Data Services, WCF RIA Services, WF, EF, P&P App Blocks i nie tylko. To tylko _niektóre_ z twoich opcji, jeśli chcesz zbudować aplikację N-Tier przy użyciu .NET i - może po prostu nie jestem aż tak mądry, ale - kilka z nich jest łatwych do nauczenia. _I_ są to tylko produkty firmy Microsoft. Pomijaj inne niezliczone narzędzia i technologie (inne ORM-y, frameworki UI, takie jak PRISM, frameworki AOP itp. itd. do znudzenia). Czy to wolność wyboru, czy jest to przeciążenie informacjami, czy jest to normalne, a ja jestem po prostu powolny/głupi?


title: Bezpośrednie kopiowanie zewnętrznego API

text: Obecnie planuję wdrożenie API dla HgLab, a oczywistym wzorem dla mnie tutaj jest GitHub. Moje API oczywiście nie będzie _dokładną_ kopią ze względu na nieodłączne różnice między Mercurialem i Git oraz ze względu na różne zadania, które rozwiązują GitHub i HgLab, ale podobieństwo będzie całkiem jasne. Jak etyczne będzie z mojej strony kopiowanie ich API w znacznym stopniu? Czy projekt API jest objęty prawami autorskimi?


title: PHP — warstwa dostępu do danych

text: Obecnie przeglądam bazę kodu i zauważyłem, że większość wywołań (wraz z połączeniami z bazą danych) jest po prostu ukryta w skryptach PHP. Założyłbym, że podobnie jak inne języki opracowaliby jakiś rodzaj warstwy dostępu do danych (jak zrobiłbym w .Net lub Java) dla całej komunikacji z DB (lub zaimplementowanym MVC itp.). Czy nadal jest to powszechny wzorzec w PHP, czy istnieją alternatywne metodologie/wzory dla tej technologii? Próbuję tylko zrozumieć, dlaczego zwodnicy rozwinęli to w ten sposób. Wszelkie wglądy/informacje na temat tego, jak doświadczeni programiści projektują podejście do dostępu do danych w PHP byłyby bardzo mile widziane.


title: jak uzyskać więcej i lepszy wkład w github?

text: Od jakiegoś czasu używam github, ale mój projekt to tylko jeden programista - ja. Chcę otrzymać trochę wkładu od innych, a niektórzy z moich znajomych powiedzieli, że mogą dać mi trochę łatki, ale wszyscy nie wiemy, jak używać github jako narzędzia dla nas. I wiem, że github pomoże również projektowi uzyskać większy wkład od społeczności open source. Więc moje pytanie brzmi 1. jak uzyskać wkład na github? 2. jak uzyskać większy i lepszy wkład od społeczności opensource?


title: Pomóż mi sklasyfikować ten typ architektury oprogramowania

text: Przeczytałem kilka książek o architekturze oprogramowania, ponieważ używamy jej w naszym projekcie, ale nie mogę poprawnie sklasyfikować architektury. To jakaś architektura korporacyjna, ale co dokładnie... SOA, ESB (Enterprise Service Bus), Message Bus, Event Driven SOA, w oprogramowaniu Enterprise jest tyle terminów.... System oparty jest o niestandardowe wymiany komunikatów XML między usługami. (nie jest to SOAP ani żaden inny standard oparty na XML, po prostu zwykły XML). Te komunikaty reprezentują powiadomienia (zmiany stanu), które są stosowane do modelu domeny (nie przypomina CRUD podczas serializacji całego obiektu domeny i przekazania go do usługi w celu utrwalenia). System jest scentralizowany, a uczestnicy systemu korzystają z różnych języków programowania i frameworków (c++, c#, java). Ponadto wiadomości nie są przetwarzane w momencie ich otrzymania, ponieważ są przechowywane jako pierwsze, a leczenie rozpoczyna się na żądanie. **Nazywa się SOA+EDA -:)**


title: Dlaczego ważne jest, aby w specyfikacji uwzględnić definicję sukcesu/porażki?

text: Przeczytałem "Kod kompletny" Steve'a McConnella i jedną z pozycji na liście kontrolnej wymagań jest: "Czy uwzględniono definicję sukcesu? Porażki?". Dlaczego to jest ważne? Czy możesz napisać jakieś przykłady tych definicji? Czy ktoś może podać przykłady dobrej specyfikacji wymagań?


title: Które wybrać, programowanie proceduralne czy programowanie obiektowe?

text: Chcę zbudować stronę internetową obsługującą e-commerce (C2C), dlatego chcę zapytać, które podejście programistyczne jest bardziej odpowiednie i zaawansowane pod względem funkcjonalności strony?


title: Model domeny dla edukacji

text: Czy istnieją już jakieś modele domen stworzone dla branży edukacyjnej? Na przykład mamy do ubezpieczenia Prima IBCS. Szukałem czegoś podobnego.


title: Jaka jest Twoja najbardziej niezwykła koncepcja javascriptu, jaką kiedykolwiek widziałeś?

text: Nauczyłem się javascriptu w szkole, ale ponieważ pracuję z nim i uczę się o nim codziennie, znalazłem bardzo szczególny aspekt javascriptu, o którym nie wiedziałem. Co na początku było dla mnie bardzo trudne do zrozumienia, a ostatecznie okazało się, że jest bardzo przydatne i łatwe do wdrożenia. A w finale dodaje mojemu kodowi pewnego rodzaju „piękna”. Przykład, który kiedyś widziałem: function getter( input ) { wynik = { foo1 : 'bar1', foo2 : 'bar2', foo3 : 'bar3' }[input] || wejście || "domyślna"; zwróć wynik; } **Czy macie inne przykłady szczególnego wykorzystania JavaScriptu?** Dziękuję **PS:** Używam terminu _szczególne zastosowanie_, ponieważ może to być nietypowe dla każdego początkującego Javascript. Uważam, że to pytanie najprawdopodobniej należy do społeczności wiki.


title: JSON - Nazewnictwo kluczy obiektów Ruby

text: Obiekt Ruby ma metodę/właściwość: def tentakles_count 8 end Obiekt JavaScript ma klucz/właściwość: { justEnough: true } Teraz, gdy JavaScript otrzymuje zserializowany obiekt ruby przez XHR lub WebSocket, programista musi użyć obcej konwencji nazewnictwa, aby uzyskać dostęp do `liczba_macek`. To samo dotyczy Rubiego, kiedy otrzymuje POST obiektu json, programista musi użyć obcej konwencji nazewnictwa, aby uzyskać dostęp do `justEnough`. Co byś zrobił, aby poradzić sobie z tą małą niedoskonałością bez zbytniego szaleństwa?


title: DDD – Domain Driven Design, jaka kolejność rozwoju powinna być zastosowana?

text: 1 - Zaprojektuj moje encje, tj. (w Pythonie): class Konto: def __init__(imię, autor): self.name = nazwa self.email = email 2 - Zaprojektuj moje repozytoria: (jako interfejs) class AccountRepository: def add(self , account): """ @type account Konto """ pass def find_by_name(self, name): pass def find_by_email(self, email): pass # remove i inne... Teraz mogę iść na dwa sposoby: * *A:** Zaprojektuj i zaimplementuj usługi mojej domeny: class SignUpService: def __init__(self, account_repository): """ @type account_repository AccountRepository """ self._account_repository = account_repository def create_account(self, username, email): account = Account(username, email) self._account_repository.add(account) # inne metody korzystające z account_repository **B:** Zaimplementuj moje strategie repozytoriów: class MongodbAccountRepository(AccountRepository): def __init__(self, mongodb_database): self._mongodb_database = mongodb_database def add(self, account): account_data = account.__dict__ self._mongodb_database.accounts.insert (dane_konta) # i inne metody Jaka jest prawidłowa kolejność? i dlaczego? 1, 2, A, B czy 1, 2, B, A? Bardzo dziękuję!


title: Zatwierdź wiadomość w testach jednostkowych

text: Właśnie zacząłem czytać „The Art Of Unit Testing” Roya Osherove'a i chociaż uważam, że materiał jest w większości pomocny, wydaje on oświadczenie o nieużywaniu wiadomości w swoich oświadczeniach Assert. > "Proszę nigdy, _nigdy_, nie używaj tego parametru. Po prostu upewnij się, że nazwa testu > wyjaśnia, co ma się wydarzyć." Moje pytanie brzmi, czy z własnego doświadczenia uważasz, że ta rada jest dobra czy zła? Jeśli używasz komunikatów asercji w testach jednostkowych, jakich informacji używasz do przechwytywania poza tym, co może dać dobrze nazwany test jednostkowy?


title: Czy zamknięcia są uważane za nieczysty styl funkcjonalny?

text: Mam kilka powiązanych pytań dotyczących domknięć: Czy domknięcia są uważane za nieczyste w programowaniu funkcjonalnym? Wydaje się, że generalnie można uniknąć domknięć, przekazując wartości bezpośrednio do funkcji. Czy zatem w miarę możliwości należy unikać zamknięć? Jeśli są nieczyste i słusznie stwierdzam, że można ich uniknąć, dlaczego tak wiele funkcjonalnych języków programowania obsługuje domknięcia? **Edytuj:** dodaję trochę więcej kontekstu, aby wyjaśnić, dlaczego jestem zdezorientowany. Czytałem na wikipedii, że jednym z kryteriów czystej funkcji jest to, że „Funkcja zawsze ocenia tę samą wartość wyniku przy tych samych ** wartościach argumentów **”. http://en.wikipedia.org/wiki/Pure_function Załóżmy, że f: x -> x + y `f(3)` nie zawsze da ten sam wynik. `f(3)` zależy od wartości `y`, która nie jest argumentem `f`. Zatem `f` nie jest czystą funkcją. Skoro wszystkie domknięcia opierają się na wartościach, które nie są argumentami, jak to możliwe, aby każde domknięcie było czyste? Tak, teoretycznie wartość zamknięta może być stała, ale nie ma sposobu, aby się tego dowiedzieć po prostu patrząc na kod źródłowy samej funkcji. Prowadzi mnie to do tego, że ta sama funkcja może być czysta w jednej sytuacji, ale nieczysta w innej. Nie można _zawsze_ określić, czy funkcja jest czysta, czy nie, studiując jej kod źródłowy. Raczej trzeba by było rozważyć to w kontekście jego środowiska w momencie, gdy jest ono wywoływane, zanim będzie można dokonać takiego rozróżnienia. Czy dobrze o tym myślę?


title: Strategia wersjonowania i aktualizacji klienta dla aplikacji internetowych

text: Piszę aplikację internetową i zastanawiam się nad przyszłymi aktualizacjami i tym, jak aktualizacja aplikacji internetowej wpłynie na wrażenia użytkownika. W szczególności zastanawiałem się, jak firma taka jak Google podchodzi do tego problemu. Na przykład widziałem kilka przykładów, w których konkretna aplikacja Google zapyta użytkownika, czy chce uaktualnić do „nowych dokumentów Google” lub podobnych. To jest doświadczenie, które chciałbym zapewnić, ale nie jestem pewien, jak się do tego zabrać. Jeśli ma to znaczenie, piszę aplikację, która używa backbone.js i ma składnik po stronie klienta ciężkiego JS. Widziałem kilka dyskusji na temat wersjonowania komponentu REST lub komponentu WebServices, ale żadna nie omawiała faktycznego kodu po stronie klienta lub komponentów zaplecza (oczywiście backend może nie mieć większego znaczenia, jeśli wszystko jest za wersjonowaną usługą internetową). Jestem zainteresowany tym, jak to osiągają, z punktu widzenia aplikacji i (przypuszczalnie) z punktu widzenia bazy danych zaplecza. Wygląda więc na to, że jest kilka problemów. * Gdzie w katalogu głównym znajdują się wersjonowane aplikacje? * Jak udostępniasz różne wersje różnym użytkownikom? * Jak wersjonować backend datastore? * Ponieważ używam sieci szkieletowej, szczególnie interesuje mnie zaprojektowanie routera dla tego typu aplikacji. Jeśli różne wersje znajdują się w podkatalogu, jak stworzyć odpowiedni router? Prawdopodobnie są też inne względy. Wszelkie porady będą mile widziane.


title: jak porównać dwa duże zestawy danych za pomocą PL/SQL?

text: Mam dwie różne tabele w dwóch osobnych bazach danych, każda z około 1,5 miliona rekordów. (BTW: pracuję nad bazami danych Oracle) Celem jest sprawdzenie, czy każdy rekord obecny w tabeli A jest również obecny w tabeli B. Ponieważ tabele istnieją w różnych bazach danych, myślę, że nie mogę obliczyć „różnicy” między nimi , więc to, co aktualnie robię, to wybieranie potrzebnej mi kolumny z każdej bazy danych i przechowywanie wszystkich wierszy w osobnych plikach tekstowych. Następnie ładuję zawartość jednego z plików do słownika (za pomocą pythona), a następnie iteruję drugi plik sprawdzając, czy wszystkie wiersze są obecne w słowniku. Chciałbym to uprościć, być może bezpośrednio w procedurze przechowywanej w bazie danych. Moje główne obawy to: 1. Nie wiem, czy tablice asocjacyjne PL/SQL są tak wydajne jak słownik (zakładam, że słowniki Pythona mają stały czas wyszukiwania) 2. Fakt, że tabele istnieją w różnych bazach danych, sprawia, że myślę, że byłoby niemożliwe jest „dotarcie” do zawartości tabeli B, jeśli procedura składowana znajduje się w bazie danych tabeli A lub odwrotnie. Z góry dziękujemy za wszelkie sugestie!


title: ORM i architektura oparta na komponentach

text: Dołączyłam do trwającego projektu, w którym zespół nazywa swoją architekturę „komponentową”. Najniższy poziom to jedna duża baza danych. Dostęp do danych (przez ORM) i warstwy biznesowe są **łączone** w różne komponenty. Np. jest komponent do obsługi rachunków bankowych, jeden do generowania faktur itp. Czyli każdy komponent zawiera dostęp do danych tylko do części schematu. Moim problemem jest połączenie dostępu do danych i logiki biznesowej w takiej strukturze, ponieważ taka partycja ma sens dla logiki biznesowej, ale komplikuje dostęp do danych. Z mojego punktu widzenia rozdzielenie warstwy dostępu do danych na różne komponenty wydaje się nieproduktywne, ponieważ odbiera nam relacyjne możliwości mapowania ORM. Np. gdy chcę wysłać zapytanie o wszystkie faktury dla jednego klienta, muszę zidentyfikować klienta z komponentem „klienci”, a następnie ponownie wywołać komponent „faktury”, aby uzyskać faktury dla tego klienta. Jednostka Customer nie może mieć właściwości Orders, ponieważ Zamówienia są mapowane w innym komponencie. Czy ktoś ma jakieś rady? Czy coś przeoczyłem?


title: Sugestie dotyczące postępowania z zespołem hiperterytorialnym

text: Właśnie zacząłem nową pracę i w Nibylandii nie jest dobrze. Miałem duże nadzieje z tą firmą, ale kiedy przyjechałem, wszedłem do zespołu, z którym ciężko mi się pracuje... Dwóch obecnych programistów w tym projekcie ma trudności z zaakceptowaniem jakichkolwiek sugestii lub zmian w kodzie że przez ostatnie kilka miesięcy pisali. Wydaje się, że jest to polityczne pole minowe i jak dotąd ich sposób radzenia sobie z nowym członkiem zespołu polegał na unikaniu wyjaśniania jak najwięcej. przykład: to jest przepisanie istniejącego systemu i najwyraźniej nie muszę nic wiedzieć o starym systemie, ponieważ już go przejrzeli i wiedzą, co należy zrobić. Nie chcę, aby była to długa tyrada, ale są też inne problemy, w tym mikrozarządzanie, przypisywanie tylko błahych poprawek i niechęć do rozważenia jakiejkolwiek sugestii, pomysłu lub drobnej zmiany kodu, która jest odejściem od tego, jak to jest obecnie napisane. Przykład: naprawiłem błąd, aby upewnić się, że ekran wyszukiwania obcina nazwy dłuższe niż 25 znaków. Jeden z dotychczasowych programistów skomentował, że muszę z nim porozmawiać przed rozpoczęciem pracy, aby mógł mi pokazać, jak wykonuje się istniejące obcinanie ciągu, LOL. Jeśli sprawdzę kod bez wcześniejszej konsultacji z nimi, „zespół” zdecyduje, że należy go przerobić. JAK mam sobie z tym poradzić? Czy ktoś kiedykolwiek przezwyciężył podobne problemy? Czy to tylko przegrana sprawa??? PS Nie jestem młodszym ani niekompetentnym programistą. Nie jestem gwiazdą rocka, ale mam tyle samo doświadczenia i wiedzy, co reszta mojego zespołu, więc nie sądzę, żeby to był podstawowy problem.


title: Utknął z powodu „za dużo wiedzy”

text: Zwróć uwagę na więcej dyskusji na http://news.ycombinator.com/item?id=4037794 Mam stosunkowo proste zadanie programistyczne, ale za każdym razem, gdy próbuję je zaatakować, wpadam w spiralę głębokich myśli - jak to może przedłużyć przyszłość , czego będą potrzebować klienci drugiej generacji, jak to wpływa na aspekty „niefunkcjonalne” (np. Wydajność, autoryzacja…), jak najlepiej byłoby to zaprojektować, aby umożliwić zmianę… Pamiętam siebie jakiś czas temu, młodszy i być może bardziej chętny. „Ja”, którym wtedy byłem, nie pomyślałby o tym wszystkim - poszedłby naprzód i napisał coś, a potem przepisał to, a potem przepisał jeszcze raz (i jeszcze raz...). „Ja” dzisiaj jest bardziej niezdecydowane, bardziej ostrożne. Dziś o wiele łatwiej mi jest siedzieć, planować i instruować innych ludzi, jak robić różne rzeczy, niż robić to sam – nie dlatego, że nie lubię kodować – wręcz przeciwnie, uwielbiam to robić! - ale ponieważ za każdym razem, gdy siadam przy klawiaturze, kończę w tym samym irytującym miejscu. Czy to źle? Czy to naturalna ewolucja, czy też popadłem w rutynę? Uczciwe ujawnienie - w przeszłości byłem programistą, dziś zawodowo pracuję jako "architekt systemowy". Powodzenia w zorientowaniu się, co to znaczy - ale taki jest tytuł. * * * Wow. Szczerze mówiąc, nie spodziewałem się, że to pytanie wywoła tak wiele odpowiedzi. Spróbuję to podsumować. Powody: 1. Paraliż analizy / Nadmierna inżynieria / złocenie / (każde inne "zbyt dużo myślenia z góry może cię skrzywdzić"). 2. Za dużo doświadczenia na dane zadanie. 3. Nie skupianie się na tym, co ważne. 4. Za mało doświadczenia (i uświadomienie sobie tego). Rozwiązania (niedopasowane do powodów): 1. Najpierw test. 2. Zacznij kodować (+ dla zabawy) 3. Jeden do wyrzucenia (+ jedno API do wyrzucenia). 4. Ustaw ograniczenia czasowe. 5. Usuń puch, pozostań z rzeczami. 6. Stwórz elastyczny kod (coś w przeciwieństwie do "jeden do wyrzucenia", nie?). Dziękuję wszystkim - myślę, że główną korzyścią było uświadomienie sobie, że nie jestem sam w tym doświadczeniu. Właściwie już zacząłem kodować i oczywiście niektóre zbyt duże rzeczy odpadły. Ponieważ to pytanie jest zamknięte, przyjmę odpowiedź z największą liczbą głosów na dzień dzisiejszy. Kiedy/jeśli to się zmieni - postaram się śledzić.


title: Tworzenie nowych aplikacji - Korzystasz z istniejącej bazy danych czy tworzysz nową?

text: Klient ma ogromną aplikację Windows działającą na bazie danych. Ten klient chce, abyś opracował wersję „ekspresową” tej aplikacji, zawierającą tylko, powiedzmy, 20% jej funkcji. Ta wersja Express musi być aplikacją internetową, otwartą w sieci WWW. Masz 2 możliwości: * Użyj tej samej bazy danych do opracowania aplikacji internetowej * Utwórz nową bazę danych dla aplikacji internetowej, zawierającą tylko niezbędne tabele i obiekty oraz użyj mechanizmu synchronizacji, aby bazy danych były aktualne. Klient preferuje drugą opcję, ponieważ: Bezpieczeństwo: Jeśli mają oddzielną bazę danych dla aplikacji internetowej, nie będą „ujawniać” ogromnej bazy danych aplikacji Windows w Internecie. Wydajność: aplikacja Windows ma ogromny proces, który uruchamia się w nocy i "blokuje" bazę danych na kilka minut. Tak więc utworzenie oddzielnej bazy danych zapewniłoby lepszą wydajność aplikacji internetowej. Preferuję pierwszą opcję, ponieważ: Integrity: Jeśli mamy różne bazy danych, nie będziemy mogli tworzyć kluczy obcych między nimi. Unikaj synchronizacji: Jeśli mamy różne bazy danych, musielibyśmy stworzyć mechanizm synchronizacji, który jest bardzo podatny na awarie. Konserwacja: Konserwacja będzie łatwiejsza, jeśli będziemy mieć tylko jedną bazę danych. Żadne zmiany nie będą musiały być powielane. Czy możesz mi pomóc zdecydować, którą drogą podążać i dlaczego?


title: Zachęcanie inżynierów oprogramowania do śledzenia czasu

text: Jak mogę zachęcić moich współpracowników do śledzenia czasu, jaki spędzają na rozwiązywaniu problemów i wdrażaniu funkcji? Mamy do tego oprogramowanie, ale oni po prostu nie wpisują liczb. Chcę, aby zespół był lepszy w dostarczaniu szacunków projektów, porównując nasze wcześniejsze szacunki z faktycznie spędzonym czasem. Podejrzewam, że moi współpracownicy nie widzą osobistej korzyści, ponieważ nie są często zaangażowani w planowanie projektów.


title: Jak pokazać komuś moc wzorca projektowego model-widok-kontroler?

text: Pracowałem z przyjacielem nad projektem, który przejęliśmy i zdałem sobie sprawę, że mamy duży problem z zaimplementowaniem wzorca projektowego model-widok-kontroler ze względu na sposób, w jaki projekt został skonfigurowany. Projekt jest obecnie podzielony na następujące trzy sekcje (pliki .proj w Visual Studio): 1. Klasy modelu. 2. Klasy kontrolerów (logika warstwy biznesowej). 3. Zobacz zajęcia. Visual Studio nie pozwala mi na tworzenie cyklicznych odniesień (co jest zrozumiałe) między dwoma z tych trzech podprojektów. Oznacza to, że klasy kontrolerów mogą mieć związek z klasami widoku, ale klasy widoku nie mogą mieć relacji z klasami kontrolera! W rezultacie, gdy tylko kontroler wyświetli widok, reszta logiki sterującej musi przejść do klasy widoku! Zaproponowałem więc połączenie wszystkich trzech podprojektów razem (aby uniknąć cyklicznych odniesień visual studio). Oznacza to, że możemy stworzyć wszystkie relacje między trzema typami klas, których wymaga paradygmat projektowania model-widok-kontroler. Docelowo będziemy mogli umieścić logikę kontrolującą we właściwym miejscu kontrolerów, usuwając ją z klas widoków. Problem w tym, że trudno mi do tego przekonać mojego przyjaciela. Uważa, że posiadanie tych oddzielnych granic między podprojektami oznacza bezpieczeństwo, że nigdy nie zrobimy takich rzeczy jak umieszczanie kontroli lub przeglądania kodu w modelu (ponieważ podprojekt modelu jest obecnie zawsze przywoływany i nie patrz kontroler lub widok). Zastanawiałem się, czy ktoś mógłby wymyślić kilka sposobów, dzięki którym mógłbym naprawdę przekazać swoją opinię na temat tego, jak ważny jest ten wzorzec projektowy i jak ograniczające byłoby to, aby iść przeciwko niemu i kontynuować umieszczanie logiki kontrolera w klasach widoku? Wielkie dzięki.


title: Czy istnieje różnica w alokacji zasobów i wydajności między aplikacją internetową a skompilowaną?

text: Jestem programistą stron internetowych. Czuję, że często opracowuję mniej zasobochłonne funkcje, ponieważ mam wrażenie, że jeśli poproszę o zbyt dużo aplikacji sieciowej (animacja, obliczenia, połączenia itp.), będzie ona opóźniona dla użytkowników z wolniejszymi komputerami. Od jakiegoś czasu byłem ciekawy, jaka jest różnica w możliwości (alokacji zasobów) aplikacji internetowej (interpretowanej) w porównaniu z skompilowaną. Słyszałem też, że programy zinterpretowane (na przykład JS) są bardzo nieefektywne i zasobożerne w porównaniu z programami skompilowanymi (na przykład C++). Mówi się, że Google V8 JS Engine sprawia, że JS jest szybszy, ale wciąż widzę, że ludzie mówią o tym, że JS jest znacznie mniej wydajny niż C++. * * * Powodem, dla którego zadaję to pytanie, jest oddzielenie faktu od stronniczej opinii. * Czy istnieje różnica w dostępnym procesorze i pamięci RAM między aplikacją internetową a skompilowaną? * Czy istnieje duża różnica wydajności między programem napisanym w (języku interpretowanym) JS a programem napisanym w (języku skompilowanym) C++? * * * Edytuj: Zdaję sobie sprawę, że porównujemy tutaj jabłka i pomarańcze. Istnieje kilka naprawdę dobrze zdefiniowanych aspektów wyboru między C++ (wszystko skompilowane) a JavaScript (web) podczas tworzenia aplikacji klienckiej i jest to jeden z aspektów tej decyzji, o którym nie chciałbym być źle poinformowany, gdyby miał nadejść w dowolnym momencie mojej kariery.


title: Jak działa rozwój zespołu?

text: To dość ogólne pytanie, ale zastanawiałem się nad nim od jakiegoś czasu: czy istnieje ustandaryzowany, ogólnie akceptowany, a nawet systematyczny sposób, w jaki ludzie piszą kod jako grupa? Na przykład, czy w projekcie napisanym w C++ jeden programista pisze jedną klasę, którą przekazuje następnemu programiście z szybkim wyjaśnieniem, co robi każda metoda?


title: cesja licencji i praw autorskich

text: Obecnie pracuję nad wtyczką wordpress. Mój klient daje mi dokument ze specyfikacjami (prezentację PowerPoint, jeśli można to nazwać dokumentem ze specyfikacjami), a ja koduję żądaną funkcjonalność. Za każdym razem, gdy wysyłam mu kod, każdy plik zawierający kod zaczyna się od następujących wierszy: Autor: My Name Prawa autorskie: The_client's_company.com Licencja: MIT Expat (http://en.wikipedia.org/wiki/Expat_License) klient ma pełne prawo do ponownego licencjonowania i rozpowszechniania kodu na dowolnej innej licencji (zgodnie z TOS strony freelancerskiej, plus wiem, że zamierza sprzedawać ją na licencji własnościowej), ale jednocześnie dając sobie prawo do rozszerzania i redystrybucji wtyczka na licencji MIT, jeśli chcę (nie, że tak). Powodem jest to, że otrzymuję tylko 10 USD/godzinę (to mój pierwszy koncert), więc chcę przynajmniej zachować prawo do ponownego wykorzystania części kodu w innych projektach lub go rozszerzyć, jeśli chcę sam rozpocząć podobny projekt po skończeniu kontrakt (mało prawdopodobne, ale kto wie…) lub pokaż go potencjalnym pracodawcom. Umowa, którą uzgodniliśmy, nie zawiera żadnych specyfikacji licencyjnych, ale poinformowałem go w e-mailach, które wymieniliśmy, że chociaż wszystkie moje prace są domyślnie licencjonowane jako MIT, to przekazuję moim klientom prawa autorskie do tworzonego przeze mnie kodu, więc mogą ją dowolnie przekazywać przed dystrybucją. Czy to właściwy sposób na osiągnięcie tego?


title: Czy klocki są obywatelami drugiej kategorii w Objective-C (w porównaniu z Ruby)?

text: Pewnego dnia nieco dowcipny, napisałem metodę `eachWithIndex:` w kategorii `NSArray`. Ma typedef taki: typedef void (^processItem)(id item, int index); a metoda wygląda tak: - (void)eachWithIndex:(processItem)block { for (int i=0; i<self.count; i++) { id item = [self objectAtIndex:i]; blok(pozycja, i); } } Jednakże, jeśli mój blok zawiera `return` w dowolnym momencie, nie wyskakuje on z metody wywołującej (ani z bloku). Rozważmy następujący kod w Ruby: def bla %w{jeden dwa trzy}.each_with_index {|thing, i| umieszcza "#{i}=#{rzecz}"; powrót "cześć!" jeśli i==1 } kończy "blah robi więcej rzeczy" gdy `i` osiągnie jeden, metoda `blah` się zakończy. W Obj-C tak się nie dzieje i czuję, że powinno. Czy bloki są bardziej zintegrowane z Ruby niż Objective-C?


title: Co powinienem wziąć pod uwagę przy podejmowaniu decyzji, czy powinienem użyć backendu usługi sieciowej zamiast tradycyjnego MVC?

text: Próbujemy zdecydować, jakiej architektury użyć w nadchodzącej aplikacji internetowej, która ostatecznie będzie miała również część mobilną. Rdzeniem projektu jest aplikacja sieci społecznościowej, a część mobilna najprawdopodobniej będzie miała ograniczony podzbiór funkcjonalności sieciowej. Dwie opcje, na które patrzymy, to albo **kompletny back-end usługi internetowej**, albo użycie **tradycyjnego frameworka MVC** dla aplikacji internetowej, a następnie rozwijanie usług internetowych po stronie dla aplikacji mobilnej później. Niektóre argumenty przemawiające za trasą tylko dla usług internetowych są takie, że byłoby to „prostsze”, ponieważ musielibyśmy po prostu utworzyć 1 usługę internetową, w przeciwieństwie do tworzenia zarówno usługi internetowej dla części mobilnej, jak i dodatkowych funkcji/wywołań bazy danych dla sieci aplikacja. Korzystając z tej metody, aplikacja internetowa pobierze dane z usług internetowych za pomocą javascript, które następnie wygenerują stronę html (brzmi to trochę jak to, co robi tradycyjny framework MVC, ale w ten sposób wymagałoby to, aby wszystko było zrobione w javascript). Nie czuję się dobrze z pomysłem korzystania z usług internetowych tylko dlatego, że nie ma to dla mnie sensu, ale mam problem z wyjaśnieniem moich problemów z nim. Więc co powinienem wziąć pod uwagę, próbując ustalić, czy powinniśmy użyć kompletnego zaplecza usług internetowych dla naszego projektu, zamiast tradycyjnego MVC z usługami internetowymi dostępnymi tylko wtedy, gdy są potrzebne dla mobilnej części aplikacji? Szukam wyczerpującej odpowiedzi na to pytanie, nie wielu odpowiedzi, z których każda zawiera jedną część odpowiedzi.


title: Jaki jest najbardziej oszczędny sposób implementacji grafowej struktury danych?

text: Zazwyczaj implementuję wykresy jako podwójnie połączone listy, ale z mojego doświadczenia wynika, że jest to dość niewydajne pod względem miejsca, ponieważ potrzebuję k wskaźników/odniesień dla k sąsiadów, więc dla nieskierowanego grafu miałbym ~ 2k łączy sąsiednich na listach, jeśli moja matematyka jest poprawna. Czy istnieje lepszy sposób na zaoszczędzenie miejsca? Wiem, że niektóre linki mogą być pojedyncze, jeśli wykres jest skierowany, ale czy istnieje sposób na lepsze wykonanie tego?


title: Czy/czy powinienem umieścić moje repozytorium Git na maszynie innej niż deweloperska i synchronizować je z serwerem kontroli wersji bez wersji?

text: Zgłaszam się na ochotnika do stworzenia strony internetowej, ale w zasadzie nie mamy kontroli wersji. Pracujemy nad tym, aby to zmienić, ale z powodu kilku rzeczy, w tym faktu, że nie pracowałem wcześniej z kontrolą źródła, od jakiegoś czasu to się nie dzieje. W międzyczasie chciałbym przenieść moje pliki robocze do kontroli źródła (prawdopodobnie Git) dla oczywistych korzyści. Oto rzecz: na serwerze sieciowym znajdują się setki tysięcy plików generowanych przez użytkowników, których tak naprawdę nie chcę na moim komputerze deweloperskim, ponieważ cóż, płacę za własny sprzęt (w końcu jest dobrowolny, więc jest nie tak, że mogę wydać nowy dysk twardy), a mój dev jest również moim codziennym komputerem i wolałbym nie zapchać go mnóstwem rzeczy, które nie muszą tu być. Mam jednak pusty system, który jest gotów do przechowywania wszystkich tych danych. Najprawdopodobniej system ten i tak będzie hostował całą lokalną kopię witryny jako kopię zapasową. Tak więc i mam nadzieję, że nie jest to całkowicie szalony pomysł, zastanawiam się nad umieszczeniem repozytorium Git na tej maszynie. Nie zamierzam jednak rozwijać się na tej maszynie. Więc, * Czy umieszczenie repozytorium Git na innym komputerze niż komputer deweloperski to naprawdę zły pomysł? Powinno to być technicznie wykonalne, ponieważ znajduje się w tej samej sieci i nie sądzę, aby moje IDE miało problem z połączeniem się z nim, ale to nie znaczy, że jest to straszny pomysł. Umieszczenie repozytorium na moim komputerze deweloperskim nie jest wykluczone, ale lepiej byłoby umieścić je na pustym. * (Mam nadzieję, że jest to wystarczająco powiązane, aby pozostać w tym samym pytaniu) Ponieważ w witrynie pracują inne osoby, zmiany zajdą w witrynie zdalnej, która nie zostanie poddana kontroli źródła. Skoro wolałbym, aby te dwa pozostały zsynchronizowane, czy mógłbym utworzyć repozytorium Git na serwerze, ściągnąć i scalić zmiany do mojego lokalnego, a następnie po prostu przesłać zmiany przez FTP? Przeprowadzenie jakiejkolwiek prawdziwej kontroli wersji na serwerze nie jest w tej chwili możliwe (jak powiedziałem, nad tym trwają prace), ale repozytorium, którego nie dotykamy, to inna sprawa. Czy byłby to w ogóle wykonalny plan?


title: Co muszę zrobić, aby NIE ukraść kodu „Hello World” z licencją GPL?

text: W projekcie znalazłem plik `math.c`, z dużym nagłówkiem GPL i ... //-------------------------------------- -------------------------------------------------- ---- /// Zwraca minimalną wartość między dwiema liczbami całkowitymi. /// \param Pierwsza liczba całkowita do porównania. /// \param b Druga liczba całkowita do porównania. //------------------------------------------------ ------------------------------ unsigned int min(unsigned int a, unsigned int b) { if (a < b) { zwrócić; } inny { powrót b; } } OK, fajnie, więc muszę uzyskać wartość min i ... **_this file_**!? Więc z tego powodu muszę otworzyć cały projekt? A może muszę wymyślić matematykę na nowo? Nie wierzę, że to po prostu szaleństwo, więc pytanie brzmi: kiedy możemy po prostu usunąć nagłówek GPL? Czy muszę _być dziwakiem i to zrobić_?: unsigned int min( unsigned int JEIOfuihFHIYEFHyigHUEFGEGEGEJEIOFJOIGHE, unsigned int hyrthrtRERG ) { if (JEIOfuihFHIYEFHyigHUEFGEJEIOFJOIGHE <igHUEFGEGEHJEFIRTHRT JOIGHE< } else {zwróć hyrthrtRERG ; } } Poważnie, czy chcą, żebym pisał kod taki jak powyżej?


title: Korzyści z używania statycznej klasy wewnętrznego konstruktora

text: Podczas pisania wytycznych do kodu dla firmy zalecałem używanie wzorca Builder z Effective Java, zamiast konstruktorów teleskopowych. Jednak po zastanowieniu się, z pewnością bardziej eleganckim rozwiązaniem jest po prostu usunięcie klasy builder, a także usunięcie dodatkowych konstruktorów z opcjonalnymi argumentami. Więc po prostu miej jeden konstruktor z wymaganymi parametrami, normalnymi metodami pobierającymi/ustawiającymi i komentuj kod. Podczas implementacji po prostu utwórz nową instancję obiektu yr, a następnie ustaw wartości. Moje pierwotne myślenie było takie, że korzyść wynikała z usunięcia zamieszania co do tego, jakie parametry są opcjonalne, a jakie są wymagane; jednak prawdziwa korzyść wynika z używania łączenia metod/płynnego interfejsu. Wzorzec budowniczy ma zalety, gdy tworzysz wiele nowych instancji, ponieważ ide może wykonać pracę nóg, a także jeśli istnieje wiele (15+) opcjonalnych parametrów. Jednak czy warto poświęcić więcej czasu na kodowanie statycznej klasy wewnętrznej, czy poleciłbyś użycie konstruktora, czy jest to strata czasu?


title: Czy początkujący programista może rozpocząć naukę tworzenia gier?

text: Jestem bardzo nowy w programowaniu i używam Javy. Zainteresowałem się programowaniem, ponieważ chcę tworzyć gry. Uwielbiam grać w gry komputerowe i wiem, że twórcy gier zarabiają pieniądze. Powiedziałem sobie, że zamiast po prostu grać, dlaczego nie stworzyć własnej gry i prawdopodobnie zarobić trochę pieniędzy. Przeczytałem kilka artykułów o tworzeniu gier przy użyciu javy i dowiedziałem się o JMonkey. Właśnie zainstalowałem go na moim komputerze z Ubuntu. Czy powinienem najpierw nauczyć się podstaw Javy, czy mogę jednocześnie rozpocząć naukę JMonkey i Javy? Wiem, że JMonkey to silnik gier zbudowany przy użyciu Javy i zapewnia biblioteki, które pomagają programistom w wydajnym tworzeniu gier Java, ale jest to trochę zaawansowane dla manekina takiego jak ja.


title: Czy powinieneś ćwiczyć TDD na aplikacjach prototypowych?

text: Tworzę aplikację na iOS, która jest prototypem dla klienta. Spodziewają się, że nie będzie to standard produkcyjny i cieszą się z kilku ostrych krawędzi tu i tam. Ponieważ jest to moje pierwsze komercyjne przedsięwzięcie w iOS / Objective C (jestem programistą Androida, który próbuje przeszkolić się na iOS), moim głównym celem była nauka języka Objective C i tworzenia aplikacji, i mam nie zainwestował czasu w naukę, jak można zastosować TDD w tym środowisku. Moje pytanie brzmi, czy nawet w przypadku prototypów należy nadal próbować stosować TDD i tworzyć testy jednostkowe?


title: Czy WCF nadaje się do pisania aplikacji, która jest współużytkowana przez aplikacje?

text: Opracowałem i wdrożyłem kilka aplikacji ASP.NET. Czasami chcę uniemożliwić użytkownikom wstawianie lub aktualizowanie rekordu, gdy: 1. Trwa konserwacja. 2. Zatrzymaj operacje z powodu opóźnienia płatności. W jednej z moich ostatnich aplikacji zaimplementowałem tę funkcję, aby najpierw sprawdzić operacje bazy danych pod kątem zablokowanego statusu. Jeśli którykolwiek z powyższych warunków jest spełniony, operacje bazy danych, takie jak wstawianie i aktualizowanie, nie są wykonywane. Teraz potrzebuję tej funkcji we wszystkich starych aplikacjach i przyszłych aplikacjach, które tworzę. Chcę wiedzieć, czy WCF jest odpowiedni w tym scenariuszu, ponieważ chcę udostępnić metody lub niezależną aplikację blokującą między różnymi innymi aplikacjami. Czy program WCF jest odpowiedni dla tego typu scenariusza?


title: Czy istnieje lepsze podejście do znajdowania najkrótszej ścieżki w (pojazdowej) sieci drogowej?

text: Drodzy koledzy programiści, Tworzymy oprogramowanie symulujące ruch samochodowy. Część procesu zwana „przypisaniem” dotyczy przypisywania pojazdów do ich tras i musi korzystać z pewnego rodzaju algorytmu znajdowania najkrótszej drogi. Tradycyjnie ludzie robią to z Dijkstrą, a pewna literatura naukowa wydaje się wskazywać, że A* i inne alternatywy nie dają żadnej znaczącej poprawy, być może ze względu na naturę wykresu. Dlatego używamy również Dijkstry. Pojawił się mały problem, jeśli potraktujesz połączenia drogowe (rozpiętości dróg między skrzyżowaniami) jako krawędzie, a skrzyżowania jako węzły, nie uzyskasz klasycznego wykresu jednokierunkowego: zbliżanie się do skrzyżowania, na którym można często skręcać, zależy od skąd pochodzisz, podczas gdy w tradycyjnym grafie możesz wziąć dowolną krawędź z węzła. Rozwiązaliśmy ten problem dość łatwo, przedstawiając parę przecięcia łącza (nazwijmy ją „lath”) jako węzeł. Ponieważ musiałbyś przejść przez łącze, aby dostać się do dowolnej kolejnej „łaty” lub wybranego punktu, krawędź zostanie zdefiniowana jako to przejście i otrzymasz typowy wykres. Wyniki są następnie przechowywane w prostej tabeli N x N, gdzie N jest liczbą „łat”. Oto (nieunikniona?) wada. Jeśli typowa sieć dla naszej symulacji może mieć, powiedzmy, 2000 skrzyżowań, to będzie miała około 6000 łączy, czyli N = 3V. Oczywiście, jeśli liczyć jako przecięcia (V), jesteśmy teraz do O(log(3V)*(3V + E)). Możesz argumentować, że 3 (lub 9) jest stałym czynnikiem, ale z praktycznego punktu widzenia spowalnia to trochę i zwiększa przestrzeń dyskową do 3 V x 3 V. Czy ktoś ma jakiś pomysł, jak możemy to zmienić, aby poprawić wydajność? Niekoniecznie jakiś alternatywny algorytm, być może przekształcenie struktur danych tak, aby pasowały do wykresu w inny sposób?


title: Czy byłoby to uważane za wstrzyknięcie zależności?

text: Czy byłoby to uważane za wstrzykiwanie zależności, delegowanie lub współpracę obiektów? https://gist.github.com/3428071


title: Czy domyślne ustawienie niewirtualne prowadzi nas do tworzenia kompozycji nad dziedziczeniem?

text: Istnieje kilka wskazówek projektowych dotyczących testowalnego kodu w „Sztuce testowania jednostkowego”. Pierwszy to „Domyślne ustawienie wirtualnych metod”. Jestem ciekaw, jaki masz pomysł na zachowanie niewirtualnego domyślnego zachowania w C#. Czytałem o opiniach Hejlsberga, ale myślę, że jednym z najważniejszych powodów może być to, że może to doprowadzić nas do zasady „składu nad dziedziczeniem”. Czy „kompozycja nad dziedziczeniem” może być jednym z tych powodów, dla których nie-wirtualny domyślnie jest lepszy od domyślnego wirtualnego? **AKTUALIZACJA** Jeśli chodzi o ten temat, rozważ punkt widzenia oparty na testach; gdzie chcemy napisać testowalny kod. Chociaż zachęca się nas do domyślnego ustawienia wszystkich członków jako wirtualnych (we wspomnianej książce), możemy podążać za „składem ponad dziedziczeniem” i domyślnie korzystać z niewirtualnego. Czy nie jest lepiej?


title: Google App Engine – czy powinniśmy go używać?

text: Rozważam użycie Google App Engine do dopasowywania online (i prawdopodobnie rankingu, nie jestem pewien) użytkowników w (obecnie hipotetycznej) grze RTS. Jednak właśnie przeczytałem tę złą recenzję, co mnie zdenerwowało. Jakie problemy rozwiązali (lub planują rozwiązać), co może być dla mnie problemem i czy są jakieś alternatywy?


title: Jakie są obecne problemy związane z wzorcami programowania inżynierii oprogramowania?

text: czy ktoś może mi zasugerować aktualne problemy w inżynierii oprogramowania i linki do badań? mam pewną wiedzę na temat MVVM jako wzorca, ale chciałbym dowiedzieć się więcej o innych, a także o bieżących problemach, dlaczego ludzie sięgają po wzorce i w jaki sposób pomagają, i jakie są nadal aktualne problemy i badania związane z tą dziedziną, jakakolwiek pomoc jest bardzo doceniany, dziękuję


title: Strategia podczas kodowania

text: Przeczytałem w jednym z artykułów "45 minut kodowania i 15 minut odpoczynku". Zacząłem to realizować, początkowo przy mniejszych zadaniach czułem się bardzo miło, ale gdy przyszły trudne i skomplikowane zadania, nie byłem w stanie ukończyć zadania w 45 minut i zaczęło wywierać na mnie presję i się stresowałem. co byś mi zasugerował w tej strategii, czy to jest dobre do zastosowania? czy są jakieś inne dobre?


title: Jak ocenić znajomość programowania funkcjonalnego?

text: Zastanawiałem się, jak ustalić, czy _znam_ programowanie funkcjonalne. Rozumiem, w sensie Czeladnika, nie mistrza, ale wystarczająco kompetentnego, by wykonać pracę. Lubię języki z wbudowanymi konstrukcjami kształtowania zapytań/danych, ale znajomość tajników map, filtrów i agregatów w postaci `Linq`, `Sql` i `Reactive Extensions` wystarczy, by twierdzić, że ktoś wie programowanie funkcjonalne? A może wymagane są dodatkowe konkretne koncepcje i umiejętności? Edycja: od 15 lat pracuję w językach OO i językach, które identyfikują się głównie jako języki OO. Ponieważ nie jestem w środowisku, które samoidentyfikuje się jako funkcjonalne, niewiele mam do porównania. Czy unikanie niezmiennego stanu i wiedza o tym, jak używać `fold` to wszystko, co istnieje?


title: Każdy, kto zdał egzamin 70-515 TS: Tworzenie aplikacji internetowych z Microsoft .NET Framework 4?

text: Zamierzam przystąpić do egzaminu 70-515 i w tej chwili nie mogę znaleźć żadnego zestawu szkoleniowego do niego w prasie MS. Dlatego czytam książkę dla 70-562, która obejmuje framework 3.5. Chciałabym wiedzieć czy ktoś zdał egzamin 70-515 i wie czy zestaw szkoleniowy 70-562 może być pomocny do egzaminu 70-515. Czy ktoś może chcieć zasugerować jakieś zasoby, które pomogą mi zdać ten egzamin? Naprawdę doceniłbym każdą pomoc.


title: Klasa obsługi wyjątków: statyczna czy obiektowa?

text: Pracuję w serwisie Windows (przy użyciu VB.Net) na użytek wewnętrzny mojego działu. Za każdym razem, gdy zostanie przechwycony określony typ wyjątku (na razie „FooException”), postępuję zgodnie z tą samą logiką: * Rejestruj wyjątek * Wyślij e-mail do kogoś. Aby ponownie wykorzystać kod i nie kopiować-wklejać tych samych linii w każdym bloku `catch FooException`, stworzyłem metodę `FooExceptionHandler` w mojej klasie `ExceptionHandling`. Skończyło się na takim kodzie: FooExceptionHandler(fooException) { //zarejestruj wyjątek spróbuj { //wyślij e-mail } catch SmtpException { //zarejestruj wyjątek smtp } } Moje pytanie dotyczy sposobu organizacji kodu. Czy powinna to być metoda statyczna? Czy wszystkie klasy obsługi wyjątków powinny być statyczne? Czy powinien to być singleton? Czy powinien być zorientowany obiektowo? Jeśli najlepszym sposobem jest przypadek zorientowany obiektowo, czy powinienem utworzyć nowy obiekt w każdym bloku catch, czy lepiej mieć zmienną klasy?


title: Pytanie o wybór kolejnego języka programowania pomiędzy C/C++ a innymi językami

text: Jestem programistą java (aplikacje webowe i samodzielne), znający JavaScript, HTML, CSS i zajmujący się głównie aplikacjami webowymi. Nie znam C/C++ ani innych języków niższego poziomu. Czuję, że powinienem wzmocnić podstawy CS, ucząc się podstawowego języka. Czy powinien to być C czy C++? Jestem również skłonny nauczyć się Objective-C. Czy potrzebne są podstawy C lub C++? A może powinienem wybrać nowe języki, takie jak Python, Google's Go itp. Wiem, że to banalne pytanie zadawane bardzo często, ale przyda mi się tutaj pomoc.


title: Czy użyłbyś UML, gdyby powstrzymał interesariuszy od częstego żądania zmian?

text: Chociaż programiści nie znoszą dokumentowania swojego kodu/systemu i rysowania UML (zwłaszcza diagramów Sekwencjonowania, Aktywności i Maszyny Stanu) **lub innej notacji diagramów**, czy zgodziłbyś się to zrobić, gdyby powstrzymało to menedżerów od żądania „drobnej zmiany " Co kilka tygodni? IOW, czy zebrałbyś wizualne modele do udokumentowania systemu, gdyby pomogło to pokazać menedżerom, jaki jest efekt zmian i dlaczego ich wdrożenie trwa tak długo? (Zredagowane, aby pomóc programistom zrozumieć, jakiego rodzaju odpowiedzi szukam.) Druga edycja: Ponowne sformułowanie mojego pytania: „Czy zechciałbyś użyć notacji diagramów, wbrew swojej lepszej naturze jako programisty, jeśli pomogłoby to w zarządzaniu zmianami upraszanie?" To pytanie nie dotyczy tego, czy może być coś nie tak z tym procesem. To oczywiste, że z procesem jest coś nie tak. Czy zechciałbyś wykonać więcej pracy, aby to ulepszyć?


title: Ulepszanie ZooKeepera w celu zwiększenia dostępności

text: Uruchamianie Apache ZooKeeper (dotyczy to również systemu w stylu PAXOS) z 2 członkami - co nie jest zalecane - nie ma sensu, ponieważ jeśli którykolwiek * członek1 zgaśnie * członek2 zgaśnie * istnieje partycja sieciowa między członkiem1 i członkiem2 , ZooKeeper zadeklaruje koniec godzin pracy, ponieważ nie ma jednego podklastra ze zdecydowaną większością członków (w tym przypadku: > 1). Dlatego prowadzenie ZooKeepera na 2 członkach sprawia, że jest on mniej dostępny niż korzystanie z jednego członka. Dlaczego nie można złagodzić ograniczenia większości, aby w przypadku **podzbioru dokładnie 50% członków był on uważany za aktywny podzbiór, jeśli zawiera najstarszego członka**? (Najstarsze na dzień tuż przed partycją, tj. gdy klaster był kompletny) Najstarsze informacje, które ZooKeeper już śledzi, więc implementacja wygląda na łatwą. W ten sposób nie wpadniemy w przerażający scenariusz z rozszczepieniem mózgu, a klaster ZooKeeper może utrzymać się w 2 z 3 powyższych przypadków, poprawiając dostępność, szczególnie przy korzystaniu tylko z 2 członków. Coś przemawia przeciwko temu?


title: Algorytm a projektowanie

text: > **Możliwy duplikat:** > Czy nauka algorytmów jest niezbędna, aby być prawdziwym programistą? Być może to pytanie dotyczy głównie **programistów internetowych**, którzy, tak jak ja, kodują aplikacje korporacyjne i używają głównie języków wysokiego poziomu, takich jak **Java, C#**. Ze względu na naturę aplikacji internetowych dla przedsiębiorstw, które zasadniczo wykonują operacje **CRUD**, a ponieważ w dużym stopniu polegamy na bibliotekach dostarczanych przez język, **jakie znaczenie mają algorytmy uczenia się?** Wiem, że sieć jest pełna artykuły dobitnie stwierdzające, że "kod jest algorytmem", ale kiedy ostatnio ktoś napisał algorytm _quicksort_ w takiej aplikacji? Widzę znacznie więcej korzyści w nauce wzorców projektowych i antywzorców, które są często używane.


title: Jak mogę utworzyć zestaw liczb losowych na podstawie sumy i liczby obiektów?

text: Na przykład z: Całkowita populacja = 400000 Liczba wiosek = 800 Średnia populacja wynosi 500 Jak mogę losować liczbę osób w każdej wiosce przy użyciu określonego odchylenia (np. +-50), aby była równa całkowitej populacji? Wymyśliłem rozwiązanie przy użyciu tej klasy rozkładu normalnego. Zasadniczo stworzyłem rozkład normalny i użyłem funkcji gęstości prawdopodobieństwa, aby określić liczbę wiosek na każdym odrębnym poziomie (aż do osiągnięcia całkowitej liczby ludności). To jest coś, co napisałem szybko, aby zademonstrować: NormalDist dist = new NormalDist(500.0, 50.0); int popX = 500; int numberOfPopXVillages = Convert.ToInt32(Math.Floor(dist.PDF(popX) * 800)); ; int suma Suma = 0; zrobić { Konsola.WriteLine(liczbaPopXVillages); suma sumy += popX * numberOfPopXVillages; totalSum += (1000 - popX) * numberOfPopXVillages; ++popX; numberOfPopXVillages = Convert.ToInt32(Math.Floor(dist.PDF(popX) * 800)); } while (liczbaOfPopXVillages >= 5); Konsola.WriteLine(całkowita suma); Całkowita suma to 400000. Algorytm nie jest doskonały, ale będę nad nim pracował. Dziękuję wszystkim.


title: Wysyłanie całego obiektu danych jako argumentu czy tylko pól wymaganych?

text: Załóżmy, że mam klasę, która po prostu przechowuje dane: ClassData Field1 Field2 Field3 Teraz załóżmy, że mam funkcję, która używa Field1 i Field2: public void DoStuff(string field1, string field2){ if(field1 == "coś"){ / / Zrób coś } if(field2 == "cośEgo"){ //Zrób coś innego } } vs public void DoStuff(ClassData data){ if(data.field1 == "coś"){ //Zrób coś } if(data .field2 == "coś jeszcze"){ //Zrób coś innego } } Wygląda na to, że jest to coś w rodzaju "bardziej sztuki niż nauki", ale mam też kilka przemyśleń. Przekazywanie określonych pól pokazuje wymagane informacje od samego początku, co może ułatwić czytanie i zrozumienie funkcji. Wysyłanie samego obiektu danych ma swoje zalety, ponieważ sprawia, że kod wygląda czyściej. Nie zdziwiłbym się, gdyby mi brakowało zalet i wad dla obu i byłbym zainteresowany wysłuchaniem tego, co myślisz. Dziękuję!


title: Konwencja nazewnictwa klas reprezentujących różne wersje tego samego

text: Wyobraźmy sobie, że mam klasę abstrakcyjną o nazwie `ProtocolA`, która reprezentuje podstawowe operacje do pracy z protokołem **A**. Taki protokół jest w wersji 1, ale w przyszłości spodziewane są nowe poprawki. Nadchodzi wersja 2. Jak nazwać klasy, które implementują tę klasę abstrakcyjną dla każdej wersji? „Protokół A1” i „Protokół A2”? Twoje zdrowie.


title: co zrobić z katalogiem bin

text: Aby pozbyć się mojego statusu noob, podążam za kursem Learn Python the hard way. Bardzo mi się to podoba, ale w pewnym momencie mówi o stworzeniu katalogu bin. We wszystkich grach i innych programach widziałem katalog bin, ale co to robi?


title: Unikanie rozdętych obiektów domeny

text: Próbujemy przenieść dane z naszej nadętej warstwy usług do naszej warstwy domeny przy użyciu podejścia DDD. Obecnie w naszych usługach mamy dużo logiki biznesowej, która jest rozrzucona po całym świecie i nie korzysta z dziedziczenia. Mamy centralną klasę Domeny, która jest przedmiotem większości naszej pracy - Handel. Obiekt Trade będzie wiedział, jak sam się wycenić, jak oszacować ryzyko, zwalidować się itp. Możemy wtedy zastąpić warunki warunkowe polimorfizmem. Na przykład: SimpleTrade wyceni się w jeden sposób, ale ComplexTrade wyceni się w inny. Martwimy się jednak, że spowoduje to rozdęcie klas handlowych. To naprawdę powinno być odpowiedzialne za własne przetwarzanie, ale rozmiar klasy będzie rósł wykładniczo w miarę dodawania kolejnych funkcji. Mamy więc wybór: 1. Umieść logikę przetwarzania w klasie Trade. Logika przetwarzania jest teraz polimorficzna w zależności od rodzaju transakcji, ale klasa Trade ma teraz wiele obowiązków (wycena, ryzyko itp.) i jest duża 2. Umieść logikę przetwarzania w innej klasie, takiej jak TradePricingService. Nie jest już polimorficzny z drzewem dziedziczenia handlu, ale klasy są mniejsze i łatwiejsze do przetestowania. Jakie byłoby sugerowane podejście?


title: Jak mogę obsługiwać boty w witrynie, która tworzy element bazy danych na każdej stronie?

text: Mam platformę eCommerce, która tworzy koszyk, gdy tylko użytkownik wyląduje na stronie, jeśli jeszcze go nie ma (z sesji lub plików cookie). Następnie przechowuje informacje o koszyku w sesji i w plikach cookie, aby zapamiętać, co użytkownik dodał do koszyka przez miesiąc. Problem polega na tym, że jeśli nie są w stanie mieć sesji lub plików cookie, takich jak bot, tworzy koszyk za każdym razem, gdy odwiedzają stronę. Oznacza to, że bot przemierzający witrynę może z łatwością tworzyć setki koszyków. Jedną z opcji, którą badamy, jest zmiana naszego kodu tak, aby koszyk był tworzony tylko wtedy, gdy użytkownik doda element, i jak dotąd wydaje się to najlepszą opcją, ale jest to również najbardziej czasochłonna opcja, ponieważ duża część bazy kodu zakłada, że koszyk istnieje przez cały czas. Musiałoby to zostać zmienione, aby sprawdzał koszyk i obsługiwał koszyk, który nie istnieje. Jeśli to możliwe, chcielibyśmy znaleźć mniej intensywne rozwiązanie. Inną zbadaną przez nas opcją jest okresowe czyszczenie tabeli w bazie danych ze wszystkich starych koszyków w celu złagodzenia problemu. Jest to jednak tylko łagodzenie, a nie rozwiązanie problemu. Chciałbym rozwiązać problem, jeśli mogę. Jak mogę rozpoznać, czy użytkownik nie jest w stanie mieć sesji i plików cookie, aby zatrzymać tworzenie koszyka? A może w tym przypadku istnieje lepszy sposób radzenia sobie z botami?


title: Problem z projektem: Warstwa usług/próba utrzymania architektury RESTful

text: Próbuję zaprojektować aplikację internetową - i po wielu lekturach na temat wzorców projektowych REST + nie wiem, jak poradzić sobie z moimi wymaganiami. Myślę, że mogę być wciągnięty we wszystkie wzorce projektowe, ale jednocześnie chcę stworzyć projekt dobrze zaprojektowany. Mam 2 główne obiekty biznesowe, „Klient” i „Zamówienie”, połączone relacją _Ma wiele_. Obecnie nie mam warstwy usług, a REST API znajduje się w BL: GET Klienci GET Zamówienia GET Klienci/id GET Zamówienia/id POST Klienci POST Klienci PUT Klienci/id PUT Zamówienia/id DELETE Klienci/id DELETE Zamówienia/id Ale rzeczy stają się trudne do zaprojektowania, gdy muszę zaprojektować starsze sposoby wprowadzania danych użytkownika, a także na przyszłość: * **Teraz:** Użytkownicy przesyłają plik **Excel .xlsx** zawierający informacje o kliencie, zamówieniu, które parsuję, wyodrębniam, tworzę obiekty biznesowe `Klient`/`Zamówienie` i przeprowadzam walidacje. Aby mieć przyjemne doznania z Użytkownikiem, nie zapisuję tych obiektów od razu, zwracam je Użytkownikowi (wraz z błędami z weryfikacji), aby mógł dokonać niezbędnych zmian przed ostatecznym ich przesłaniem. (to dwuetapowe przesyłanie tylko zwraca uwagę na konieczność korygowania źródeł wszelkich błędów walidacji bezpośrednio w pliku Excel). * **Przyszłość:** dane klienta/zamówienia będą przechowywane i przesyłane za pośrednictwem usługi internetowej/platformy. Nie wiem, jak z wdziękiem i inteligentnie poradzić sobie z tymi wymaganiami. Czy jest to przypadek, w którym muszę ujawnić warstwę usług, która publikuje interfejs do przesyłania programu Excel, który wkrótce ma być starszy, a także interfejs usługi sieci Web? Jakakolwiek pomoc projektowa byłaby mile widziana, ponieważ jestem raczej nowy w tego typu inwestycjach i raczej nie popełniam poważnego błędu architektonicznego, który wróci do mnie później.. Z góry dziękuję. **edytowano zgodnie z sugestiami komentarzy**


title: Nowa biblioteka we/wy: dobry pomysł czy naprawdę zły?

text: Przez długi czas pracowałem prawie wyłącznie ze strumieniami wejścia/wyjścia w javie. Jednak kilka lat temu zacząłem również odkrywać asynchroniczne I/O (np. Uruchamianie na jboss netty). Jednak podczas pracy w świecie async I/O nie mogłem ponownie użyć żadnego z moich narzędzi do synchronizacji. Musiałem też zacząć od dość dużej biblioteki nowych narzędzi I/O i nie byłem pewien, czy dążyć do blokowania, czy nie. W miarę upływu czasu... Napisałem API na istniejącym I/O, które obsługuje zarówno blokowanie, jak i nieblokowanie, a narzędzia są napisane przeciwko temu. Jednak ponieważ I/O jest tak wszechobecną rzeczą, nie jestem pewien, czy jest to mądre posunięcie. Jako przykład weź koder Base64. Tak Apache ma synchronizowaną wersję I/O i tak java 8 wreszcie ma koder asynchroniczny. Ale potrzebowałem enkodera, który mógłby zrobić jedno i drugie. To samo dla cytowanych drukowalnych, deflate,... i oczywiście powinno działać dla gniazd (zwykłych i ssl), plików,... w sytuacjach jednowątkowych i wielowątkowych,... Potrzebowałem narzędzi do łączenia I/O źródeł, używaj nakładek I/O opartych na ogranicznikach lub o stałej długości... Potrzebowałem programów obsługi protokołów dla http, ftp,... Wiele z tych problemów można wyrazić w sposób neutralny pod względem blokowania lub - biorąc pod uwagę obsługują zarówno asynchroniczność, jak i synchronizację, umożliwiając szerokie ponowne użycie. W skrócie: czy mądrze jest wprowadzić abstrakcję na szczycie I/O, zmuszając w zasadzie każdą bibliotekę, która z niej korzysta (bezpośrednio lub pośrednio), aby również z niej korzystała? **AKTUALIZACJA** Rdzeniem są ReadableByteContainer i WritableByteContainer, które dla wnikliwego oka będą wyglądać jak skrzyżowanie strumienia I/O i kanału I/O. interfejs publiczny ReadableByteContainer extends Closeable { public int read(byte [] bajtów); public int read(bajt [] bajtów, przesunięcie int, długość int); } interfejs publiczny WritableByteContainer extends Zamykany { public int write(byte [] bytes); public int write(bajt [] bajty, int offset, int length); public void flush(); } Jednym z wbudowanych narzędzi jest api "Transcoder": public interface ByteTranscoder { public void transcode(ReadableByteContainer in, WritableByteContainer out); public void flush (WritableByteContainer out); } co pozwala zrobić coś takiego: ByteContainer container = IOUTtils.newByteContainer(); container = IOUTtils.wrap( kontener, TranscoderUtils.wrapOutput(kontener, nowy Base64Encoder()) ); container.write("test".getBytes()); System.out.println(new String(IOUtils.toBytes(kontener))); Ten kod wygeneruje zakodowane base64 bajty „testu”. Chodzi o to, że Base64Encoder jest w stanie kodować dane w sposób asynchroniczny, nie zablokuje się, jeśli kontener wyjściowy zgłosi, że żadne dane nie zostały zapisane, ani nie zablokuje się, jeśli kontener wejściowy zgłosi, że żadne dane nie są dostępne. Możesz kontynuować transkodowanie, ponownie wywołując „transcode()”. Działa to zarówno w kontekście sieciowym jboss, gdzie otrzymujesz fragment zawartości za pomocą asynchronicznego fragmentu, jak i w świecie strumieniowania, w którym wszystko blokuje się, dopóki nie będzie mogło czytać/zapisywać.


title: Problem z projektowaniem aplikacji klient-serwer

text: Mam kolekcję klientów po stronie serwera. Jest też kilka obiektów, które muszą współpracować z tą kolekcją - dodawanie i usuwanie klientów, wysyłanie do nich wiadomości, aktualizowanie ustawień połączenia i tak dalej. Powinni wykonywać te czynności jednocześnie, więc wymagany jest muteks lub inny prymityw synchronizacji. Chcę udostępnić jedną instancję kolekcji między tymi obiektami, ale wszystkie wymagają dostępu do prywatnych pól kolekcji. Mam nadzieję, że przykładowy kod wyjaśnia to [C++]: class Collection { std::vector< Client* > customers; Mutex mLock; ... } class ClientNotifier { void sendMessage() { mLock.lock(); // zapętlaj klientów i wyślij wiadomość do każdego z nich } } class ConnectionSettingsUpdater { void changeSettings( const std::string& name ) { mLock.lock(); // jeśli klient o tej nazwie znajduje się w kolekcji, zmień jego ustawienia } } Jak widać, wszystkie te klasy wymagają bezpośredniego dostępu do prywatnych pól kolekcji. Czy możesz dać mi radę, jak poprawnie zaimplementować takie zachowanie, tj. Utrzymać prosty interfejs Collection bez wiedzy o jego użytkownikach?


Jak przenieść bibliotekę wewnątrz drzewa źródłowego projektu i kompilować statyczne pliki binarne? Chcę użyć konkretnego narzędzia, które wykorzystuje STAROŻYTNE pliki binarne bez uaktualniania użycia interfejsu API. W ten sposób mogę używać starych bibliotek wewnątrz pojedynczego pliku binarnego bez niszczenia lokalnego środowiska hosta. Jestem na nix z netbeans/eclipse/code::blocks. Nie mam problemu z czytaniem, szukam tylko punktu wyjścia. jakieś pomysły?


title: Korzystanie z biblioteki na licencji AGPL 3.0 w celu uzyskania dodatkowych funkcji w aplikacji na iOS

text: Buduję aplikację na iOS i planuję dołączyć do niej bibliotekę na licencji AGPL 3.0, aby zapewnić _dodatkową (nieistotną) funkcjonalność_. Mam kilka pytań na ten temat: 1. Czy dobrze rozumiem, że to nadal zobowiązuje mnie do opublikowania źródła mojej otwartej aplikacji? Jeśli tak, czy musi być dostępna dla ogółu społeczeństwa, czy tylko dla tych, którzy pobrali aplikację? 2. Czy to pozwala mi na dystrybucję aplikacji za opłatą?


title: W jaki sposób enkapsulacja jest używana dla bezpieczeństwa?

text: Uczę się OOP. Dużo studiowałem na temat enkapsulacji, ale im więcej czytałem, tym bardziej byłem zdezorientowany. Rozumiem, że ukrywamy (czyniąc prywatne) dane i udostępniamy je użytkownikowi klasy (innym programistom) jako właściwości lub metody. Rozumiem też, że przez enkapsulację ukrywamy szczegóły. W artykule (http://www.csharp-station.com/Tutorial/CSharp/lesson19) przeczytałem: **Streszczenie z artykułu** Projektując obiekt, musisz pomyśleć o tym, jak inni mogliby go wykorzystać. W najlepszym przypadku każdy program używający obiektu byłby dobrze zaprojektowany, a kod nigdy by się nie zmienił. Jednak rzeczywistość jest taka, że programy często się zmieniają, a w środowisku zespołowym wiele osób w pewnym momencie dotyka tego samego kodu. Dlatego warto zastanowić się, co może pójść nie tak, jak również nieskazitelny obraz tego, jak _powinien_ być używany. W przypadku obiektu BankAccount sprawdź sytuację, w której kod spoza Twojego obiektu może uzyskać dostęp do pola dziesiętnego Amount lub pola tekstowego CustomerName. W momencie pisania kodu wszystko działałoby dobrze. Jednak w dalszej części cyklu rozwoju zdajesz sobie sprawę, że obiekt BankAccount powinien śledzić int CustomerID, a nie ciąg CustomerName, ponieważ nie chcesz duplikować relacji między informacjami (lub z innego ważnego powodu, aby zmienić definicję stanu wewnętrznego) . Takie zmiany powodują **efekt falowania** w twoim kodzie, ponieważ został on zbudowany do używania klasy BankAccount, zgodnie z pierwotnym projektem (z CustomerName będącym ciągiem znaków), a teraz musisz zmienić kod, który uzyskuje dostęp do tego stanu w całej aplikacji. Zorientowana obiektowo zasada enkapsulacji pomaga uniknąć takich problemów, umożliwiając ukrycie stanu wewnętrznego i abstrakcyjnego dostępu do niego za pośrednictwem elementów członkowskich typu, takich jak metody, właściwości i indeksatory. Hermetyzacja pomaga zredukować sprzężenie między obiektami i zwiększa łatwość konserwacji kodu. **Pytanie** W jaki sposób enkapsulacja pomoże przy wprowadzaniu zmian w kodzie i wynikach jego falowania. W przypadku elementu członkowskiego danych, jeśli zmienię jego typ z int na float (nawet jeśli ujawniam to za pomocą właściwości), będę musiał zmienić typ zmiennej, w której używam już tego kodu. Uprzejmie poinformuj mnie, jak enkapsulacja pomoże w takich zmianach. Dzięki za tę pomoc i wskazówki.


title: Strategie przenoszenia aplikacji z Win32 API do GTK+

text: Mam przestarzałą aplikację napisaną w C, używając surowego API Win32. Ogólny poziom abstrakcji jest niski, a surowa zależność od <windows.h> jest powszechna. Chciałbym przenieść tę aplikację do GTK+. Czy są jakieś wskazówki lub najlepsze praktyki, jak to zrobić? Wcześniej przeportowałem aplikację MFC do Qt, ale aplikacja była bardzo abstrakcyjna - na przykład rysowała własny zestaw widżetów - a początkowe przeniesienie było bardzo proste. Najpierw myślałem o użyciu Winelib do zbudowania natywnego pliku wykonywalnego Linuksa, a następnie o powolnej refaktoryzacji go do aplikacji GTK+. Czy ktoś może podzielić się najlepszymi praktykami lub wcześniejszymi doświadczeniami na ten temat?


title: Jakie są najlepsze narzędzia do pracy z dużymi plikami mrówek?

text: Właśnie zacząłem pracować w firmie, która ma bardzo duży plik budowania mrówek, który importuje wiele innych dużych/małych plików mrówek. Nie trzeba dodawać, że boli mnie głowa, próbując zrozumieć, co się dzieje. Jakie są najlepsze dostępne narzędzia do: * Uzyskiwania jakiejś zwięzłej odpowiedzi na to, co się dzieje * Wizualizacji różnych celów * Widzenia wydajności zadań Może być wiele narzędzi. Jakieś inne wskazówki/sugestie?


title: Czy C jest językiem regularnym?

text: Czy są to języki regularne C lub C++? Jeśli nie, to w jakiej kategorii umieszczamy języki programowania takie jak C/C++, perl, Python?


title: Wykonywanie wywołań ajax w setTimeout po ustalonych odstępach czasu?

text: Tworzymy aplikację wykorzystującą dużo ajaxu. Na przykład pokazywanie powiadomień użytkownikom, aktualizowanie tego, co widzą za pomocą ajax, gdy są na stronie internetowej. Ta aktualizacja wynika z działań innych użytkowników w aplikacji. 1. W bazie kodu generujemy zapytanie wewnątrz funkcji setTimeout javascript. To powoduje wywołanie ajaxu. 2. Każde wywołanie jest osobnym zapytaniem do bazy danych. 3. Na tej samej stronie jest wiele połączeń. Więc uruchamiamy zapytania do bazy danych po 15 sekundach, bez względu na to, czy coś się zmieni, czy nie. Czy to podejście zadziała, jeśli spodziewamy się dużego ruchu?


title: Czy ta funkcja robi tylko jedną rzecz?

text: Czy poniższą metodę uważa się za robienie tylko jednej rzeczy? Zastanawiam się nad tym, ponieważ wymaga opcjonalnego argumentu. public function findErrors($name = null) { if ($name) { return isset($this->errors[$name]) ? $this->błędy[$nazwa] : []; } return $this->errors ?: []; } Jeśli nie, czy byłoby lepiej / miałoby znaczenie, aby to było oddzielone w następujący sposób: public function findErrors() { return $this->errors ?: []; } public function findErrorsOf($name) { return isset($this->errors[$name]) ? $this->błędy[$nazwa] : []; }


title: Jaki powinien być mój adres URL przekierowania dla protokołu OAuth2.0 na platformie Azure, jeśli moja aplikacja jest lokalną aplikacją systemu Windows?

text: Konfiguruję OAuth2.0 na platformie Azure. Jestem na etapie, w którym uzyskałem dostęp do aplikacji, a kod został zwrócony w moim przekierowaniu. Moja aplikacja jest lokalną aplikacją Windows. Kiedy wpisuję mój adres punktu końcowego OAuth w przeglądarce z identyfikatorem klienta, pomyślnie przekierowuję do mojego adresu URL przekierowania, a AuthCode jest dołączony do adresu URL. Problem: Kiedy próbowałem robić webrequesty i podobne strategie (w moim kodzie C#, a nie w przeglądarce) przy użyciu mojego adresu punktu końcowego OAuth2.0, nie mogę uzyskać PRZEKIEROWANEGO adresu URL w moim kodzie C#. Widzę kilka rzeczy o zmianie adresu URL przekierowania z azure na localhost i nasłuchiwanie zwrotu, ale wydaje mi się, że wnosi to więcej zmiennych do równania. jakakolwiek rada?


title: Informacje o „rzutach” w języku Java w sygnaturze metody C#

text: Z Javy wiem, że sygnatury metod, które mogą zgłaszać wyjątki, zawierają blok `throws`, który zawiera wyjątki, które mogą zostać zgłoszone. W C# nie ma czegoś takiego i nie jest też powszechną praktyką umieszczanie takich informacji w nagłówku XML. Czy istnieje ogólnie przyjęty sposób zwracania uwagi na potencjalne wyjątki lub miejsce ich wspólnego oznaczania?


title: Jak należy obchodzić się ze słowami złożonymi podczas kodowania? Czy istnieje ostateczna lista słów złożonych?

text: **PYTANIE:** Jak obchodzić się ze złożonymi słowami podczas programowania? Czy są dostępne online jakieś dobre listy dla twórców ogólnie akceptowanych słów złożonych związanych z technologią? Widzę, że jest to bardzo niejednoznaczne, więc czy powinienem używać zdrowego rozsądku? **PRZYKŁAD:** Skłonny byłbym to zrobić: _nazwa_pliku_ **NIE** _Nazwa_pliku_ **lub** _logowanie_ **NIE** _Zaloguj się_ Jednak dokumentacja Microsoft wskazuje, że _nazwa_pliku_ nie jest złożona. Zastanawiam się więc, czy istnieje bardziej ostateczne źródło? Zobacz także tę dyskusję english.stackexchange na temat _nazwa_pliku_. W sekcji „Reguły pisania wielkimi literami dla słów złożonych i wspólnych terminów” znajdującej się tutaj: Konwencje dotyczące wielkich liter w Microsoft .NET oferują tylko ograniczone wprowadzenie do tematu i pozostawiają deweloperowi wykorzystanie swojej intuicji z resztą.


title: Utworzyć nową zmienną lub wykonać wiele połączonych połączeń?

text: Jaki jest najlepszy sposób na uzyskanie tych atrybutów, biorąc pod uwagę wydajność i jakość kodu? Używając połączonych wywołań: name = this.product.getStock().getItems().get(index).getName(); id = this.product.getStock().getItems().get(index).getId(); Tworzenie nowej zmiennej: final item = this.product.getStock().getItems().get(index); nazwa = item.getName(); it = item.getId(); Wolę drugi sposób, aby kod był czystszy. Ale chciałbym zobaczyć kilka opinii na ten temat. Dziękuję Ci!


title: Książki o nauce programowania z C++ jako językiem ojczystym

text: > **Possible Duplicate:** > Polecane książki o C++ Czy istnieje kanoniczna książka o nauce programowania z C++ jako językiem ojczystym? Bawiłem się Javą i Pythonem, ale kiedy mój laptop się zepsuł, nie mogłem już programować. To było kilka miesięcy temu i od teraz zdecydowałem, że moim prawdziwym pierwszym językiem powinien być C++. Teraz moje pytanie brzmi, jaką książkę powinienem przeczytać. Czy istnieje książka, która jest zarówno dobrym wprowadzeniem do programowania dla początkujących programistów, jak i polecana do nauki C++ jako pierwszego języka?


title: Jack wszystkich zawodów, mistrz niczego

text: Mam pytanie podobne do tego: Czy ciągłe szukanie przykładów kodu jest oznaką złego programisty? choć nie do końca. Skończyłem studia 2 lata temu i obecnie zmagam się z nauką na uniwersytecie. Najprawdopodobniej będę musiał zrezygnować i zacząć pracować w ciągu najbliższych kilku miesięcy. Teraz jest ogórek. Nie mam żadnej specjalności. Kiedy skończyłem studia pracowałem z **C** , **C++** i **Java**. Miałem staż w NEC-Philips i zapoznałem się z **C# (.NET)** i nauczyłem się, jak to działa. Po studiach zacząłem pracować z **PHP, HTML, SQL, MySQL, Javascript** i **Jquery**. Obecnie uczę się **Ruby on Rails**, a więc **Ruby**. Na mojej uczelni również zapoznałem się z **MATLABem**. Jak widać, mam szeroki zakres języków i frameworków, które znam, ale żadnego nie znam od podszewki. Więc chyba to dotyczy mnie: _"Jack wszystkich zawodów, mistrz żadnej."._ Szukałem pracy i zauważyłem, że większość z nich wymaga kilkuletniego doświadczenia z pewnym językiem i niektórymi specyfikacje mające zastosowanie do tego języka. Moje pytanie brzmi: **Jak wybrać specjalność? Skąd mam wiedzieć, czy naprawdę mi się to spodoba?** Skoro pracowałem z wieloma językami, skąd mam wiedzieć, że to jest dla mnie odpowiednie? Nie lubię być przywiązany do konkretnej roli i całkiem lubię być generalistą. Ale żeby zarobić więcej, potrzebowałbym specjalizacji. Jak wybrałbym coś, co jest sprzeczne z moją naturą? Z góry dziękuję, Lino.