title: WPF vs. WinForms – perspektywa programisty Delphi?

text: Przeczytałem większość głównych wątków na temat WPF vs. WinForms i utknąłem w niefortunnej ambiwalencji, w którą możesz wpaść, decydując między wypróbowaną a prawdziwą poprzednią technologią (Winforms) i jej następcą (WPF). Jestem wieloletnim weteranem programisty Delphi, który w końcu dokonuje skoku do C#. Moi koledzy programiści Delphi zrozumieją, że jestem podekscytowany wiedząc, że Anders Hejlsberg, znany w Delphi, był architektem stojącym za C#. Mam silne uzależnienie od niestandardowych komponentów Delphi VCL, szczególnie tych zaangażowanych w tworzenie wieloetapowych kreatorów i komponentów, które działają jako kontener dla komponentów podrzędnych. W tym kontekście mam nadzieję, że ci z was, którzy przeszli z Delphi na C#, mogą mi pomóc w podjęciu decyzji WinForms vs. WPF w pisaniu moich początkowych aplikacji. Uwaga, jestem bardzo niecierpliwy, gdy koduję, a takie rzeczy, jak pełnoprawne autouzupełnianie i właściwa obsługa debuggera mogą stworzyć lub przerwać projekt za mnie, w tym możliwość znalezienia łatwo dostępnych informacji o funkcjach i wywołaniach API, a nawet więcej obejścia błędów . Wątki SO i komentarze we wczesnym zakresie dat 2009 dają mi duże zaniepokojenie WPF, jeśli chodzi o potencjalne frustracje, które mogą zepsuć moje kodowanie C# UI. Z drugiej strony, spędzanie ogromnej ilości czasu na nauce technologii API, która, nawet jeśli nie zostanie porzucona, wkrótce zostanie zastąpiona (WinForms), jest równie kłopotliwa i uważam, że obsługa GPU w WPF jest kusząca. Stąd moja ambiwalencja. Ponieważ nie nauczyłem się jeszcze żadnej technologii, mam rzadką okazję, aby zacząć od nowa i nie muszę stawiać czoła wielkiej krzywej „oduczenia”, o której ludzie wspominają w różnych wątkach, gdy programista WinForms przechodzi na WPF. Z drugiej strony, jeśli korzystanie z WPF będzie po prostu zbyt frustrujące lub będzie miało inne poważne negatywne konsekwencje dla niecierpliwego programisty RAD, takiego jak ja, po prostu pozostanę przy WinFormach, dopóki WPF nie osiągnie tego samego poziomu wsparcia i łatwości użytkowania. Aby dać ci konkretny przykład z mojej psychologii jako programisty, użyłem VB, a następnie Delphi, aby całkowicie uniknąć bardzo realnego bólu związanego z kodowaniem za pomocą MFC, biblioteki interfejsu użytkownika systemu Windows, na którą cierpiało wielu programistów podczas tworzenia wczesnych aplikacji dla systemu Windows. Nigdy nie żałowałem szczęścia w unikaniu MFC. Pocieszające byłoby również wiedzieć, czy Anders Hejlsberg miał rękę w architekturze WPF i/lub WinForms i czy istnieją jakieś rozbieżności w kreatywnej wizji i łatwości użycia zawartej w którejkolwiek bazie kodu. Na koniec, ponownie dla programistów Delphi, daj mi znać, jak bardzo jestem w szoku IDE, gdy używam WPF w przeciwieństwie do WinForm, zwłaszcza jeśli chodzi o obsługę debuggera. Wszelkie komentarze z rynku pracy zaktualizowane na rok 2011 również będą mile widziane.


title: Jak uniknąć zatrzymania JVM z powodu zakleszczenia w javie?

text: Czytałem wiele stron internetowych mówiących o tym, jak unikać i jak projektować itp. Całkowicie rozumiem te strategie. Moje pytanie opiera się na następujących warunkach wstępnych: 1. Masz firmę z tysiącami programistów. 2. Istnieją różne zespoły pracujące nad tym samym produktem, ale jako moduły. 3. Nowi programiści piszący nowy kod, nie znający całego systemu, prosimy o rozważenie aplikacji Enterprise. 4. Tworzenie oprogramowania o wysokiej dostępności, w przypadku którego 15-minutowy przestój jest uważany za naruszenie umowy SLA. Mógłbym napisać jeszcze kilka warunków wstępnych, ale pomyślałem, że mogą one być wystarczająco silne, aby wesprzeć moje pytanie, dlaczego potrzebuję strategii odzyskiwania „zakleszczenia” w oprogramowaniu. Należy pamiętać, że przeprojektowanie modułów za każdym razem, gdy stwierdzimy impas, nie jest realistyczne. Teraz to powiedziane. Czy ktoś może poświęcić trochę czasu na dostarczenie informacji lub burzy mózgów na temat tego, jak rozwiązać impas, jeśli w ogóle się wydarzy, abyśmy mogli to zgłosić i iść do przodu, zamiast całkowicie się zatrzymać. 1. Uruchom wykrywacz zakleszczeń, który uruchamia się okresowo, aby wyszukać zakleszczenia w systemie. 2. W przypadku wykrycia zakleszczenia powiadom za pomocą zdarzenia, aby rozwiązać zakleszczenie. 3. Odbiornik zdarzenia zakleszczenia uruchomi się i będzie działał na wątkach zakleszczonych. 4. Dla każdego wątku określ spór. 5. Napisz inteligentny algorytm, który mógłby zwolnić blokady i zabić wątek lub zwolnić blokady i ponownie ocenić wątek. 6. W kroku 2 obsługujemy zgłoszenie na wiele sposobów, z których logowanie jest jednym z odbiorców. Wiem jak przejść przez kroki 1,2,6. Potrzebuję pomocy z 3,4 i 5. Wiem, że Oracle RDBMS ma już wdrożoną strategię wykrywania i rozwiązywania zakleszczeń, zastanawiam się, czy kiedykolwiek udostępniliby swoje strategie w tym wątku :) Nie mogę dodać mojego komentarza jako odpowiedzi, więc dodanie go jako komentarza tutaj. =========================================================== =============== Całkowicie rozumiem ryzyko zabicia wątków. Byłam na 100% pewna, że otrzymam takie odpowiedzi, ale miałam też nadzieję, że ktoś zasugeruje coś nowego. Pozostanę otwarty wątek, ponieważ nie ma tutaj odpowiedzi, której już nie znam, ale bardzo dziękuję za próbę.


title: Czy pliki Makefile mają znaczenie?

text: Obecnie pracuję nad małą biblioteką jako projekt hobby. Jestem jedynym, który aktywnie go koduje, ale kilku moich znajomych wyraziło zainteresowanie uczestnictwem w przyszłości. Kiedy korzystam z biblioteki do własnych celów, zwykle po prostu dodaję odpowiednie pliki źródłowe do mojego projektu za pomocą IDE. (Np. przeciąganie plików `.h` i `.cpp` do Xcode.) Wraz ze wzrostem rozmiaru i złożoności biblioteki, próbowałem jednak przejść w kierunku bardziej profesjonalnego podejścia do organizacji. Rozważałem utworzenie jakiegoś pliku makefile, którego przyszli uczestnicy mogliby użyć do skompilowania biblioteki do "monolitycznego" pliku biblioteki. To może być również dla mnie korzystne, ponieważ koduję na wielu komputerach. Czy takie przedsięwzięcie byłoby warte wysiłku? Uwaga: próbowałem zajrzeć do biblioteki Boost, aby zobaczyć, jak robią rzeczy, ale nawigacja bez wcześniejszego doświadczenia jest dość trudna i miałem problem ze zrozumieniem struktury.


title: Maksymalizacja liczby zagnieżdżonych trójkątów

text: Na płaszczyźnie istnieje skończony zbiór punktów (około 1500 punktów w bieżącym zadaniu). Muszę skonstruować trójkąty w tych punktach, na przykład każdy trójkąt leży całkowicie w jednym większym trójkącie: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/GSvTE.png) Teraz chcę, aby algorytm maksymalizował liczba takich trójkątów. Gdzie mogę zacząć? Myślę, że jednym ze sposobów byłoby wybranie „centrum” i znalezienie trzech kierunków z tego centrum z największą gęstością punktów w pobliżu tych kierunków. Lub po prostu ręcznie wybierz dowolny trójkąt środkowy, a następnie iteracyjnie wybierz większy trójkąt z najmniejszą powierzchnią lub najmniejszą odległością.


title: Jak przekonać moją firmę do przejścia na MVC?

text: Obecnie piszę aplikacje internetowe za pomocą formularzy internetowych asp.net i nakłonienie mojej firmy do przejścia na inną technologię jest jak [tu wstaw zabawną linię]. Bardzo chciałbym zacząć pisać aplikacje przy użyciu MVC, ale boją się wszelkiego rodzaju zmian. Jak najlepiej przekonać/ułatwić im korzystanie z MVC? Myślę, że może to oznaczać przejście na dowolną nową technologię. ### Aktualizacja Zdecydowałem się pójść drogą nieuczciwych programistów i właśnie zacząłem jej używać. Odtworzyłem małą aplikację w MVC, nauczyłem się w ten sposób zasad i stamtąd ruszyłem.


title: Jaka metoda jest najłatwiejszym/najszybszym sposobem tworzenia aplikacji na Androida?

text: Który z nich jest najłatwiejszym/najszybszym wyborem do tworzenia prostych aplikacji/gier na Androida? Znam wszystkie te technologie. • Android SDK lub NDK • C# na platformie MonoDroid • Adobe Flash i Adobe AIR • Corona SDK • Narzędzia do konwersji, takie jak PhoneGap Zasadniczo, czy mógłbyś wyjaśnić zalety i wady tej metody.


title: Schemat architektury wirusa komputerowego

text: Szukam schematu architektury wirusa komputerowego. Czy ktoś ma link do dobrego przykładu? **Edytuj** Wygląda na to, że jestem nękany głosami przeciw. Zgadzam się, że nie ma jednej architektury dla wirusa. Ale coś musi być dołączone, aby program był wirusem. Przykład dla komponentów w SAD: * Metoda replikacji * Wyzwalacz * Ładunek * Zaatakowane hosty * Zaatakowane luki * Metoda antywykrywania **Edycja 2** Dobry przykład można znaleźć tutaj: http://static.northpole.fi/download/1318959037124281/ w32_duqu_the_precursor_to_the_next_stuxnet.pdf


title: Serwis do testowania aplikacji na wszystkich iPhone'ach?

text: Mam kilku programistów tworzących aplikację na iPhone'a, często aplikacja nie będzie działać na jednym typie iPhone'a, mimo że działała na innym przy użyciu tej samej wersji iOS. Dlatego szukam usługi, w której mogę natywnie przetestować aplikację na wszystkich wersjach iPhone'a z różnymi wersjami iOS. Chciałbym mieć możliwość samodzielnej interakcji z iPhone'ami, aby wiedzieć, że konkretny błąd został już wcześniej naprawiony, pchając się do App Store i czekając 9 dni na recenzję, zanim usłyszę smutne wieści od klientów. Googlowanie nigdzie mnie nie pomogło. Czy takie usługi istnieją?


title: Klasa abstrakcyjna + Dziedziczenie a interfejs

text: Witam kolegów programistów, czytam książkę o C#, a autor porównuje klasy abstrakcyjne i interfejsy. Twierdzi, że jeśli masz następującą „klasę abstrakcyjną:” abstract class CloneableType { public abstract object Clone(); } Wtedy nie możesz tego zrobić: public class MiniVan : Car, CloneableType {} Rozumiem. Twierdzi jednak, że z powodu tej niezdolności do wielokrotnego dziedziczenia, powinieneś użyć interfejsu dla CloneableType, takiego jak: public interface ICloneable { object Clone(); } Moje pytanie brzmi, czy nie jest to trochę mylące, ponieważ można stworzyć abstrakcyjną klasę, która jest "powyżej" klasą Car metodą Clone, następnie Car odziedziczy tę klasę, a Minivan odziedziczy Car wszystkimi tymi metodami, klasa CloneAble -> Klasa samochodu -> Klasa minivana. Co myślisz? Dziękuję.


title: Jakie jest najlepsze podejście do obsługi kodu javascript/ajax w projekcie?

text: W ogólnym sensie, w przypadku średnich/dużych projektów, jaki jest najlepszy sposób obsługi kodu javascript/ajax? Czy lepiej mieć plik skryptu, w którym umieścić każdy skrypt, czy dodać skrypt bezpośrednio do pliku html między tagami? Wiem, że nie ma to żadnego wpływu na wynik, ale chciałbym zrozumieć, co jest łatwiejsze do utrzymania na dłuższą metę.


title: Czy wzorzec MVC jest często używany w przemyśle? O co tyle szumu?

text: Jestem studentem, ale mam nadzieję, że wkrótce przeniosę się do branży oprogramowania. Wydaje się, że wokół wzorca oprogramowania MVC jest dużo szumu. Zauważyłem, że frameworki PHP to często MVC, a co z językami nie-webowymi.. czy z nimi jest tak samo? W mojej pracy magisterskiej (C++) wybrałem wzorzec MVC, ponieważ ładnie oddziela logikę i interfejs użytkownika. Czy w przemyśle jest często używany? Jeśli tak, jakie są główne powody i jakie są inne konkurencyjne, popularne projekty?


title: Skoro obecny sprint składa się głównie z kolców, czy sprint powinien zostać skrócony?

text: Kolce to w większości szybkie zadania badawcze mające na celu ustalenie wykonalności lub prototypowanie jakiegoś pomysłu. W związku z tym są one tak skonstruowane, że zadania albo szybko się kończą, albo szybko się nie powiedzie. Jednak gdy do bieżącego sprintu zostanie dodanych kilkanaście skoków, istnieje możliwość, że kilka z nich ulegnie całkowitej awarii. Powiedzmy, że są 4 możliwe sposoby zrobienia czegoś, a zadaniem jest wybranie najbardziej odpowiedniego i wymyślenie prototypu. Jeśli pierwsza próba się nie powiedzie, wypróbuj następny możliwy sposób i tak dalej. Jeśli pierwszy wybór jest już wyraźnym zwycięzcą, następne 3 nie są już potrzebne. Tak więc, gdy obecny sprint składa się głównie z skoków, czy ma sens również skrócenie czasu sprintu do może kilku dni, aby zmiana priorytetów mogła się zdarzać częściej?


title: Czy wersja Git może się różnić między członkami zespołu?

text: Mamy około 40 programistów pracujących na tej samej bazie kodu i używamy Git do kontroli wersji. Moje pytanie brzmi: czy mogą być problemy, jeśli na przykład niektórzy programiści mają zainstalowaną znacznie starszą wersję Git w swoim systemie? A może powinniśmy spróbować wymusić jakąś regułę, która mówi coś w stylu „powinieneś uaktualnić Git na swoim komputerze do najnowszej wersji przynajmniej raz w roku”? Być może w starszych wersjach Git struktura obiektów może być nieco inna. Lub może być kilka błędów w algorytmie, który oblicza, które linie zostały dodane/usunięte z plików. Problemy te mogą powodować uszkodzenie repozytoriów lub różne wartości skrótów SHA-1 w miejscach, w których powinny one mieć tę samą wartość.1 Oczywiście, ponieważ Git jest rozproszonym systemem VCS, uszkodzone repozytorium nigdy nie oznacza krytycznej utraty danych, ponieważ jest 40 innych osób, z których możesz sklonować nową kopię. Więc to bardziej ciekawość niż troska. Podejrzewam, że kompatybilność wsteczna jest czymś niezwykle ważnym, jeśli chodzi o wydawanie nowej wersji Gita; ale jednak: potencjalne problemy wymienione powyżej są możliwe. 1 = o ile wiem, nie mieliśmy takich problemów... jeszcze.


title: Incanter do projektów statystycznych w świecie rzeczywistym

text: Interesuję się obliczeniami statystycznymi. **R** to oczywiście platforma lidera, ale co z Incanterem? Incanter jest na szczycie mojej listy, ponieważ jestem facetem z Clojure i JVM. Czy masz jakieś realne projekty z Incanterem? Czy to sprawdzona platforma, czy muszę wrócić do **R**? Jakie są zalety **R** nad Incanterem? Za czym będę tęsknił?


title: Czego nie można testować jednostkowo w aplikacji mobilnej?

text: Bardzo cenię testy jednostkowe w tworzeniu aplikacji internetowych. Nie mam doświadczenia w tworzeniu aplikacji mobilnych. Czy jest coś, czego nie można przetestować w aplikacjach mobilnych? A jakie jest obejście tego? Czy jest jakaś powszechna pułapka, o której musimy pamiętać w testowaniu jednostek aplikacji mobilnych?


title: Co to jest „uproszczony JavaScript”?

text: Douglas Crockford odwołuje się do **Uproszczonego JavaScript** w tym artykule o **Pierwszej kolejności operatorów**. Niestety w tym artykule nawiązuje do niego tylko. Najlepsze wyjaśnienie, jakie znalazłem **tutaj**. Ale nadal nie mam pojęcia, co to właściwie jest. **Co to jest uproszczony JavaScript?**


title: Przejście od programisty stron internetowych typu „patrz mamo, mogę to zrobić” do kogoś, kto tworzy produkty, na których mogą polegać ludzie i firmy

text: Zajmuję się tworzeniem stron internetowych od 6 lat. Ale jakoś nigdy nie miałem poczucia, że wykonałem dobrą robotę. Zawsze czułem, że mój kod nie jest jakością produkcyjną. Czułem się jak ktoś, kto dostarcza produkty poniżej normy. **Analogia:** Tworzę aplikacje dla płacących klientów przypominam… 14-latek, który po prostu wie, jak strzelać i poruszać się po boisku do koszykówki bez upadku, grając wśród profesjonalistów w NBA. To powinien być dokładny opis :| **Nie kupowałbym ode mnie, gdybym był klientem.** Chcę przejść z obecnej pozycji do etapu, w którym mam pewność, że moje strony internetowe aplikacje internetowe są „profesjonalne”, „bezpieczne”, „skalowalne” , (wstaw wszystkie wymagania dotyczące produktu, za który warto zapłacić lub na którym warto polegać w Twojej firmie). **Moje pytanie:** **1\. Czego powinienem się nauczyć i...** **2\. Skąd mogę się nauczyć tych..** **..żeby tworzyć prawdziwie profesjonalne strony i aplikacje webowe, na których mogą polegać inne osoby/firmy?** Mam dość poczucia się jak amatorka nawet po tylu latach. Potrzebuję pomocy w rozpoczęciu pracy. Mogę się nauczyć, jeśli wiem, czego się nauczyć. Mogę się uczyć, mając wystarczająco dużo czasu i rzeczy do eksperymentowania, ale nie chcę robić z moich klientów królików doświadczalnych. **Oto, co wiem, a czego nie:** * Znam lub potrafię nauczyć się potrzebnej składni w C#, aby przekonwertować wymaganą logikę biznesową z koncepcji na działający kod. * Potrafię pisać nieco złożone zapytania wybierające, a nawet kilka złączeń, jeśli jest to potrzebne do pobrania danych. Oczywiście mogę wstawiać, aktualizować, usuwać. Ale to jest to. Nie wiem nic więcej o serwerze SQL. * Znam wystarczająco dużo technologii webowych, aby stworzyć dobry interfejs użytkownika. To nie jest problem. * Wiem wystarczająco dużo o hostingu/domenach, aby zarejestrować się i kupić hosting oraz wskazać sobie serwery, aby example.com faktycznie wczytała witrynę. Niewiele więcej. * Dla wszystkich celów praktycznych, ZERO wiedzy lub doświadczenia w obsłudze bezpieczeństwa i obciążenia serwera * Nie mam pojęcia o buforowaniu na dowolnym poziomie. * Znam tylko najlepsze praktyki kodowania, nakazy i zakazy. Nie wiem tego samego o aplikacjach z prawdziwego świata, z których będą korzystać tysiące ludzi. * Za każdym razem, gdy czytam pytanie w SO, które ma coś wspólnego z aplikacją produkcyjną, wszystkie odpowiedzi i samo pytanie są dla mnie tylko po grecku i łacinie. Czuję się zainspirowany, że jest tyle do nauczenia się, ale nie wiem, jak zacząć. * * * Będę przede wszystkim pracował z Microsoft Stack. Więc każda konkretna odpowiedź również będzie świetna.


title: Czy Java to dobry wybór do gier międzyplatformowych?

text: Chcę stworzyć grę w Javie i chciałbym, żeby działała na Windows, Linux i Mac. Jestem prawie pewien, że C# to zły wybór i nie mam wystarczającego doświadczenia w C lub C++. Chcę trzymać się z dala od Flasha. Czy zatem Java jest dla mnie dobrym wyborem? Przeważnie używam C# i myślę, że Java jest podobna, więc zakładam, że nie będzie to trudne do nauczenia. Ale czy jest wystarczająco szybki? Czy istnieje język bardziej odpowiadający moim potrzebom niż Java?


title: Dostarczanie szacunków podczas pracy z nieznaną technologią?

text: Niedawno pojawił się nowy problem, aby przedstawić oszacowanie projektu, w którym muszę użyć frameworka (i potencjalnie fragmentów innego frameworka), którego nie znam. Dużo łatwiej jest mi przedstawiać szacunki, kiedy mam swobodę korzystania z tego, co znam, ale było tak, jakby paraliż wywołany analizą pojawił się, gdy poproszono o oszacowanie do pracy na nieznanym terytorium. Z perspektywy czasu moje rozwiązanie było błędne. Po prostu zacząłem pracować. Jak mogę lepiej oszacować projekty i zadania, gdy muszę pracować z nieznanymi językami/technologiami/frameworkami?


title: Bezpieczny sposób zapamiętywania nazw użytkowników i haseł

text: Może już o tym dyskutowano. Po przejrzeniu kilku podobnych pytań dotyczących zarządzania hasłami, nadal chciałbym zadać to pytanie. Jeśli istnieje 100 witryn, które wymagają podania hasła do nazwy użytkownika, aby się zalogować. Koszmarem byłoby wymyślenie kolejnej nazwy użytkownika i hasła tylko dla wyjątkowości. Jeśli jednak użyjemy tej samej nazwy użytkownika i hasła, narażamy się na atak krzyżowy. Może uda nam się stworzyć 100 różnych nazw użytkownika i hasła, ale jak je zapamiętać? Mózg nie jest godny zaufania. Profesjonaliści zalecają, aby nie zapisywać żadnych haseł na papierze. I są te programy do zarządzania hasłami. Nigdy nie używałem tego oprogramowania, więc jestem tam raczej ślepy. Czy ufasz tym rzeczom? Wyobraź sobie, że ktoś ukradł Twój komputer i próbował włamać się do tego oprogramowania, czy istnieje ryzyko utraty całej tożsamości?


title: Czy poziom wsparcia Google App Engine jest wystarczający do rzeczywistej produkcji?

text: Google App Engine świetnie nadaje się do wypróbowywania pomysłów i uczenia się, ale jak dotąd nie widziałem zbytniego zaufania społeczności do używania go w aplikacjach produkcyjnych. Jednym z istotnych problemów, które ciągle się pojawiają, jest to, że gdy coś pójdzie nie tak, rozmowa z kimkolwiek w Google jest prawie niemożliwa. To naprawdę przerażające, jeśli Twoja firma jest zależna od tej usługi dla aplikacji produkcyjnej. Jednak ich literatura na temat kont Premier wygląda obiecująco, z obietnicą lepszego poziomu wsparcia. Jakie masz doświadczenia z używaniem Google App Engine, jeśli chodzi o rozwiązywanie problemów z pomocą techniczną? Czy samo potwierdzenie P1 naprawdę zajmuje 4 godziny?


title: Czy powinienem zapewnić jakiś sposób wyłączenia mojego oprogramowania po dostarczeniu?

text: Zastanawiam się nad wartością umieszczenia funkcji zdalnego wyłączania (lub niszczenia) w moim oprogramowaniu przed dostarczeniem go klientom... Jako hipotetyczny przykład rozważ rozwój aplikacji Silverlight, w której martwisz się, że klient ci nie zapłaci. Tworzysz funkcję, która po wpisaniu określonego ciągu zapytania usuwa wszystko z bazy danych. Trochę skrajnym przykładem może być niszczenie danych. Innym przykładem może być uczynienie aplikacji częściowo lub całkowicie bezużyteczną. Jakie są korzyści i ryzyko takiego postępowania? Jeśli to zrobiłeś, dlaczego to zrobiłeś i jak się do tego zabrałeś?


title: Maskuj klucz i token API oAuth dla czystych technologii po stronie klienta

text: Gdybym miał zbudować aplikację na Twittera lub Facebooka przy użyciu czystych technologii po stronie klienta, takich jak HTML i javascript, w jaki sposób maskowałbym/ukrywał moje klucze API? Na przykład dla Twittera mam klucz klienta i tajny klucz klienta. Abym mógł wywołać API Twittera, muszę przekazać te klucze, aby uwierzytelnić moją aplikację. Jeśli korzystam z czystych technologii po stronie klienta, narażam się. Dlatego klucze API są gotowe do przejęcia i każdy może uwierzytelnić się jako moja aplikacja. Jak mogę temu zapobiec? Czy mogę w ogóle temu zapobiec? To pytanie jest bardzo podobne do tego wątku, jednak nie jest to aplikacja desktopowa.


title: Przejście z rozwoju na zamówienie do domu rozwoju COTS

text: Obecnie jedną z głównych aplikacji produkowanych przez naszą organizację można uznać za oprogramowanie na zamówienie, ponieważ jest ono specjalnie zaprojektowane dla jednej konkretnej organizacji klienta. Jednak specjalnie zachowaliśmy kapitał intelektualny w projekcie, a wiele różnych organizacji w różnych krajach (z różnymi językami i zestawami znaków) wygląda teraz, jakby chciało kupić nasze oprogramowanie. Nasze obecne podejście do rozwoju wychodzi 9 ½ poza test Joela i jest coraz lepsze. Jednak nasze podejście polega na spełnianiu wymagań jednego konkretnego klienta i szybkim reagowaniu na jego potrzeby (bez względu na to, czy coś jest błędem, czy żądaniem zmiany). Jeśli chcemy przejść do tworzenia bardziej podejścia „z półki” z wieloma organizacjami klienckimi – zamiast tylko jednej organizacji klienckiej – na wspólnej bazie kodu, jakie są główne różnice i jakie pułapki musimy być świadomym, aby pomyślnie dokonać przejścia?


title: Jak odwoływać się do konkretnych obszarów kodu w dokumentacji?

text: Mam zamiar opuścić projekt, a przed wyjazdem mój szef poprosił mnie o udokumentowanie kodu (nie udokumentowałem zbyt dobrze). To nic wielkiego, projekt nie jest strasznie skomplikowany. Ale znajduję w mojej dokumentacji miejsca, w których chciałbym powiedzieć: „Zauważ na linii XYZ, że dzieje się to a to”. W tym przypadku odwoływanie się do konkretnego numeru wiersza nie ma sensu, ponieważ dodanie lub usunięcie pojedynczego wiersza kodu natychmiast przedawniłoby dokumentację. Czy istnieje jakaś najlepsza praktyka dotycząca odwoływania się do określonego wiersza kodu bez odwoływania się do niego za pomocą numeru wiersza? Rozważałem zaśmiecenie kodu komentarzami takimi jak: /* linetag 38FECD4F */ Gdzie "38FECD4F" to jakiś unikalny tag dla tej konkretnej linii. Następnie mogę umieścić w dokumentacji: „W linii oznaczonej '38FECD4F' zauważ, że dzieje się to a to”. Jakieś inne pomysły? Uważam, że generalnie lepiej jest dokumentować jednostki kodu jako całość, niż określone ich fragmenty, ale w przypadku tego konkretnego projektu są DŁUGIE pokosy kodu proceduralnego, które nigdy nie zostały zrefaktoryzowane na mniejsze jednostki.


title: Czy STL jest wdrożony z OO?

text: Istnieje kilka wzorców projektowych, takich jak Adaptor, Iterator zaimplementowany w STL. Czy to oznacza, że STL jest wdrażany z koncepcjami OO? Jaki jest związek między obiektami obiektowymi a częściami szablonowymi języka C++? Dowiedziałem się, że funkcja wirtualnego członka uzasadniająca OO jest sprzeczna z szablonem, czy to prawda?


title: Sprzedaż rozszerzenia Joomla z wtyczką jquery innej firmy

text: Załóżmy, że chcę utworzyć rozszerzenie dla Joomla, które używa wtyczki jQuery lub dowolnej biblioteki innej firmy. Wyobraź sobie, że tworzę moduł Joomla korzystający z wtyczki jquery Nivo Slider (Licencja MIT) http://nivo.dev7studios.com/license/. Nie jestem pewien czy mógłbym sprzedać ten moduł z tą licencją. Czy mogę go sprzedać, jeśli wtyczka ma licencję GPL?


title: Czy ten algorytm wymiany wartości XOR jest nadal używany lub przydatny?

text: Kiedy po raz pierwszy zacząłem pracować, programista asemblera mainframe pokazał mi, jak zamieniają się na wartości bez użycia tradycyjnego algorytmu: a = 0xBABE b = 0xFADE temp = a a = b b = temp Co używali do zamiany dwóch wartości - od bitowej do dużej bufor - był: a = 0xBABE b = 0xFADE a = a XOR b b = b XOR a a = a XOR b now b == 0xBABE a == 0xFADE który zamienił zawartość 2 obiektów bez potrzeby trzeciego miejsca przechowywania tymczasowego. Moje pytanie brzmi: czy ten algorytm wymiany XOR jest nadal używany i gdzie nadal ma zastosowanie.


title: Czy nastąpiły poważne zmiany w praktykach testowania w ASP .NET między 3,5 a 4,5?

text: Oczywiście metody testowania są niezależne od języka. Test integracyjny pozostaje testem integracyjnym bez względu na technologię. Ale platformy implementują pewne rodzaje wsparcia testowania. A szczegóły różnią się w zależności od implementacji, więc programista musi nauczyć się korzystać z narzędzi ich frameworka. A platformy ewoluują, więc najlepsze praktyki w jednej wersji mogą stać się przestarzałe lub przynajmniej nieefektywne w następnej. Zobacz na przykład to pytanie StackOverflow dotyczące testów jednostkowych, dla których przynajmniej trzy pierwsze odpowiedzi wydają się poprawne: jedna opisująca poprawne rozwiązanie dla bieżącej wersji, jedna opisująca rozwiązanie, które było najlepsze zanim platforma .NET zawierała atrybut ExpectedException i jeden opisujący ogólne rozwiązanie, które jest niezależne od narzędzi. Moje pytanie brzmi: czy były jakieś poważne zmiany związane z testowaniem między wersjami .NET Framework 3.5 i 4.5? Coś tak destrukcyjnego w testowaniu, jak wprowadzenie generyków, było ogólnie dla programowania, czy wprowadzenie struktury członkostwa było dla uwierzytelniania? A może były tylko drobne zmiany poprawiające? Pytam o to, bo zastanawiam się, czy materiały do nauki napisane dla 3.5 są nadal w miarę aktualne.


title: Jakie etapy tradycyjnego projektu wodospadowego powinien zastąpić Scrum?

text: Mój zespół i ja używamy Scrum do zarządzania projektami rozwoju oprogramowania. W mojej firmie nastąpił ruch w kierunku większej struktury we wszystkich projektach IT przy użyciu metodologii kaskadowej. Nie przeszkadza mi to, ponieważ istnieje wiele projektów nie związanych z tworzeniem oprogramowania, które bardzo na tym skorzystają i nie zagraża to naszemu używaniu Scrum. Musimy jednak ustalić, w jaki sposób nasze procesy Scrum (które świetnie sprawdzają się w przyjmowaniu wymagań Właściciela Produktu i przekształcaniu ich w działające oprogramowanie) pasują do szerszego procesu projektowego. Nasz nowy proces projektu kaskadowego obejmuje wyraźne działania dotyczące następujących rzeczy (niekoniecznie kolejno i niekoniecznie w tej kolejności): 1. Przygotowanie i zatwierdzenie uzasadnienia biznesowego. 2. Zasoby. 3. Analiza wymagań. 4. Projekt. 5. Buduj. 6. Test. 7. Szkolenie. 8. Komunikacja. 9. Rozpocznij transmisję na żywo. 10. Zarządzanie ryzykiem i problemami. 11. Realizacja korzyści. Pamiętaj, że projekt może wymagać dostarczenia czegoś więcej niż tylko oprogramowania. Może również obejmować infrastrukturę serwerową do obsługi oprogramowania oraz infrastrukturę sieciową/komputerową udostępniającą ją użytkownikom. Myślę, że Scrum szczęśliwie poradzi sobie z 3, 4, 5 i 6 nie dostrzegam potrzeby ani korzyści, a ja też nie (Scrum jest dobry dla dużych, ryzykownych projektów i budują kilka standardowych komputerów). Podobnie moglibyśmy mieć User Story w Product Backlog dla Kierownika Projektu (nie jest to zazwyczaj członek Zespołu Scrumowego), aby stworzyć plan realizacji korzyści. Czy podchodzimy do tego prawidłowo? Czy istnieje lepszy sposób na połączenie tych dwóch stylów pracy, czy są one ekskluzywne i powinniśmy użyć jednego lub drugiego?


title: Jaka struktura klas pozwala na klasę bazową i mieszanie/dopasowywanie podklas? (Podobne do użytkowników z rolami)

text: Mam zestaw podstawowych cech, a następnie kilka podtypów. Każde wystąpienie _musi_ być jednym z podtypów, ale może być wieloma podtypami jednocześnie. Podtypy każdej rzeczy mogą się zmienić. Ogólnie rzecz biorąc, nie obchodzi mnie, jaki mam podtyp, ale czasami mnie to obchodzi. Przypomina to rodzaj relacji użytkownicy-role, w której użytkownik mający określoną rolę nadaje mu dodatkowe cechy. Coś w rodzaju pisania kaczką (np. Jeśli mój `Foo` ma `Bar`, mogę traktować go jak `ThingWithABar`.) Proste dziedziczenie nie działa, ponieważ nie pozwala na mieszanie/dopasowywanie pod- typy. (tj. brak wielokrotnego dziedziczenia). Prosta kompozycja nie działa, ponieważ nie mogę jej zmienić w czasie wykonywania. Jak mogę to wymodelować?


title: Walidacja obiektów ze sobą — potrzebny Wzorzec Projektowy

text: Korzystam z aplikacji zoo. Moje zoo zawiera abstrakcyjną klasę „zwierząt” i kilka klas pochodnych – „zebra”, „słoń”, „orangutan”, „pawian” i tak dalej. Z każdej klasy mam kilka instancji. Moje pytanie brzmi: chcę sprawdzić, czy dwie instancje zwierząt mogą się kojarzyć. Logika biznesowa jest podzielona na dwie części: 1. Chcę sprawdzić, czy każdy partner nadaje się do krycia, np. nie za młody, za stary lub chory itp. 2. Chcę sprawdzić, czy dwaj partnerzy pasują do siebie - np. zebra nie może parzyć się ze słoniem, ale orangutan może parzyć się z pawianem. Zakładam, że pierwsze wymaganie zostałoby zaimplementowane przez funkcję abstrakcyjną, która znajdowałaby się pod klasą bazową zwierząt. Ale co z drugim wymogiem? Jak zaprojektowałbyś klasy w najbardziej ogólnej materii, aby dodanie nowych rodzajów zwierząt nie wymagało dużego narzutu?


title: Wreszcie blok na metody - czy to zły pomysł?

text: Blok `finally` dla struktury `try-catch` jest dobrze znany i daje naprawdę łatwy i elegancki sposób radzenia sobie z jakimś niezbędnym kodem. Dlatego nie widzę powodu, dla którego nie miałoby to być dobre również dla metod. Na przykład, powiedzmy, że piszę bardzo skomplikowaną logikę w metodzie i spodziewam się, że otrzymam kilka flag logicznych, które z kolei doprowadzą do pewnych decyzji. Wiele razy w tego typu metodach mam gałęzie kodu, w których chciałbym „przerwać” przepływ i po prostu wykonać „prawdziwe rzeczy”, dla których nazwałem tę metodę, z satysfakcjonującymi informacjami, które zebrałem do tej pory. Dlaczego więc nie ma takiego wzoru? Czy jest tam?


title: Wyświetlanie przedmiotów z minutnikiem

text: Tworzę widget do obracania tematów. Funkcjonalność jest następująca: * Każdy temat jest wyświetlany jeden po drugim na stronie głównej i trwa 30 sekund. * Na stronie wyświetlany jest licznik czasu. Gdy osiągnie zero, bieżący temat zostaje oznaczony jako „pokazany” i wyświetlany jest następny temat. * Użytkownicy mogą wybrać „polubienie” tematów, w którym to przypadku temat zostanie wydłużony o 5 sekund (w tym momencie licznik czasu musi się zaktualizować). * Zegar odliczający zawsze musi wyświetlać aktualny czas trwania przydzielonego tematu, więc na przykład, jeśli użytkownik „polubi” temat, osoby odwiedzające witrynę powinny natychmiast zobaczyć zaktualizowany czas trwania tego tematu. W zasadzie wszystko musi być pokazywane w czasie rzeczywistym. Tematy są przechowywane w bazie danych MySQL. Mam problem z dwoma ostatnimi punktami powyżej. Sposobem, w jaki próbowałem to zrobić do tej pory, jest żądanie AJAX, które jest wysyłane co sekundę, aby odjąć 1 sekundę od bieżącego czasu trwania tematu. Odpowiedzią na żądanie jest bieżący czas trwania tematu. Problem polega na tym, że będzie działać tylko tak długo, jak ktoś ma dostęp do witryny. Wiem, że prawdopodobnie mogę stworzyć skrypt CRON, aby uruchomić ten proces w tle, ale uruchamianie go co sekundę byłoby trochę szalone. Musi istnieć znacznie prostsze rozwiązanie tego problemu. Jaki byłby najskuteczniejszy sposób rozwiązania tego problemu?


title: Czy ustawienie wersji VS w Settings.settings ma znaczenie?

text: Przeglądając serwer i kod lokalny w ogromnym starszym projekcie, widzę to w Settings.settings: <?xml version='1.0' encoding='utf-8'?> <SettingsFile xmlns="http://schemas.microsoft .com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> <Profiles> <Profile Name="(Default)" /> </Profiles> <Settings /> </SettingsFile> Czy występuje problem z mając to odniesienie do projektu VS2010 2004 w ten sposób? Czy to nie ma znaczenia?


title: Jak szybko przeszukiwać bardzo długą listę właściwości

text: Mam strukturę do przechowywania właściwości elementów na serwerze SQL Server: ItemId PropertyId Wartość 1 1 a 1 2 b 2 1 a 2 2 5 Obecnie istnieje ponad 130000 elementów i 10000 właściwości, a liczba ta rośnie. Aktualna liczba wierszy to nieco ponad 15 mln. Gdybym utworzył tabelę przestawną dla tych danych, miałaby ona nieco ponad 1,3 miliarda komórek, z czego 15 milionów nie ma wartości null. Użytkownicy mogą tworzyć niestandardowe wyrażenia na tych danych, takie jak: X: P1 = 'a' (reguła X wybiera elementy, które mają właściwość 1 o wartości 'a') Y: P2 <> 'b' Z: P3 jak '%c%' T : P4 > 5 (reguła T wybiera elementy, które mają właściwość 4 o wartości większej niż 5) i tworzą filtry za pomocą wyrażeń takich jak: (X AND T) (elementy pasujące zarówno do X, jak i Y) (X AND Y) LUB ( Z AND T) (X OR Y) AND (Z OR NOT T) (X OR Y AND T) OR Z Muszę zapytać o wynik kilku filtrów (zwykle 4 lub 5) jako odpowiedź na pojedyncze żądanie sieciowe. Jak mogę to zrobić szybko? Czy istnieje metoda przechowywania lub super wydajny algorytm, aby uzyskać wyniki tego filtra? Byłoby wspaniale, gdyby było to możliwe na SQL Server, ale jestem również otwarty na rozwiązania, takie jak przechowywanie tej porcji danych w bazie danych bez sql.


title: Haszowanie strategii wzrostu

text: Jaka jest dobra strategia wzrostu dla tablic mieszających? Jeśli liczba elementów przekracza liczbę kubełków, zwiększam ilość kubełków wzorem: n = int(n * 1,618033988749895) | 1; Czy to brzmi rozsądnie? (Część `| 1` zapewnia, że otrzymam nieparzystą liczbę.)


title: Pytanie o projekt aktualnych wdrożeń stronicowania

text: Sprawdziłem specjalnie implementacje stronicowania na asp.net mvc i naprawdę czuję, że w implementacjach jest coś mniej wydajnego. Przede wszystkim implementacje wykorzystują wartości paginacji jak poniżej. public ActionResult MostPopulars(int pageIndex,int pageSize) { } Źle uważam, że pageIndex i pageSize całkowicie powinny należeć do klasy Pagination, w przeciwnym razie wygląda to tak funkcjonalnie. Upraszcza również niepotrzebne przekazywanie parametrów w warstwach aplikacji. Drugą rzeczą jest to, że używają poniższego interfejsu. interfejs publiczny IPagedList<T> : IList<T> { int Liczba stron { get; } int TotalItemCount { get; } int PageIndex { get; } int Numer Strony { get; } int RozmiarStrony { get; } bool HasPreviousPage { get; } bool HasNextPage { get; } bool JestPierwszaStrona { get; } bool IsLastPage { get; } } Jeśli chcę przekierować moją paginację do innej akcji, to muszę stworzyć nowy model widoku, aby zawrzeć w nim nazwę akcji lub nawet nazwę kontrolera. Innym rozwiązaniem może być wysłanie tego interfejsu do widoku, a następnie określenie akcji i kontrolera zakodowanego na stałe w metodzie pagera jako parametru, ale tracę całkowicie możliwość ponownego użycia mojego widoku, ponieważ zależy on ściśle od jednej akcji. Inną rzeczą jest to, że używają poniższego kodu w widoku Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount) Jeśli model to IPagedList, dlaczego nie zapewniają metody przeciążenia, takiej jak `@Html.Pager(Model)` lub jeszcze lepszym jest `@Html.Pager()`. Wiesz, że w ten sposób znamy typ modelu. Wcześniej robiłem błąd, ponieważ używałem Model.PageIndex zamiast Model.PageNumber. Innym dużym problemem jest to, że mocno opierają się na interfejsie IQueryable. Skąd wiedzą, że używam IQueryable w mojej warstwie danych? Spodziewałem się, że działają po prostu z kolekcjami, które utrzymują ignorancję trwałości implementacji stronicowania. Co jest nie tak z moimi pomysłami na ulepszenia w stosunku do ich implementacji stronicowania? Jaki jest ich powód, by nie wprowadzać w ten sposób swoich paginacji?


title: Z jakich frameworków testów akceptacyjnych korzystałeś? Jakie są plusy i minusy?

text: W przypadku testów biznesowych lub testerskich na projektach (nie testach jednostkowych), zwykle używałem FitNesse, ale parałem się RSpecem i jestem zainteresowany nauką Selenium i Robota. Czy masz doświadczenie w tych (lub innych) narzędziach do testów akceptacyjnych? Jakie są plusy i minusy? W przypadku FitNesse na początku mogę pomyśleć o następujących zaletach i wadach. PLUSY: * Edycja oparta na Wiki, którą większość ludzi rozumie * Dużo wsparcia i wtyczek dla różnych języków * Całkowicie samowystarczalny, po prostu pobierz i przejdź MINUSY: * Refaktoryzacja testów może być trochę niezgrabna * Musisz wiedzieć (lub udokumentować) różne właściwości, których oczekuje każda metoda w twoim urządzeniu testowym. Nie ma żadnego "intellisense" ani IDE, aby zrobić to za ciebie, o czym jestem świadomy.


title: Czy mogę używać Xcode 4.2?

text: Czy mogę używać nowego Xcode 4.2 do tworzenia aplikacji dla starszej wersji iOS? Czy będą działać? Podoba mi się nowe funkcje, takie jak Storyboard i Automatyczne Liczenie Odniesień.


title: Wartość potencjalnej możliwości wysyłki, gdy produkt nie jest jeszcze minimalnie opłacalny

text: Główną korzyścią płynącą z posiadania produktu potencjalnie nadającego się do wysyłki na koniec każdego sprintu jest możliwość szybkiego wydania produktu w przypadku zmiany warunków rynkowych. Jednak zazwyczaj w pierwszym półroczu lub dłużej produkt nie ma wystarczającej wartości, aby mógł zostać wysłany. Po co więc marnować całą tę energię na tworzenie potencjalnie możliwego do wysyłki przyrostu w każdym sprincie, jeśli masz całkowitą pewność, że produkt nie zostanie wysłany?


title: Super szybki silnik przechowywania plików

text: Zasadniczo mam jedną dużą gigantyczną tabelę (około 1.000.000.000.000 rekordów) w bazie danych z następującymi polami: id, block_id, identyfikator rekordu jest unikalny, block_id nie jest unikalny, zawiera około 10k (maks.) rekordów z tym samym identyfikatorem bloku, ale z różnymi rekordami Aby uprościć moją pracę, która zajmuje się DB mam API podobne do tego: Engine e = new Engine(...); // ta metoda musi być bezpieczna dla wątków, ale z drobnoziarnistą blokadą (block_id), aby poprawić współbieżność e.add(block_id, "asdf"); // asdf do 1 kilobajta max // to musi łączyć wszystkie dodane już rekordy block_id i nie musi być większe niż 10Mb (najgorszy przypadek) średnia będzie <5Mb String s = e.getConcatenatedRecords(block_id); Jeśli zmapuję każdy blok do pliku (jeszcze tego nie zrobiłem), to każdy rekord będzie wierszem w pliku i nadal będę mógł korzystać z tego API Ale chcę wiedzieć, czy będę miał jakiś wzrost wydajności przez używanie płaskich plików w porównaniu z dobrze dostrojoną bazą danych postgresql ? (przynajmniej dla tego konkretnego scenariusza) Moim największym wymaganiem jest jednak to, że metoda getConcatenateRecords zwraca głupio szybko (nie dotyczy to operacji add). Rozważam również buforowanie i mapowanie pamięci, po prostu nie chcę się komplikować przed pytaniem, czy istnieje już rozwiązanie dla tego rodzaju scenariusza?


title: Usuwanie najniższego ustawionego bitu liczby

text: W tym samouczku dotyczącym manipulacji bitami, pod nagłówkiem „Wyodrębnianie każdego ostatniego bitu”, widzę, że -> Załóżmy, że chcemy znaleźć najniższy ustawiony bit x (który jest znany jako nie-> zero). Jeśli odejmiemy 1 od x, to ten bit jest wyczyszczony, ale wszystkie pozostałe > jeden bity w x pozostają ustawione. Nie rozumiem, jak to stwierdzenie jest prawdziwe. Jeśli weźmiemy `x = 110`, odjęcie 1 da `101`. Tutaj najniższy ustawiony bit nie jest kasowany. Czy ktoś może mi powiedzieć, jak podchodzę do tego problemu w niewłaściwy sposób?


title: Czy Vim lub Emacs są praktyczne dla języków takich jak .Net lub Java?

text: Jestem więc przede wszystkim programistą .Net, który od czasu do czasu robi trochę rzeczy w Javie, Pythonie i kilku innych. Słyszałem, jak wiele osób chwali Vima i Emacsa za znaczne zwiększenie wydajności po ustaleniu podstaw. Zdecydowanie widzę, jak wiele funkcji może być bardzo przydatnych przy wystarczającej praktyce, a nawet wierzę, że krzywa uczenia się jest prawdopodobnie warta wysiłku. Jednak… wydaje się, że naprawdę musiałbyś być jakimś kreatorem makr i skrótów klawiszowych, aby być tak wydajnym w Vimie lub Emacsie, jak przeciętny programista w Visual Studio, Netbeans, Eclipse lub innych platformach. Zacząłem uczyć się obsługi Vima i uważam, że niektóre z jego funkcji są niesamowite (na przykład edycja kolumn), ale wydaje się, że wielu narzędzi dostarczanych przez ciężkie IDE po prostu nie można było zastąpić kupując nawet najbardziej soczysty tekst redaktor. Kilka procesów, do których byłbym sceptyczny, w których ktokolwiek mógłby być bardziej wydajny w Vimie, to (najlepiej znam VS, więc będę się tego trzymać): * generowanie plików dbml dla Linq-to-SQL * Automatyczne testowanie * projektowanie UI * Tworzenie/ organizowanie projektów i rozwiązań, o których wiem, że Vim i Emacs potrafią robić wiele tych samych rzeczy, co VS (jak intellisense, refaktoryzacja itp.) i może być w stanie wykonać niektóre lub wszystkie z podanych przeze mnie przykładów, ale jest realistyczne jest stwierdzenie, że ktoś pracujący na tych platformach faktycznie skorzystałby z Vima lub Emacsa?


title: Nauczanie programowania dzieci/nastolatków

text: Wiem, że ten temat był już omawiany wcześniej, ale pomyślałem, że to może być trochę bardziej szczegółowe pytanie... Przyjaciel rodziny to 12-letni chłopiec z ADHD i bardzo bystry dzieciak. Wydaje się, że ma solidny instynkt komputerowy i naprawdę myślę, że byłby świetny w programowaniu. Na przykład dzisiaj kręcił się po naszym miejscu, więc otworzyłem Visual Studio Express C# i pokazałem mu, jak stworzyć aplikację konsolową (to on wszystko pisał). W około 10 - 20 minut pisał swój własny kod, ReadLine() i Writeline() itd., a nawet zaczął pracować nad pętlą. Sprawiło, że pomyślałem, że nawet coś takiego jak C# na pewno będzie w jego zasięgu. Chociaż przyszło mi do głowy Lego Mindstorms, jego rodzina nie jest szczególnie zamożna i prawdopodobnie nie jest to możliwe. Myślałem o pożyczeniu mu jednego z moich wstępów do książek C#, ale z ADHD nie wiem, czy miałby dość cierpliwości, żeby przez to przejść. Myślę też, że coś takiego jak Alice lub Scratch byłoby dla niego zbyt dziecinne i nie przyciągnęłoby jego uwagi… Próbuję dowiedzieć się, jaki byłby najlepszy sposób na podejście do tego i jaki rodzaj materiału jest tam dostępny że mógłby nauczyć się programować. Jakieś przemyślenia lub sugestie? Jedną z moich myśli była ta książka, ale może być zbyt zaawansowana bez przynajmniej podstawowego tła C#... Amazon C# Game Book: Dzięki!


title: Różnica między Web API a Web Service?

text: Dużo słyszałem o Web Services i Web API, czy jest między nimi jakaś różnica, czy są takie same?


title: Benchmark kodu asynchronicznego

text: Wydaje się, że w dzisiejszych czasach programowanie asynchroniczne staje się dość popularne. Jedną z najczęściej cytowanych zalet jest wzrost wydajności wynikający z usuwania operacji blokujących wątki. Ale widziałem też ludzi, którzy mówili, że przewaga nie jest aż tak wielka. A właściwie skonfigurowana pula wątków może mieć taki sam efekt jak kod w pełni asynchroniczny. Moje pytanie brzmi, czy istnieją prawdziwe testy porównawcze, które porównują blokowanie z kodem asynchronicznym? Może to być dowolny język, ale myślę, że C# i Java byłyby najbardziej reprezentatywne. Nie jestem pewien, jak dobry byłby ten test porównawczy z Node.js lub podobnym. **Edytuj** : Wygląda na to, że moja próba odpowiedzi na ogólne pytanie w połączeniu z niejasną terminologią nie powiodła się. Przez „kod asynchroniczny” rozumiem to, co niektóre odpowiedzi określają jako programowanie zdarzeń lub wywołań zwrotnych. W rezultacie operacje, które blokowałyby wątek, są zamiast tego delegowane do jakiegoś systemu wywołań zwrotnych, dzięki czemu wątki mogą być lepiej wykorzystywane. A gdybym chciał zadać konkretne pytanie: _Czy są jakieś testy porównawcze, które porównują przyrost przepustowości/opóźnień kodu serwera asynchronicznego/oczekiwania w .NET? Lub jakiekolwiek inne podobne porównanie?_


title: Jak sklasyfikowany zostanie mój język niestandardowy?

text: Rozwijam własny język skryptowy, aby rozwiązywać unikalne wyzwania dla projektu. Język pobiera kod źródłowy i konwertuje zawartość na tokeny, a następnie fabryka poleceń służy do konwertowania tych tokenów na coś, co można wykonać. Przykładowy skrypt może wyglądać tak. akceptuj: zawsze; odrzuć: tytuł zawiera „coś” lub body ma „coś innego”; odrzuć: długość tytułu < 10; Każda linia w skrypcie kończy się terminatorem `;`, a każda linia zaczyna się od nazwanej reguły, która kończy się `:`. Każda reguła używa polecenia, po którym następują argumenty. Polecenia można łączyć ze sobą za pomocą operatorów logicznych. Liczba argumentów, które może mieć polecenie, jest stała. Więc kiedy znajdę polecenie, mogę spodziewać się X dodatkowych tokenów, aby składnia była poprawna. Celem jest kod czytelny dla człowieka, ponieważ będą go używać nie-programiści. Alternatywnym sposobem napisania tego samego powyższego kodu przy użyciu struktury stylu C byłby. akceptuj(prawda); odrzuć(ma(tytuł,"coś") || ma(ciało,"coś innego")); odrzuć(długość(tytuł) < 10); Jaki jest termin używany dla parsera, który obsługuje język, w którym pominięto `()` dla strukturyzacji argumentów i nie ma wyraźnych granic zdefiniowanych dla argumentów. Chciałbym poczytać o tym, jak zaimplementowane są tego rodzaju parsery. Aby upewnić się, że nie wymyślam nadmiernie koła lub nie wpadam w typowe problemy.


title: Wyrównaj przeciągane elementy w linii i generuj bez przepełnienia lub nowej linii

text:
Mam ten skrypt, nad którym pracuję. Powinien generować nowy div za każdym razem, gdy naciskam przycisk i już to zrobiłem, ale nie można ich przeciągać. Myślę, że dzieje się tak z powodu funkcji onLoad, ale mam alternatywę? Drugi problem polega na tym, że kiedy klikam jedno z niebieskich pól, wszystkie muszą ułożyć się w linii tak, jak widać je po załadowaniu mojego linku jsFiddle, a jeśli linia jest pełna i zamiast tego klikasz przycisk „Nowy kwadrat” przepełnienia lub dodania nowej linii, zamiast tego zamknie ostatnie pole i doda nowe pole przed wszystkimi innymi polami. Przepraszam, że zawracam ci głowę tymi pytaniami, ale jestem programistą PHP i MySQL, dopiero zacząłem używać jQuery. jsFiddle HTML:

 <input type="button" class="button" value="New Square"> jQuery: $('.round') .przeciągany(); $('.button').click( function (){ $("#container").append("

"); }); $('.round').kliknij ( ); Miałem więcej kodu w jQuery, ale usunąłem wszystkie niepotrzebne opcje, ponieważ chcę, abyś łatwo zrozumiał, co chcę zrobić.


title: Egzekwowanie standardów organizacyjnych dla oprogramowania w Scrum

text: Organizacje, zwłaszcza organizacje o uznanej marce, mają różne standardy oprogramowania. Obejmuje to takie rzeczy, jak bezpieczeństwo, użyteczność, jakość i czytelność kodu, projektowanie interfejsu użytkownika, automatyzacja testów i tak dalej. W naszej organizacji mamy leada dla każdego z tych obszarów. Każdy lead to osoba bardzo doświadczona i ciesząca się zaufaniem kierownictwa. Każdy lead jest odpowiedzialny za to, aby oprogramowanie spełniało standardy w obszarze specjalizacji leada. Przewodnik po Scrumach mówi: „Zespoły programistyczne samoorganizują się. Nikt (nawet Scrum Master) nie mówi zespołowi programistycznemu, jak przekształcić Backlog Produktu w Przyrosty potencjalnie możliwej do wydania funkcjonalności;” Moje pytanie brzmi: w jaki sposób organizacja może zaufać zespołom, aby wyprodukowały produkt spełniający różne standardy wymienione powyżej, jeśli potencjalni klienci (zaufani przez organizację) nie mają możliwości egzekwowania jakości w każdym z obszarów?


title: Czy zatrudnienie „głównego stażysty” to dobry pomysł?

text: Rozpoczynam program stażowy dla naszego działu oprogramowania i zastanawiałam się nad stworzeniem stanowiska ("główny stażysta", opiekun stażysty, czy jakkolwiek by to nazwać) z następującymi obowiązkami: * **Szkolenie** stażyści * ** Coach** stażyści * **Zarządzaj projektami i zadaniami** dla stażystów * **Nadzoruj** pracę stażysty pod kątem **rytmu i jakości** * **Działaj jako łącznik** między potrzebami zespołu głównego a wydajnością stażystów /aspiracje * Oceniaj i ułatwiaj postępy stażystom **kiedy chce wykonać zadanie wyższego poziomu specyficzne dla domeny** (w tym momencie główny członek zespołu programistów może prowadzić mentoring) * **Swobodnie angażuj się w oprogramowanie głównego zespołu zadania programistyczne, aby sam mógł się rozwijać** i mieć pełny mentoring od głównego zespołu programistów. Myślę, że inżynier na poziomie praktykanta (poniżej Jr. lub Jr.; ale będąc absolwentem i pracującym na pełny etat) poradzi sobie z tym przez jakiś czas (najpierw zostanie przeszkolony przez główny zespół programistów), aż do jednego wydarzyły się dwie rzeczy: 1. **postanawia przejść do głównego zespołu programistów**, polecając odpowiedniego zastępcę (lub mnie znaleźć innego jako nowego pracownika) 2. **Prowadź dalej** stażystów podczas wciąż będąc w stanie dorosnąć do mł. inż., inż. jako wolny strzelec przez większość moich lat uniwersyteckich). Intencją poboczną jest również to, że jeśli stanie się to wyższą rotacją (organicznie), ponieważ opiekun stażysty chce dołączyć do głównego zespołu programistów, **może to pomóc stażystom aspirującym do tej pozycji wyłonić się jako liderzy**. **Moim głównym zamiarem jest jednak usunięcie elementów rozpraszających z głównego zespołu, ale bez narażania stażystów na brak uwagi, co może prowadzić do nudy i małej retencji stażystów.** Czy ten „główny stażysta” jest powszechny (lub przynajmniej dobre)?, czy są jakieś oczywiste zagrożenia, których mogę nie widzieć? * * * **Edytuj** : Mam wstępny plan pracy, jaką będą wykonywać stażyści: Czy mini-projekty R&D są dobrym zajęciem dla stażystów? **Edytuj #2** : Moim zamiarem nie jest izolowanie ich, ale skoncentrowanie się na zwróceniu na nie uwagi, gdy nie możemy tego zrobić. **Edytuj #3** : Jestem teraz przekonany, że to dobry pomysł, ale przyjmę organiczne podejście do zatrudniania kogoś na takiej pozycji: zrób to sam, dopóki nie będę mógł. W ten sposób będę wiedziała lepiej, czego w przyszłości oczekiwać od osoby, którą zatrudnię do tej roli, a także co się sprawdza, a co nie w przypadku stażystów.


title: Komunikacja z dostawcami

text: Jesteśmy małym zespołem programistycznym (jeśli chodzi o programistów) i mamy zespół dostawców na drugim końcu świata, którzy programują dla nas. Jesteśmy właścicielem produktu i po prostu dyktujemy im niektóre zadania, nad którymi mają pracować. Jestem jednym z głównych programistów, a także kierownikiem projektu tego konkretnego projektu, więc jestem programistą i spełniam wymagania oraz je opracowuję. Mam trudności z komunikowaniem się z dostawcami dokładnie tego, czego się od nich oczekuje. Zacznę od tego, że jesteśmy w tym całkiem nowi i nie mam dużego doświadczenia w kierowaniu zespołem sprzedawców, zwłaszcza gdy trudno jest porozumiewać się werbalnie w języku angielskim, a oni pracują w nocy, a potem wchodzę do kod, który wcisnęli, gdy spałem. Problem polega na tym, że spędzam dużo dnia na sprawdzaniu, co zrobili, i naprawianiu błędów i przypadków, o których nie pomyśleli. Nie są myślicielami, robią dokładnie to, co im powiem i nic mniej lub więcej. Przez większość czasu czuję, że po prostu łatwiej byłoby to zrobić samemu. Moje pytanie brzmi, jak większość zespołów takich jak ten się komunikuje? W tej chwili mamy cotygodniowe spotkania telefoniczne i co wieczór wysyłam im e-maile o postępach, które poczyniłem, a także o tym, czego się od nich oczekuje. Kiedy myślę "jak komunikować się z innymi programistami" odpowiedź wydaje się być UML. To jest to. Z pewnością dobrze znam UML, nauczyłem się go w szkole, ale nigdy tak naprawdę nie używałem go w pracy. To po prostu nie jest coś, co robimy, w rzeczywistości generalnie wymagania dotyczące zadania są w głowie mojego menedżera. Mogę umieścić je w arkuszu kalkulacyjnym lub schemacie blokowym, ale nigdy w oficjalnym diagramie. Czy takie zespoły faktycznie używają UML? W rzeczywistości czuję, że w szkole nauczyłem się dużo, czego nikt tak naprawdę nie uczy. Jeśli tak, które diagramy są najbardziej przydatne/używane? Z mojej wiedzy wynika, że w tym projekcie, w którym ulepszamy coś, co już istnieje w systemie od podstaw, uważam, że dobrym podejściem byłoby: * Utwórz szybki diagram ER zawierający wszelkie dodane/zaktualizowane/używane elementy w projekt. * Utwórz _szczegółowy_ model przypadków użycia, jasno definiując i numerując każdy przypadek użycia. * Utwórz diagram sekwencji dla złożonych przypadków użycia (a także ich alternatywnych przepływów), aby pokazać dokładnie, czego oczekuje się na każdym etapie. Czuję, że to byłby dobry początek. Obecnie nie radzimy sobie dobrze z rejestrowaniem wymagań, po prostu zaczynamy kodować w oparciu o coś, co narysowaliśmy na tablicy. Oczywiście to też musi się zmienić, aby nie poświęcić tygodnia na projekt i zdać sobie sprawę, że o czymś zapomnieliśmy. Jakie są Twoje sugestie/doświadczenie? Niestety, trochę latamy na ślepo i po prostu nie mamy nikogo wystarczająco doświadczonego w takich sytuacjach, aby się do niego udać. Chcę, aby projekt zakończył się sukcesem, ale nie mogę pozwolić, aby dostawcy (co zrozumiałe) popełniali błędy, ponieważ zakładam, że znają X lub Y. Jak mogę je efektywniej wykorzystać?


title: Niestandardowe tagi HTML: czy istnieją jakieś specyfikacje określające standardowy sposób ich obsługi?

text: Wygląda na to, że od lat otrzymują domyślną stylizację i wbudowany wyświetlacz. Czy istnieje gdzieś specyfikacja, która to podyktowała? Przejrzałem RFC, ale nie jestem szczególnie dobry z RFC-ese i nigdzie niczego nie zauważyłem. Na przykład <body> Trochę treści <mycustomtag>coś innego</mycustomtag> więcej treści. </body> Nadal mogę stylizować to za pomocą CSS, a przeglądarka nie wymiotuje wprost... więc wygląda na to, że jest jakieś oczekiwane zachowanie. Czy było to podyktowane specyfikacją?


title: Lepsze zrozumienie składu UML

text: Różnica między kompozycją a agregacją w UML (a czasami także w programowaniu) polega na tym, że w przypadku Composition czas życia obiektów tworzących kompozyt (np. silnik i kierownica w samochodzie) zależy od obiektu złożonego. W przypadku agregacji czas życia obiektów tworzących kompozyt jest niezależny od kompozytu. Nie jestem jednak pewien co do składu w UML. Powiedzmy, że ClassA składa się z obiektu klasy ClassB: class ClassA{ ClassB bInstance; public ClassA(){ bInstance = new ClassB(); } } To jest przykład kompozycji, ponieważ `bInstance` jest zależny od czasu życia otaczającego go obiektu. Jednak w odniesieniu do notacji UML - **Nie jestem pewien, czy zapisałbym związek między Klasą A i Klasą B za pomocą wypełnionego diamentu (kompozycja) czy białego diamentu (agregacja).** Dzieje się tak, ponieważ podczas życia _niektórych_ `Klasy B Instancje ` są zależne od instancji `ClassA` — mogą istnieć instancje `ClassB` w dowolnym innym miejscu programu — nie tylko w instancjach `ClassA`. * * * **Pytanie brzmi:** jeśli **_niektóre_** obiekty klasy B składają się z obiektów klasy A (a zatem są zależne od czasu życia obiektów klasy A), ale **_niektóre nie są_** \- czy relacja między dwiema klasami w UML może być agregacją lub relacją kompozycji?


title: Uproszczenie optymalnego przekazywania parametrów C++11, gdy potrzebna jest kopia

text: Wydaje mi się, że w C++11 dużo uwagi poświęcono **uproszczeniu zwracania wartości** z funkcji i metod, tj.: dzięki semantyce ruchu można po prostu zwrócić wartości trudne do skopiowania, ale tanie do przeniesienia (podczas gdy w C++98/03 ogólną zasadą było używanie parametrów wyjściowych za pośrednictwem niestałych referencji lub wskaźników), np.: // C++11 style vector<string> MakeAVeryBigStringList(); // C++98/03 style void MakeAVeryBigStringList(vector<string>& wynik); Z drugiej strony wydaje mi się, że więcej pracy należy wykonać przy przekazywaniu parametrów wejściowych, w szczególności gdy **potrzebna jest kopia parametru wejściowego**, np. w konstruktorach i seterach. Rozumiem, że najlepszą techniką w tym przypadku jest użycie szablonów i `std::forward<>`, np. (zgodnie z wzorcem tej odpowiedzi na optymalnym przekazaniu parametrów C++11): class Person { std::string m_name; public: template <klasa T, class = nazwa_typu std::enable_if < std::is_constructible<std::string, T>::value >::type> jawna Osoba(T&& nazwa) : m_name(std::forward<T >(nazwa)) { } ... }; Podobny kod można by napisać dla seterów. Szczerze mówiąc, ten kod wydaje się szablonowy i złożony i nie skaluje się dobrze, gdy jest więcej parametrów (np. jeśli do powyższej klasy zostanie dodany atrybut nazwisko). Czy byłoby możliwe dodanie nowej funkcji do C++11 w celu _uproszczenia_ kodu w ten sposób (podobnie jak lambdy upraszczają kod C++98/03 z funktorami w kilku przypadkach)? Myślałem o składni ze specjalnym znakiem, takim jak `@` (ponieważ wprowadzenie `&&` oprócz `&&` byłoby zbyt dużym pisaniem :) np.: class Person { std::string m_name; public: /* Uproszczona składnia tworząca standardowy kod w następujący sposób: szablon <klasa T, klasa = nazwatypu std::enable_if < std::is_constructible<std::string, T>::value >::type> */ explicit Person (std::string@ name) : m_name(name) // niejawne std::forward również { } ... }; Byłoby to bardzo wygodne również w przypadku bardziej skomplikowanych przypadków obejmujących więcej parametrów, np. Person(std::string@ name, std::string@ nazwisko) : m_name(imię), m_surname(nazwisko) { } **Czy byłoby możliwe dodanie uproszczonej, wygodnej składni takiej jak ta w C++?** Co by to było wady takiej składni?


title: Jak programista Java może w pełni wykorzystać nowy projekt w C lub C++?

text: Jako programista Java chcę nauczyć się C lub C++, pisząc menedżera bazy danych. Oczywiście Java dzieli wiele idiomów z C i C++, ale obydwa niosą ze sobą zupełnie inne wyzwania związane z projektowaniem programów. Szukam sposobu, aby to ćwiczenie było jak najbardziej edukacyjne. **Jakie aspekty podjęcia tego projektu w C lub C++ mogą pomóc mi w podjęciu decyzji, które podejście nauczy mnie najwięcej jako programisty Java?** Jednym z celów tego ćwiczenia byłby przynajmniej podzbiór elementów przestrzennych rozszerzenia w PostgreSQL. Oczywistymi kwestiami do rozważenia byłoby dopasowanie C vs. C++ do: * koncepcji modelowania baz danych w ogóle. * modelowanie w szczególności modelowanie przestrzenne Innym ważnym punktem byłby stopień oczekiwanej różnicy w stosunku do Javy. Czy dobry, idiomatyczny projekt w C++ byłby wystarczająco różny od projektu w Javie, aby uczyć nowych, różnych koncepcji, czy też w większości byłyby to te same koncepcje z nieco inną składnią? Czy dobry projekt w C zawierałby więcej pojęć, które były nowe lub inne niż te w C++?


title: Projekty open-source stron trzecich w .NET i syndromie Ruby i NIH

text: Tytuł może wydawać się podburzający, ale mimo wszystko przykuwa twoją uwagę. Jestem profesjonalnym programistą .NET, ale staram się też podążać za innymi platformami. Ponieważ Ruby jest podekscytowany (głównie z powodu Railsów, jak sądzę), nie mogę nie porównać sytuacji w projektach open-source w Ruby i .NET. Osobiście interesuje mnie to, że programiści .NET w większości cierpią na syndrom NIH i bardzo niechętnie korzystają z cudzego kodu w praktycznie dowolnym kształcie lub formie. Porównując to z Ruby, widzę uderzającą różnicę. Ludzie na świecie mają klejnoty dosłownie za każdy najmniejszy element funkcjonalności, jaki można sobie wyobrazić. Nowe projekty pojawiają się z lewej i prawej strony i generalnie są mile widziane. Po stronie .NET mamy CodePlex, który osobiście uważam za miejsce, w którym porzucone projekty starzeją się i ostatecznie zostają porzucone. Teraz na pewno jest kilka znanych i utrzymywanych projektów, ale liczba tych blednie w porównaniu z Ruby. To prawda, że NIH po stronie deweloperów .NET wynika głównie z faktu, że istnieje bardzo niewiele projektów .NET o wysokiej jakości, nie mówiąc już o projektach, które rozwiązują ich specyficzne potrzeby, ale nawet jeśli taki projekt istnieje, często jest źle widziany i jest wynaleziony na nowo we własnym zakresie. Więc moje pytanie jest wielorakie: * Czy uważasz, że moje obserwacje są bliskie poprawności? * Jeśli tak, jakie są Twoje przemyślenia na temat jakości i ilości projektów OSS w .NET? * Ponownie, jeśli zgadzasz się z moimi przemyśleniami na temat „NIH w .NET”, jak myślisz, co to powoduje? * I wreszcie, czy to zestaw funkcji i punkt widzenia społeczności Rubiego (dynamiczny język, silny nacisk na testowanie) pozwala na tak łatwą integrację kodu stron trzecich?


title: Usuwanie zależności od zachowania specyficznego dla podklasy

text: Mam klasę `Message`, która może zawierać wiele typów ładunku (lub czasami nie ładunku), z których każdy pochodzi ze wspólnej klasy `Payload`. Jednak staje się to problematyczne, ponieważ klasa `Message` chce wiedzieć o podklasach `Payload` z różnych powodów, takich jak: * Sprawdzanie równości `Message` if (części wiadomości poza ładunkiem są równe) { switch(type) { case Payload::Type::RESPONSE: return *static_cast<OdpowiedźPayload*>(payload.get()) == *static_cast<OdpowiedźPayload*>(o.payload.get()); przerwanie; case Payload::Type::SETUP: return *static_cast<SetupPayload*>(payload.get()) == *static_cast<SetupPayload*>(o.payload.get()); przerwanie; ... } } * Deserializacja (ponieważ metody deserializacji są statyczne, ponieważ ładunki są niezmienne) switch(type) { case Payload::Type::RESPONSE: load = ResponsePayload::fromJSON(payloadValue); przerwanie; case Payload::Type::SETUP: load = SetupPayload::fromJSON(payloadValue); przerwanie; ... case Ładunek::Typ::START: case Ładunek::Typ::STOP: case ...: break; // Load pozostaje null default: THROW(Exception, "Błąd w logice programu: zapomnieliśmy przeanalizować część ładunku"); } * Zapewnienie, że `Payload` jest dołączony do `Message` podczas jego konstruowania: switch(type) { case Payload::Type::RESPONSE: case Payload::Type::SETUP: case ...: ENFORCE(IOException, payload != nullptr, "Dla tego typu wiadomości wymagany jest ładunek."); przerwanie; case Payload::Type::START: case Payload::Type::STOP: case ...: ENFORCE(IOException, payload == nullptr, "Dla tego typu wiadomości ładunek powinien mieć wartość null"); przerwanie; default: THROW(Wyjątek, "Błąd w logice programu: zapomnieliśmy obsłużyć część ładunku"); } W mojej głowie rozbrzmiewają dzwonki alarmowe - to narusza SOLID, jakby nie było jutra, i oczywiście nie skaluje się dobrze, ponieważ muszę dodawać instrukcje `case` za każdym razem, gdy dodaję nowy ładunek. Czy mogę przyjąć czystsze podejście?


title: Dlaczego java nie jest używana jako język kompilacji?

text: Jeśli Java jest językiem ogólnego przeznaczenia, a budowanie programu jest czymś, co można opisać za pomocą języka Java, dlaczego nie jest to najlepszy sposób na pisanie plików kompilacji, a zamiast tego używamy narzędzi takich jak Ant, Maven i Gradle? Czy nie byłoby to prostsze, a także nie wymagałoby nauki kolejnego języka programowania? (BTW - to pytanie można również zastosować do innych języków, takich jak C#)


title: Jak używać przestrzeni nazw do oddzielenia interfejsu od implementacji w c++?

text: O ile wiem, możesz udostępnić swój interfejs innym, udostępniając swój plik .h. Twój .cpp to implementacja. Następnie mogą zobaczyć nazwy funkcji, typy parametrów, typ zwracany, może opis, jak używać funkcji, a może to, co robi w pliku .h. Następnie przeczytałem w postach tutaj o używaniu przestrzeni nazw do oddzielenia interfejsu od implementacji. Co to znaczy? Czy przestrzeń nazw nie informuje tylko o tym, że nazwa istnieje w tej przestrzeni nazw? Proszę więc podać przykład, nie mogę go znaleźć.


title: Naucz się HTML5 CSS3 i JavaScript

text: Jaki jest najlepszy sposób na poznanie tych technologii, który umożliwiłby mi zrozumienie wszystkich 3 z perspektywy połączonej, a nie indywidualnej?


title: Które frameworki programistyczne oferują dobre wsparcie wielojęzyczne?

text: Zakładam nową firmę, a nasze oprogramowanie będzie rozwiązaniem SaaS oferowanym gminom na całym świecie. Ich interfejs będzie oparty na sieci. Staram się wymyślić, które frameworki do tworzenia oprogramowania i które platformy programowe byłyby w stanie obsłużyć w pełni wielojęzyczny system. Mam na myśli to, że muszę mieć możliwość obsługi tych samych ekranów w różnych językach natywnych (w tym od prawej do lewej), zarówno do wyświetlania, jak i wprowadzania danych. Chcę mieć jedną aplikację dla wszystkich języków. Muszę być w stanie dość szybko dodawać nowe języki (= brak rozwoju) po skonfigurowaniu systemu. Ponieważ zaczynam od zera, mam przywilej badania i wyboru z wyprzedzeniem, a nie wymuszanie rozwiązania w istniejącej aplikacji. Ponadto mam doświadczenie w prowadzeniu programowania w językach Java, .NET, C++ i C, więc jestem otwarty na korzystanie z każdej technologii, która spełni moje potrzeby biznesowe. Byłbym wdzięczny za rekomendacje z zaletami i wadami.


title: Pytanie o decyzję dotyczącą projektowania klas zagnieżdżonych w Javie

text: Byłem dziś zszokowany, gdy odkryłem, że ten kod kompiluje się czysto w Javie: public class A { public static class B { private static void x() {} } private static class C { private /* A więc do czego dokładnie? */ static void x() {} } public static void main(String[] args) { B.x(); C.x(); } } Wygląda na to, że słowo kluczowe Javy private wskazuje tylko prywatność klasy najwyższego poziomu; co, biorąc pod uwagę ogólną konwencję nazywania plików źródłowych Java według klasy, oznacza, że Java zapewnia tylko widoczność prywatną na poziomie plików, a nie prawdziwą widoczność prywatną. (Odpowiadający kod w C++ nie kompiluje się z błędem widoczności.) Czy ktoś byłby w stanie wyjaśnić, dlaczego Java została zaprojektowana w ten sposób? A może to tylko sposób Javy, który mówi wszystkim, żeby nie używali klas zagnieżdżonych? (To z pewnością włamuje się do implementacji dwukierunkowej relacji przyjacielskiej w C++, ale mamy już na to widoczność na poziomie pakietu; wydaje się to uniemożliwiać jednokierunkowy równoważnik. Co więcej, wymaga to od kompilatora stworzenia większej liczby ukrytych metod dostępu do omijać widoczność i pod maską obniżać poziom kontroli widoczności klas zagnieżdżonych, aby wszystko to nie popełniło błędu w czasie wykonywania. Naprawdę, po co problem?)


title: Promocja lub Demotywacja

text: Od 3 lat pracuję jako programista, ostatnio moja firma wypromowała mnie na kierownika projektu. Teraz mam problemy z zarządzaniem zasobami i nie czuję się komfortowo jako menedżer i chcę kontynuować swój zawód jako programista. Rozmawiałem z moim dyrektorem, aby wycofał się z roli programisty, ale zmusił mnie do kontynuowania pracy jako kierownik projektu, ponieważ jest to jeden krok do przodu od programowania. Teraz zasugeruj mi, co mam zrobić?


title: Czy aktywnie myślisz o bezpieczeństwie podczas kodowania?

text: Czy podczas kodowania aktywnie myślisz o tym, że Twój kod może zostać wykorzystany w sposób, do którego pierwotnie nie był przeznaczony, a tym samym uzyskać dostęp do chronionych informacji, uruchomić polecenia lub coś innego, czego nie chciałbyś, aby robili użytkownicy?


title: czy praca lidera zespołu może być kiedykolwiek wykonywana zdalnie?

text: Obecnie jestem programistą. Jako kolejny kamień milowy w mojej karierze myślę, że muszę zostać liderem zespołu, który prowadzi mały zespół programistów w celu spełnienia rezultatów, wdrożeń itp. Czytałem różne posty w tej witrynie, które omawiają zalety i wady Praca z domu. Ale nie jestem pewien, czy ten aspekt był dość dyskutowany/debatowany. Nie wszedłem w rolę lidera zespołu per se, ale chciałbym wiedzieć, jakie obowiązki wiążą się z tytułem i czy (i jak) można nimi zarządzać pracując w domu.


title: Jak organizujesz swoje lokalne środowisko programistyczne?

text: > **Możliwe powielenie:** > Jak organizujesz foldery projektów? Chciałabym dowiedzieć się, jak każdy organizuje swoje projekty rozwoju lokalnego w logiczny sposób. Co robisz, aby Twoje projekty deweloperskie były zorganizowane w sposób, który pozwala łatwo znajdować rzeczy?


title: Dwa powiązane, ale niezależne projekty -- Dwa repozytoria czy jedno?

text: Zrealizowałem dwa "komplementujące" projekty. Te dwa projekty są samodzielne, ale są prawie zaprojektowane do wspólnego użytkowania. Są to również dość małe projekty. Chcę hostować kod na GitHub, ale nie jestem pewien, czy powinienem użyć do tego dwóch repozytoriów, czy jednego. Jak myślisz, co powinienem zrobić?


title: Dlaczego jest taka konwencja składni?

text: W książce (APress Ganesh / Sharma) jest napisane o Javie 7: > Tworzysz metodę o nazwie `fill()` w klasie Utilities z tą > deklaracją: > > > public static <T> void fill(List<T> list, T val) > > > W tej metodzie deklarujesz parametr typu ogólnego `T`. Po kwalifikatorach > `public` i `static` wstawiasz `<T>`, a następnie > zwracany typ, nazwę metody i jej parametry. Ta deklaracja różni się > od klas ogólnych — parametry typu ogólnego podaje się po nazwie klasy > w klasach ogólnych. Ale dlaczego `<T>` jak w `public static <T>` ? Składnia wygląda dziwnie i nie występuje nigdzie indziej w języku Java. Co w tym przypadku oznacza `<T>` i dlaczego jest używany?


title: Czy tablica PHP jest przykładem dynamicznej struktury danych?

text: Odrobiłem pracę domową i mówi, że dynamiczne struktury danych to „struktury danych, których rozmiar zmienia się w zależności od potrzeb programu poprzez alokację i dealokację pamięci ze sterty”. Zastanawiałem się więc, czy tablice PHP są przykładami dynamicznych struktur danych, czy są ograniczone do drzew binarnych i podwójnie połączonych list? Dziękuję.


title: Interfejsy w stylu Go + wiele metod ma sens?

text: Myśląc o projektowaniu potencjalnego nowego języka, zastanawiam się, jak powiązane są koncepcje budowy OO podobnego do interfejsów GO i wielu metod (dostaję to z http://docs.julialang.org/en/latest/manual/ metody/). Jeśli dobrze rozumiem, interfejsy to po prostu grupa metod, które muszą być zaimplementowane przez każdego potomka, a wiele metod zapewnia dobry sposób na ich specjalizację bez zbytniego tworzenia schematów lub rzutowania. Jednak czy moja intuicja, że obaj mogą dobrze współpracować, ale zastanawiam się, czy to prawda. Na przykład, jeśli interfejs zadeklaruje: type Animal interface { Speak() string } func (d Dog) Speak() string { return "Woof!" } ale w julia jest bardziej jak: speak(x::Dog) = return "Hau!"; Więc wydaje się, że obaj robią to samo, ale inaczej. Będzie bałagan zrobić jedno i drugie? Kiedy to może mieć sens? Ponadto, co sprawia, że ścieżka jest „lepsza”, jeśli trzeba używać tylko jednej?


title: Jakie jest zastosowanie CORS?

text: Mam system, który musi wykonywać żądania cross-origin i mam problemy ze zrozumieniem znaczenia CORS. Na pierwszy rzut oka wydaje się, że nie zapewnia mi to żadnego rodzaju bezpieczeństwa, jakiego potrzebuję dla mojej usługi. 1. Ponieważ CORS jest honorowany tylko po stronie klienta, mój serwer nadal nie może przyjmować żadnych założeń dotyczących żądania. Nie ma gwarancji, że żądanie pochodzi z przeglądarki, dlatego nagłówki CORS nie mogą być używane jako kontrola dostępu. 2. Serwer docelowy decyduje, kto może z nim rozmawiać, a serwer pochodzenia nie ma kontroli. Mój JavaScript nie jest również bezpieczny dla klienta i może ulec zmianie. Złośliwy serwer może po prostu zaakceptować wszystkie żądania CORS, a tym samym wszystkie dane mogą wyciekać z mojej aplikacji. Widzę tylko wąski zakres, w którym CORS jest rzeczywiście pomocny. To jest scenariusz podobny do Facebooka. Domyślne ograniczenia cross-origin uniemożliwiają złośliwej stronie wysyłanie żądań do Facebooka w imieniu użytkownika. CORS po prostu pozwala na to niektórym domenom. Jednak nadal nie widzę tutaj wartości w CORS, ponieważ prosta konfiguracja DNS pozwoliłaby na to samo zachowanie. Więc czego mi brakuje w CORS? W jakich scenariuszach jest to istotne i korzystne w użyciu (w porównaniu z prostymi rekordami DNS CNAME)?


title: ile pamięci powinna używać aplikacja na Androida

text: Planujemy stworzyć aplikację na Androida. aplikacja będzie korzystała z API, a transfer danych będzie się odbywał przez SSL. Powinienem napisać dokumentację oraz ustawić wymagania funkcjonalne i systemowe dla aplikacji. Jednym z głównych wymagań jest to, ile pamięci ma używać aplikacja. Oczywiście Android OS sam zarządza ilością pamięci przydzielonej do niego w różnych fazach jego aktywności, ale wiele zależy od aplikacji. Czy istnieje jakaś określona praktyka określająca, ile pamięci powinna używać typowa aplikacja na Androida i czy jest ona używana w zaawansowanym świecie rozwoju Androida, np.? aplikacja typu X powinna zajmować nie więcej niż 7 MB jeśli są aktywne? Jak ustawić wymaganie, aby programiści zwracali odpowiednią uwagę na ten konkretny parametr?


title: Lewe sprzężenie MySQL + wydajność

text: SELECT * #Case 1 cp.* #Case 2 FROM crawl_page AS cp LEFT JOIN artist AS a ON cp.cpURL LIKE CONCAT('%',a.artistPageID,'/',a.artistPageURL,'%') WHERE cpPageType = 'SONGS' AND cpPageAdded < ( SELECT cpCrawlDate FROM crawl_page WHERE cpURL = 'http://www.example.com/page-52/' ) AND a.artistID IS NULL LIMIT 1 W tym zapytaniu używam pierwszego przypadku (wybierając wszystko z obu tabel) czas potrzebny na zapytanie wynosi ok 0,468 sek. Ale jeśli zrobię przypadek 2 (wybierając tylko z tabeli głównej), zajmie to cholernie dużo czasu 26 sekund. Użycie przypadku 1 nie jest problemem, ale nie mam pojęcia, jak to działa i dlaczego? Dziękuję


title: Mapowanie wartości na krzywej

text: Mam wartość z zakresu od 0 do 8000 i chcę, aby ta liczba została rozwiązana na inną liczbę z zakresu od 0 do 2000. Mógłbym po prostu podzielić ją przez 4, ale mam tutaj specjalną potrzebę. W przypadku wartości powyżej 4000 chcę, aby zmapowana wartość była przesunięta w kierunku 2000. Ale dla wartości niższych niż 4000 chcę, aby zmapowana wartość była przesunięta w kierunku 0. W rzeczywistości dotyczy to gry, w której otrzymujesz punkty bonusowe od 0 do 2000 w zależności od jak szybko wykonasz zadanie. Więc jeśli jesteś bardzo szybki i robisz to w 7500 milisekund, powinieneś zdobyć 1875 punktów (dokładnie 7500/4). Jeśli zrobisz to w 6000 milisekund, otrzymasz 1450 punktów (nieco poniżej 6000/4). Jeśli jesteś wolny i robisz to w 1000 milisekund, otrzymasz 50 milisekund (znacznie poniżej 1000/4). Chodzi o to, aby bardziej nagradzać szybkich graczy niż wolnych, ale nadal pozwalać wolnym graczom czuć, że coś osiągnęli. Czuję, że „złagodzone” mapowanie wartości pozwoliłoby to osiągnąć. Mam nadzieję, że to ma sens. Czy możesz mi pomóc znaleźć kod, który to osiąga?


title: Fortran 90 - Jak stworzyć układ współrzędnych

text: Czyli muszę napisać prosty program i muszę zdefiniować współrzędne 2D? Czy jest jakiś układ współrzędnych, którego mogę używać w Fortranie? Powiedziano mi, że może to być wszystko w tablicach? A jeśli tak, czy ktoś może popchnąć mnie we właściwym kierunku, jak ustawić tablice 2d? Wielkie dzięki.


title: Dlaczego inteligentne wskaźniki zliczające referencje są tak popularne?

text: Jak widzę, inteligentne wskaźniki są szeroko stosowane w wielu rzeczywistych projektach C++. Chociaż pewien rodzaj inteligentnych wskaźników jest oczywiście korzystny do obsługi RAII i przenoszenia własności, istnieje również tendencja do używania wspólnych wskaźników _domyślnie_ , jako sposobu _"odśmiecania"_ , aby programista nie musiał myśleć o alokacji tak dużo. Dlaczego współdzielone wskaźniki są bardziej popularne niż integracja odpowiedniego odśmiecacza, takiego jak Boehm GC? (A może w ogóle zgadzasz się, że są one bardziej popularne niż rzeczywiste GC?) Wiem o dwóch zaletach konwencjonalnych GC nad liczeniem referencji: * Konwencjonalne algorytmy GC nie mają **problemu z cyklami referencyjnymi**. * Liczba referencji jest generalnie **wolniejsza** niż w przypadku prawidłowego GC. Jakie są powody używania inteligentnych wskaźników zliczających odwołania?


title: Perspektywy pracy dla doświadczenia w projektach open source

text: Chciałbym wiedzieć, czy doświadczenie zawodowe w projektach Open Source naprawdę poprawi perspektywy/wznowienie pracy programisty inne niż jego praca w ciągu dnia w programowaniu lub robienie certyfikatów jest więcej niż wystarczające dla programisty?


title: Zastosowanie licencji LGPL na prostym algorytmie

text: Niepokoi mnie "zakres" licencji GNU: wiem, że odpowiedź na to pytanie była wielokrotnie (tu, tutaj,...), ale czy nie powinniśmy brać pod uwagę złożoności i oryginalności kodu przed użyciem licencji GPL? Wyjaśniam: pracuję nad projektem peta przy użyciu algorytmu DTW, który napisałem w C używając pseudokodu podanego na stronie wikipedii. W pewnym momencie zdecydowałem się zmienić go na implementację C++ (tylko dla doskonalenia moich umiejętności c++). Po wykonaniu tej czynności szukałem istniejącej implementacji w sieci, aby porównać jej "czystość" i znalazłem tę: Implementację Vectored DTW, która jest częścią limproved, biblioteki C++ na licencji GPL v3 . Osobiście nie mam nic przeciwko licencji GNU, ponieważ jest to osobisty projekt, który nigdy nie doprowadzi do żadnego komercyjnego celu, ale **Zastanawiam się, czy ta implementacja może wytrzymać firmy używające jej do otwierania swojego kodu** (i inne uprawnienia FOSS ). Teoretycznie myślę, że może (może się mylę :p ), ale algorytm, o którym mowa jest tak prosty (i stary), że nie powinien.


title: V.S. po stronie klienta Wyszukiwanie po stronie serwera?

text: Obecnie pomagam w projektowaniu strony internetowej i aplikacji w HTML. Chcielibyśmy, aby użytkownik mógł przeszukiwać witrynę/aplikację w poszukiwaniu żądanej treści za pomocą paska wyszukiwania. Chcielibyśmy również uwzględnić zaawansowaną funkcję wyszukiwania, aby umożliwić różne opcje wyszukiwania i bardziej skoncentrowane wyszukiwania. Mamy problem z podjęciem decyzji, czy programować funkcję wyszukiwania po stronie klienta (za pomocą JavaScript) czy po stronie serwera (za pomocą PHP). Jakie są zalety i wady obu i co polecasz?


title: Złożoność obliczeniowa korelacji w czasie a mnożenie w przestrzeni częstotliwości

text: Zajmuję się korelacją 2d dla technik przetwarzania obrazu (rozpoznawanie wzorców itp...). Zastanawiałem się, czy istnieje teoretyczne podejście do tego, jak powiedzieć, kiedy użyć mnożenia w przestrzeni częstotliwości w stosunku do korelacji w przestrzeni czasu. Dla rozmiarów 2x częstotliwość przestrzeń jest oczywiście szybsza, ale co powiesz na małe, pierwsze rozmiary, takie jak np. 11?


title: Czy ucząc się Androida, powinienem skupić się na najnowszych i najlepszych?

text: Jestem programistą Java i zamierzam rozpocząć pracę z systemem Android, aby zapoznać się z aplikacjami mobilnymi. Pracowałem z zestawami narzędzi Ajax, ale nie robiłem żadnego programowania mobilnego. Widziałem ogromną zmianę w rozwoju niektórych zestawów narzędzi, w których krzywa uczenia się naprawdę skacze, jak w GWT 1.5 w porównaniu z 2.4. Na razie chcę tylko wskoczyć i poznać podstawy (wraz z najlepszymi praktykami). Nie wiem, czy Android 2 w porównaniu z wersją 4 by to zrobił, ale wersja 4 może po prostu wrzucić dodatkowe funkcje, o których być może nie będę musiał na razie wiedzieć i odejść od mojego głównego zainteresowania. Czy lepiej jest skorzystać z najnowszej wersji Androida, czy, aby upewnić się, że podstawy są omówione, wziąć starszą wersję, która byłaby łatwiejsza do zdobycia i rozpoczęcia programowania?


title: Jak korzystać z repozytorium Subversion w repozytorium Git?

text: Tworzę projekt w Git. IT zależy od innego projektu, który znajduje się w repozytorium Subversion. Chciałbym móc dokonywać zmian w projekcie Subversion w drzewie i zatwierdzać/aktualizować z repozytorium Subversion z poziomu projektu Git. Czy to jest możliwe?


title: Co zrobić, gdy żądanie jest wysyłane do serwera i podczas oczekiwania na odpowiedź utracono połączenie internetowe?

text: Wysyłam na serwer ogromną ilość danych. Teraz, gdy wysłałem dane i czekałem na odpowiedź serwera, nagle moje urządzenie z Androidem traci połączenie z Internetem. Kiedyś pokazywałem okno alertu o utracie połączenia, ale po stronie serwera dane były już przetworzone i gdzieś się zaktualizowały. pod dowolnym adresem URL. Ale mój telefon z Androidem tego nie wie, ponieważ nigdy nie otrzymał odpowiedzi. Jak to rozwiązać. Czy można to zrobić po stronie serwera, czy na samym Androidzie Jak? Skąd serwer wiedziałby, że telefon z Androidem nie będzie słuchał odpowiedzi? Może to być perspektywa optymalizacji komunikacji klient-serwer.


title: metoda szacowania na „właśnie zakończonej fazie definiowania”

text: Zasadniczo używamy metodologii cyklu życia wodospadu. Analiza wymagań: otrzymuję przypadek użycia stworzony przez kogoś innego. Projekt (mówię tylko o projektowaniu niskopoziomowym): Mam małe wyczucie, jak bym go zaprojektował, może to nastąpić natychmiast/lub po pewnym czasie. Kodowanie + testowanie jednostkowe: W przypadku testów jednostkowych nie używam żadnego TDD, ale staram się uzyskać pełne pokrycie kodu, poprzez mocki itp. po zakończeniu kodowania. O kosztorys jestem pytany zaraz po przejrzeniu Wymagań. Ponieważ mam tylko spore pojęcie o tym, jak będzie wyglądał projekt, nie mam możliwości powiedzenia o szacunkach. Jeśli chodzi o część kodowania, to w jaki sposób mogę uzyskać całkowitą liczbę metod w „właśnie zakończonej fazie definiowania” (nigdy nie wiem, ile będę refaktoryzacji na tym etapie), Testy jednostkowe z pełnym pokryciem kodu: t napisał kod, a następnie Skąd mam wiedzieć, ile zachowań jest do przetestowania dla jednej metody, a co za tym idzie czasu. Czy jest jakiś naukowy sposób/lub inny sposób, aby to wiedzieć na tym etapie? **Uwaga:** Przeczytałem już to możliwe podobne pytanie. Mogę rozbić wszystkie moje zadania na małe jednostki, ale mam problem z oszacowaniem dla każdej jednostki. **Edit1** To też jest część mojego problemu, wszystko zaczęło się stąd. Nasza Organizacja również testowała jednostki (lub poprawnie mówiąc wykonane testy integracyjne) ręcznie lub za pomocą emulatorów itp. Tak więc za każdym razem, gdy pojawią się jakieś ulepszenia dla konkretnego klienta, musisz ponownie utworzyć dane testowe, a co z jakimikolwiek przełomowymi zmianami, które wprowadziłeś. Tak więc przedstawiam Automated Unit Testing, ale teraz znowu pojawia się problem z poprawnym oszacowaniem, które jest konieczne, aby dać organizacji dalekowzroczny pogląd na „oszacowanie czasu tworzenia zestawu testów z kodem” w prostych słowach tworzonych dla zespołu walidacyjnego. Życzliwa pomoc.


title: Bardzo luźne łączenie i wstrzykiwanie zależności do zarządzania bazą danych

text: Obecnie konfiguruję bazę danych MongoDB dla aplikacji internetowej. Używam node.js i używam Mongoose do pomocy w zarządzaniu mapowaniem, walidacją ect. Zastanawiam się, czy to dobry pomysł, aby naprawdę oddzielić MongoDB od mojego kodu, tylko jeśli nie mamy szansy, aby nieco później przełączyć się na coś takiego jak CouchDB. W szczególności stworzyłbym moduł `databaseManger`, który jest odpowiedzialny za konfigurację Mongoose/Mongo, definiowanie modeli Mongoose, zarządzanie zestawami replik i wykonywanie dodatkowej walidacji. Ten menedżer wyeksportuje ogólny interfejs API i wewnętrznie zajmie się szczegółami zapytań. Menedżer byłby następnie przekazywany przez wstrzykiwanie zależności. Czy to ma sens? A może przerabiam niektóre funkcje mangusty? Wszelkie porady są mile widziane.


title: Połącz dwa różne wywołania API w jedno

text: W moim projekcie django mam dwie różne aplikacje. Jeden to „komentarz”, a drugi to „pliki”. Komentarz może zapisać dołączony do niego plik. Obecny sposób tworzenia komentarza z załącznikami to wykonanie dwóch wywołań API. Pierwszy tworzy rzeczywisty komentarz i odpowiada identyfikatorem komentarza, który służy jako klucz obcy dla plików. Następnie dla każdego pliku tworzone jest nowe żądanie z identyfikatorem komentarza. Należy pamiętać, że plik jest ogólną aplikacją, której można używać również z innymi aplikacjami. Jaki jest najczystszy sposób przekształcenia tego w jedno wywołanie API? Chcę mieć to jako pojedyncze wywołanie API, ponieważ jestem w sytuacji, w której muszę wysłać użytkownikowi wiadomość e-mail ze wszystkimi plikami jako załącznikiem po dodaniu komentarza. Wiem, że kolejkowanie to idealny sposób na zrobienie tego. Ale nie mogę teraz dodawać kolejek do naszego stosu. Więc to był jedyny sposób, jaki mogłem wymyślić.


title: Przepływ pracy na serwerach deweloperskich i produkcyjnych dla konsekwentnie aktualizowanej strony internetowej

text: Mamy trzech programistów, jednego administratora systemu i artystę, którzy pracują głównie na jednej stronie internetowej (forum) w wolnym czasie, aby konsekwentnie rozwijać funkcje forum (ale są inne projekty, nad którymi pracujemy). Ponieważ nasz administrator systemu niedawno dołączył, zrezygnowaliśmy z zarządzanego hostingu dla jednego serwera i zdecydowaliśmy się wynająć dwa niezarządzane serwery (jeden do testów, a drugi do produkcji). Na starym serwerze po prostu używaliśmy Gita jako pośrednika do przesyłania aktualizacji od niezunifikowanego zespołu programistów na serwer bez konfliktowych aktualizacji. Pobierz inne aktualizacje dla programistów. Prześlij nasze własne aktualizacje. Cofnij, jeśli coś się zepsuje. Ponieważ mamy teraz dwa serwery, planujemy przesyłać aktualizacje na serwer deweloperski i jakoś przekazywać aktualizacje na serwer produkcyjny. Deweloper(y) -> serwer deweloperski (nagi) -> serwer produkcyjny Chcemy przechowywać repozytoria na serwerze deweloperskim, a drzewo robocze serwisu WWW na serwerze produkcyjnym (serwerze WWW). Czy istnieje skuteczny sposób na zrobienie tego bez przechodzenia z serwera deweloperskiego do produkcyjnego? Czy ogólnie istnieje lepszy przepływ pracy dla dwóch serwerów? PS Zespół programistów składa się z nastolatków ze szkół średnich i kilku uczniów, którzy nigdy nie pracowali w zespołach dla firm nastawionych na zysk.


title: Gra, aby zdecydować, który członek zespołu zajmie miejsce przy oknie w uczciwy sposób

text: Podczas tworzenia drużyny mamy konflikt, w którym 2 deweloperów naprawdę chce tego samego pożądanego miejsca przy oknie z bujnym widokiem na zatoczkę i las. W jakiej grze/aktywności możemy ich umieścić, aby: 1. Zdecydować, kto zajmie miejsce 2. Zapewnić losową (nieopartą na umiejętnościach) szansę na wygraną 3. Pozwolić obu członkom zespołu na udział w selekcji 4. Nie być gra dla jednego gracza udająca grę dla dwóch graczy (na przykład losowanie słomek - wynik jest oparty na działaniach pierwszego gracza, gdy są tylko 2 osoby)


title: Jak zaprojektować usługę sieciową RESTful, aby korzystać z uwierzytelniania stron trzecich (np. Google, Facebook, Twitter)?

text: Do mojej pracy mamy fajny serwis internetowy REST, który zbudowaliśmy, którego używamy do prowadzenia kilku posiadanych przez nas witryn. Zasadniczo usługa internetowa umożliwia tworzenie i pracę z biletami pomocy technicznej, a witryna internetowa jest odpowiedzialna za interfejs. Wszelkie żądania usług internetowych wykorzystują nagłówek auth, którego używamy do sprawdzania poprawności użytkownika i jego hasła przy każdym wywołaniu. W tym roku zamierzamy rozszerzyć nasze opcje logowania, aby użytkownicy na stronie mogli logować się za pośrednictwem Google, Twittera i Facebooka (ewentualnie innych). Jednak mam wiele problemów z ustaleniem, jak to zaprojektować, aby usługa internetowa mogła korzystać z zewnętrznych dostawców uwierzytelniania, aby upewnić się, że użytkownicy są tym, za kogo się podają. Czy istnieją jakieś najlepsze praktyki, jak to zrobić? Obecnie myślimy o tym, aby strona internetowa samodzielnie obsługiwała uwierzytelnianie użytkowników, a następnie używała nowego wywołania setSessionId, które rejestruje ich bieżącą sesję w zapleczu webservice. Każde dodatkowe żądanie do usługi sieciowej przekaże ten identyfikator sesji i zweryfikuje go. Wydaje się to w porządku, ale mam wrażenie, że nie zastanawiam się nad tym i całe moje przeglądanie forum i czytanie specyfikacji Oauth i Openid tylko bardziej mnie dezorientuje. Jakieś wskazówki, jak sobie z tym poradzić?


title: Redukcja sprzężenia w serii zadań

text: Pracuję teraz nad pewnym kodem, który obejmuje przetwarzanie żądań użytkowników. Każde żądanie wymaga zatwierdzenia. Po złożeniu wniosku jeden lub więcej rekordów jest tworzonych w bazie danych rejestrujących, co pociąga za sobą żądanie. Następnie tworzony jest bilet i umieszczany w kolejce roboczej osoby zatwierdzającej. W przypadku typowego żądania zatwierdzenie go obejmuje następujące kroki: 1. Żądanie jest przetwarzane (zwykle skutkuje aktualizacją tabeli) 2. Zmiany są rejestrowane w tabeli historii (kontrola rekordów). 3. Wniosek zostaje oznaczony jako zatwierdzony przez osobę zatwierdzającą (kontrola zatwierdzająca). 4. Bilet jest usuwany z kolejki pracy. 5. Pierwotny wnioskodawca otrzymuje wiadomość e-mail z informacją, że jego prośba została zatwierdzona. Mamy jedną klasę, która uruchamia te kroki sekwencyjnie w ramach transakcji (http://martinfowler.com/eaaCatalog/transactionScript.html). W większości kolejność tak naprawdę nie ma znaczenia, a e-mail nie jest tak naprawdę istotny. Problem w tym, że każda z tych klas ma co najmniej 5+ zależności (w rzeczywistości jest bliżej 10+). Jestem zaskoczony, jak zmniejszyć liczbę zależności, jeśli chodzi o taki przepływ pracy. Myślałem o zgrupowaniu niektórych z tych elementów razem, ale nie ma logicznego grupowania. I tak nie widzę sensu w tworzeniu takiej niepotrzebnej warstwy. Myślałem też o zrobieniu jakiegoś wzorca obserwatora (zdarzenia .NET). Klasa na wyższym poziomie może nasłuchiwać zdarzenia, tworzyć instancje potrzebnych klas i rozpoczynać je. Jednak ta „klasa wyższa” byłaby znowu zależna od wszystkich klas, więc byłbym z powrotem w tej samej sytuacji. Tak więc jedynymi sposobami, w jakich mogłem wymyślić zmniejszenie liczby zależności, jest albo sztuczne grupowanie klas, albo po prostu uczynienie tego problemem warstwy powyżej. Nie wydają się idealne i zastanawiam się, czy czegoś mi brakuje. Jeśli to pomaga, używam Ninject z ASP.NET MVC. Mam dostęp do kontenera IOC (`DependencyResolver`). Zastanawiam się, czy rozwiązaniem jest jakaś kombinacja między wykorzystaniem słuchaczy/zdarzeń i kontenera IOC.


title: Jak zostać programistą z pasją?

text: Chcę wiedzieć, jak zostać `namiętnym programistą`? Na czym „ktoś musi się skupić, aby być dobrym programistą”?


title: Klonowanie istniejącego oprogramowania w celach komercyjnych – implikacje prawne

text: Poproszono mnie o sklonowanie istniejącego oprogramowania dla firmy. Zasadniczo jest to stara 16-bitowa aplikacja konsolowa DOS, która była dostarczana bezpłatnie pod koniec lat 80-tych. Po wymianie maszyny, która musi ją uruchomić, na komputer z systemem Win7 x64 nie mogą go uruchomić. Awarie co kilka minut pod DOSboxem. Wydaje się, że firma, która je dostarczyła, już nie istnieje - gdyby to zrobili, firma, która mnie o to poprosiła, prawie na pewno by o tym wiedziała. Nie wiadomo, czy zniknęły całkowicie, czy po prostu handlują pod inną nazwą. Jeśli wydaje się, że ci ostatni wycofali się z rynku związanego z tym produktem (bo znowu, obszar niszowy, **powinniśmy** wiedzieć o wszystkich tam). Jaki jest status tego w odniesieniu do praw autorskich itp.? Głównym problemem dla zaangażowanej firmy jest to, że chcą identycznego interfejsu do tego, który już mają, więc musiałbym to całkowicie sklonować. Nie mając kodu źródłowego/wskazań podstawowych mechanizmów, zostałyby napisane od zera. Czy interfejs jest objęty prawami autorskimi? / Czy to nadal trwa 30 lat później? Jaka jest zakładana licencja, gdy w ogóle jej nie ma? Czy zgodnie z brytyjskim prawem byłbym narażony na poważne ryzyko, gdybym podjął się tego projektu? Jak by to potoczyło się, gdybym zdecydował się sprzedać oprogramowanie innym firmom? Dziękuję


title: Gdzie znajduje się mój schemat bazy danych w MVC?

text: Zaczynam sprawdzać pliki SQL w celu utworzenia/utrzymania naszej bazy danych. Wcześniej pliki SQL były całkowicie oddzielone od kontroli wersji naszej bazy kodu. Chciałbym pragmatycznie przechowywać moje pliki budowy/manipulacji bazami danych z moim innym kodem. Czy mają największy sens w podkatalogu moich modeli, czy jako osobny katalog? W większości instrukcje SQL _są_ danymi, do których mają dostęp moje modele, ale inne rzeczy to skrypty konserwacyjne ect; rzeczy, które nie pasują pragmatycznie do mojej struktury folderów MVC.


title: Czy powinienem dołączyć zależności, dla których mam źródło jako projekty w moim rozwiązaniu?

text: Mamy różne projekty w zakresie kontroli kodu źródłowego aplikacji internetowych i desktopowych. Niezmiennie wielu z nich korzysta z zewnętrznych projektów open source lub nawet wspólnych bibliotek w naszej organizacji jako zależności. Czy powinniśmy uwzględniać pełne projekty tych zależności w naszych różnych rozwiązaniach? A może powinniśmy po prostu dołączyć odwołanie .dll (lub równoważny skompilowany plik binarny) i utrzymywać źródło wspomnianej zależności w innym miejscu (powiedzmy, tylko do celów debugowania)? W szczególności myślę o projektach i rozwiązaniach .NET w Visual Studio, ale zachęcam do zastąpienia tych terminów JAR lub innym odpowiednikiem w innych językach i frameworkach. Aby dokładniej sprecyzować, pytam, czy [fikcyjne] drzewo rozwiązania Invoice Payments Web App powinno wyglądać tak: * InvoicePaymentsWeb * InvoicePaymentsDataModel * InvoicePaymentsServices * RickSoftUltraDataGrid * MyCompanyCommonWebLib I możesz indywidualnie skompilować (lub zmienić) różne zależności, ponieważ istnieją one całkowicie w Twoim rozwiązaniu. W przeciwieństwie do posiadania pierwszych trzech projektów, odwoływania się do skompilowanych bibliotek DLL pozostałych dwóch i posiadania źródła dla pozostałych dwóch istnieje w innym miejscu na komputerze (lub w innym miejscu w kontroli źródła). Zastanawiam się, czy nie spowodowałoby to potencjalnego złamania rozwoju i/lub konserwacji różnych zależności, ponieważ każde rozwiązanie może mieć własne specyficzne zmiany w źródle, chyba że podstawowa kontrola źródła obsługiwała udostępnianie projektów wewnętrznie. Jakie inne problemy mogą istnieć? Czy byłaby jakaś korzyść?


title: Jakie jest najgorsze pytanie, jakie zadano ci podczas rozmowy kwalifikacyjnej?

text: Nie musi to być związane z programowaniem lub tworzeniem oprogramowania, ale po prostu zapytane podczas rozmowy kwalifikacyjnej o pracę związaną z IT. Wiem, że niektóre pytania „lewego pola” mają na celu sprawdzenie, jak kandydat radzi sobie w nieoczekiwanych i nowych sytuacjach, ale tutaj szukam pytania, które wydaje się być całkowicie niezwiązane z pracą, dla której przeprowadzał rozmowę kwalifikacyjną, lub czymś, co sprawiło, że myślisz "jakie przydatne informacje mogliby uzyskać z mojej odpowiedzi na _to_ pytanie?".