title: Uruchomienie strony internetowej z grami. Kontrola sprawności (Jetty, WebSockets, Java itp.)

text: Uruchamiam nową stronę z grami. To projekt, który pomoże mi poznać dodatkowe technologie. Moje tło to w dużej mierze technologie/języki/IDE firmy Microsoft i Apple. W tym projekcie chciałbym wykorzystać niektóre technologie Google. Strona gry będzie prosta; plansza do gry html5; wielowarstwowy; w celu uproszczenia mojego przykładu, powiedzmy, że jest to gra w pokera. Wszyscy siadają przy stole i zaczyna się gra; jest turowa itp. Myślałem, że najlepszą drogą będzie komunikacja html5 z websocketem z powrotem do serwera. Bardzo interesuje mnie też używanie GWT. Pomyślałem więc, że strona zbudowana przy użyciu GWT + HTML5 Gameboard będzie stroną klienta. Teraz po stronie serwera; Zrobiłem trochę badań i znalazłem kilka rzeczy, takich jak Jetty, jWebSockets, Atmosphere; itp. W tej chwili myślę, że strona serwerowa byłaby hostowana na Jetty (czy Atmosphere warto używać do enkapsulacji serwera?) i zasadniczo byłaby serwerem WebSocket. Czy to wszystko ma sens? Czy jestem tutaj całkowicie poza bazą? Czy istnieją tego przykłady, które mogą mi pomóc? Jestem również zainteresowany uzyskaniem informacji o tym, jak hostować coś takiego? Jakieś usługi, które hostowałyby zarówno serwer gniazdka, jak i stronę internetową na jednym urządzeniu? Czy to właściwa rzecz? Zresztą zdecydowanie poszukuję doświadczonej wiedzy na ten temat, aby pomóc mi studiować ten nowy obszar (technologie Google).


title: Czy uwagi/zadania do wykonania w komentarzach do kodu wysyłane do recenzji kodu mogą zaowocować efektywnym procesem refaktoryzacji?

text: Chcę rozpocząć/ulepszyć kulturę zbiorowego posiadania kodu w mojej firmie, ale na poziomie rozproszonym geograficznie... Powiedziałbym, że istnieje pewna obecna mentalność zbiorowego posiadania kodu, ale tylko w pojedynczych lokalizacjach geograficznych. To jest kontynuacja tego pytania: Jaki jest politycznie poprawny sposób refaktoryzacji cudzego kodu? Zastanawiam się tylko, czy przesyłanie ***tylko komentarzy do kodu*** do przeglądu kodu (mamy ReviewBoard, być może uaktualnienie do Crucible) może faktycznie być skutecznym mechanizmem, aby rozpocząć rozmowę na temat ulepszania kodu, bez powodowania przez innych poczucia terytorialnego ich kod. Na przykład, jeśli dodam: //ToDo: Refaktoryzuj ten kod i ten kod z powodów X i Y Następnie prześlij go do przeglądu kodu, a zostanie zaakceptowany... można to uznać za umowę (co moim zdaniem jest czasami trudniej uzyskać z nowym kodem z góry). Jednocześnie autor (i inni) mogą mieć łatwiejszy czas na przetrawienie i zaakceptowanie propozycji; odrzucenie propozycji, ponieważ może coś popsuć, nie będzie już słusznym powodem i dlatego strach przed wprowadzeniem zmiany zostanie utracony… a jednocześnie nie inwestuj 10 godzin w optymalizację czegoś, o czym nikt nie myśli, że jest tego warte i sprzeciwia się mu tylko ze strachu. To wszystko jest przypuszczenie, ale czuję, że coś takiego (przesyłanie uwag dotyczących refaktoryzacji w komentarzach do kodu w procesie przeglądu kodu) zadziała. **Czy ktoś zrobił coś takiego w praktyce? Jeśli tak, to jakie są tego rezultaty?**


title: Czy naruszyłbym bezpłatną licencję na te ikony w mojej aplikacji na Androida?

text: Ponieważ nie ma jeszcze strony z pytaniami i odpowiedziami dotyczącymi kwestii prawnych, a ponieważ jest to związane z aplikacją na Androida, publikuję ją tutaj, zamiast Stack Overflow, ponieważ nie jest to związane z kodem. Chcę podzielić to pytanie na 3 pytania podrzędne, które są ze sobą powiązane. Te pytania dotyczą bezpłatnych, komercyjnych i rozszerzonych licencji DryIcons. **1)** Ogólnie rzecz biorąc, czy naruszyłbym bezpłatną licencję, gdybym użył niektórych ikon w płatnej wersji aplikacji na Androida? Jestem trochę zdezorientowany... Wolna licencja zawiera w sekcji "Przyznanie praw": > b. Możesz używać Licencjonowanego Materiału w dowolnym osobistym **lub komercyjnym projekcie > nieograniczoną liczbę razy** zgodnie z Warunkami bezpłatnej licencji DryIcons oraz > Warunkami; Od tego biorę, że tak, mogę używać ich ikon w mojej płatnej aplikacji na Androida. Ale potem przeczytałem to w licencji komercyjnej w "Ograniczeniach": > n.p. Licencjobiorca nie może używać Materiałów Licencjonowanych w przedmiotach elektronicznych w celu odsprzedaży, > takich jak szablony stron internetowych, urządzenia elektroniczne (tj. komputer, iPhone, > telefony itp.) **aplikacje oprogramowania** , szablony dokumentów, tapety, > wygaszacze ekranu, e-kartki lub podobnych produktów, które Licencjobiorca zamierza **sprzedawać lub > dystrybuować** ; Która zakłada, że licencja rozszerzona jest tą, której potrzebujemy do płatnej aplikacji. Ale czy nie jest to trochę sprzeczne? Czy ten punkt w darmowej licencji nie pozwala mi po prostu korzystać z ich pracy w płatnych aplikacjach? **2)** Załóżmy teraz, że naprawdę muszę kupić licencję komercyjną/rozszerzoną, aby móc korzystać z ich prac w mojej płatnej/komercyjnej aplikacji na Androida, którą w rzeczywistości będę sprzedawać nieograniczonej liczbie użytkowników. Czy będę objęty licencją komercyjną/rozszerzoną czy bezpłatną, jeśli korzystam z rozliczeń w aplikacji w mojej aplikacji na Androida? Dzięki rozliczeniom w aplikacji nie sprzedawałbym ich pracy **w ogóle**. Moja aplikacja byłaby darmowa z wieloma funkcjami i korzystałbym również z ich pracy. Ale ponieważ moja aplikacja jest darmowa, mogę również korzystać z ich pracy, o ile podam odpowiednie kredyty z linkiem do ich strony internetowej, zgodnie z wolną licencją (nie ma problemu, jestem za tym). Wtedy, dzięki rozliczeniom w aplikacji, faktycznie sprzedawałbym **dodatkowe funkcje** mojej aplikacji (poprzez udostępnienie uaktualnienia do wersji „Pro”), a nie ich pracę. Czy myślisz, że tak bym naruszał wolną licencję? **3)** A teraz sytuacja podobna jak w poprzednim punkcie. Co jeśli zamiast rozliczeń w aplikacji miałbym 2 aplikacje. Całkowicie za darmo korzystając z ich pracy, jak pozwala mi na to wolna licencja. I jeszcze jeden, który jest niczym więcej niż „aplikacją odblokowującą”, czymś, co odblokuje **dodatkowe funkcje** w **bezpłatnej** aplikacji. „Aplikacja odblokowująca” to prawdziwa płatna aplikacja, która w ogóle nie korzysta z ich pracy. Czy uważasz, że to dokładnie ta sama sytuacja, co w poprzednim punkcie i że po prostu bawię się semantyką? Jaka jest twoja opinia na ten temat? Czy myślisz, że tak bym naruszał wolną licencję?


title: Przedstawiamy współpracownikom koncepcje/wzory/zasady projektowe

text: Czytałem artykuł Joela o tym, jak załatwiać sprawy, kiedy jesteś „chrząkający”, w rzeczywistości kilka razy, ale nigdy nie byłem w stanie zrobić żadnej z rzeczy, o których wspomina. Pracuję w małym zespole programistycznym; mamy teraz 5 silnych (niedawno się rozszerzyli; zaczęli z dwoma facetami przez kilka lat, a potem dodali resztę z nas - jestem tu od około 3 miesięcy i dwóch innych zostało dodanych po mnie) z projektantem stron internetowych, który jest miły części naszej grupy. Aplikacja, nad którą pracujemy, powstała jako system wewnętrzny, a niedawno została doposażona w oprogramowanie jako usługa. Z tego, co mi powiedziano, przeszło kilka poprawek i dwukrotnie zostało zlecone na zewnątrz, a następnie w całości wdrożone we własnym zakresie. Pochodzę ze środowisk, które w dużym stopniu skupiają się na wykorzystaniu wzorców projektowych, elementów projektowania zwinnego i silnej chęci pisania kodu wysokiej jakości. Ponieważ obecne środowisko zmienia się tak często, kod jest trochę bałaganu; logika jest często po prostu kopiowana i wklejana do różnych plików (w tym kodu HTML, JavaScript i C#). Prawie wszystko odbywa się w plikach związanych z kodem z bardzo małą separacją logiki. Istnieje wspólny zestaw klas, ale zwykle zawierają one po prostu różne niedopasowane logikę, które tylko nieznacznie odnoszą się do klasy. Nie ma standardów kodowania i programiści piszą kod tak, jak im się podoba (na przykład, niektóre kody używają notacji węgierskiej, inne nie, niektóre klasy zaczynają się od podkreślników, a inne nie). Mało jest używane zorientowanie obiektowe; wszystkie dane są przekazywane jako nieprzetworzone zestawy danych wykonywane za pomocą procedur składowanych. Nieliczne obiekty domeny mają mylące i mylące nazwy. Prawie zawsze pracujemy nad nowymi funkcjami i nie mamy czasu na refaktoryzację, ponieważ refaktoryzacja kodu nie jest postrzegana jako dodawanie wartości biznesowej zamiast dodawania nowych rzeczy. Zgłaszałem pewne problemy menedżerowi dotyczące poświęcenia czasu na powrót i naprawę aplikacji, wyodrębnienie i refaktoryzację kodu, aby był bardziej modułowy i wielokrotnego użytku, ale wyraził obawę, że kierownictwo nie pozwoli nam spędzić dni (lub więcej, jeśli to konieczne ) pracujemy nad starymi funkcjami zamiast nad nowymi. Moi współpracownicy nie wydają się tym zbytnio przejmować i nie przejmują się tak bardzo jak ja jakością tworzonego przez nas kodu. Nie ma też testów jednostkowych (testowanie odbywa się ręcznie, przeszukując aplikację) i nie byłbym w stanie poświęcić czasu na przetestowanie wszystkiego. Stwarza to dla mnie dylemat, ponieważ uważam, że naprawianie kodu w jednym miejscu jest frustrujące, ale przypominam sobie, że trzeba go również naprawić w kilku innych miejscach z powodu kopiowania między plikami, i coraz trudniej jest mi pozostać entuzjastycznie nastawionym do kod, ponieważ muszę ciągle wracać do istniejącego stylu (lub jego braku) podczas naprawiania błędów; w przypadku nowych modułów, które piszę, staram się, aby kod był jak najbardziej modularny w granicach rozsądku i bez wprowadzania radykalnych zmian (np. próba włączenia Linq do Sql). Nawet to budzi pewne obawy, ponieważ wprowadzam inny styl architektoniczny (choć lepszy niż styl, który mamy teraz) niż inni programiści. Jak, jeśli w ogóle, mam się zająć wyjaśnianiem tych rzeczy moim współpracownikom i próbować wprowadzić jakiś porządek do chaosu? Patrzę na kod i widzę, o ile lepiej może być z zastosowaniem wzorców projektowych i ponownym wykorzystaniem prawdziwego kodu, ale wydaje się to zniechęcającym zadaniem, ponieważ jesteśmy ciągle zasypywani nowymi zadaniami i nie możemy poświęcić tygodnia lub dwóch na zrefaktoryzuj kod, który pachnie. Wiem, że nigdy nie mogę zmusić nas do naprawy całego kodu, który wymaga naprawy, ponieważ byłaby to całkowita zmiana architektury aplikacji (a kierownictwo nigdy by tego nie zatwierdziło), ale czuję, że kod mógłby być znacznie bardziej stabilny i solidny na przyszłość, jeśli coś zostanie zrobione.


title: Znajdowanie wszystkich podzbiorów ustawionego czasu działania

text: Biorąc pod uwagę zestaw {1,2,3} danych wyjściowych { {}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2, 3} } Udało mi się znaleźć tylko tak szybko jak O(2^n), czy są jakieś techniki osiągania szybszych wyników (oprócz zrównoleglenia)


title: Rozwijanie starszego kodu

text: Rozpoczynając pracę nad projektem z istniejącą bazą kodu, pierwszą rzeczą, którą należy zrobić, jest zwykle zrozumienie aplikacji i istniejącego kodu. Załóżmy, że istniejący kod jest starszym kodem; odnosząc się do definicji „kodu bez testów” Michaela Feathersa. Jestem pewien, że istnieje wiele różnych sposobów na poradzenie sobie z tą fazą rozwoju. Najprostszym sposobem jest przejście przez interfejs użytkownika aplikacji (jeśli taki istnieje) i jednoczesne debugowanie aplikacji, aby zrozumieć, co dzieje się na poziomie kodu. Jest to bardzo czasochłonne podejście, a ponadto bardzo łatwo jest zapomnieć o tym, czego się uczysz podczas sesji debugowania. Co więcej, nie ma realnego sposobu na udostępnienie (wśród zespołu) tego, czego nauczysz się podczas debugowania. Rozumiejąc wady tego podejścia, wypróbowałem inne podejście w moim ostatnim projekcie. To, co zrobiłem, to napisanie pewnego rodzaju warstwy API, która znajduje się na wierzchu istniejącej bazy kodu. Ten interfejs API zawierał funkcjonalność praktycznie tego, co użytkownik zrobiłby w interfejsie użytkownika. Mówiąc dokładniej, załóżmy, że istniejąca aplikacja jest typową aplikacją transakcyjną z zamówieniami, towarami i koszykami. Moje API wyszło mniej więcej tak: public class OrderAPI{ public Order createOrder(customerName); public boolean deleteOrder(ID zamówienia); public List<Zamówienie> getOrdersForCustomer(nazwa klienta); } public class OrderItemAPI{ public OrderItem createOrderItem(order); public boolean deleteOrder(ID zamówienia); public List<OrderItem> getItemInOrder(zamówienie); } public class ShoppingCartAPI { public ShoppingCart createCart(klient,zamówienie); public boolean addItemToCart(koszyk, przedmiot); public boolean removeItemFromCart(koszyk, przedmiot); } Metody w API odpowiadają akcjom, które użytkownik wykonałby na poziomie interfejsu użytkownika. W ramach tych metod wykonywane są wywołania istniejącej bazy kodu. Samo napisanie tego API oczywiście niewiele znaczy. Więc mam pisemne testy (chyba automatycznie stają się testami integracyjnymi), aby upewnić się, że API działa dobrze; udowadniając, że rozumiem, jak działa starszy kod. Po całym tym wstępie pojawia się moje pytanie: Czy możesz zdefiniować (być może w kategoriach inżynierii oprogramowania) to, co zrobiłem? Przyjmując takie podejście, całkowicie kierowałem się intuicją. W pewnym momencie pamiętam, że byłem bardzo zdezorientowany; praca nad API, potem praca nad moimi testami, naprawa mojego API, potem moje testy. Nie byłem już pewien, czy moim głównym celem było poznanie istniejącej bazy kodu, czy wymyślenie stabilnej warstwy API. Byłbym bardzo wdzięczny za jakiekolwiek wyjaśnienie; Jestem pewien, że to musi być praktyka, z którą inni ludzie już eksperymentowali. Potrzebuję tylko właściwych wskazówek, aby wskazać mi odpowiednie dyskusje/zasoby.


title: Jaki jest użyteczny wzorzec do utrzymywania stanu obiektu w relacji jeden do wielu?

text: Szukam projektu dla mojej aplikacji, tutaj są zaangażowani gracze (klasy). struct Transform { // Używa macierzy do przekształcenia pozycji. // Działa również jako stan okna dialogowego. Transformacja pozycji(Pozycja p); //inne metody. }; struct Dialog { // Istnieje wiele okien dialogowych dla użytkownika do przekształcenia danych wyjściowych. Przekształć& t; void ChangeTransformation(){t.rotate(360);} } struct Algorytm { //wyświetla nam pozycję na podstawie implementacji. Na przykład może to zwrócić punkty na okręgu lub linii. Przekształć& t; Pozycja m_p; Okno dialogowe& d; Pozycja GetCurrentPosition(){ return t.transform(m_p);} //inne metody. } **Właściwości, których potrzebuję:** 1. Każdy algorytm ma jedno okno dialogowe i do każdego okna dialogowego może być przypisanych wiele algorytmów. 2. Gdy użytkownik wybierze algorytm, wyświetlane jest okno dialogowe związane z tym algorytmem. 3. Jeśli użytkownik wybierze inny algorytm, a następnie wybierze ponownie, stan zostanie przywrócony w oknie dialogowym. Zasadniczo chcę, aby dobry wzorzec projektowy utrzymał stan okna dialogowego, biorąc pod uwagę, że używa go wiele algorytmów i można je przełączać tam iz powrotem. Czy ktoś ma jakieś sugestie? * * * **Oto przypadek użycia:** **Dialog1** ma jedno pole edycyjne do kontrolowania promienia. **Algorytm1** generuje punkty na okręgu jednostkowym. **Algorytm2** jest taki sam jak algorytm1. Użytkownik wybrał **Algorytm1** i wpisał **2** w polu edycji. Spowoduje to wygenerowanie punktów na okręgu o promieniu 2. Następnie użytkownik wybiera **Algorytm2** i wpisuje **10** w polu edycji **Dialog1**. Spowoduje to wygenerowanie punktów na okręgu o promieniu 10. Wreszcie **Algorytm1** jest ponownie wybierany. Pole edycji **Dialog1** powinno pokazywać **2** i wygenerować punkty na okręgu o promieniu 2.


title: Próbujesz zaimplementować kod metody pre/post: lepiej użyć metod lub klasy nadrzędnej?

text: Trudno mi ułożyć to pytanie, więc… Chcę wykonać kod zarówno przed, jak i po uruchomieniu metody w PHP. O ile mi wiadomo, istnieją dwa sposoby na zaimplementowanie tego: ### Metoda pierwsza: metody wstępne i końcowe class Model { function find($id) { $this->_precode(); // ... zrób coś $this->post_code(); } } Dodaj wywołania `_precode()` i `_postcode()` do każdej metody, w której potrzebuję tej funkcjonalności. ### Metoda druga: __call i nazywanie metod class Model extends PrePost { function prepost_find($id) { // ... do rzeczy ... } } class PrePost { function __call($method,$param) { $method = "metoda prepost_$"; // .. prekoduj tutaj .. $result = $this->$method($param); // .. kod pocztowy tutaj .. } } Polega to na nazwaniu metody w określony sposób w klasie dziedziczącej. Czy istnieje preferowany sposób na zrobienie tego? Metoda wywołania może obsługiwać tylko określone przypadki, a nawet odraczać wywołanie klasy podrzędnej, jeśli takie istnieje. nie szukam opinii; Chcę dowiedzieć się, czy istnieją uzasadnione powody, aby wybrać jedną drogę zamiast drugiej.


title: Najlepszy przewodnik online dla gcc

text: Mój box jest skonfigurowany: Ubuntu, Code::Blocks IDE, kompilator GNU gcc. Nie jestem zbyt doświadczony w C. Mam pewne trudności z oddzieleniem dostępnych dla mnie funkcji. Ewidentnie istnieje kilka różnych wersji kompilatorów i dostępne są różne biblioteki. Czy istnieje oficjalne odniesienie do kompilatora GNU gcc dla C? Rozważałem zakup K&R, ale myślę, że to za dużo dla kogoś na moim poziomie umiejętności. Czy masz jakieś inne wskazówki dotyczące bezpłatnych odwołań do C, biorąc pod uwagę moją konfigurację?


title: Czy MS Visual Studio 2010 zawiera ikony plików źródłowych?

text: Zastanawiam się tylko, ponieważ `.js` (pliki źródłowe JavaScript) na moim komputerze mają ikonę z hosta skryptów Windows, która wygląda tak Windows 95. Próbowałem zajrzeć do `devenv.exe`, ale nie ma żadnego innego koloru ikony dla plików źródłowych w różnych językach. Jeszcze lepsze byłyby oczywiście ikony, w których rozszerzenie lub coś specyficznego dla języka ("++" lub coś podobnego) znajduje się w ikonie. Czy którykolwiek z plików DLL lub EXE w instalacji programu Visual Studio 2010 zawiera dobre ikony lub czy znasz jakieś inne dobre źródło?


Mam hierarchię dziedziczenia trzy głębokie: abstrakcyjną klasę bazową, z której wyprowadzam inną klasę abstrakcyjną, nazwijmy ją klasą pośrednią, z której wyprowadzę możliwie dużą różnorodność klas pochodnych. W pewnym momencie klasa bazowa wywołuje metodę `this.GenerateXml()`, zaimplementowaną w klasie pochodnej, która nic nie zwraca, ale zapisuje XML do właściwości publicznej. W tym momencie chciałbym, aby klasa pośrednia zrobiła kilka rzeczy, bez konieczności wywoływania przez klasę podstawową lub klasę pochodną określonej metody w klasie pośredniej. Czy jest to możliwe w językach OO? Konstruktorzy wywołują się nawzajem w łańcuchu dziedziczenia. Czy metody? Czy obiekt może wywołać metodę na swoim bezpośrednim potomku? Językiem w tym przypadku jest C# Oczywistym rozwiązaniem jest wywołanie metody, być może o tej samej nazwie, z klasy pochodnej, przy użyciu "bazy". Nie jest to idealne rozwiązanie, ponieważ każda klasa pochodna musi pamiętać o wykonaniu wywołania.


title: Obsługa Java Xml w Androidzie

text: Zajmuję się tworzeniem aplikacji na Androida. Zawsze przychodzi mi do głowy pytanie: Jak XML współdziała z kodem Javy?. Mam na myśli, że `Przycisk` wewnątrz XML to widok, ale `Przycisk` wewnątrz Javy to klasa. Do wypełnienia i układu XML używamy `setContentView(R.layout.name)`. Chcę wiedzieć, jak ten kod XML współdziała z Javą, jaka technika jest używana i jaki kod się za tym kryje. Jeśli ktoś wie, proszę powiedz mi krótko.


title: Zaprojektuj operacje przycisków wstecz i do przodu w przeglądarce

text: Gdybyś został poproszony o zaprojektowanie działania przycisku wstecz i dalej (jako biblioteki) w przeglądarce, jak byś to zrobił? Jakie będą dla nich Twoje API i parametry? jaka struktura danych będzie najlepsza dla tego przypadku użycia?


title: Zatrudnianie młodszego programisty, o co powinienem zapytać?

text: Obecnie zatrudniamy młodszego programistę, aby mi pomógł, ponieważ mam więcej projektów, niż mogę obecnie zarządzać. Nigdy nie zatrudniałem nikogo, kto nie był przyjacielem lub przynajmniej znajomym. Mam rozmowę telefoniczną z jedynym kandydatem, który naprawdę się dla mnie wyróżniał (na papierze), ale nigdy wcześniej tego nie robiłem. Wszystkie nasze projekty to wysoce skalowalne, intensywnie wykorzystujące dane aplikacje internetowe, które przetwarzają miliony transakcji na godzinę na wielu serwerach i klientach. Aby być specyficznym dla języka/stosu, używamy ASP.Net MVC2, WebForms i C# 4, MSSQL 2008 R2, wszystkie działające w systemie Windows Server 2008 R2 O co mam go zapytać? Jak powinienem zorganizować rozmowę telefoniczną?


title: Zrozumienie, jak działa czat audio/wideo w pakiecie iPhone SDK

text: Naprawdę nie mogę się doczekać stworzenia **aplikacji do czatu**, która zawiera podstawową implementację czatu tekstowego, a także zaawansowane funkcje czatu **audio/wideo**. Dobrze zrozumiałem, jak zaimplementować funkcję czatu tekstowego za pomocą **powiadomienia push**. Teraz zmierzam w kierunku implementacji czatu audio/wideo w mojej aplikacji. Przeszukałem Google, aby zobaczyć próbki tego samego. Znalazłem **Czaty głosowe**, **Doubs** i kilka innych źródeł, ale zakończyło się to negatywną nutą. Zdałem sobie sprawę, że nie jestem pewien, co faktycznie dzieje się podczas czatu audio/wideo. Jakie są działania w tle, które biorą udział, gdy użytkownik rozmawia. Wierzę, że jeśli rozumiem proces stojący za czatem **audio/wideo**, mogę go wdrożyć w sposób, który również rozumiem. Tak więc, jeśli ktoś z Was ma krótką/szczegółową wiedzę na temat czatu audio/wideo, uprzejmie podziel się nią ze mną.


title: Jak dla nie-programistów: sformułować wymagania dotyczące programowania internetowego

text: Jak zapytać dla nie-programisty: sformułować wymagania programistyczne dotyczące projektowania strony internetowej przez osobę trzecią, jak i o co pytać Przykład: Chcę zatrudnić kogoś do zaprojektowania lub wdrożenia istniejącego „Konkursu głosowania na zdjęcia” z kilkoma dodatkowymi funkcjami. Jak sformułować swoje potrzeby, aby programista sieciowy mnie zrozumiał? Czy są jakieś szablony? Książki ?


title: Sprawdzanie członków i tworzenie instancji we właściwościach

text: Rozważ to: public MojaKlasa { private Resource _myResource; public Resource MyResource { get { if(_myResource == null) { _myResource = new Resource(); } return _myResource; } } public void UseResource() { MyResource.DoSomething(); } } Czy to rozpoznany wzorzec, a może antywzorzec? Nigdy nie widziałem tego sugerowanego w żadnej książce, ale pojawia się raz za razem w kodzie, który widzę. Myślę, że logika tego polega na tym, że _myResource jest tworzone „w samą porę”. Dla mnie wydaje się to trochę śmierdzące. UserResource() uzyskuje dostęp do właściwości publicznej z poziomu klasy, a do zasobu nigdy nie można uzyskać dostępu za pośrednictwem prywatnego elementu członkowskiego — jeśli ktoś to zrobił, _myResource może mieć wartość null. Być może względy wydajności mogą czasami wymagać, ale generalnie wolałbym tworzyć instancje w konstruktorze lub po prostu mieć instancję Resource lokalnie w metodzie. Czy jest to więc akceptowany wzorzec, czy należy go unikać?


title: Jaki jest związek między reduktorami clojure a fuzją pętli?

text: Właśnie natknąłem się na bibliotekę reduktorów Clojure. Wygląda jak fuzja pętli. Termin ten nie jest jednak wymieniony w żadnym miejscu na stronie. Czy jest jakaś różnica między nimi?


title: Zdezorientowany sprzedażą GPL. Jak to jest spójne z tą sekcją?

text: (Napisane przeciwko GPLv2.) Zawsze mówi się, że GPL nie zabrania sprzedaży oprogramowania, o ile jego kod źródłowy jest dostarczany na tej samej licencji (GPL). Teraz nie rozumiem, w jaki sposób jest to zgodne z sekcją 2b: > Musisz spowodować, aby każda praca, którą rozpowszechniasz lub publikujesz, która w całości lub w części > zawiera lub pochodzi z Programu lub jakiejkolwiek jego części, > ** licencjonowane jako całość bez opłat** wszystkim stronom trzecim na warunkach > niniejszej Licencji. Nie rozumiem. Czy ta klauzula nie zabrania sprzedaży oprogramowania? Jeśli nie, to co dokładnie próbuje powiedzieć? **EDYTUJ:** Podążając za odpowiedziami poniżej, chciałbym zauważyć, że odpowiadając na pytanie „wszyscy mówią, że GPL mówi A, ale ta część GPL mówi B, jak to jest?” z „każdy mówi A, więc GPL musi oznaczać A” nie jest odpowiedzią.


title: Kiedy używać nieosadzonej bazy danych zamiast wbudowanych baz danych

text: Staramy się rozpocząć projekt webowy, który musi się rozwijać w oparciu o technologie MS takie jak C#,.net, IIS itp. Jest to aplikacja webowa mająca sprzedawać się jako produkt z jednym instalatorem. Teraz dyskutujemy, którego dziecka bazy danych będziemy używać. Niektórzy mówią: „niewbudowana baza danych” (Ms Sql) Niektórzy z nich ideą jest użycie „wbudowanych baz danych”. Więc jesteśmy na etapie zamieszania, jeśli chodzi o decyzję dotyczącą ciasta. Czy możecie wyrazić opinię zgodnie ze swoim doświadczeniem. to pomoże nam podjąć dobrą decyzję. W skrócie, co jest potrzebne, to **Kiedy używać niewbudowanych nad osadzonymi bazami danych?** **Edytuj :** W każdym razie Mamy wiedzę techniczną na temat korzystania z niewbudowanych baz danych, takich jak MS Sql Server lub Wbudowana baza danych. To, czego potrzebuję, to koncepcyjnie w jakich sytuacjach zazwyczaj preferujemy każdy rodzaj baz danych i jakie są zalety i wady korzystania z każdego typu.


title: Czy ta metoda pisania testów jednostkowych jest poprawna?

text: Stworzyłem mały projekt w C#, który pomoże mi nauczyć się pisać dobre testy jednostkowe. Wiem, że jedną z ważnych zasad testowania jednostkowego jest testowanie najmniejszej możliwej „jednostki” kodu, aby w przypadku niepowodzenia dokładnie wiedzieć, jaka część kodu musi zostać naprawiona. Potrzebuję pomocy w następujących kwestiach, zanim będę kontynuował implementację kolejnych testów jednostkowych dla projektu: Jeśli mam na przykład klasę `Car`, która tworzy nowy obiekt `Car`, który ma różne atrybuty, które są obliczane przez jego metodę konstruktora nazywa się, czy dwa poniższe testy można uznać za przesadę? Czy zamiast tego powinien istnieć jeden test, który testuje wszystkie obliczone atrybuty obiektu „Samochód”? [Test] public void CarEngineCalculatedValue() { BusinessObjects.Car car= new BusinessObjects.Car(); Assert.GreaterOrEqual(samochód.Silnik, 1); } [Test] public void NazwaSamochoduWyliczonaWartość() { BusinessObjects.Car car= new BusinessObjects.Car(); Assert.IsNotNull(samochód.Nazwa); } Czy powinienem mieć powyższe dwie metody testowe do testowania tych rzeczy, czy powinienem mieć jedną metodę testową, która potwierdza, że obiekt Car został najpierw utworzony, a następnie testuje te rzeczy w tej samej metodzie testowej?


title: Pomieszanie zakresu zmiennej: czy zmienna globalna jest rozwiązaniem?

text: Niedawno uczę się programowania w C. Kiedy mamy program w C z wieloma funkcjami, przekazywaniem parametrów, wywoływaniem i wszystkim - staje się wielkim problemem, która zmienna musi być zadeklarowana gdzie. Moje pytanie brzmi: Jeśli zadeklaruję wszystkie zmienne (lub przynajmniej te, które wprowadzają mnie w błąd) jako zmienne globalne - mój problem zostanie rozwiązany - ale czy to dobra praktyka?


title: Jak licencjonować kod programistyczny jako open-source, aby powiedzieć, że jestem autorem?

text: Po prostu się zastanawiam. Nigdy wcześniej nie udzielałem licencji na żaden kod i jest tak wiele oddzielnych informacji na ten temat, że jestem trochę zdezorientowany; Obejrzałem kody, które są publikowane w Internecie, a niektóre z nich zawierają nazwisko autora i informacje o licencji, dzięki czemu kod jest w pewnym sensie spersonalizowany; Więc moje pytanie brzmi... co autor powinien zrobić, aby móc: A) Licencjonować swój kod B) Powiedzieć, że jest autorem kodu C) Umieścić kod w Internecie (strona Apache lub coś w tym kierunku) D) Powiedz to jest na licencji Apache/GNU czy coś? Mówię o licencjach open-source i niekomercyjnych; A najważniejszą rzeczą jest... czy powinienem wcześniej opatentować kod, aby udowodnić, że jestem właścicielem kodu, który go licencjonuje? A do jakiej organizacji powinienem dołączyć? W muzyce jest to coś w rodzaju ASCAP (ale w moim przypadku nie mam na myśli celów komercyjnych); ale co z programowaniem? Czy są jakieś stowarzyszenia, do których mogę dołączyć, aby mieć pewność, że kod, który opublikowałem (na ich oficjalnej stronie itp.) jest naprawdę mój? Dziękuję


title: Najlepsze praktyki modelowania encji aktywnego rekordu przy użyciu Linq-To-SQL jako DAL

text: Obecnie rozpoczynam nowy system w mojej firmie i używamy dobrej separacji między modelami, widokami i kontrolerami, zasadniczo używając Asp.Net MVC 3 dla interfejsu użytkownika i biblioteki klas C# dla modelu. Pytanie dotyczy „modelowania modelu”. Używamy Linq-to-SQL jako warstwy dostępu do danych i modelujemy encje w tym DAL. Przykład: // DAL, automatycznie wygenerowany plik .dbml ... public System.Data.Linq.Table<TB_USER> TB_USERs { get { return this.GetTable<TB_USER>(); } } ... I mapujemy tę tabelę na encję, jak poniżej: public class User { // Entity, dublowanie tabeli .dbml public static IEnumerable<User> GetAll() { var db = new MyDataContext(); var userList = (z uw db.TB_USERs wybierz u).ToList(); IEnumerable<Użytkownik> retorno = lista.ConvertAll(u => (Użytkownik)u); powrót retorno; } // Aktywny rekord ? public static User Save(User user) { ... } } Czy ten rodzaj modelowania jest poprawny? Wydaje się, że powtarzam się, mając 2 encje oznaczające to samo (User i TB_USER), ale TB_USER jest surową reprezentacją tabeli bazy danych, która utrzymuje encję User. I metoda GetAll, statyczna metoda utworzona na jednostce, której jedynym celem jest pobranie ich wszystkich. Oznacza to, że jeśli chcę na przykład pobrać dane za pomocą filtra, muszę utworzyć inną metodę `GetDataBy...`. A co z metodą Save? Wiem, że ma to zapisać stan jednego Użytkownika, ale co jeśli muszę zapisać jakiś losowy obiekt Użytkownika wraz z innymi obiektami, aby dokonać transakcji? Czy tego rodzaju kontrola transakcji nie powinna znajdować się w bazie danych?


title: Czy Twoje miejsce pracy umożliwia korzystanie z wielu interoperacyjnych języków programowania?

text: Od teraz istnieje kilka dobrych języków, które są ukierunkowane na JVM i mogą współpracować z Javą z różnym stopniem bezbolesności, podobnie jak dla CLR (zwłaszcza po niedawnym dodaniu F# jako „oficjalnego” języka dla platformy), wydaje mi się lubię więcej miejsc mogłoby z tego skorzystać, ale boję się. W moim miejscu pracy możemy pisać nasze komponenty tylko w C#. To dobry język i nie mam nic przeciwko programowaniu w nim, ale naprawdę wolałbym czasami używać F#. Jestem pewien, że gdybyśmy byli na Jawie, sprawy byłyby podobne, gdzie wolałbym Clojure lub Scala. To prawdopodobnie samolubne z mojej strony, ponieważ jestem pewien, że bezpieczniej jest trzymać się najniższego wspólnego mianownika. Jakie są twoje przemyślenia na ten temat? Czy więcej osób powinno skorzystać z doskonałej interoperacyjności na tych platformach?


title: Rozwiązanie przepływu pracy w sieci - jak podejść do projektu?

text: Otrzymaliśmy zadanie stworzenia internetowego narzędzia przepływu pracy do śledzenia zarządzania zmianami. Ma pojedynczy przepływ pracy z wieloma zadaniami synchronicznymi w większości, ale rozgałęzia się w pewnym momencie na zadania działające równolegle, które spotykają się później. Z aplikacji będą korzystać różne osoby i wszyscy będą musieli widzieć swoje zaległe zadania dla każdej zmiany, ale tylko swoje, a nie inne. Będzie też grupa ludzi wysokiego szczebla, którzy będą nadzorować wszystkie zmiany, więc wszystko trzeba zobaczyć. Będą musieli zobaczyć zadania, które nie zostały wykonane w określonym czasie, kto jest za nie odpowiedzialny itp. Dane zostaną utrwalone w bazie danych SQL. Wszystko zostanie połączone za pomocą .Net. Ostatnio próbowałem nauczyć się i zaimplementować OOP w moich projektach, ale zastanawiam się, czy w tym przypadku jest to dyskusyjne, ponieważ może być lepiej, aby logikę biznesową dla tego mieć w procedurach składowanych w bazie danych. Mógłbym użyć POCO, warstwy front-endu i warstwy dostępu do danych dla aplikacji internetowej i po prostu użyć jej jako mechanizmu do działań CRUD w DB, a następnie użyć SP uruchamianych w DB, aby zastosować reguły biznesowe. Z drugiej strony mógłbym użyć projektu zorientowanego obiektowo w aplikacji internetowej, ale ponieważ dane w aplikacji są bezstanowe, czy to zły pomysł? Mógłbym spróbować modelować całą aplikację w strukturę klas, implementując interfejsy, klasy bazowe i wszystkie te dobre rzeczy. Stworzyłbym więc klasę zmiany, która zawierałaby listę klas/typów zadań, które definiowały każde zadanie i implementowała interfejs ITask itp. Wstawiam typy użytkowników końcowych do zadań, aby określić, kto powinien wykonywać jakie zadanie. Następnie zastosuj całą logikę biznesową w odpowiednich metodach klas itp. Jak myślicie, jakie podejście powinienem zastosować do tego rozwiązania?


title: Jaki jest algorytm wygasania elementów w magazynie pary klucz-wartość?

text: Myślałem o tym, jak obecne magazyny klucz-wartość implementują „datę wygaśnięcia” dla elementów. Obecnie mam na myśli 2 warianty: 1. nic nie robią (przechowują wygasłe dane) i sprawdzają tylko wtedy, gdy robisz, na przykład, GET przez jakiś klucz. Problem polega na tym, że jeśli masz ograniczoną pamięć, elementy, które wygasły, nie zostaną usunięte. 2. zachowują dodatkowe struktury danych, aby móc uzyskać „najwcześniejsze wygaśnięcie”. Widzę, że można to zrobić za pomocą czegoś takiego: storage_data = dict(klucz -> [wartość, wygasa_sygnatura czasowa]) wygasa_tree = SomeBinaryLikeTree(expire_timestamp -> [klucze])


title: Entity Framework bez bezpośredniego dostępu do tabeli

text: Jest kilka podobnych pytań, które znalazłem tutaj, ale żadne z nich nie odpowiada w pełni na zadane przeze mnie pytanie. Podobne pytania: tu i tu W mojej firmie opracowuję aplikacje C# .NET, a nasi administratorzy serwerów w dziale IT nie pozwalają na bezpośredni dostęp do tabel, więc musimy używać procedur składowanych do wstawiania, aktualizowania i usuwania z tabeli. W przeszłości korzystałem z DataSets i TableAdapters, aby uzyskać dostęp do tabel bazy danych, ale zaczynam zdawać sobie sprawę, że wszystko zaczyna używać Entity Framework. W tym tkwi mój problem. Jest tu inny deweloper, który używa Entity Framework, ale w rzeczywistości nie używa jednostek. Używa modeli jednostek, które nie mają tabel ani widoków, tylko procedury składowane. Czy nie jest to sprzeczne z celem _Entity_ Framework, czy też jestem szalony? Zdaję sobie również sprawę, że można mapować funkcje wstawiania, aktualizowania i usuwania do procedur składowanych, a ten artykuł wspomina o kilku interesujących sposobach implementacji tego, ale tworzenie widoków dla każdej tabeli byłoby poważnym problemem. Czy istnieją bardziej praktyczne lub łatwe do wdrożenia alternatywy?


title: Nie można zrozumieć przykładowej listy połączonej

text: Czy ktoś mógłby mi wyjaśnić ten kod... #include <iostream> using namespace std; link do struktury { dane int; link* dalej; }; class linklist { private: link* pierwszy; public: linklist() : first(NULL) {} void additem(int); nieważne wyświetlanie(); }; nieważna lista linków::additem(int d) { link* nowy link = nowy link; newlink->dane = d; nowylink->następny = pierwszy; pierwszy = nowy link; } void lista linków::display() { link* bieżący = pierwszy; while( current != NULL ) { cout<<bieżące->dane<<"\n"; bieżąca = bieżąca->następna; } } int main() { lista linków li; li.additem(25); li.additem(36); li.additem(47); li.additem(58); li.wyświetlacz(); zwróć 0; } otrzymuję większość kodu, ale nie rozumiem, co następuje: 1. Co się dzieje, gdy wywoływana jest `additem(int)`? 2. W jaki sposób jeden obiekt tworzy 4 wartości wewnętrzne i przechodzi przez nie pętlą? 3. Jak działa pętla while w tym przykładzie kodu?


title: Implementacja interfejsu testowego

text: Mam interfejs w naszej bazie kodu, który chciałbym móc wykpić do testów jednostkowych. Piszę implementację testów, aby umożliwić poszczególnym testom nadpisanie określonych metod, których dotyczą, zamiast implementowania każdej metody. Natknąłem się na dylemat dotyczący tego, jak implementacja testu powinna się zachowywać, jeśli test nie zastąpi metody używanej przez testowaną metodę. Czy w implementacji testu należy zwrócić wartość „bez wartości” (0, null) czy zgłosić wyjątek UnsupportedOperationException, aby jawnie zakończyć test?


title: Jaka jest najlepsza strategia implementacji tego widżetu html + javascript?

text: **Problem** Wymyśliłem ten wariant z polem wyboru w odpowiedzi na pytanie na UX.SE: http://ux.stackexchange.com/a/48951/16187 ![tutaj wpisz opis obrazu](http: //i.stack.imgur.com/w2hEC.png) Jednak praca nad tym, jak to zaimplementować, doprowadzała mnie do szału, odkąd napisałem ten post. **Czego próbowałem** Początkowo pomyślałem, że będzie to dość łatwe. Strategią, którą bym podjął, byłoby modelowanie wszystkich opcji w obiekcie javascript, z ich własną nazwą i wybranymi właściwościami, a następnie napisanie funkcji widoku, aby wyświetlić je jako nieuporządkowaną listę lub coś takiego. Mógłbym wtedy utworzyć przycisk jako kolejny obiekt javascript, modelując jego własny stan, i mieć funkcję widoku wyrzucającą jego reprezentację do widżetu. Może wrzuć jakiś kod zdarzenia do przejścia między stanami przycisków i gotowe. **Gdzie utknąłem** Im więcej myślałem o tym podejściu, tym bardziej zdawałem sobie sprawę, że posiadanie całego stanu w obiektach javascript to okropny pomysł. Pomyślałem, że prawdopodobnie powinienem przechowywać stan w dom i zmutować go za pomocą javascriptu. Jednak nie mam jasnego wyobrażenia, jak wyglądałaby taka architektura, ani jak powinienem ją zakodować. Czy możesz mi pomóc ustalić, jak wygląda lepsza strategia implementacji wysokiego poziomu dla tego rodzaju widżetu?


title: Gdzie umieścić plik konfiguracyjny Springa?

text: Chcę zintegrować Spring framework w moim projekcie, szczególnie po stronie serwera. Nie chcę więc umieszczać go w folderze WEB-INF pliku wojennego. Czy powinienem umieścić plik applicationContext.xml w każdej warstwie (oznacza to, że każdy projekt jest podzielony na odrębne projekty? (Usługi, Domena i DAO) Jaka jest dobra praktyka?


title: Iteracyjne modelowanie procesów na tablicy kanban

text: Kanban zakłada mniej więcej liniowy przepływ. W większości przypadków dobrze to modeluje tworzenie oprogramowania: tworzymy historyjkę użytkownika, kodujemy ją, testujemy i wdrażamy. Jednak niektóre etapy wewnętrzne mają charakter iteracyjny i dlatego nie są tak oczywiste. Weź tę (uproszczoną) tablicę: || Planowanie || Rozwój || Test || Wdróż || Gotowe || || robienie | gotowe || robienie | gotowe || robienie | gotowe || robienie | gotowe || || || | || | || | || | || || Skupmy się na kolumnie Planowanie. Jeśli jest to miejsce, w którym tworzone są historyjki użytkownika, wyraźnie potrzebna jest pewna iteracja: napisz historię, udoskonal/rozmowę, ulepsz historię, opinie klientów itp. Te etapy w ogóle nie są modelowane na tablicy. Skupmy się na kolumnie Test. Gdy historia (lub zadanie/co nie) jest testowana: niektóre testy zakończą się pomyślnie, inne nie. Dlatego historia wymaga więcej pracy. Czy powinien wrócić do kolumny deweloperskiej? Pobyt w specjalnym teście/opracowaniu? Czy powinny istnieć kolumny Test/Niepowodzenie i Testy/Powodzenie? Zbytnie komplikowanie deski nie jest optymalnym rozwiązaniem. _Czy powinieneś modelować procesy iteracyjne za pomocą Kanban?_ Jeśli tak, to w jaki sposób? Jeśli nie, dlaczego nie?


title: Czy ma sens pytanie: „Jaka jest różnica między wzorcem projektowym a algorytmem?”

text: Z Wikipedii: > W matematyce i informatyce **algorytm** jest skuteczną metodą > wyrażoną jako skończona lista dobrze zdefiniowanych instrukcji do obliczania funkcji >. > > W inżynierii oprogramowania **wzorzec projektowy** jest ogólnym rozwiązaniem wielokrotnego użytku > często występującego problemu w projektowaniu oprogramowania. Z opisu (zakładając, że są poprawne w Wikipedii), wygląda na to, że algorytm i wzorzec projektowy są nieco podobne/takie same. Obaj osiągają zadanie rozwiązania problemu i oba z pewnością nadają się do ponownego użycia, jeśli zostaną odpowiednio wdrożone. Czy porównywanie ich w celu oceny różnic między nimi ma sens?


title: Co oznacza „S” w OOPS?

text: Szukałem pełnej formy " **OOPS** " w Google, ale niestety jest wiele niejednoznacznych odpowiedzi. Niektórzy twierdzą, że to „ **Systemy** ”, inni twierdzą, że to „ **Struktura** ”, a niektórzy nawet jako „ **Streszczenie**”. Czy ktoś może mnie oświecić, aby znaleźć pełną formę OOPS, z odpowiednim i poprawnym odniesieniem? Wielkie dzięki wszystkim za pomoc.


title: Uruchomienie w piwnicy i skalowanie

text: Mam więc w głowie ten „świetny” pomysł, nad którym chcę zacząć pracować i wokół niego zbudować firmę. Pracuję nad rozwojem komputerów od ponad 5 lat, a pomysł kręci się wokół sieci. Moja ekspozycja na tworzenie stron internetowych ma charakter czysto akademicki (kilka stron internetowych opartych na bazach danych itp.). Wiem, że mam środki, aby zacząć i zbudować coś, co działa, ale jestem również pewien, że nie mam doświadczenia, aby skalować wszystko, co zbuduję, do ogromnych ilości. Patrząc na to, jak niektóre z głównych firm internetowych zaczynały w akademikach itp., Zastanawiam się, jak większość startupów internetowych podchodzi do tego problemu (trudno mi uwierzyć, że wszyscy główni założyciele startupów mieli coś, co skalowałoby się do milionów użytkowników w swoich pierwsze szczepienie). Czy uważasz, że mądrze jest biegać z czymkolwiek mogę, a potem martwić się skalowaniem, jeśli i kiedy jest to konieczne? A może uważasz, że to znak, że próbuję ugryźć więcej, niż mogę przeżuć?


title: Czuję się dobrze z mojej głębi

text: Właśnie rozpocząłem nową pracę jako front-end web developer, to jest mój drugi dzień i właśnie dostałem dość duży projekt, który zawiera dużo javascriptu, którego nie znam, to mnie bardzo stresuje (zeszłej nocy nie mogłem zasnąć ze zmartwieniami) w zasadzie dostałem pracę od szefa firmy, który zadzwonił do mnie i poprosił mnie o rozmowę, która następnie zakończyła się ofertą pracy, którą przyjąłem, moja poprzednia rola to tylko css i html z dziwnym małym kawałek jquery tu i tam i teraz to jest poza moją strefą komfortu. Co powinienem zrobić? Przy moim imieniu jest napisane moje imię + DHTML, CSS i JQuery?


title: Zamieścić w CV wieloletnie doświadczenie?

text: Od prawie trzech lat programuję w C# .Net, a tylko w C# .Net. Wypełniam swoje CV/życiorys i wygląda to trochę beznadziejnie, ponieważ nie znam żadnych innych języków (które i tak jestem na tyle pewny, że mogę je dołączyć). Ponieważ nie mogę określić mojego wieku/DoB, obawiam się, że pracodawcy nie spojrzą na to po raz drugi. Jestem bardzo dobry w projektowaniu OO, TDD, itp... A więc praca na poziomie absolwenta jest prawdopodobnie trochę niska, ale mając za pasem tylko jeden język, nie jestem pewien, czy będę brany pod uwagę jako programista na poziomie „zwykłym” . Czy dobrym pomysłem jest uwzględnienie wieloletniego doświadczenia? A może powinienem po prostu zwiększyć obawy dotyczące cięcia poprzecznego (TDD, OO...)? Lub jakieś inne sugestie, jak dostać się na rozmowę kwalifikacyjną?


title: Jak mogę ukończyć projekt jako pojedynczy programista?

text: Jestem programistą PHP, który koduje dla zabawy. Mój problem polega na tym, że nigdy nie ukończyłem dużych projektów. Chciałbym wiedzieć, jak doświadczeni programiści tacy jak Ty są w stanie samodzielnie realizować projekty. Mój problem polega na tym, że pozwalam, aby frustracja mnie dopadła. Myślę, że dzieje się tak dlatego, że sam zajmuję się kodowaniem i grafiką, a to jest dla mnie naprawdę trudne, ponieważ pochodzę z kraju, w którym elektryczność ma epilepsję (w Nigerii - trzeba by robić rzeczy szybko, ponieważ zasilanie zostanie odcięte po pewnym czasy, które czasami są nieprzewidywalne). Tak więc bardzo wybredna osoba, taka jak ja, ma trudności z natychmiastowym podejmowaniem decyzji dotyczących projektu (grafiki). To, o co cię proszę, to formuła, która działa dla ciebie. Formuła, która wykonuje pracę. W tej chwili myślę o formule, która polega na zakodowaniu „brudnego” prototypu mojego pomysłu. Potem, kiedy skończę, skupię się tylko na aspekcie graficznym. Czy to naprawdę dobry pomysł? Proszę, potrzebuję twojej rady, ponieważ może nigdy nie zrealizuję żadnego własnego projektu. Uwaga: nie mam problemu z kodowaniem w PHP. Dziękuję


title: Czy dowiem się więcej, zmieniając kod innych osób?

text: Obecnie próbuję przebić się przez pośredni etap kodera do zaawansowanego i nie trzeba dodawać, że było to trudne. Przepracowałem kilka książek z przykładowym kodem. Ostatnio czułem, że wzięcie przykładowego kodu, zmiana go, aby pasował do mojego podobnego projektu, łamanie go i naprawianie, jest bardziej efektywne w nauce niż zwykłe przekodowywanie linijka po linijce przykładowej pracy. Czy ktoś jeszcze ma podobne lub przeciwstawne opinie? Czy ta metoda się opłaci w dłuższej perspektywie? Myślisz o tej metodzie uczenia się? Dziękuję!


title: Przepływ pracy z zapłonnikiem/MVC

text: Trochę pytania dotyczącego przepływu pracy. Po prostu gapię się na MVC i zastanawiałem się, jak zwykle pracują inni ludzie w MVC? Dwie opcje, które widzę, to najpierw całkowicie zakodować model i kontroler, a następnie pracować nad widokami. Inną opcją jest jednoczesne kodowanie wszystkich części. Szukam, co może być najszybszym i najbardziej wydajnym sposobem kodowania w MVC? Nie mamy wewnętrznych projektantów ani wyznaczonych zadań, więc wszyscy wykonują te same zadania (kodowanie, projektowanie, testowanie, db, itp.). Dziękuję!


title: Jaka jest różnica między językiem programowania zorientowanym na procedurę a językiem programowania zorientowanym na problem?

text: To jedno z pytań, które zadano nam zadanie i próbowałem poszukać tego w Internecie, ale nie otrzymałem wymaganych odpowiedzi. Byłoby wspaniale, gdyby podano również przykłady :)


title: Jakiej czapki nie powinien nosić programista?

text: Z mojego doświadczenia wynika, że programiści mają tendencję do noszenia wielu czapek i wypełniania wielu ról z różnymi obowiązkami. Od nie tylko kodowania, ale czasem także pisania SQL, projektowania interfejsu użytkownika, projektowania bazy danych, manipulacji grafiką, a nawet testowania QA. **Jeśli podstawową rolą jest pisanie oprogramowania/kodu, jakich ról nie powinien pełnić programista?** Czy są jakieś? Intencją tego pytania nie jest to, że programista nie jest w stanie wypełnić innej roli – ale posiadanie dodatkowej roli faktycznie _działa wbrew roli podstawowej_ , lub powinno być dedykowaną rolą kogoś, kto nie programuje głównie.


title: Czy jesteśmy programistami tylko narzędziami w rękach wizjonerów i ludzi biznesu?

text: Drodzy koledzy programiści, jestem CTO i głównym programistą w naszym start-upie. Nasz CEO wszedł do biura w pośpiechu i poprosił mnie o zmianę terminu, abyśmy mogli wybrać bardzo ważnego klienta na lotnisku. Na lotnisku zdałem sobie sprawę, że klient jest właściwie bardziej biznesmenem, wizjonerem (i całkiem udanym) niż programistą. Wiedziałem skądinąd, że był kiedyś programistą, więc zapytałem go, co się stało? Po długim upokarzającym spojrzeniu na mój koszt odpowiedział: "-Co się stało? Mam ludzi do kodowania dla mnie!" Od tamtej chwili myślę o tym, co powiedział. Stopniowo tracę zainteresowanie rozwojem i czuję, że wszyscy jesteśmy obywatelami drugiej kategorii w branży IT. Nie mogę oprzeć się wrażeniu, że programiści i ogólnie ludzie techniczni są tylko narzędziami w rękach bardziej wizjonerskich ludzi. Twoje spostrzeżenia są mile widziane. EDIT: Jak się wydaje, dla niektórych pytanie jest niejasne. To, o co proszę, to porównanie ludzi technicznych z wizjonerami i udowodnienie, że ludzie techniczni nie są wymiennymi jednostkami roboczymi w wielkim schemacie rzeczy. Historia ma tylko dać czytelnikowi obraz problemu.


title: Czy przepuszczanie instancji przez kilka warstw jest złą praktyką?

text: W moim projekcie programu często dochodzę do punktu, w którym muszę przekazywać instancje obiektów przez kilka klas. Na przykład, jeśli mam kontroler, który ładuje plik audio, a następnie przekazuje go do odtwarzacza, a odtwarzacz przekazuje go do playerRunnable, który przekazuje go ponownie w inne miejsce itp. Wygląda to trochę źle, ale ja nie wiedzieć, jak tego uniknąć. Czy jest to w porządku, aby to zrobić? EDYCJA: Może przykład odtwarzacza nie jest najlepszy, ponieważ mogłem później załadować plik, ale w innych przypadkach to nie działa.


title: Programowanie według standardów ANSI (dla inżynierii)

text: Obecnie mam za zadanie napisać oprogramowanie, które pomoże inżynierom w projektowaniu projektów zgodnych ze standardami. W przypadku złego projektu oprogramowanie zgłosi błąd lub ostrzeżenie. Może to tylko ja, ale każdy, kto to zrobił, powinien znać ogromną liczbę tabel standardów ANSI, takich jak ta: http://en.wikipedia.org/wiki/Nominal_Pipe_Size Komputery to, jak sama nazwa wskazuje, maszyny obliczeniowe, nie wyszukiwania maszyn. Uważam, że wprowadzanie formuł do komputerów i tworzenie projektów zgodnych ze standardami jest znacznie bardziej wydajne niż wyszukiwanie danych intensywnie korzystających z pamięci, które są podatne na błędy wprowadzania danych przez człowieka i podatne na „aktualizacje danych”. Właściwie myślę, że istnieją formuły do obliczania tych wszystkich liczb, ale nikt do tej pory nie mógł mi podać tych informacji. Czy ktoś już przez to przechodził? Jakie jest **NAJLEPSZE** podejście do tego? Dzięki za udostępnienie.


title: Jakie standardy jakości należy wziąć pod uwagę w procesie tworzenia oprogramowania?

text: szukam metryk/standardów/normatywnych do oceny danego "procesu rozwoju oprogramowania". NIE szukam oceny samego OPROGRAMOWANIA (przez KWADRAT itp.), próbuję ocenić PROCES tworzenia oprogramowania. Więc moje pytanie brzmi, czy mógłbyś dać mi kilka wskazówek, jak znaleźć ten standard, biorąc pod uwagę, że „cele oceny” to jakość dokumentacji, jak dobra jest relacja z klientem, jak efektywny jest proces, itp. Bardzo podobnie jak ISO 9000, i jak CMMI w pewnym sensie, ale dużo lekki i konkretny i zorientowany na proces, a nie na firmę. Proszę o pomoc, staram się utrwalić zalety naszego procesu rozwoju tak formalnie, jak tylko mogę.


title: Co zrobić z przestarzałym kodem?

text: Narasta kod, którego już nie używamy. Co więc zrobić, gdy już tego nie potrzebujesz? Usunięcie go jest marnotrawstwem, zwłaszcza dużych fragmentów, i zawsze istnieje szansa, że dokładnie to samo będzie potrzebne później. Komentowanie kodu jest miłe, ponieważ pozostawia go na miejscu na później, ale wtedy kod może zacząć się zaśmiecać. Kontrola wersji utrzymuje wszystko w czystości i we właściwym miejscu bez obawy o usunięcie czegokolwiek, ale znalezienie odpowiedniego kodu w historii wersji jest często własnym projektem. Zatwierdzanie kodu, który nie działa tylko dlatego, że możesz go później potrzebować, nie jest dobrą praktyką. **P:** Czy ktoś ma dobre rozwiązanie do zarządzania przestarzałym kodem?


title: Jak działa Python?

text: To pytanie może wydawać się trochę głupie, ale co do cholery. Zacząłem uczyć się Pythona. Znam podstawową składnię itp. Kiedy pracuję z HTML, PHP, itp., po prostu piszę kod, umieszczam go w pliku .html lub .php i klikam dwukrotnie ten plik. Potem uruchamia się mój kod. Potrafię pracować z bazami danych i innymi rzeczami - to po prostu proste. Ale jak działa Python? Pracuję w wierszu poleceń Eclipse lub Python i mogę uruchomić ten kod, ale co jeśli chcę zrobić stronę internetową na przykład w Pythonie? Nie wydaje mi się, że umieszczam plik .py na moim serwerze, więc co muszę zrobić? Rozumiem, że muszę zainstalować Pythona na moim serwerze internetowym za pomocą wiersza poleceń serwera (nigdy go nie używałem, ale znajdę dzień, w którym będę go potrzebować), ale co dalej? Jak mogę połączyć moją wiedzę o Pythonie z HTML, CSS, PHP itp.? Python może być również używany do tworzenia aplikacji desktopowych, co wtedy? Czy mogę wyeksportować plik .exe z kodem Pythona czy co? Wszelkie linki z treściami opisującymi moje obawy są mile widziane!


title: Jak myślisz, jakie są największe problemy związane z tworzeniem oprogramowania w małych i średnich firmach?

text: Jestem właścicielem małej firmy programistycznej, która tworzy oprogramowanie internetowe dla innych małych i średnich firm w Chile. Proces biznesowy jest bardzo złożony i trudno jest ustalić, gdzie włożyć wysiłek, aby nasza firma była lepsza, wydajniejsza i oferowała lepsze rozwiązania. Jestem również studentem studiów magisterskich TI i tworzę artykuł na ten temat, więc każda pomoc byłaby świetna, aby pomóc mojej firmie i mojej pracy. Rozważyłem 3 obszary problemów: 1) Problemy z tworzeniem oprogramowania 2) Problemy z tworzeniem stron internetowych 3) Problemy małych i średnich firm Nie wiem o Tobie, ale przynajmniej ta „formuła biznesowa” w Chile nie otrzymała zbyt dużego wsparcia ale jest coraz lepiej, ale dzisiaj moja firma jest daleka od samowystarczalności. AKTUALIZACJA: Dziękuję chłopaki za dotychczasowe wsparcie, aktualizuję, ponieważ mam wystarczająco dużo informacji, więc postanowiłem zagłębić się w tematy, chciałbym, abyś rozważył twoje następne odpowiedzi / komentarze na ten temat: 1) Oprogramowanie problemy rozwojowe (3) 1.1 Niepełny obraz problemu 1.2 Nieprzydatne dostarczone oprogramowanie 1.3 Nierealistyczny lub nieodpowiedni harmonogram 2) Problemy z tworzeniem stron internetowych (3) 2.1 Pozornie nieopłacalna implementacja 2.2 Nieefektywny projekt konstrukcji modułu 2.3 Ograniczona interoperacyjność systemu 3) Małe i średnie firmy problemy (3) 3.1 Bardzo specyficzne, ale zawężone wymagane cechy systemu 3.2 Opracowany system nie jest używany 3.3 Pozytywistyczne zapotrzebowanie na działania w realizacji projektu Istnieją tylko 3 problemy dla kategorii, aby celowo zachować węższy zakres. Uznałem również, że należałoby rozdzielić trzecią klasyfikację na dwie, ale nie zrobię tego teraz: 3) Problemy małych i średnich dostawców oprogramowania 4) Problemy małych i średnich klientów zajmujących się tworzeniem oprogramowania W takim przypadku , myślę, że poszerzyłbym zakres problemu i nie jest to to, co chcę teraz robić, dopóki przynajmniej nie skończę z dwoma pozostałymi klasyfikacjami. Co myślisz?


title: Dalej we współbieżności

text: Przez ostatni rok dużo pracowałem nad współbieżnością w Javie oraz budowałem i pracowałem nad wieloma współbieżnymi pakietami. Więc jeśli chodzi o rozwój w równoległym świecie, jestem całkiem pewny. Ponadto jestem bardzo zainteresowany nauką i zrozumieniem programowania współbieżnego. Ale nie potrafię sobie odpowiedzieć, co dalej? Czego dodatkowo powinienem się nauczyć lub nad czym popracować, aby odziedziczyć więcej umiejętności związanych z przetwarzaniem wielordzeniowym. Czy jest jakaś ładna książka (przeczytana i ciesząca się „współbieżnością w praktyce” i „programowanie współbieżne w javie”) lub zasób związany z przetwarzaniem wielordzeniowym, abym mógł przejść na wyższy poziom?


title: Czy ukrywasz swój adres e-mail w kodzie o otwartym kodzie źródłowym, aby zapobiec spamowaniu?

text: Myślałem o wydaniu kilku projektów, a większość autorów w społeczności zostawia swój adres e-mail bezpośrednio w kodzie, często tak jak jest lub używa powszechnie używanych schematów, takich jak „meATNOSPAMgmail.com”, co w pewnym sensie wywołuje moją paranoję. .. Czy publiczne udostępnianie kodu źródłowego często prowadzi do parsowania Twojego adresu e-mail przez boty spamowe, a jeśli tak, to jak go zaciemniać?


title: Jak współdziałać ze sobą dwa różne programy z dwoma różnymi językami?

text: Nie wiem, czy to zbyt szerokie, czy nie, ale jestem młodym programistą jeszcze na studiach, to mój młodszy rok. Czuję, że całkiem dobrze orientuję się w różnych językach i mam całkiem niezłą bazę. Ale potykam się, aby pomyśleć, jak na przykład próbuję stworzyć program i powiedzieć, że napisałem jedną część w pythonie tylko dlatego, że jest łatwy i wykonuje swoją pracę, ale ten program musiałby uzyskać dane wyjściowe z innego programu, który napisałem w C i używam C ze względu na jego szybkość. Nie jestem pewien, w jaki sposób te dwa różne programy i języki współdziałają ze sobą, aby stworzyć jeden całościowy program. Myślę o tym, że możesz pisać do pliku, ale co jeśli programy python i C uzyskują dostęp do pliku, musiałbym pomyśleć o blokadach. Najczęściej robiłem to z importowaniem plików do programu, ale w tym przypadku są to ten sam język, więc jest to łatwe, po prostu używam funkcji importu, ale z dwoma językami / programami współdziałającymi w celu utworzenia jednego spójnego wyjścia mam problem . Zastanawiałem się nad tym pytaniem, ponieważ zastanawiałem się nad stworzeniem podstawowych aplikacji internetowych tylko po to, aby się uczyć, ale nie mam pojęcia, jak powiedzieć, że plik javascript jest interaktywny z czymś, co napisałem w Pythonie lub odwrotnie. Czuję, że brakuje mi tutaj czegoś naprawdę łatwego i po prostu nie rozumiem. Przepraszam, jeśli to pytanie jest zbyt szerokie, ale tak naprawdę nie mogłem znaleźć jasnej odpowiedzi w Internecie, próbowałem przejrzeć aplikację internetową typu open source, ale tak naprawdę nie mogłem uchwycić z niej odpowiedzi, ponownie wybacz mi, jeśli pytanie wydaje się głupie, pomyślałem to dobre miejsce, aby zapytać. Uwielbiam czytać na stackexchange. Dziękuję za każdą odpowiedź.


title: Czy `catch(...) { throw; }` zła praktyka?

text: Chociaż zgadzam się, że łapanie `...` **bez ponownego wyrzucania** jest rzeczywiście złe, uważam jednak, że użycie konstrukcji takich jak ta: try { // Rzeczy } catch (...) { // Trochę czyszczenia rzutu; } Jest dopuszczalne w przypadkach **gdzie RAII nie ma zastosowania**. (Proszę nie pytać... nie każdy w mojej firmie lubi programowanie obiektowe, a RAII jest często postrzegany jako "bezużyteczne szkolne rzeczy"...) Moi współpracownicy mówią, że zawsze powinieneś wiedzieć, jakie wyjątki mają być rzucane i że zawsze możesz używać konstrukcji takich jak: try { // Stuff } catch (exception_type1&) { // Trochę czyszczenia throw; } catch (exception_type2&) { // Trochę czyszczenia throw; } catch (exception_type3&) { // Trochę czyszczenia throw; } Czy istnieje dobrze przyjęta dobra praktyka dotycząca takich sytuacji?


title: Oddzielna encja domeny w małych

text: Mam encję Klient, ta encja ma ogromną listę atrybutów, więc myślisz osobno w małych encjach (na przykład: „podstawowe informacje”, „dokument”, „deklaracje” itp.). Takie podejście zostanie zastosowane w warstwie widoku, gdzie użytkownik może wypełnić swoje informacje krok po kroku, umożliwiając zatrzymanie i powrót później. Ale nie jestem pewien, czy odzwierciedlenie tej fragmentacji w innych warstwach ma sens. Ponieważ będziemy mieli dużo kontrolerów po stronie klienta i serwera (ponieważ używamy express.js i angular.js). Podąża za przeglądem złożoności pod względem pól, pamiętając, że każda "częściowa" musi być poprawna i raz ważna, jest zapisywana w bazie danych: - info do wygenerowania klienta -- imię i nazwisko -- e-mail - podstawowe informacje -- dob -- płeć – miasto rodzinne – województwo – kraj – informacje o telefonie (tylko jeden telefon) – prefiks – numer telefonu – informacje o banku (może być więcej niż jeden) – bank – agencja – numer konta – itp. Jakieś sugestie?


title: Anulowanie formularza. Gdzie powinno nastąpić cofnięcie danych?

text: Masz formularz, do którego wstrzyknięto obiekt. Użytkownik wchodzi w interakcję z formularzem i aktualizuje wstrzyknięty obiekt za pośrednictwem interfejsu użytkownika. Jeśli użytkownik „Anuluje” formularz, czyim obowiązkiem jest cofnięcie tych zmian? Czy formularz powinien utworzyć klon przekazanego obiektu i zwrócić go klientowi? A może klient powinien obserwować akcję „Anuluj” i wykonać akcję cofania? Czy istnieje „najlepsza praktyka” w tym zakresie?


title: Czy robię TDD źle, gdy wiele testów może zakończyć się niepowodzeniem z tego samego powodu?

text: Załóżmy metodę z następującą deklaracją public IList<Location> GetLocations() { ... } Piszę (przynajmniej) następujące testy 1. Sprawdź, czy metoda zwraca pustą kolekcję, jeśli nie znaleziono lokalizacji. 2. Sprawdź, czy metoda zwraca poprawną liczbę lokalizacji. 3. Sprawdź, czy dane w lokalizacjach zwracanych przez metodę są poprawne. Jednak wszystkie powyższe testy zakończą się niepowodzeniem, jeśli metoda zwróci wartość null. Czuję, że pojedynczy błąd powinien skutkować niepowodzeniem tylko jednego testu jednostkowego, ale jednocześnie nie widzę, jak tego uniknąć w takim scenariuszu. Czy tak to działa; czasami wiele testów kończy się niepowodzeniem z tego samego powodu?


title: Dlaczego nowe narzędzie ADT domyślnie tworzy statyczny fragment klasy wewnętrznej?

text: Szczerze mówiąc, nie mogę oprzeć się wrażeniu, że robi się to tylko po to, by zmylić przybyszów. Większość błędów w Stack Overflow przez kompletnych nowicjuszy Androida wynika głównie z tego, że mają statyczny fragment klasy wewnętrznej, którego nie rozumieją, jak to działa, dlaczego tam jest, i próbują używać działań, nawet jeśli nie rozumieją w pełni koncepcja tego, co się dzieje. Muszę przyznać, że miałem też problem ze zrozumieniem podejścia „PlaceholderFragment”, a używanie statycznych klas wewnętrznych nie jest w ogóle rozszerzalne. Pierwszą rzeczą, którą musisz zrobić, to stworzyć prawdziwą klasę na zewnątrz – ale dlaczego nowicjusze muszą to robić? Myślę, że mogłoby to być znacznie bardziej wydajne, gdyby użyli struktury projektu podobnej do następującej prostej struktury projektu Android opartej na fragmentach: * src * wholepackagename * activity * MainActivity * fragment * FirstFragment * SecondFragment * res * layout * wartości * ... Za pomocą kodu src/wholepackagename/activity/MainActivity: public class MainActivity extends FragmentActivity implementuje FirstFragment.Callback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() { public void onBackStackChanged() { int backCount = getSupportFragmentManager().getBackStackEntryCount(); if (backCount == 0) { finish();} } }); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction().add(R.id.main_container, new FirstFragment()).addToBackStack(null).commit(); } } @Override public void firstFragmentCallback() { getSupportFragmentManager().beginTransaction().replace(R.id.main_container, nowy SecondFragment()).addToBackStack(null).commit(); } } src/wholepackagename/fragment/FirstFragment.java: public class FirstFragment extends Fragment implementuje View.OnClickListener { private Callback callback; private Button firstFragmentButton; publiczny interfejs statyczny Callback { void firstFragmentCallback(); } public FirstFragment() { super(); } @Zastąp public void onAttach(Aktywność) { super.onAttach(aktywność); spróbuj { callback = (oddzwanianie) aktywność; } catch (ClassCastException e) { Log.e(getClass().getSimpleName(), activity.getClass().getSimpleName() + " musi zaimplementować interfejs wywołania zwrotnego!", e); rzut e; } } @Override public Widok onCreateView(LayoutInflater inflater, kontener ViewGroup, Bundle protectedInstanceState) { Widok rootView = inflater.inflate(R.layout.fragment_first, container, false); firstFragmentButton = (Przycisk) rootView.findViewById(R.id.fragment_first_button); firstFragmentButton.setOnClickListener(to); return rootView; } @Override public void onClick(View v) { if(v == firstFragmentButton) { callback.firstFragmentCallback(); } }; } src/wholepackagename/fragment/SecondFragment.java: public class SecondFragment extends Fragment implementuje View.OnClickListener { private Button secondFragmentButton; public SecondFragment() { super(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle protectedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_second, container, false); secondFragmentButton = (Przycisk) rootView.findViewById(R.id.fragment_second_button); secondFragmentButton.setOnClickListener(to); return rootView; } @Override public void onClick(View v) { if(v == secondFragmentButton) { Toast.makeText(getActivity(), "To jest przykład!", Toast.LENGTH_LONG).show(); } }; } Android-Manifest.xml: <?xml version="1.0" kodowanie="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" nazwa_pakietu" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <aplikacja android:allowBackup="true" android:icon= „@drawable/ic_launcher” android:label="@ciąg/nazwa_aplikacji" android:theme="@style/AppTheme"> <aktywność android:name="nazwa całegopakietu.activity.MainActivity" android:label="@ciąg/nazwa_aplikacji" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> ponownie s/layout/activity_main.xml: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android: id="@+id/main_container" android:layout_width="match_parent" android:layout_height="match_parent" /> res/layout/fragment_first.xml: <?xml version="1.0" kodowanie="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/fragment_first_button " android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/first_button" /> </RelativeLayout> res/layout/fragment_second.xml: wersja <?xml ="1.0" kodowanie="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Przycisk android:id="@+id/fragment_second_button" android:layout_width="wrap_content" android:layout_height=" wrap_content" android:layout_centerInParent="true" android:text="@string/second_button" /> </RelativeLayout> res/values/strings.xml: <?xml version="1.0" kodowanie="utf-8"?> <resources> <string name="app_name">Nazwa aplikacji</string> <string name="hello_world">Witaj świecie!</string> <string name="action_settings">Ustawienia</string> <string name=" first_button">Pierwszy przycisk</string> <string name="second_button">Drugi przycisk</string> </resources> Wydaje mi się, że statyczny fragment klasy wewnętrznej tak naprawdę nie obsługuje żadnej konserwacji, jest to trudne aby zobaczyć, co się dzieje i ogólnie funkcjonalna Nie jest to oczywiste, ponieważ Aktywność i Fragment (wyświetlanie fragmentu i logiki) są ze sobą pomieszane, co utrudnia nowicjuszom dostrzeżenie i nadzorowanie. Uważam, że ułatwienie wejścia w programowanie na platformę Android byłoby posiadanie przykładu takiego jak powyżej. Czy istnieją jakieś korzyści z obecnego podejścia, które zapewnia statyczną klasę wewnętrzną jako fragment?


title: Jak zbudować API na istniejącej aplikacji Railsowej z NodeJs i jakiej architektury użyć?

text: ## Wyjaśnienie, że niedawno zostałem zatrudniony przez firmę, która ma starą aplikację RoR 2.3 z ponad 100 tys. użytkowników, silną strategię SEO z ponad 170 tys. zindeksowanych adresów URL, natywne aplikacje na Androida i iOS oraz inne niestandardowe aplikacje mobilne i internetowe, które polegaj na niezbyt dobrym interfejsie API z tej samej aplikacji RoR. Niedawno połączyły się z firmą z innego kraju w ramach strategii rozwoju firmy i zysku. Mają prawie takie same statystyki, podobną strategię i aplikacje mobilne. Właśnie zdecydowaliśmy, że musimy połączyć dane z obu firm i rozpocząć nową aplikację od zera, ponieważ aplikacja RoR jest przestarzała i mocno załatana, a aplikacja drugiej firmy została zbudowana przy użyciu niestandardowego frameworka PHP bez żadnej dokumentacji. Jedyną dobrą wiadomością jest to, że obie bazy danych znajdują się w MySQL i mają podobną strukturę. ## Wyzwanie, którego potrzebuję, aby zbudować nową wersję, która: * może obsłużyć duży ruch, * zachowuje strategie SEO obu firm, * obsługuje 2 różne domeny, * i posiada silne API, które może obsługiwać starsze aplikacje mobilne z obu firm i przygotuj się na nowy zestaw aplikacji natywnych. Chcę używać RoR 3.2 dla głównych aplikacji internetowych i NodeJ z interfejsem API Restful. Wiem, że muszę bardzo uważać na aplikacje mobilne i obsługiwać wiele wersji API. Myślę też, że muszę stworzyć usługę, która poradzi sobie z wieloma żądaniami IO, ponieważ aplikacje są intensywnie używane do tworzenia zamówień dla restauracji o określonej porze dnia. ## Pytania Mając to wszystko na uwadze: * Jaki rodzaj architektury polecacie mi podążać? * Jakie klejnoty lub pakiety węzłów Twoim zdaniem będą działać najlepiej? * Jak zbudować nową aplikację Rails i nadal korzystać z tej samej struktury bazy danych? * Czy powinienem użyć NodeJS do zbudowania API, czy po prostu zbudować nową usługę za pomocą Rubiego? Wiem, że proszę o zbyt wiele, ale proszę pomóżcie mi odpowiadając na każdy temat lub wskazując mi właściwy kierunek. Wszystkie Wasze komentarze i opinie będą bardzo mile widziane! Dziękuję!


title: Łączenie numerów wersji komponentów aplikacji

text: Mam aplikację, która składa się z wielu różnych komponentów, z których każdy ma własny numer wersji i historię. Chciałbym stworzyć numer wersji całej aplikacji, najlepiej w jakiś sposób na podstawie numerów wersji komponentów. Nie jestem pewien, czy jest to w ogóle możliwe, ale chciałbym: * Numer wersji był unikalny dla każdej wersji komponentów, aby przy aktualizacji numeru wersji jednego z komponentów numer wersji całej aplikacji zmieni się również, a liczba nie może być niejednoznaczna, aby mogła odnosić się do innej konstelacji komponentów. * Byłoby miło, gdyby istniał sposób na odwrócenie procesu, aby przejść od połączonego numeru wersji, aby zobaczyć, z jakich wersji komponentów się składa. * Fajnie jest również, jeśli połączony numer wersji nie jest zbyt długi do zapamiętania. * To plus, jeśli połączony numer wersji zawsze rośnie wraz ze wzrostem numeru wersji komponentu. Zdaję sobie sprawę, że niektórych z tych pragnień nie można połączyć razem (takich jak krótkie ORAZ odwracalne, ponieważ utracisz informacje podczas skracania). Najprostszym podejściem jest oczywiście dodanie numeru wersji razem w długim rzędzie, ale byłoby to zbyt długo, by było praktyczne. Innym jest stworzenie pewnego rodzaju skrótu, ale nie byłby on zbyt czytelny. Czy istnieje standardowy sposób na zrobienie tego? Czy też będę musiał ręcznie nazwać wersję główną i zanotować, z jakich wersji komponentów się składa?


title: Czy warto zdobyć certyfikaty National Computer Science Academy?

text: Mam pytanie dotyczące rzeczywistej wartości posiadania certyfikatów NCSA. Dzisiaj dochodzę do ich strony i z łatwością zdałem certyfikację JavaScript w ciągu kilku minut, ale nigdy nie docieram do pytań związanych z literalną notacją JavaScript (Json), zamknięciami lub specyficznymi interfejsami API przeglądarki. Te fakty pozwalają mi wątpić w rzeczywistą wartość testu (i właściwy certyfikat, który możesz uzyskać, jeśli zapłacisz 34 USD), ale może się mylę i właśnie zdobyłem szanowany certyfikat w Stanach Zjednoczonych za łatwe pytania ... w w takim przypadku mogę poświęcić trochę czasu na wykonywanie innych certyfikatów w tej samej witrynie. Czy posiadasz certyfikat NCSA i uważasz, że warto go umieścić w swoim CV lub znasz lepszy program certyfikacji?


title: Opera do tworzenia stron internetowych

text: Wielu programistów poleca Firefoksa do tworzenia stron internetowych z różnych powodów. Ale po przyjrzeniu się Operze wydaje mi się, że Opera ma wszystkie te same funkcje tworzenia stron internetowych, które wbudował w nią Firefox. Więc co jest nie tak z Operą do tworzenia stron internetowych?


title: Czy powinienem rozpocząć projekt, do którego mam nadzieję zrekrutować innych?

text: Mam pomysł na program, który uważam za dobry (nie wszyscy?). Jestem programistą-amatorem i chciałbym zrekrutować do projektu kilku bardziej zaawansowanych programistów, ponieważ są pewne aspekty, do których nie mam wystarczających umiejętności. Czy lepiej a) Rozwijać oprogramowanie samemu tak bardzo, jak potrafię, nawet jeśli będzie to amatorskie, a następnie pokazać demo potencjalnym rekrutom, czy b) Zwerbować bardziej zaawansowanych programistów i zasięgnąć ich porady i wskazówek przed Zacząłem, żeby od początku było to zrobione poprawnie? Chciałbym szczególnie, jeśli ktoś ma doświadczenie w byciu w podobnej sytuacji, ale mądre spekulacje też są mile widziane.


title: Nie wynalezione tutaj - co trzeba zrobić, żeby się temu nie poddać?

text: Zacznę od jednego, który jednak nie zadziałał tak, jak chciałem. Ocena dostawcy: Na początku projektu spędziliśmy trochę czasu, aby przeprowadzić przegląd istniejących bibliotek open-source, które można wykorzystać jako bloki do budowy większej biblioteki. Mimo naszych starań było wiele bibliotek, na które natknęliśmy się dopiero po kilku miesiącach realizacji projektu. Gdybyśmy wcześniej dowiedzieli się o tych pominiętych bibliotekach, moglibyśmy inaczej podjąć decyzje projektowe. Zgodność architektury: Od samego początku rozumiano, że żadna pojedyncza biblioteka nie jest w stanie spełnić wszystkich wymagań, dlatego potrzeba kilku istniejących bibliotek, wraz z pewną niestandardową implementacją, aby wypełnić luki. Te biblioteki musiałyby być opakowane w jedną architekturę, aby użytkownicy nie musieli znać wewnętrznej konstrukcji biblioteki. Wydajność (w wielu aspektach; można ją podsumować jako „nie marnuje się czasu procesora, pamięci RAM ani miejsca na dysku”) była główną siłą napędową projektu architektonicznego; więc owijarki muszą być równie wydajne. Na początku nie wiedzieliśmy, która biblioteka open-source będzie _zgodna_ z projektem (w tym sensie, że wrapper sam nie wprowadza żadnej nieefektywności), ponieważ wymagałoby to pionierskiej pracy, aby się dowiedzieć. Jakość kodu: Jedna z bibliotek open-source miała około 20 lat. Inna biblioteka miała około 10 lat. W powszechnym myśleniu o bibliotekach open-source starsza biblioteka powinna być bardziej stabilna i zawierać mniej błędów. W końcu odkryliśmy, że jest odwrotnie i ostatecznie musieliśmy naprawić kilka błędów w starszej bibliotece. Moja pierwotna hipoteza brzmi: „Czy potrzeba dużo inteligencji, aby się temu nie poddać? Czy wymaga to dużego doświadczenia?” ale po przejrzeniu projektu doszedłem do wniosku, że ponowne wykorzystanie oprogramowania jest jak matchmaking – każde pojęcie „straconej szansy” pojawia się naturalnie z powodu przypadku i żadna ilość zamierzonego wysiłku nie zredukuje straconych okazji. Co trzeba zrobić, aby nie popaść w syndrom Not Invented Here, aby osiągnąć najwyższy stopień ponownego wykorzystania oprogramowania i jednocześnie doskonale spełniać wymagania oprogramowania? **Dodano (18.12.2010)** Jednym z powodów, dla których przegapiliśmy dobrą kandydacką bibliotekę, było to, że została ona wykluczona na bardzo wczesnym etapie procesu. Gdy na początkowej liście jest więcej niż 10 bibliotek, istnieje pewna presja, aby znaleźć reguły, które mogą szybko wyeliminować niektórych kandydatów, ponieważ w przeciwnym razie spędzilibyśmy zbyt dużo czasu na analizie (paraliż analityczny). Jednak ta szybka eliminacja spowodowała niepożądany efekt odrzucenia jednej dobrej biblioteki. (tak jak zatrudnianie?)


title: Czy jest to prawidłowa implementacja wzorca repozytorium?

text: Czytałem o wzorcu repozytorium, z myślą o zaimplementowaniu go we własnej aplikacji. Prawie wszystkie przykłady, które znalazłem w Internecie, wykorzystują jakiś istniejący framework, zamiast pokazywać, jak zaimplementować go „od zera”. Oto moje pierwsze przemyślenia, jak mogę to zaimplementować - zastanawiałem się, czy ktoś mógłby mi doradzić, czy to prawda? Posiadam dwie tabele o nazwach KONTENERY i BITY. Każdy KONTENERY może zawierać dowolną liczbę BIT-ów. Reprezentuję je jako dwie klasy: class Container{ private $bits; prywatny identyfikator $; //...i właściwość dla każdej kolumny w tabeli... public function __construct(){ $this->bits = array(); } funkcja publiczna addBit($bit){ $this->bits[] = $bit; } //...gettery i settery... } class Bit{ //niektóre właściwości, metody itp... } Każda klasa będzie miała właściwość dla każdej kolumny w odpowiedniej tabeli. Następnie mam kilka „repozytoriów”, które obsługują rzeczy związane z zapisywaniem/pobieraniem tych obiektów z bazy danych: //repozytorium do sterowania zapisywaniem/pobieraniem kontenerów z klasy bazy danych ContainerRepository{ //wstrzyknięcie repozytorium bitów do późniejszego użycia funkcji publicznej __construct($bitRepo){ $this->bitRepo = $bitRepo; } public function getById($id){ //rozmawiaj bezpośrednio z Oracle w celu uzyskania wszystkich danych w kolumnie do obiektu //pobierz wszystkie bity z kontenera $bits = $this->bitRepo->getByContainerId($id); foreach($bity jako $bit){ $container->addBit($bit); } //zwróć instancję Containera } public function persist($container){ //porozmawiaj bezpośrednio z Oracle, aby zapisać go w bazie danych //jeśli jego ID jest NULL, utwórz nowy kontener w bazie danych, w przeciwnym razie zaktualizuj istniejący //użyj BitRepository, aby zapisać każdy z Bitów wewnątrz kontenera $bitRepo = $this->bitRepo; foreach($container->bits as $bit){ $bitRepo->persist($bit); } } } //repozytorium do sterowania zapisywaniem/pobieraniem Bitów z klasy bazy danych BitRepository{ public function getById($id){} public function getByContainerId($containerId){} public function persist($bit){} } Użyłbym, aby uzyskać instancję Containera z bazy danych: $bitRepo = new BitRepository(); $containerRepo = nowe ContainerRepozytorium ($bitRepo); $container = $containerRepo->getById($id); Lub stworzyć nowy i zapisać do bazy danych: $bitRepo = new BitRepository(); $containerRepo = nowe ContainerRepozytorium ($bitRepo); $container = nowy kontener(); $container->setSomeProperty(1); $bit = nowy Bit(); $container->addBit($bit); $containerRepo->persist($container); Czy ktoś może mi doradzić, czy poprawnie zaimplementowałem ten wzorzec? Dziękuję!


title: Gdzie Java poszła nie tak na kliencie?

text: Nie mówię tutaj o niedawnej porażce Java/Oracle, ale o czymś, nad czym ostatnio się zastanawiałem. Kiedy po raz pierwszy zacząłem programować, Java była wielką rzeczą po stronie klienta, jednak obecnie prawie nigdy nie widzisz apletu Java, podczas gdy Flash i Javascript są wszechobecne. Gdzie Java poszła nie tak? Czy firma Sun zdecydowała się skoncentrować na stronie serwera i pozwolić na stagnację po stronie klienta? Jak Flash stał się dominujący nad Javą? Błyskotliwa (nie zamierzona gra słów) grafika? Marketing? Nigdy nie byłem programistą Java, więc nie śledziłem tego uważnie, więc jestem zainteresowany, aby usłyszeć twoje przemyślenia.


title: Czy ktoś jeszcze uważa, że cukier składni iteratorów jest koniecznością we współczesnym języku?

text: Zawodowo pracuję z C# i cały czas piszę taki kod. private IEnumerable<Coś> GetAlotOfSomething() { if (cośA.IsReady) plon zwraca cośA; if (cośB.IsReady) yield zwraca cośB; if (someC.IsReady) yield zwraca cośC; // ... Bardziej złożona logika } var specialSomethings = GetAlotOfSomething() .Where(s => s.IsSpecial); Potem pewnego dnia muszę napisać trochę VB6 lub JScript i w końcu piszę tak dużo boilerplate’u tylko po to, żeby coś załatwić. Czy ktoś myśli?


title: Jakie znaczenie dla pracodawcy ma kaliber programu magisterskiego?

text: Poniższe dwa przykłady są hipotetyczne, ale istnieje możliwość, że oba staną się prawdziwe (jestem świeżo upieczonym absolwentem bez doświadczenia zawodowego w CS). W obu sytuacjach wybierałbym się na studia magisterskie z informatyki. **A** : Pracuję dla dość znanej firmy ubezpieczeniowej tworzącej oprogramowanie. Płacą mi za chodzenie do szkoły, a szkoła, do której mam zamiar prowadzić badania w dziedzinach, które mnie interesują (chociaż pracując na pełny etat, nie jestem pewien, w jak wielu badaniach będę mógł uczestniczyć in), ale nie są wysoko w rankingu (w rzeczywistości w ogóle nie mogę znaleźć ich rankingu). **B** : Przyzwoita szkoła (75 najlepszych) oferuje stanowisko badawcze lub TA, które obejmuje czesne i stypendium. Szkoła prowadzi badania w obszarach, które mnie interesują. W obu sytuacjach czesne nie stanowi problemu. Zaletą A jest to, że zdobywam doświadczenie zawodowe, ale szkoła nie jest wysoko oceniana w CS (chociaż jest dość dobrze znana z innych kierunków) i nie jestem pewien, w jak wielu badaniach mógłbym uczestniczyć podczas pracy w pełnym wymiarze godzin. Z B mógłbym robić badania, a szkoła jest bardziej znana, ale straciłbym doświadczenie zawodowe. Jeśli moim ostatecznym celem jest praca dla wysokiej klasy programisty (Microsoft, Google, Apple itp.), czy opcja A lub B byłaby lepsza?


title: Jak ważne jest członkostwo w organizacjach przemysłowych lub zawodowych?

text: Otrzymałam bezpłatne członkostwo w Australijskim Towarzystwie Komputerowym, gdy przyznano mi stypendium/zorganizowano staż. Dzięki temu stażowi mam pierwsze doświadczenie w świecie rzeczywistym jako inżynier oprogramowania. Nie skorzystałem jeszcze z mojego członkostwa w żaden rzeczywisty sposób, poza cieszeniem się ich periodykiem, który jest na wpół nietechniczny. Teraz rozważam dołączenie do czegoś bardziej międzynarodowego i/lub poważnego, takiego jak Association for Computing Machinery (ACM) lub IEEE. Jak ważne jest dla inżyniera oprogramowania bycie członkiem organizacji przemysłowej lub zawodowej? Jakie korzyści daje takie członkostwo, jeśli chodzi o ekspozycję na nowe technologie i powiązania z przyszłymi pracodawcami?


title: W jaki sposób obsługa asynchroniczna C# 5 pomoże w problemach z synchronizacją wątków interfejsu użytkownika?

text: Słyszałem gdzieś, że C# 5 async-await będzie tak niesamowity, że nie będziesz musiał się tym martwić: if (InvokeRequired) { BeginInvoke(...); zwrócić; } // zrób tutaj swoje Wygląda na to, że wywołanie zwrotne operacji await nastąpi w oryginalnym wątku wywołującego. Kilkakrotnie Eric Lippert i Anders Hejlsberg stwierdzili, że ta funkcja wywodzi się z potrzeby zwiększenia responsywności interfejsów użytkownika (w szczególności interfejsów urządzeń dotykowych). Myślę, że powszechnym zastosowaniem takiej funkcji byłoby coś takiego: public class Form1 : Form { // ... async void GetFurtherInfo() { var temperature = await GetCurrentTemperatureAsync(); etykieta1.Tekst = temperatura; } } Jeśli używane jest tylko wywołanie zwrotne, ustawienie tekstu etykiety spowoduje zgłoszenie wyjątku, ponieważ nie jest on wykonywany w wątku interfejsu użytkownika. Do tej pory nie mogłem znaleźć żadnego źródła, które by to potwierdziło. Czy ktoś o tym wie? Czy są jakieś dokumenty wyjaśniające technicznie, jak to będzie działać? Podaj link z wiarygodnego źródła, nie odpowiadaj tylko „tak”.


title: Czy dyplom inżyniera komputerowego wiązałby się ze złożonym przetwarzaniem zdarzeń?

text: Niedawno odkryłem niesamowitość przetwarzania złożonych zdarzeń. Już samo przeczytanie strony wikipedii sprawiło, że poczułem dreszcze, jak można wykorzystać tę technologię i przekształcić ją w coś bardzo potężnego. Obecnie jestem studentem drugiego roku inżynierii komputerowej i zastanawiałem się, czy to, co robię, da mi kiedyś pracę związaną ze złożonym przetwarzaniem zdarzeń. Jeśli nie, czy można mieć skomplikowane przetwarzanie zdarzeń jako hobby, czy też wymaga to zbyt dużej mocy i zasobów?


title: Do jakich projektów SCRUM jest odpowiedni?

text: W ciągu ostatnich czterech lat używałem SCRUM w trzech różnych projektach. Jedną z zalet SCRUM wydaje się być jego elastyczność i adaptacyjność, m.in. w stosunku do zmieniających się wymagań klienta. Kolejną zaletą jest to, że kierownictwo może łatwo śledzić postęp projektu. Elastyczność SCRUM może być zaletą m.in. podczas wdrażania aplikacji internetowej, gdzie wymagania zmieniają się bardzo szybko, a klienci po obejrzeniu prototypu naprawdę rozumieją, czego chcą. Z drugiej strony istnieją inne rodzaje projektów oprogramowania (np. w przemyśle lotniczym), w których wymagania są dość stałe: otrzymujesz dokument specyfikacji wymagań i musisz wrócić sześć miesięcy później z działającym oprogramowaniem i pełną dokumentacją. W przypadku tego typu projektów wątpię, aby elastyczność oferowana przez SCRUM była potrzebna (w tym sensie, że nie trzeba budować prototypów i pokazywać ich klientowi, aby uzyskać informację zwrotną na temat wymagań): raczej potrzebujesz bardzo ustrukturyzowanego i systematycznego podejścia , który prawdopodobnie powtarza się w kółko dla każdego projektu, z małym miejscem na zaskoczenie. Czy zatem SCRUM jest uważany przez jego zwolenników za metodologię tworzenia oprogramowania ogólnego przeznaczenia, czy też jest uważany za szczególnie odpowiedni dla pewnych kategorii projektów lub obszarów aplikacji? Na przykład niedawno zajrzałem na stronę firmy produkującej oprogramowanie dla przemysłu lotniczego i zauważyłem, że używają modelu V. Czy zwolennik SCRUM powiedziałby, że SCRUM mniej nadaje się do tego typu projektów, czy raczej zasugerowałby, że firma powinna spróbować przejść na SCRUM? **Zauważ**, że nie pytam o zdanie czytelników tego forum, ale chcę wiedzieć, jaka jest opinia ugruntowana wśród proponujących SCRUM: czy SCRUM jest uważany za uniwersalny, czy raczej odpowiedni tylko dla niektórych klas projektów? W tych ostatnich przypadkach, dla jakich projektów?


title: Co sprawia, że zasoby są „drogie”?

text: Czytam hibernację i natknąłem się na stwierdzenia typu „Połączenia JDBC otwarte dla wielu żądań nie są dobrą rzeczą, ponieważ jest to drogi zasób”. Co oznacza drogi surowiec? Edycja: dodaję to, co nieznany użytkownik dodał jako komentarz poniżej. Jeśli nawiązanie połączenia z bazą danych jest kosztowne, to dlaczego nie używać tego samego w kółko (bez buforowania) zamiast zamykać je i otwierać za każdym razem?


title: Protokół bezserwerowy

text: Ok programiści, oto jeden dla Ciebie. Piszę klienta/protokół IM typu open source jako ćwiczenie edukacyjne i drapieżne swędzenie związane z niektórymi problemami z obecnymi protokołami. Jednak jestem biedny. Korzystam z serwera, ale korzystam z własnego połączenia domowego o niskiej przepustowości (którego wolałbym nie nasycać, uruchamiając na nim serwer IM). Myślałem o problemie i szukałem różnych alternatyw (było to zanim rozważałem napisanie własnego klienta/protokołu), ale nie ma niczego, co nie wymaga żadnego sprzętu serwerowego. Powód tego jest dość oczywisty. Aby listy kontaktów były trwałe i synchroniczne, najprostszym rozwiązaniem jest przechowywanie ich zdalnie i pobieranie przez użytkownika listy kontaktów za każdym razem, gdy się loguje. Jednym z rozwiązań, które rozważałem, było przechowywanie listy kontaktów informacje o pendrive'ach, ale to dalekie od ideału (nie tylko dlatego, że sam takiego nie mam). Inną opcją byłoby zaimplementowanie sieci odnajdywania rówieśników podobnej do bonjour, ale nie zapewniłoby to listy kontaktów Twoich znajomych, a jedynie listy kontaktów wszystkich innych osób, które są online. Bardziej wykonalne niż pomysł na USB, ale w tym przypadku funkcja nie jest idealna. Czy ktoś ma jakieś inne pomysły na bezserwerowy protokół IM?


title: Ogólna implementacja dekoratora

text: Mam następujący wzorzec, który chciałbym zaimplementować za pomocą pewnego rodzaju programowania generycznego, ale nie widzę, jak to zrobić. Mam interfejs I zawierający wiele metod o różnych sygnaturach. Każda metoda ma zwracany typ jakiegoś typu klasy i każda implementacja powinna zwracać wartość null w przypadku niepowodzenia lub konkretny obiekt w przypadku powodzenia. Teraz mam konkretną implementację A z I i dekorator klasy D z A. Dla każdej metody T m(T1 p1, ..., Tn pn) zdefiniowanej przez interfejs I implementacja m w D ma ustalony wzorzec : class D { private A impl = ...; ... T D.m(t1 p1, t2 p2, ..., tn pn) { init(); wynik T = imp.m(p1,...,pn); if (wynik != null) successCode(); w przeciwnym razie kod błędu(); zwróć wynik; } } Kod wywołujący używa dekoratora w następujący sposób: I instancja = DecoratorFactory.createIDecorator(); Tr = instancja.m(p1,...,pn); Pytanie: Czy istnieje sposób na zaimplementowanie tego rodzaju dekoratora w sposób ogólny (bez pisania tego samego szablonu dla każdej metody)? Czy można to zrobić w Javie? Jeśli nie jest możliwe zaimplementowanie tego wzorca w Javie, czy istnieje elegancki sposób na zaimplementowanie go w innym języku?


title: Nietrywialna funkcja get, jeśli ma być inaczej nazwana

text: Na przykład mam ten kod. class Polecenie { var $responseFactory; var $usługa; /** * Zwraca nazwę klasy responseFactory, jeśli jest ustawiona * lub domyślną nazwę klasy responseFactory usługi, jeśli jest ustawiona. */ public function getResponseFactory(){ if ($this->responseFactory != null) { return $this->responseFactory; } if ($usługa != null) { return $usługa->getResponseFactory(); } zwraca null; } } Chociaż samo w sobie jest w porządku, może to spowodować, że ktoś będzie zaskoczony w przyszłości, jeśli sklonuje obiekt Command, zmieni jego właściwość `service`, która następnie 'magicznie' zmieni wyniki `getResponseFactory`. Kontrargumentem, dlaczego powinno się nazywać po prostu `getResponseFactory` jest 'oczywiście wewnętrzne zachowanie klasy powinno być czarną skrzynką'. Czy nietrywialne funkcje `get` powinny być wywoływane inaczej, aby wskazać, że nie są trywialnymi funkcjami pobierającymi? _Edytuj_ Aby wyjaśnić, że typ zwracany jest taki sam, jeśli zwracana jest fabryka odpowiedzi `Command` lub fabryka odpowiedzi `Service`.


title: błąd: odchylenie od wymagań vs odchylenie od oczekiwań

text: Nie jestem w tym jasny. Bez względu na terminologię, w końcu błąd oprogramowania/błąd powoduje (według wielu źródeł): > Odchylenie od wymagań > Odchylenie od oczekiwań Ale jeśli oczekiwania nie są zawarte w wymaganiach, interesariusz może wszędzie zobaczyć błąd, tak jak się spodziewał to być takie czy tamto..Więc skąd mam naprawdę wiedzieć? Przeczytałem, że specyfikacja może pominąć rzeczy, a następnie oczywiście jest oczekiwana, ale nie została określona (przez pomyłkę).


title: Tworzenie eksperymentalnej bazy danych

text: To pytanie dotyczy baz danych, ale wolę publikować je tutaj, a nie w dba.stackexchange. Powodem jest to, że mam obawy związane z aplikacją oraz projektowaniem bazy danych. Programiści mogą lepiej w tym pomóc. Moja czteroletnia aplikacja .NET używa serwera bazy danych MySQL 5.1 jako zaplecza. Baza danych działa dobrze. Nie ma problemów z wydajnością, którymi możemy się martwić. Ale chcę wypróbować zaawansowane funkcje bazy danych, takie jak partycjonowanie, replikacja i klastry. Nigdy wcześniej nie korzystałem z tych koncepcji i zdecydowanie mogę wypróbować te funkcje na istniejącej bazie danych, ale mam inne plany. Chcę używać IBM DB2 express-C jako eksperymentalnej bazy danych. Rekordy z MySQL muszą być zsynchronizowane z bazą danych DB2 i chcę używać bazy danych DB2 do tworzenia raportów w mojej aplikacji. Czy jest jakieś darmowe narzędzie do synchronizacji dwóch baz danych? Czy muszę używać dwóch parametrów połączenia, pierwszego obejmującego MySQL do wstawiania/aktualizacji/usuwania, a drugiego obejmującego DB2 do raportowania? Czy tego typu głupie podejście jest stosowane w realnym świecie w niektórych scenariuszach?


title: Czy można używać krótkiej umowy EULA?

text: Muszę dodać umowę EULA do mojego (komercyjnego) oprogramowania, ale nie stać mnie na prawnika. Spojrzałem również na różne przykłady EULA w Internecie, ale wszystkie dotyczą określonego oprogramowania lub krajów i są prawdopodobnie skopiowane z innego oprogramowania komercyjnego. Zastanawiam się więc nad użyciem krótkiej, niestandardowej umowy EULA, która wymieniłaby tylko najważniejsze. Coś jak: * Możesz redystrybuować wersję próbną tego oprogramowania * Jeśli kupisz licencję, nie możesz jej redystrybuować ani sprzedawać * Nie możesz pozwać mnie za jakiekolwiek straty finansowe lub materialne wynikające z używania tego oprogramowania * To oprogramowanie jest chroniony prawem autorskim XXX, wszelkie prawa zastrzeżone. Czy tego rodzaju umowa EULA chroniłaby mnie w większości przypadków? Czy znasz również jakąkolwiek firmę, która korzysta z krótkiej umowy EULA?


title: BDD w oparciu o wymagania 1-liniowe

text: W naszym zespole właściciel produktu daje nam tylko jednolinijkowe podsumowanie. Deweloperzy następnie wymyślają PoC, który właściciel produktu przegląda i cykl powtarza. Wyzwanie jest dwojakie: 1. Czas: musimy jak najszybciej stworzyć PoC, aby można było je przejrzeć 2. Deweloperzy faktycznie definiują wygląd i działanie produktu – dużo UI PoC i trochę rozwoju kontrolerów zrobić kopię zapasową. Ale BDD nie włącza się do „kreatywnego” procesu wyobrażania sobie produktu. Zazwyczaj BDD wymaga, abyście wzięli specyfikację produktu, a następnie skodyfikowali ją za pomocą Jasmine itp. Czy jacyś eksperci BDD mogą zasugerować sposób na połączenie procesu kreatywnego myślenia z BDD?


title: Co musi się zmienić, aby inżynieria oprogramowania stała się formalnym zawodem?

text: W przeciwieństwie do innych zawodów (takich jak księgowość, prawo, medycyna itp.) nie ma ogólnozawodowej certyfikacji w zakresie inżynierii oprogramowania. Doskonale zdaję sobie sprawę z wielu certyfikatów specyficznych dla technologii i metodologii, które mają służyć jako dowód specjalizacji i doświadczenia, ale nie ma publicznego stowarzyszenia inżynierii oprogramowania / organu zarządzającego, który ustala (i ma uprawnienia do oceny prawnej) ogólnie akceptowanych standardów zawodowych . Rozumiem, że oprogramowanie to dynamiczna bestia - to jest po części sztuka, po części nauka - ale zastanawiam się, czy inżynieria oprogramowania ma potencjał, aby stać się formalnym zawodem. Co musi się zmienić, aby tak się stało i czy byłoby to w ogóle dobre? (Jeśli ktoś wie o formalnych badaniach na ten temat, bardzo doceniłbym referencje) ## Aktualizacja Zgadzam się z wieloma pozytywnymi uwagami podniesionymi poniżej, dotyczącymi obecnego poziomu certyfikacji w Inżynierii Oprogramowania. Uważam również, że bardzo interesujące jest to, że niektóre kraje traktują Inżynierię Oprogramowania jako zawód, podczas gdy inne nie. Wydaje się jednak, że termin „formalny zawód” i jego zastosowanie w inżynierii oprogramowania jest trochę zakłopotany. Myślę, że kluczową kwestią związaną z inżynierią oprogramowania – i głównym powodem, dla którego nie jest to pełnoprawny zawód – jest to, że jeśli jesteś certyfikowanym inżynierem oprogramowania i – na przykład – jakieś oprogramowanie, które napisałeś na wypadek awarii windy i zabija ludzi, Twój certyfikat i/lub członkostwo w formalnej organizacji zawodowej nie zostaną cofnięte. Jasne, Twoja firma może zostać pozwana na miliony, a Ty osobiście możesz stracić pracę i zdobyć złe referencje, ale ogólnie rzecz biorąc, osobiście jesteś chroniony tarczą z ograniczoną odpowiedzialnością w wyniku zatrudnienia przez tę firmę. Innymi słowy, o ile mi wiadomo, nie ma żadnej prawnej oceny / egzekwowania prawa (w przeciwieństwie do innych formalnych zawodów i ich towarzystw zarządzających), które mają mandat, aby oficjalnie zabronić ci handlowania, gdy zrobisz kolosalne sztuczki . Bardzo podobała mi się odpowiedź, która dotykała faktu, że Inżynieria Oprogramowania – w obecnej formie – to merytokracja, która nie musi być formalnym zawodem i że to jest dobra rzecz, która nie powinna się zmieniać. Jednocześnie uważam, że musimy dokonać wyraźnego rozróżnienia między inżynierami oprogramowania o znaczeniu krytycznym a programistami oprogramowania różnego/niekrytycznego. Do tych z Was, którzy pracują / pracowali nad oprogramowaniem o znaczeniu krytycznym - czy istnieje jakakolwiek odpowiedzialność osobista? Z pewnością istnieje potrzeba formalnych reperkusji w przypadku popełnienia kosztownego błędu przez Inżyniera Oprogramowania?


title: Optymalny algorytm drzewa „if-else” w celu zminimalizowania duplikatów kodu

text: Mam problem ze sformułowaniem tego problemu jako algorytmu: mam zestaw warunków (w połączeniu z `&&`) i operacji, na przykład: if (A && B) wykonaj C w przeciwnym razie if (D && A) wykonaj E Chcę algorytm znajdowania optymalnego drzewa „jeśli-w przeciwnym razie”, które minimalizuje ilość zduplikowanych kodów. Optymalnym rozgałęzieniem dla powyższego przykładu byłoby: if (A){ if (B) wykonaj C else if (D) wykonaj E } Koszt zduplikowanych warunków będzie inny dla każdego z nich, ale wynosi co najmniej `1`. Koszt zduplikowanych operacji (np. „wykonaj C”) wynosi „3”. Dla mnie to pachnie jak minimalny problem z drzewem opinającym. A może jakiś inny znany problem teorii grafów. Ale na początek nie potrafię wymyślić, jak przedstawić problem w postaci wykresu. Oto porównanie dwóch drzew „jeśli-w przeciwnym razie” z przykładu: ![przykładowy wykres](http://i.stack.imgur.com/nOEkQ.jpg)


title: Pomocnicze metody statyczne w TDD

text: Tworzę aplikację, która będzie testowalna (jednostka + integracja). W tej aplikacji mam klasę statyczną FileHelper, klasę statyczną public static FileHelper { public static void ExtractZipFile(Stream zipStream, string location) { ....................... ........... } public static void CreatePageFolderIfNotExist(string directory) { ............................. .................... } ............................ ........................................................... .............................. } Ale ze względu na statykę myślę, że nie można go przetestować. Jak sprawić, by ta klasa była testowalna?


title: Jak uzyskać dostęp do danych schowka w chrome i firefox za pomocą flex

text: Chcę uzyskać dostęp do danych schowka w aplikacji Flex. Jak zaimplementować tę funkcjonalność w Chrome i FF?


title: Wybór odpowiedniego języka i frameworka

text: Piszę małą stronę internetową, która pozwoli użytkownikowi pobrać małe narzędzia do lokalnego uruchamiania, zastanawiam się, jaki byłby odpowiedni wybór języka dla małych narzędzi. Będzie dość duża liczba dość specyficznych małych narzędzi, więc interesuje mnie skrócenie czasu tworzenia każdego z nich tak bardzo, jak to możliwe. Wymagania: * Narzędzia będą miały grafikę, nic nadzwyczajnego, głównie kształty 2D. * Można uruchomić w trybie offline. * Najlepiej bez instalacji, po prostu uruchom. Niektórzy użytkownicy nie będą w ogóle bardzo technicznie. * Wieloplatformowy, głównie Windows i OSX, ale także trochę Linuksa. Moje obecne przemyślenia: * Python. Łatwy do napisania, ale może być kłopotliwy dla użytkownika, jeśli używa bibliotek takich jak PyGame. Nie mogę liczyć na to, że użytkownik ma już zainstalowanego Pythona na Windows lub osx. * Przeceniam .NET i Mono z mniej więcej tego samego powodu co Python, potrzebowaliby instalatorów, czy jest sposób na dostarczenie wszystkiego, co jest potrzebne w tym samym folderze? * C++. Zapisywanie danych zajmuje nieco więcej czasu, ale obsługuje wymagania. Pomyślałem o użyciu języka skryptowego (Lua, Angelscript lub podobnego) jako dodatku do SDL, aby uzyskać korzyści zarówno z c++, jak i skrócić czas programowania, gdy oprogramowanie pośredniczące jest wystarczająco dobrze rozwinięte. Masz inne sugestie? EDYCJA: Proszę zostaw komentarz, dlaczego głosujesz negatywnie.