title: Architektura aplikacji

text: przede wszystkim jestem tu nowa i mam nadzieję, że jest to właściwe miejsce na moje pytanie. Mam pytanie o rekomendowaną architekturę projektu. POMYSŁ: Zautomatyzuj niektóre obliczenia dotyczące aerodynamiki. Mam pewne dane wejściowe i muszę je przetworzyć w kilku podkalkulacjach. Takie obliczenie można zobaczyć jako czarną skrzynkę: WEJŚCIE => OBLICZANIE => WYNIKI Niektóre z tych obliczeń są już dostępne jako programy open source, a niektóre muszę sam zaprogramować. To w ogóle nie powinno stanowić problemu. Ale chcę połączyć te obliczenia w elastyczny sposób. Na przykład: WEJŚCIE => OBLICZENIA 1 => OBLICZENIA 2 => OBLICZENIA 3 => WYNIKI Ilość i kolejność obliczeń powinna być zmienna. Czy powinienem widzieć każde obliczenie jako samodzielny program i łączyć je w rodzaj frameworka, w którym mogę określić kolejność i argumenty wywołań programu? A może istnieją inne techniki rozwiązywania takich problemów? Bardzo dziękuję za każdą radę i każdą rekomendację. Sebastiana


title: Komunikacja między widokiem a modelem

text: Mam podstawowy problem z architekturą MVC. Zdaję sobie sprawę, że Widok zazwyczaj słucha Modelu. Ale w jaki sposób żądania użytkowników są propagowane do modelu? Obecnie robię to tak, gdy użytkownik kliknie m.in. przycisk aktualizacji w GUI. Tak więc `ActionListener` wywołuje metodę widoku. Widok wywołuje metodę kontrolera. A Kontroler wywołuje metodę Modelu. Ale mam co do tego trzy zastrzeżenia. * Widok musi być świadomy kontrolera. * Długi łańcuch połączeń wydaje się być niewłaściwą drogą * Wraz z liczbą działań użytkownika liczba tych łańcuchów połączeń rośnie. Jakie są tutaj najlepsze praktyki?


title: Co to jest lokalizator usług?

text: Wszędzie słyszałem określenie pop. Czytałem różne artykuły na ten temat i słyszałem dwie główne definicje terminu "Lokalizacja usługi": 1. Uwielbiony Rejestr - Zła praktyka, zmienne globalne, ogólne zło. 2. Rodzaj kontenera wstrzykiwania zależności — może pomóc w zarządzaniu zależnościami, tworząc aplikacje modułowe i rozszerzalne, ogólnie pomocne. Ale nie potrafię odróżnić tych dwóch. Co tak naprawdę oznacza lokalizacja usługi? Czy możesz podać prosty przykład lokalizatora usług? Czy to dobre czy złe?


title: Złożoność i łatwość konserwacji kodów JavaScript

text: Staram się wrócić do JavaScriptu (byłem tam ostatnio jakieś 7 lat temu) z pomocą ślicznej książki "Eloquent JavaScript". Podziwiając możliwości i podejście autora, zacząłem się martwić. Pochodzę z C/C++ i tam nauczyłem się dość boleśnie, że funky konstrukty często podważają przetrwanie projektu. Doświadczenie z Perlem okazało się inne. Umiejętność wykonywania fajnych sztuczek wydawała się cenną zaletą. **Więc jaki jest powszechny pogląd na złożoność kodu JavaScript. Czy używanie go z „pełną prędkością” (OOP zrobione na swój sposób, funkcje wyższego rzędu wszędzie itp.) pomaga w utrzymaniu projektów?** Dziękujemy za odpowiedzi


title: Czy szybkość jest parametrem odpowiadającym na e-maile z testami technicznymi?

text: Wysyłam swoje CV do różnych firm, a niektóre z nich odpowiedziały, prosząc mnie o wypełnienie testu, aby mieć pojęcie o moich umiejętnościach. Zastanawiam się, czy czas odpowiedzi na tego e-maila jest kluczowym czynnikiem przy wyborze? Mam teraz pracę i muszę poświęcić swój wolny czas, aby odpowiedzieć na te pytania. Tak więc nie wiem, czy powinienem poświęcić czas na uważne odpowiadanie na pytania, czy też próbować odpowiadać na nie tego samego dnia, nawet jeśli oznacza to, że nie powinienem spać zbyt dużo tej nocy.


title: Które atrybuty CSS powinny być w HTML, a które w BODY?

text: Mam następujące: html { overflow-y: scroll; } body { font-family: Georgia, "Times New Roman", szeryf; rozmiar czcionki: 1,125em; wysokość linii: 1,5em; margines: 0 auto; maksymalna szerokość: 41em; } Które atrybuty powinny znajdować się w sekcji HTML, a które w sekcji BODY?


title: Jakich narzędzi mogę użyć do profesjonalnego tworzenia i drukowania dokumentów w PHP?

text: Jestem w trakcie budowy nowego systemu zarządzania zastawami dla jednego z moich klientów, fundacji charytatywnej. Zbudowałem już dla nich jeden (zostało to zrobione przy użyciu Delphi), ale jego zestaw funkcji jest trochę ograniczony. Teraz zdecydowałem się przejść na PHP i wykorzystać framework Laravel do zarządzania bazą danych dla nowego systemu - jego Eloquent ORM pozwala mi w łatwy sposób wdrażać nowe funkcje, które są obecnie potrzebne. To dobrze i dobrze – wiem wszystko, co muszę tam zrobić. Nie jestem jednak pewien, w jakim kierunku obrać kierunek, jeśli chodzi o tworzenie, zapisywanie i drukowanie dokumentów, które będą dostarczane ręcznie do darczyńców. W tej chwili używał Worda do przetwarzania dokumentów - tj. tworzenia faktur, listów gratulacyjnych i wszelkich innych szablonów, które można wybrać podczas składania zastawu. Chodzi o to, że nie jestem bardzo zadowolony z wdrożenia i nie wierzę, że to najlepsza droga. Zdarzało się, że dokumenty nie były drukowane poprawnie lub drukowano wiele dokumentów (gdzie potrzebny był tylko jeden). Niemniej jednak mógłbym trzymać się Worda, pod warunkiem, że PHP poradzi sobie z tym poprawnie i pokaże mi postępy w miarę postępów (tj. **Otwieranie Word** -> **Otwieranie szablonu faktury (firmy)** -> **Zastępowanie zmiennych* * -> **Oszczędzanie** -> **Drukowanie** -> **Zamykanie** -> **Omówienie misji projektu Food Project** -> **Zastępowanie zmiennych** \- > **Oszczędzanie** - > **Drukowanie** -> **Zamknięcie** … itd.). Domyślam się, że powiadomienia o postępach nie są konieczne, ale chciałbym je tam mieć - na wszelki wypadek, gdyby się zawiesił, użytkownik będzie mógł zobaczyć, z czym może się zmagać. Zakładałbym, że mógłbym to zrobić za pomocą skryptu jQuery (z AJAX), który łączy się ze skryptem PHP, ale szczerze mówiąc nie mam pojęcia, jak to zrobić. (Uwaga: musiałbym użyć AJAX, ponieważ Laravel używa buforowanego wyjścia.) Wiem również, że mógłbym przekazać informacje o zastawie do pliku EXE, który sam obsłuży drukowanie, ale nie sądzę, abym chciał użyj tej implementacji, ponieważ mam plany, aby system był wieloplatformowy. **Pytanie 1:** Czy istnieje pakiet dla PHP, który pozwala mi tworzyć dokumenty, zapisywać je, a następnie drukować? Jeśli nie, czy istnieje odpowiedni pakiet, który bez trudu radzi sobie z programem Word i z szeroką gamą funkcji? Jeśli to drugie, musiałbym mieć dostęp do pełnego interfejsu API COM, aby zapobiec pojawianiu się okien dialogowych w tle i wstrzymywaniu procedury. **Pytanie 2:** Czy jest dostępny pakiet (jQuery, AJAX), który pozwoliłby mi śledzić postęp procedury tworzenia dokumentu? **EDYTUJ** Po przeanalizowaniu wszystkiego i rozważeniu za i przeciw, chciałbym tutaj położyć nacisk na **drukowanie**. Gdy użytkownik złoży zastaw do bazy danych, potrzebuję natychmiastowego wydrukowania dokumentu. Niekoniecznie chcę skupiać się tylko na narzędziu do tworzenia dokumentów. Powodem, dla którego zadałem moje pytanie, tak jak to zrobiłem, jest to, że idealnie chciałbym znaleźć coś, co może zarówno tworzyć, jak i drukować każdy dokument. Poza tym nie chcę sobie zbytnio utrudniać. Właśnie dlatego pierwotnie wybrałem Word - i znacznie łatwiej było nim zarządzać z aplikacji Delphi. Z tego powodu zostawię pytanie otwarte (na wypadek, gdyby zaproponowano coś bardzo interesującego), ale zadam nowe pytanie, które jest nieco bardziej specyficzne dla problemu, z którego to pytanie pochodzi. (Tym, którzy do tej pory odpowiedzieli, dziękuję za pomoc i pokazanie mi różnych opcji.)


title: Jak radzisz sobie z szeregami czasowymi .Net?

text: Szukałem modeli Time Series w SO, ale uznałem, że to miejsce jest najlepszą stroną, aby zadać to pytanie. Zastanawiam się, jaki jest „najlepszy” sposób obsługi szeregów czasowych w .Net. Najpierw zdefiniowałbym szereg czasowy jako mapowanie różnych `DateTime` z pojedynczą wartością typu `T`. Wartość może być ewentualnie „null”. Powinno być dostępnych kilka metod, aby można było łatwo manipulować serią. Na przykład chcesz mieć możliwość „filtrowania” danych (na podstawie kryteriów dotyczących dat i/lub wartości). Chciałbyś również mieć metodę `Apply`, która stosuje daną funkcję do wszystkich wartości. Najlepiej byłoby, gdyby niektóre z tych funkcji były uruchamiane równolegle, aby zwiększyć wydajność. Kilka struktur danych już implementuje takie funkcje, takie jak `Dictionary<DateTime,T>`, a być może nawet `SortedDictionary<DateTime,T>`. Są to jednak struktury mutowalne, co może stanowić problem, jeśli występują pewne efekty zamknięcia. Którego modelu by/chciałbyś użyć? Czy znasz istniejącą bibliotekę, która jest już szeroko wykorzystywana do tego celu?


title: Hermetyzacja jednej właściwości

text: Jeśli masz jedną właściwość, która jest istotna w całym projekcie, ale logicznie rzecz biorąc, powinieneś mieć tylko jedną reprezentację, jak byś ją reprezentował? W moim przypadku opracowuję prostą aplikację do rysowania, w której użytkownik może wybrać kolor. Ten kolor powinien być wtedy dostępny dla wszystkich klas pisaków/kształtów w projekcie. Czy po prostu miałbym klasę statyczną ze statyczną właściwością Color CurrentColor (C#), którą każda klasa klienta mogłaby następnie wywołać, czy też istnieje bardziej efektywny sposób?


title: Kontrolery sprężyn i usługi

text: jesteśmy w połowie projektu. To usługa REST. Teraz mamy kontrolerów do obsługi mapowania żądań i przekazywania do usług. Konkretny przykład mamy UserController, GroupController, UserService i GroupService. Kontroler użytkownika ma jako iniekcję UserService, a GroupController ma jako iniekcję GroupService. (zależność jeden do jednego) Kiedy tworzę/aktualizuję/usuwam użytkownika, scenariusz jest prosty: userControllers informuje userService i robi to. Teraz system ma wiele innych kontrolerów/usług, które zostaną dodane. Ale nie wiem: jaki jest najlepszy sposób, kiedy muszę mieszać działanie użytkownika/grupy? Na przykład: muszę dodać użytkownika do grupy. Muszę jednak sprawdzić, czy użytkownik istnieje, czy grupa istnieje i po zapisaniu informacji w użytkowniku (Entity/DTO), że użytkownik jest teraz portem tej grupy. 1) czy mam zarządzać wszystkimi z userController: -userService.checkUser() -groupService.checkGroup() -userService.updateUser() 2) czy mam zarządzać wszystkimi z userService: -userService.addUser() (wtedy w userService : -checkUser() -checkGroup() -updateUser() ) W rozwiązaniu 1 nie podoba mi się wstrzykiwanie jakichś innych usług, które nie należą do użytkowników W rozwiązaniu 2 mam pomysł, że zamierzam powtórz koncepcje, które istnieją w groupServices... Powyższy przykład to tylko niewielka część wspaniałego obrazu. Ale to, co rozumiem, to jak zaprojektować tę część, aby nie miała dużej zależności i dużo replikacji kodu?


title: Potrzebujesz pomocy w zrozumieniu operatora odniesienia (C++) w określonych funkcjach

text: W bieżącym semestrze na uczelni pracujemy nad OOP w C++. Chciałbym zrozumieć różnicę między wskaźnikiem a operatorem odniesienia. Różnice, które rozumiem to: 1\. Nie można zmienić obiektu, z którym powiązana jest zmienna referencyjna 2\. możemy użyć zmiennych referencyjnych do odwoływania się do powiązanego obiektu bez konieczności wpisywania operatora & (w przeciwieństwie do wskaźników, w których napisalibyśmy *pi = 5;) Ponadto, czy zmienna referencyjna zawiera adres powiązanego obiektu do? Na przykład: int i; int &ri = ja; Tutaj ri zawiera adres i? I powód, dla którego przeciążając operator ++ w tym przykładzie wyliczenia używamy operatorów dereferencji lub reference(*) przed nazwą funkcji.


title: Obsługa wyjątków w aplikacji WIn Forms

text: Podczas obsługi wyjątków, na przykład w metodzie w mojej logice prezentacji, można przechwycić wszystkie możliwe wyjątki w jednym bloku catch w następujący sposób, jeśli jedynym celem jest tutaj ostrzeganie użytkownika. private void Do() { try { // Zrób tutaj coś, co może zgłosić wyjątek } catch (Exception e) { MessageBox.Show(e.Message); } } A może powinniśmy zawsze łapać wszystkie możliwe wyjątki (takie jak `OutOfMemoryException`, `NullReferenceException` itp. po których następują bardziej uogólnione wyjątki) w oddzielnych blokach catch ? Ponieważ informacje w e.message nie są istotne dla przeciętnych użytkowników, możemy zrobić coś takiego jak MessageBox.Show("Wystąpił wyjątek i skontaktuj się z administratorem systemu"); Czy to standardowy sposób? UWAGA: Moim jedynym celem jest ostrzeganie użytkownika i próba utrzymania systemu (bez awarii)


title: Jak w ogóle można używać „funkcji mieszających” do implementacji map mieszających?

text: Rozumiem, że mapy haszowe pozwalają nam połączyć, powiedzmy, ciąg znaków, z określoną lokalizacją pamięci. Ale jeśli każdy ciąg miałby być powiązany z unikalnym miejscem w pamięci, potrzebowałby ogromnego bloku pustej pamięci. Nie rozumiem.


title: Najlepszy sposób na umożliwienie użytkownikom/odwiedzającym zmiany projektu strony internetowej

text: To, co staram się zrobić, to dać użytkownikom/odwiedzającym możliwość zmiany całej witryny w oparciu o ich gust. Mogą więc na przykład przesuwać pasek przyklejony z góry na dół, zmieniać kolory tła, okno wiadomości od lewej do prawej itp. Dla użytkowników prawdopodobnie będę przechowywać wszystkie informacje w bazie danych, ale nie jestem pewien, jak mam to później obsłużyć. Czy powinienem przechowywać wszystkie ustawienia w pliku cookie, zamiast cały czas pobierać te informacje z bazy danych i „odbudowywać” witrynę w oparciu o ich gust, czy masz jakiś inny pomysł?


title: Czerwone flagi bezpłatnych praktyk IT

text: Przeczytałem następujące pytanie: Wskazówki dla studenta pierwszego roku CS, który szuka praktyki wakacyjnej, aby zdobyć doświadczenie? Ale zamiast tego, jak zdobyć i/lub szukać staży, moje pytania dotyczą tego, jak filtrować firmy szukające bezpłatnej siły roboczej do zrobienia swojej strony internetowej VS firmy, które mogą nie oferować płatnego czeku, ale zaoferują ci mentoring i umiejętności. Mam kuzynkę, która jest studentką pierwszego roku college'u i szuka stażu w programowaniu, ale w tym momencie desperacko szuka stażu związanego z IT. Poza wielkimi producentami oprogramowania i elitarnymi małymi sklepami z oprogramowaniem, jak rozpoznać dobre praktyki w firmach innych niż IT (dużych lub małych) zajmujących się utrzymaniem IT w porównaniu z tymi złymi? Jeśli nie masz doświadczenia zawodowego, jakie pytania powinien zadać student college'u, aby zapobiec oszustwom? Czy są jakieś czerwone flagi, które możesz zauważyć przed przyjęciem oferty?


title: Django REST + Backbone/Ember/Angular Implementation Method

text: http://stackoverflow.com/questions/10941249/separate-rest-json-api-server-and-client W związku z tym postem chciałem zadać pytania dotyczące Django, a konkretnie metod implementacji jednego z tych klientów technologie do pracy z Django. Obecnie mam backend, który jest konfiguracją, która używa Django Rest Framework do serializacji danych. Mój problem polega jednak na tym, że nie jestem pewien, jak uzyskać dostęp po stronie klienta do zaplecza. Django to framework MVC. Początkowo myślałem, że mogę po prostu wyjąć widok i po prostu zaimplementować model i kontroler. Następnie napisałbym kompletny oddzielny kod widoku, że tak powiem, używając Backbone/Ember/Angularjs. Wtedy klient uzyska dostęp do zasobów REST. Jak miałbym połączyć te dwa później, gdybym chciał wdrożyć to w Heroku? Heroku zajmuje tylko całą aplikację Django. Jak w takim razie mogę dostać tam również kod klienta? Inną opcją, którą widziałem wcześniej, jest NIE całkowite usunięcie widoku, ale użycie szablonów Django Z Backbone/Ember/Angularjs. Następnie mogę po prostu umieścić te pliki js w folderze „static”, że tak powiem. Ale wtedy wydaje się to dziwne, ponieważ wtedy miałbym widok po stronie serwera (popraw mnie, jeśli się mylę), który uzyskuje dostęp do moich własnych zasobów REST. Próbowałem tego, ale z jakiegoś powodu, mimo że moja strona pobiera pliki javascript, wydaje się, że nie działa zgodnie z oczekiwaniami.


title: Flagi z odroczonym użyciem

text: Powiedzmy, że mam system. W tym systemie mam wiele operacji, które mogę wykonać, ale wszystkie te operacje muszą być wykonane jako wsad w określonym czasie, podczas gdy wywołania aktywujące _i_ dezaktywujące te operacje mogą nadejść w dowolnym momencie. Bez względu na to, ile razy metoda/funkcja `doOperation1()` jest wywoływana, operacja jest wykonywana tylko raz w partii. Aby to zaimplementować, mógłbym użyć flag takich jak `doOperation1` i `doOperation2`, ale wydaje się, że byłoby to trudne do utrzymania. Czy istnieje wzorzec projektowy lub coś podobnego, który odnosi się do tej sytuacji?


title: Najlepszy sposób na zdefiniowanie „punktów przyciągania” między dwoma dowolnymi obiektami w 3D?

text: Pracuję nad prostym konstruktorem modelu 3D w przeglądarce przy użyciu THREE.js. Użytkownik wybiera kadłub samolotu i dodaje wybrane przez siebie skrzydła, kokpit, ogon itp., wybierając spośród wielu opcji. Muszę być w stanie zdefiniować relacje między wieloma ciałami i wieloma dodatkami i oczywiście nie chcę ręcznie definiować pozycji/obrotu każdej kombinacji części. Dlatego chcę móc zdefiniować zestaw „punktów przyciągania” na korpusie, miejsca, w których można wstawić określone komponenty, oraz zdefiniować pasujący zestaw punktów na częściach dodatkowych, zasadniczo dopasowując je w oprogramowaniu do umieść dodatki we właściwym miejscu. Pomyślałem o zdefiniowaniu trójkąta składającego się z 3 punktów, ponieważ zablokowałoby to wszystkie 3 stopnie swobody. Jeśli kolejność będzie ważna, zapobiegnie to nawet „przerzucaniu się” obiektu w płaszczyźnie określonej przez trzy punkty. Oto ilustracja: ![before](http://i.stack.imgur.com/LCeyZ.png) ![after](http://i.stack.imgur.com/ierSd.png) Myślę stworzenia "makiety" dla projektantów 3D, aby uzyskać współrzędne punktów, ale raz widzę, że to błąd, gdy dwa trójkąty nie odpowiadają sobie dokładnie. Czy powinienem po prostu ustawić w kamieniu, że punkty muszą tworzyć trójkąt równoboczny o długości boku na przykład 10 jednostek, czy jest inny sposób, w jaki mógłbym wykonać matematykę z trójkątów, które nie do końca pasują do siebie? Może istnieje inny, bardziej standardowy sposób na robienie tego, czego chcę? Dziękuję


title: Używanie pakietów (gemów, jajek itp.) do tworzenia architektur oddzielonych

text: **Główny problem** Widząc dobre wsparcie, jakie większość nowoczesnych platform programistycznych ma do zarządzania pakietami (pomyśl `gem`, `npm`, `pip`, itp.), czy ma sens projektowanie aplikacji lub systemu składającego się wewnętrznie z rozbudowane pakiety, aby promować i tworzyć luźno powiązaną architekturę? **Przykład** Przykładem może być utworzenie pakietów dostępu do bazy danych, a także uwierzytelniania i innych komponentów systemu. Te oczywiście również korzystają z zewnętrznych pakietów. Następnie system importuje i używa tych pakietów — zamiast dołączać ich kod do własnej bazy kodu. **Rozważania** Wydaje mi się, że promowałoby to rozdzielenie kodu i pomogłoby w utrzymaniu, prawie w sposób oparty na sieci Web-vs.-desktop-application (aktualizacje są nakładane niemal automatycznie, jedna baza kodu dla pojedynczej funkcjonalności, itp.). Czy to wydaje się racjonalną i rozsądną koncepcją projektową? Czy to faktycznie jest obecnie używany jako standardowy sposób strukturyzacji aplikacji?


title: Jak mały rozmiar zajmuje mały kompilator C?

text: W tym tygodniu mogłem zoptymalizować za pomocą zmniejszonej biblioteki C, która pozwoliła na drastyczne zmniejszenie rozmiaru kodu - z około 60 K do około 6 K, a następnie mogliśmy załadować kod do 8 K pamięci wbudowanej w układ FPGA (Altera DE2), co Przypuszczam, że jest SRAM, więc jest SRAM zarówno na chipie, jak i poza chipem (?) Sam program był raczej mały i zauważyliśmy, że większość rozmiaru pochodzi z bibliotek, a robiąc system wbudowany, redukujemy biblioteki tylko do tego, co jest potrzebne, więc że ślad jest zminimalizowany. To sprawia, że zastanawiam się nad czymś, co usłyszałem w mediach, co było opowieścią, może fikcją, że Microsoft musiał dostarczyć kompilator C w zaledwie 20 tys. to prawda? Jaki jest możliwy rozmiar śladu dla małego kompilatora C?


title: Gniazda sieciowe VS SSE

text: Załóżmy, że mam usługę, która wymaga _szukania_ bazy danych dla różnych danych raz na jakiś czas. W tym celu mam 2 lub 3 SSE, każdy z innym czasem podstawowym _ponownych_ prób (20000 milisekund, 1000 milisekund...). **Chciałbym wiedzieć, czy websocket może obsługiwać różne „typy danych” zgodnie z żądaniem** , na przykład, czy mogę utworzyć **jeden** websocket do obsługi systemu powiadomień, czatu, grupy system zamiast oddzielnych **_SSE_** i inaczej traktować dane za pomocą javascript? A jeśli tak, czy byłoby to bardziej interesujące (wydajność) niż faktyczne wykonywanie różnych zapytań do serwera za pośrednictwem różnych _SSE_? Jeśli jest to możliwe, to czy byłoby złym projektem tworzyć tutaj wiele gniazd dla każdej usługi?


title: Jaka jest (są) najbardziej użyteczna technika/wizualizacja dla ogólnego stanu projektu?

text: Z powodów „powyżej poziomu mojej płacy” opracowujemy system śledzenia problemów/projektów, w którym pracuję (podobny do Trac, FogBugz itp.). Menedżerowie chcą przydatnego narzędzia, aby móc śledzić ogólny stan projektu (np. Ile czasu pozostało, jak sobie radzimy w porównaniu z szacunkami), a jedną z żądanych funkcji jest pewien rodzaj wsparcia i wizualizacji ścieżki krytycznej. Wytłumaczono mi logikę, że chcą mieć pewność, że przynajmniej najważniejsze elementy projektu są obecnie opracowywane. Pierwotny pomysł był taki, że stworzymy zależności zadaniowe. Moje rozumienie zarządzania projektami mówi mi, że tego rodzaju szczegółowe podejście jest niepotrzebne - posiadanie kamieni milowych z określonymi terminami/zależnościami jest znacznie bardziej przydatne. Chciałbym wiedzieć, jakie są najbardziej przydatne techniki i "ładne obrazki", które widziałeś/użyłeś do rozwoju projektu. Najlepsze byłyby dane obiektywne, ale pomocne są również dane nieco subiektywne.


title: Sprawdzanie poprawności danych do zagnieżdżenia, jeśli nie ma w try and catch

text: Weryfikuję dane, w tym przypadku chcę mieć jeden z trzech intów. Zadaję to pytanie, ponieważ jest to podstawowa zasada, która mnie interesuje. To podstawowy przykład, ale teraz opracowuję najlepsze praktyki, więc gdy później sprawy się komplikują, jestem lepiej przygotowany do zarządzania nimi. Czy lepiej jest, gdy po try and catch następuje warunek: public static int getProcType() { try { procType = getIntInput("Wprowadź typ procedury -\n" + " 1 dla Eksploracji,\n" + " 2 dla Rekonstrukcji, \n" + "3 dla kontynuacji: \n"); } catch (NumberFormatException ex) { System.out.println("Błąd! Wprowadź prawidłową opcję!"); getProcType(); } if (procType == 1 || procType == 2 || procType == 3) { hrlyRate = hrlyRate(procType); procedura = procedura(procType); } else { System.out.println("Błąd! Wprowadź prawidłową opcję!"); getProcType(); } return procType; } A może lepiej umieścić if w try and catch? public static int getProcType() { try { procType = getIntInput("Wpisz typ procedury -\n" + " 1 dla Eksploracji,\n" + " 2 dla Rekonstrukcji, \n" + "3 dla Kontynuacji: \n") ; if (procType == 1 || procType == 2 || procType == 3) { hrlyRate = hrlyRate(procType); procedura = procedura(procType); } else { System.out.println("Błąd! Wprowadź prawidłową opcję!"); getProcType(); } } catch (NumberFormatException ex) { System.out.println("Błąd! Wprowadź prawidłową opcję!"); getProcType(); } return procType; } Myślę, że jeśli w ramach próby, może być szybszy, ale także może być niezdarny. Co byłoby lepsze, gdy moje programowanie stanie się bardziej zaawansowane?


title: Co dzieje się z zaległościami projektu, jeśli pominięto termin sprintu?

text: Załóżmy, że mam element zaległości projektu z nakładem pracy 40 godzin. Mój sprint to 40 godzin (1 tydzień) i mam jednego programistę w zespole. Tak więc programista tworzy zadanie potomne do oczekujących zaległości i szacuje pracę do 40 godzin. Pod koniec sprintu deweloperowi nie udało się rozwiązać swojego zadania. Załóżmy, że programista pracuje tylko i tylko 40 godzin tygodniowo. W następnym tygodniu pojawią się nowe pozycje zaległości i nowy sprint. Co mam zrobić z zaległościami i wykresem prędkości? Oczywiście pozycja zaległości nie jest rozwiązana w tym sprincie. Czy powinienem oszacować pozostałą pracę i odjąć ją od wysiłku, aby teraz zobaczyć, że nasza prędkość wynosi powiedzmy 38h na 40h sprintu?


title: Czy programista musi być projektantem stron internetowych?

text: Chociaż zawsze warto mieć wiedzę na temat wielu technologii, ale ze względu na ograniczenia czasowe nie jest to dla mnie teraz możliwe. Posiadam duże doświadczenie w programowaniu .NET Windows oraz roczne doświadczenie w PHP. Chcę ubiegać się o pracę programisty internetowego. Czy koniecznie muszę uczyć się projektowania stron internetowych, w tym CSS i PhotoShop?


title: Jakich głównych rzeczy programista oczekuje od starszego programisty?

text: Niedawno przeczytałem następujące 5 typów szefów i jak sobie z nimi radzić , które opisują stroje najgorszego szefa. Właśnie zacząłem kierować małym zespołem programistów. Chciałbym wiedzieć, jakich głównych rzeczy programista oczekuje od starszego programisty lub czego powinniśmy unikać, zarządzając zespołem. Chciałbym również wiedzieć, jak zadowolić programistów i stworzyć środowisko produktywne i kompletne dla mojego zespołu.


title: Płatności i programiści open source core

text: Nie jestem pewien, czy istnieje na to ustalony protokół (nawet jeśli nie jest to oficjalny), ale pomyślałem, że najbardziej doświadczeni w open source mogą chcieć się z nami podzielić. Zdaję sobie sprawę, że losowe łatki przesyłane do projektów open source nigdy nie są opłacane. Mogą być pośrednio finansowane przez klienta, ale nigdy nie są opłacane przez sam projekt open source. Ale co z głównymi programistami? Słyszałem na przykład, że drupal ma za sobą około 800 programistów rdzenia. Programiści rdzenia oznaczają, że pracują nad samym rdzeniem drupalowym i razem wypychają główne wydania, więc są bardzo ważni dla projektu. Oczywiście drupal jest tylko przykładem, ale ogólnie, czy istnieje jakiś ustalony protokół w świecie open source, który określa, czy firma stojąca za projektem ma im zapłacić i czy ci główni programiści oczekują takiej płatności? Jakieś fakty lub doświadczenia z pierwszej ręki?


title: Kiedy należy czytać „Kod kompletny”?

text: Jestem prawie pewien "Kto", ale kiedy? Ten z biegłą wiedzą z zakresu programowania i tworzenia oprogramowania, czy może dopiero początkujący w świecie cyber (a dokładnie programistycznym)? Namawiam teraz kawalerów, kiedy lepiej jest, abym (i ludzie tacy jak ja) przeczytali tę **_Musisz przeczytać dla programistów_** książkę?


title: Czy dzielenie zadań programistycznych to dobry pomysł?

text: Mamy w pracy mały, ale rozwijający się zespół i myślimy o robieniu rzeczy inaczej. Tworzymy strony internetowe od podstaw i kodujemy HTML/CSS/Javascript/PHP/MySQL. Obecnie wszyscy pracujemy nad rzeczami takimi, jakie się pojawiają i każdy może zrobić jedną z tych rzeczy. Więc każdy w zespole ma obecnie przydzielonych kilka projektów i mogą robić różne rzeczy, więc dla jednego projektu ktoś zajmuje się front-endowymi rzeczami - głównie Javascript/CSS, a dla innej strony jest to back-end z głównie PHP/MySQL. Problem polega na tym, że większość członków zespołu ma przyzwoitą podstawową wiedzę na temat rzeczy, ale wciąż uczy się szczegółów. I wydaje się, że odbija się to na wydajności. Myślę, że moglibyśmy to poprawić, przypisując każdemu tylko określone zadania (tylko CSS / Javascript / PHP / MySQL... tylko jedna rzecz na raz). W ten sposób: * Zadania są jaśniejsze dla wszystkich * Każdy może lepiej nauczyć się jednej konkretnej rzeczy i nie dać się przytłoczyć * Po opanowaniu jednego zestawu umiejętności można przejść na wyższy poziom * Wydajność powinna wzrosnąć Co o tym myślisz?


title: Preferowanie Pythona nad C do programowania algorytmicznego

text: Studiowałem trochę algorytmy i przeglądałem strony takie jak SPOJ.pl TopCoder itp. Widziałem, że programiści preferują C lub C++ zwykle w większości konkursów programowania algorytmicznego. Teraz mam ostatnio trochę problemów. Znam trochę C i Pythona i kiedy próbuję napisać kod, wydaje mi się, że wolę Pythona od C dla większości algorytmów. Za każdym razem, gdy siadam do napisania kodu w C, poddaję się po około 15 minutach, ponieważ uważam, że jest to zbyt uciążliwe i mam tendencję do przechodzenia na Pythona. Przekazywanie macierzy Wskaźniki i tak dalej wydają się bezużytecznym zmarnowanym czasem, który mógłbym wykorzystać do myślenia o samym algorytmie. Teraz wiem i słyszałem od wielu ludzi, że C jest bardzo ważnym językiem i jest chlebem powszednim wielu programistów. Chciałem wiedzieć, czy to moje podejście ma jakieś wady/konsekwencje/wady itp. To nie jest debata Python vs C; To pytanie o to, jak ta konkretna praktyka preferowania Pythona nad C ze względu na łatwość użycia wpłynie na mnie lub każdego innego programistę/naukowca komputerowego na dłuższą metę. * * * Chciałbym usłyszeć od ludzi, którzy używali tych języków w branży/lub tworzyli duże oprogramowanie/biblioteki itp.


title: Jak utrzymywać różne, dostosowane wersje tego samego oprogramowania dla wielu klientów?

text: mamy wielu klientów o różnych potrzebach. Chociaż nasze oprogramowanie jest do pewnego stopnia zmodularyzowane, jest prawie pewne, że musimy dostosować logikę biznesową każdego modułu tu i tam dla każdego klienta. Zmiany są prawdopodobnie zbyt małe, aby uzasadnić podział modułu na odrębny (fizyczny) moduł dla każdego klienta, obawiam się problemów z kompilacją, chaosu w łączeniu. Jednak te zmiany są zbyt duże i zbyt wiele, aby skonfigurować je za pomocą przełączników w jakimś pliku konfiguracyjnym, ponieważ prowadziłoby to do problemów podczas wdrażania i prawdopodobnie wielu problemów z obsługą, zwłaszcza w przypadku administratorów typu majsterkowicz. Chciałbym, aby system kompilacji tworzył wiele kompilacji, po jednym dla każdego klienta, w których zmiany są zawarte w wyspecjalizowanej wersji pojedynczego modułu fizycznego, o którym mowa. Mam więc kilka pytań: Czy radziłbyś, aby system kompilacji tworzył wiele kompilacji? Jak przechowywać różne dostosowania w kontroli źródła, w szczególności svn?


title: Czy firmy zatrudniają programistów, którzy są aspirującymi przedsiębiorcami?

text: Istnieją programiści, którzy nie tylko piszą kod i rozwiązują problemy, ale aspirują do tego, by pewnego dnia zostać przedsiębiorcą i prowadzić własną firmę. Mogą brać udział w projektach open source, chodzić na różne wydarzenia/spotkania sieciowe, a nawet pisać kod, który pomaga kształtować/rozpocząć własny biznes poza pracą. I na przykład szczera rozmowa kwalifikacyjna z potencjalnym pracownikiem może wyglądać mniej więcej tak: > Firma: _Gdzie widzisz siebie za 5 lat?_ > > Ty: _Widzę, że prowadzę własną firmę programistyczną w mieście Z, robiąc xx > projekty, rozwiązywanie yy rodzaju problemów._ Może to być sygnał ostrzegawczy dla firmy, która może uznać tego rodzaju programistę za duże ryzyko odejścia i zabrałaby ze sobą doświadczenie w tworzeniu określonego oprogramowania lub konkretnego znajomość branży. Czy programiści powinni ukrywać tego rodzaju aspiracje/cechy przed obecnymi pracodawcami lub miejscem, w którym przeprowadzają rozmowę kwalifikacyjną? Czy wspominanie o takich rzeczach jest nieprofesjonalne? Czy to pomaga, czy zmniejsza ich szanse na zatrudnienie?


title: Deweloperzy iOS App Store — Jaka jest „nazwa praw autorskich” aplikacji?

text: Rozumiem, że za każdym razem, gdy przesyłasz nową aplikację, możesz ustawić nazwę praw autorskich do aplikacji. **Gdzie jest wyświetlana ta nazwa?** Czy ta nazwa jest wyświetlana pod nazwą aplikacji podczas wyszukiwania w sklepie z aplikacjami? A może to nazwa sprzedawcy, którą podajesz podczas przesyłania pierwszej aplikacji?


title: Dlaczego rzadko zbiera się dane analityczne/użytkowanie w oprogramowaniu open source?

text: Tak więc w mojej pracy rozwijałem trochę oprogramowania analitycznego, a także zacząłem zwracać większą uwagę na analitykę. Na przykład niedawno zainstalowałem Google Analytics na moim blogu (który jest niestandardowy i otwarty). Głównie tworzę oprogramowanie open source poza pracą, więc myślę, że byłoby fajnie móc gromadzić dane o użytkowaniu i takie, jak moje narzędzia są używane, oczywiście tylko opt-in. Jednak wydaje się, że prawie nigdy nie ma to miejsca. Czemu? O co chodzi z tabu analityki w oprogramowaniu open source?


title: Do czego służą sprawdzone wyjątki w Javie?

text: Sprawdzone wyjątki Javy przez lata nie cieszyły się dobrą opinią. Wymownym znakiem jest to, że jest to dosłownie jedyny język na świecie, który je posiada (nawet inne języki JVM, takie jak Groovy i Scala). Znane biblioteki Java, takie jak Spring i Hibernate, również ich nie używają. Osobiście znalazłem dla nich jedno zastosowanie (w logice biznesowej między warstwami), ale poza tym jestem dość anty-sprawdzonym wyjątkiem. Czy są jakieś inne zastosowania, z których nie zdaję sobie sprawy?


title: Testy funkcjonalne tylko do testowania warstwy infrastruktury, czy też testowanie usług domenowych bez mockowania?

text: Oto przykład kodu: Moje encje (Warstwa domeny): class Konto: def __init__(imię, autor): self.name = nazwa self.email = email Interfejsy moich repozytoriów (Warstwa domeny): class AccountRepository: def add(self, account): """ @type account Konto """ pass def find_by_name(self, name): pass def find_by_email(self, email): pass # remove, i inne... Usługi mojej domeny (Warstwa domeny): class SignUpService : def __init__(self, account_repository): """ @type account_repository AccountRepository """ self._account_repository = account_repository def create_account(self, username, email): account = Account(username, email) self._account_repository.add(account) # inne metody korzystające ze strategii account_repository Moje repozytoria implementacje gies (warstwa infrastruktury): class MongodbAccountRepository(AccountRepository): def __init__(self, mongodb_database): self._mongodb_database = mongodb_database def add(self, account): account_data = account.__dict__ self._mongodb_database.accounts.insert(account_database.accounts.) i inne metody Mogę więc zrobić: **A** : * Test funkcjonalny dla MongodbAccountRepository, testowanie dodawania i bezpośrednie wysyłanie zapytań do mongodb, aby sprawdzić, czy dane są utrwalone, jak przypuszczam. * Test jednostkowy dla SignUpService, mocowanie AccountRepository * **Zalety:** Zbyt szybko * **Wady:** czy naprawdę mogę przypuszczać, że jeśli moja infrastruktura działa dobrze, a moja usługa domeny działa dobrze z próbą, prawdziwa integracja będzie działać Cienki?. * A jeśli wprowadzam błąd w moim pozorowanym obiekcie, a test przechodzi, kiedy powinien zakończyć się niepowodzeniem? **B** : * Test funkcjonalny usługi SignUpService przy użyciu prawdziwego MongodbAccountRepository. * **Zalety:** Mogę być pewien, że SignUpService naprawdę działa poprawnie. * **Wady:** zbyt wiele testów (ze wszystkimi strategiami itp.), zbyt wolne Co o tym sądzisz?


title: Jakie cechy ma MIT-Scheme, które czynią go idealnym dla SICP?

text: Myślałem o próbie ponownego przejścia przez SICP, tym razem dobrze uzbrojony w lepsze wyobrażenie o tym, co SICP ma osiągnąć, będąc starszym i mądrzejszym niż moja pierwsza próba na uniwersytecie. Dawni ludzie mówili mi, że schemat MIT jest _jedynym_ schematem, o którym powinienem pomyśleć, i że inne schematy nie mają funkcji, które utrudniają wykonanie SICP. „Jest powód, dla którego wszystkie „SICP-w-X” kończą się rozdziałem 3. Inne języki nie obsługują tego, co jest w rozdziale 4.” Kiedy zapytałem, co jest w rozdziale 4, odpowiedź brzmi: „Aby zrozumieć, musisz przejść przez pierwsze trzy rozdziały”. Co jest bardzo zen, przyznaję, ale nie pomaga. Jedyne, co przychodzi mi do głowy w przypadku starszych seplenienia, to dynamiczny zasięg i fexprs, ale to nie wydaje się być problemem. Jakie cechy posiada MIT Scheme, które sprawiają, że jest „idealny” do przechodzenia przez SICP? (Oczywiście jest to język docelowy książki).


title: Zacznij rozumieć istniejący projekt dla początkującego programisty

text: Chcę zrozumieć istniejący projekt, aby lepiej się poprawić, ale nie jestem pewien, czy projekt jest dla mnie przytłaczający, czy nie. Nie jestem pewien, czy jestem w stanie to zrozumieć. Myślę nawet, że zawiodę. Kiedy patrzę na projekty, na pierwszy rzut oka przeraża mnie widok tysiąca linijek kodów. Nie wiem nawet, od czego zacząć czytać kody. Czy muszę podążać za debugowaniem lub innym? Czy możesz mi pomóc w tej sytuacji ? Jestem całkowicie zdezorientowany na początek. Edycja : Niewiele rzeczy do sprecyzowania na temat mojego pytania. Znam język C# i nauczyłem się kilku technologii WEB, takich jak ASP.NET MVC 2 i Web Forms, ale na pewno będzie wiele rzeczy, których nadal nie wiem. Sam siebie nazywam początkującym, ale to tylko z powodu braku doświadczenia zawodowego w tej dziedzinie. Ale moje zrozumienie OOP jest wystarczająco dobre. Myślę o doskonaleniu się w sieci, więc szukam projektów WEB, takich jak silniki blogów, które są prostsze niż inne do uruchomienia.


title: Wyjaśnij zasadę pojedynczej odpowiedzialności

text: Zasada pojedynczej odpowiedzialności mówi, że klasa powinna robić jedną i tylko jedną rzecz. Niektóre przypadki są dość jasne. Inne są jednak trudne, ponieważ to, co wygląda jak „jedna rzecz” na danym poziomie abstrakcji, może być wieloma rzeczami na niższym poziomie. Obawiam się również, że jeśli zasada pojedynczej odpowiedzialności jest przestrzegana na niższych poziomach, może to spowodować nadmiernie rozdzielony, pełny kod ravioli, w którym więcej wierszy jest wydawanych na tworzenie małych klas do wszystkiego i analizowanie informacji, niż faktyczne rozwiązywanie problemu. Jak opisałbyś, co oznacza „jedna rzecz”? Jakie są konkretne oznaki, że klasa naprawdę robi więcej niż „jedną rzecz”?


title: Jak rozwijać ścieżkę kariery dla programistów w małej firmie?

text: Pracuję w małej firmie programistycznej, która wzrosła z 4 do nieco ponad 50 pracowników (odpowiednio 1 do 12 programistów) w ciągu ostatnich 4 lat, a ja jestem głównym programistą/kierownikiem zespołu programistów. Żaden programista do tej pory nie zrezygnował i podczas ostatniej rundy wywiadów zwrotnych wszyscy podkreślali, że lubią otoczenie, współpracowników i bieżące zadania. Jednak po raz pierwszy kilka osób wspomniało, że zaczęło myśleć o tym, jak poszerzyć swój horyzont (poza komponent/zespół, nad którym aktualnie pracują) lub rozwinąć dodatkowe zestawy umiejętności (oprócz „zwykłego” programowania), np. , aby przyjrzeć się technicznym działaniom przedsprzedażowym. Wszystkie te problemy zostały poruszone przez programistów, którzy są z firmą najdłużej i widzieli dzikie wczesne dni. Od tego czasu opracowaliśmy procesy mające na celu poprawę stabilności i jakości, które wydają się działać w porządku, a pewna część codziennego obciążenia pracą przesunęła się z „nowych i ekscytujących” na „rutynowe i konserwacyjne”, więc mogę zrozumieć, że szukają dodatkowe wyzwania. Przeczytałem kilka pytań na temat SO od deweloperów dotyczących kroków w celu poprawy ich kariery, ale teraz mam do czynienia z drugą stroną: **Jaką ścieżkę kariery mogę zaoferować programiście w małej firmie takiej jak nasza?** Oczywiście, ci ludzie dostarczają dużo naszej wiedzy o konkretnej domenie i są bardzo cenni dla zespołu, więc chcę mieć pewność, że będę ich zadowolony. Biorąc pod uwagę, że ograniczenia biznesowe i ciasne zasoby w małej firmie nie pozwalają na wiele dodatkowych projektów na boku, masz jakieś sugestie, jakie opcje mogę im zaoferować?


title: Określanie i stosowanie szerokich zmian w programie

text: **Jak radzisz sobie z niekompletnymi żądaniami funkcji, gdy osoby proszące o funkcję nie mogą napisać kompletnego żądania?** Rozważ wyimaginowaną sytuację. Jesteś kierownikiem technicznym pracującym nad oprogramowaniem, które obraca się wokół zarządzania profilami (może są to kontakty w aplikacji typu CRM lub pracownicy w aplikacji HR), a wiele operacji jest wykonywanych bezpośrednio lub pośrednio na tych profilach -- edytuj pola, dodawaj komentarze, dołączaj dokumenty, wysyłaj e-maile... Przełożeni decydują, że należy dodać funkcję _lock_, dzięki której profil może zostać zablokowany, aby nikt inny nie mógł na nim wykonywać żadnych operacji, dopóki nie zostanie odblokowany - to funkcja byłaby używana przez agentów bezpieczeństwa, aby uniemożliwić każdemu dotknięcie profilu w oczekiwaniu na audyt bezpieczeństwa. Oczywiście taka funkcja współdziała z wieloma innymi istniejącymi funkcjami związanymi z profilami. Na przykład: * Czy można dodać komentarz do zablokowanego profilu? * Czy można zobaczyć e-maile wysłane przez system do właściciela zablokowanego profilu? * Czy można zobaczyć, kto ostatnio edytował zablokowany profil? * Jeśli wiadomość e-mail była w trakcie wysyłania, gdy nastąpiła blokada, czy wysyłanie wiadomości e-mail jest anulowane, opóźnione lub wykonywane tak, jakby nic się nie stało? * Jeśli właśnie zmieniłem profil i kliknę link "anuluj" na potwierdzeniu, czy blokada uniemożliwia anulowanie, czy nadal jest realizowane? * Jak we wszystkich tych przypadkach mam powiedzieć użytkownikowi, że blokada jest na swoim miejscu? W zależności od oprogramowania, takich interakcji mogą być setki, a każda interakcja wymaga podjęcia decyzji -- _czy blokada zostanie zastosowana, a jeśli tak, to w jaki sposób będzie wyświetlana użytkownikowi?_ funkcja prawdopodobnie widzi tylko niewielką ich część, więc prawdopodobnie będziesz mieć wiele pytań podczas pracy nad funkcją. Jak Ty i Twój zespół poradzicie sobie z tym? * Czy można by oczekiwać, że zwierzchnicy przedstawią pełny opis wszystkich przypadków, w których blokada powinna zostać zastosowana (i w jaki sposób), i potraktują wszystkie inne przypadki tak, jakby blokada nie istniała? * Czy spróbowałbyś określić wszystkie potencjalne interakcje w oparciu o istniejące specyfikacje i kod, wymienić je i poprosić przełożonych o podjęcie decyzji we wszystkich tych, w których decyzja nie jest oczywista? * Czy po prostu zacząłbyś pracować i zadawać pytania, gdy się pojawią? * Czy spróbowałbyś zmienić ich zdanie i zdecydować się na łatwiejszą do opisania funkcję z podobnymi efektami? Informacje o istniejących funkcjach są, jak rozumiem, w kodzie – jak wypełnić lukę między decydentami a informacjami, do których nie mają dostępu?


title: Chcę napisać aplikację z listą rzeczy do zrobienia na Maca, ale mam tylko doświadczenie z C++

text: Czy uczę się celu C? Czy używanie kakao jest najłatwiejszym i najlepszym sposobem na stworzenie interfejsu użytkownika?


title: W którym momencie buforowanie staje się konieczne dla aplikacji internetowej?

text: Zastanawiam się nad architekturą aplikacji sieci web. Będzie to aplikacja jednostronicowa, która będzie się aktualizować za każdym razem, gdy użytkownik wybierze różne informacje w kilku formularzach dostępnych na stronie. Pomyślałem, że nie powinno być dobrze polegać na przeglądarce użytkownika, aby poprawnie zinterpretować informacje i zaktualizować widok, więc wyślę wybory użytkownika na serwer, a następnie zdobędę dane i wyślę je z powrotem do przeglądarki i zaktualizuj widok. W bazie danych MySQL znajduje się tabela z około 10 000 wierszy, do której dostęp będzie często używany, na przykład raz na 5-30 sekund dla każdego użytkownika. Spodziewam się jednocześnie 200-300 jednoczesnych użytkowników. Czytałem, że dobrze zaprojektowana relacyjna baza danych z prostymi zapytaniami nie jest czymś, z czym mógłby sobie poradzić RDBMS, tak naprawdę, ale nadal chciałbym, aby klient był szybki. Czy to w ogóle powinno mnie teraz martwić? W którym momencie pomocne byłoby rozpoczęcie korzystania z oddzielnej usługi buforowania, takiej jak Memcached lub Redis, czy też byłoby to konieczne? Wiem, że MySQL buforuje popularne zapytania i wyniki, czy to wystarczy?


title: Przechowywanie parametru pass-by-reference jako wskaźnika — zła praktyka?

text: Niedawno natknąłem się na następujący wzorzec w interfejsie API, którego byłem zmuszony używać: class SomeObject { public: // Constructor. SomeObject(bool copy = false); // Ustaw wartość. void SetValue(const ComplexType &value); prywatne: bool m_copy; ComplexType *m_pComplexType; ComplexType m_complexType; }; // ------------------------------------------------ ------------ SomeObject::SomeObject(bool copy) : m_copy(copy) { } // --------------------- --------------------------------------- void SomeObject::SetValue(const ComplexType &value) { if (m_copy) m_complexType.assign(wartość); else m_pComplexType = const_cast<ComplexType *>(&wartość); } Tłem tego wzorca jest to, że jest on używany do przechowywania danych przed ich zakodowaniem i wysłaniem do gniazda TCP. Dziwność kopiowania została zaprojektowana tak, aby uczynić klasę `SomeObject` wydajną poprzez trzymanie wskaźnika do obiektu, dopóki nie będzie wymagał zakodowania, ale także zapewni opcję kopiowania wartości, jeśli czas życia `SomeObject` przekracza czas życia obiektu ComplexType . Należy jednak wziąć pod uwagę następujące kwestie: SomeObject SomeFunction() { ComplexType complexTypeInstance(1); // Utwórz instancję ComplexType. SomeObject encodeHelper; encodeHelper.SetValue(complexTypeInstance); // Dobra. powrót encodeHelper; // O o! complexTypeInstance został zniszczony i // teraz kodowanie zapuszcza się w sferę niezdefiniowanego // zachowania! } Potknąłem się o to, ponieważ użyłem domyślnego konstruktora, co spowodowało, że wiadomości były kodowane jako puste (przez przypadek niezdefiniowanego zachowania). Znalezienie przyczyny zajęło absolutny wiek! W każdym razie ** czy to standardowy wzór dla czegoś takiego? Czy są jakieś korzyści z robienia tego w ten sposób w porównaniu z przeciążeniem metody SetValue w celu zaakceptowania wskaźnika, którego mi brakuje?** Dzięki!


title: Wymaganie określonej kolejności kompilacji

text: Czy przy projektowaniu kompilowanego języka programowania złym pomysłem jest wymaganie określonej kolejności kompilacji oddzielnych jednostek, zgodnie z ich zależnościami? Aby zilustrować, co mam na myśli, rozważmy C. C jest przeciwieństwem tego, co sugeruję. Istnieje wiele plików `.c`, z których wszystkie mogą być od siebie zależne, ale wszystkie te oddzielne jednostki mogą być kompilowane samodzielnie, w dowolnej kolejności - tylko po to, aby później połączyć się ze sobą w końcowy plik wykonywalny. Wynika to głównie z plików nagłówkowych. Umożliwiają osobnym jednostkom dzielenie się informacjami, dzięki czemu jednostki mogą być kompilowane niezależnie. Jeśli język miałby pozbywać się plików nagłówkowych i zachowywać tylko pliki źródłowe i obiektowe, jedyną opcją byłoby faktyczne włączenie metainformacji jednostki do pliku obiektowego jednostki. Oznaczałoby to jednak, że jeśli jednostka A zależy od jednostki B, to jednostka B musiałaby zostać skompilowana _przed_ jednostką A, więc jednostka A mogłaby „zaimportować” plik obiektowy jednostki B, uzyskując w ten sposób informacje wymagane do jej kompilacji . Czy coś mi umyka? Czy to naprawdę jedyny sposób na usunięcie plików nagłówkowych w językach skompilowanych?


title: Ograniczenia i kompatybilność licencji open source

text: Jestem nowy w licencjach open source i wydaje się to bardzo mylące, dlatego potrzebuję kilku sugestii. Rozwijamy aplikację, która obsługuje istniejące komponenty z następującymi typami licencji: * Licencja Apache v2 * LGPL v2.1 * Licencja MIT * Licencja w stylu BSD * Licencja Publiczna Mozilla v1.1 Moje obawy to: 1. Jakie ograniczenia dystrybucji aplikacja może mieć z komercyjnego punktu widzenia? 2. Jakie możliwości licencyjne mamy dla naszej aplikacji? (np. Apache, własność, GPL itp.) Dzięki!


title: Jak nauczyć się robić to dobrze?

text: Jestem samoukiem web developerem. Nie mam dyplomu z informatyki na uniwersytecie. Znam HTML5, CSS3, Javascript, PHP i trochę Pythona. Ale mam trudności z byciem wydajnym. Kiedy tworzę projekt, jestem pochowany w plikach, folderach, błędach i zadaniach. Ponieważ zarządzam wieloma projektami jednocześnie, czuję się całkowicie zestresowany i nie mam kontroli. Widzę, że prawdziwi programiści, którzy mają wykształcenie informatyczne, używają narzędzi takich jak Git do zarządzania źródłami. Używają testów jednostkowych do testowania i innych narzędzi do debugowania w łatwy i szybki sposób. Jestem pewien, że ma wiele innych narzędzi, które pomagają im zachować bezpieczeństwo i spokój podczas zarządzania swoimi projektami. Ale ponieważ nie mam dyplomu z informatyki, nie wiem, jak robić rzeczy we właściwy i skuteczny sposób. Po prostu robię to w zorganizowany sposób. Działa, ale mnie też wypala. Trochę poszukałem w Google i znalazłem kilka książek z Amazona o zarządzaniu projektami, ale czuję się onieśmielony. Narzędzia i zasoby, które znalazłem, są również bardzo rozproszone, co wydaje się, że połączenie ich w celu stworzenia zorganizowanej rutyny wymaga również innej wiedzy. Jako samouczący się programista stron internetowych, co mogę zrobić, aby nauczyć się robienia rzeczy we właściwy sposób? Czy potrzebuję dyplomu z informatyki lub kursu o programowaniu? Czy mogę uczyć się we właściwy sposób, korzystając z Google lub z książek?


title: Jakich funkcji IDE najbardziej by Ci brakowało, gdybyś ich nie miał?

text: Jakich funkcji Twojego IDE najbardziej by Ci brakowało, gdybyś go nie miał? W każdej odpowiedzi podaj jedną funkcję lub grupę powiązanych funkcji.


title: Pytanie dotyczące certyfikatu X509 w WCF

text: **Mój stan:** 1. Usługa WCF, która jest hostowana samodzielnie i znajduje się na komputerze z systemem Win8. 2. Klient jest Programem WPF na innym komputerze. 3. Następnie podążam za artykułem w Codeproject o tym, jak ustawić certyfikat X509 dla WCF. **Opis problemu:** 1. Komunikacja między Klientem a Usługą była OK, gdy znajdują się na tej samej Maszynie. 2. Gdy umieszczam Klienta na innym komputerze, zdarza się wyjątek, że mówi "Celujący nie jest uwierzytelniony przez usługę". Uważam, że przyczyna powyższego wyjątku może mieć znaczenie dla certyfikatu X509. Kiedy umieszczam Client.exe na innym komputerze, po prostu generuję nowy certyfikat dla klienta, czy to prawda? Chcę wiedzieć, czy certyfikat klienta X509 powinien zostać wyeksportowany z maszyny serwisowej, która wygenerowała certyfikat klienta i serwera, a następnie zaimportować go do innej maszyny klienta, czy po prostu użyć makecert.exe wygenerować kolejny certyfikat dla innej maszyny klienta? Krótko mówiąc, czy certyfikat może zostać wygenerowany przez dowolną maszynę, czy tylko przez maszynę, która wygenerowała certyfikat usługi?


title: Prośba o poradę dotyczącą przechowywania kluczy szyfrowania

text: Używam HMAC do mieszania niektórych danych przed wstawieniem ich do bazy danych, a obecnie mam klucz jako pole statyczne. Zastanawiam się tylko, jaka byłaby najlepsza praktyka dotycząca przechowywania klucza. Czy jest wystarczająco dobry w kodzie, czy powinien znajdować się w pliku konfiguracyjnym. Dziękuję!


title: Rozwiązania do implementacji pełnodupleksowego serwera gier?

text: Projektuję serwer gier, który będzie używany dla terminali z systemem Android. Szukałem produktów lub frameworków do wykorzystania do dwukierunkowej komunikacji gniazd, ale nie znalazłem niczego, o czym warto byłoby wspomnieć. Po prostu chcę zaimplementować poniższą architekturę: ![Architektura serwera](http://i.stack.imgur.com/leKtu.png) Innymi słowy, jedno połączenie TCP od klienta do serwera, a drugie z serwer do klienta, aby uniknąć konieczności ciągłego połączenia. Żeby było jasne, moim głównym celem jest, aby **serwer** mógł wysyłać dane do **klienta** , **bez** konieczności wyraźnego żądania tego przez klienta. **Nie** chcę, aby klient musiał odpytywać serwer, aby sprawdzić, czy są jakieś nowe dane. Jaka kombinacja strategii projektowych, protokołów sieciowych i/lub produktów lub struktur (jeśli w ogóle) byłaby odpowiednia do wdrożenia tej architektury?


title: Czy wzorce projektowe są w dzisiejszych czasach naprawdę niezbędne?

text: Czytałem „Coders at Work” i zetknąłem się z faktem, że niektórzy z profesjonalistów, z którymi przeprowadzono wywiady w książce, nie są tak entuzjastycznie nastawieni do wzorców projektowych. Myślę, że są dwa główne powody takiego stanu rzeczy: 1. Wzorce projektowe zmuszają nas do myślenia ich kategoriami. Innymi słowy, wymyślenie czegoś nowego (może lepszego) jest prawie niemożliwe. 2. Wzorce projektowe nie trwają wiecznie. Języki i technologie szybko się zmieniają; dlatego wzorce projektowe w końcu staną się nieistotne. Może więc ważniejsze jest, aby nauczyć się poprawnie programować bez żadnych szczególnych wzorców, a nie uczyć się ich. EDYCJA: Chodziło też o to, że zwykle, gdy ludzie napotykają problem i nie mają dużo czasu, próbują użyć wzorca. Oznacza to kopiowanie i wklejanie istniejącego kodu do projektu z niewielkimi zmianami, aby działał. Kiedy nadchodzi czas, aby coś zmienić lub dodać, programista nie wie, od czego zacząć, ponieważ to nie jest jego kod i nie jest z nim zaznajomiony.


title: Jak często używasz wzorców projektowych?

text: > **Możliwe duplikaty:** > Czy wzorce projektowe są obecnie naprawdę niezbędne? Niedawno przeczytałem książkę o wzorcach projektowych. Kilka z nich wydaje się bardzo przydatnych w konkretnych sytuacjach. Nie jestem jednak pewien, na ile będą przydatne w codziennym kodowaniu. Jak często używasz wzorców projektowych w swojej codziennej pracy? Czy powinienem szukać sytuacji, aby je zastosować?


title: Kiedy powinienem używać – a nie używać – wzorców projektowych?

text: W poprzednim pytaniu dotyczącym Stack Overflow FredOverflow wspomniał w komentarzach: > Zauważ, że wzorce nie poprawiają magicznie jakości twojego kodu. oraz > Każda miara jakości, jaką możesz sobie wyobrazić. Wzory nie są panaceum. Kiedyś > napisałem grę Tetris z około 100 klasami, która zawierała wszystkie > wzorce, które znałem w tamtym czasie. Po co używać prostego if/else, jeśli możesz użyć wzorca >? OO jest dobre, a wzory są jeszcze lepsze, prawda? Nie, to był > okropny, przekombinowany kawałek gówna. Jestem dość zdezorientowany tymi komentarzami: wiem, że wzorce projektowe pomagają w tworzeniu kodu wielokrotnego użytku i czytelności, ale kiedy powinienem używać wzorców projektowych i być może, co ważniejsze, kiedy powinienem nie dać się ponieść emocjom?


title: Czy wzorce projektowe są niezbędne dla dobrego kodu?

text: Czy wzorce projektowe (np. wzorzec fabryki, obserwator itp.) muszą być znane, aby napisać dobry kod? Często nie mam pojęcia, co ludzie mają na myśli, gdy mówią o _wstawianiu tu nazwy wzorca_ wzorzec, a czasami uświadamiam sobie, że zaimplementowałem ten wzorzec, nie wiedząc nawet, że ma on nazwę. Jestem programistą samoukiem, więc próbuję uczyć się wzorców na bieżąco, ale czy są one konieczne? Czasami wydaje mi się, że są przeprojektowane, jak po prostu fantazyjne koncepcje projektowe, które programiści czasami przeceniają i zmuszają do ich używania, nawet jeśli potrafią napisać czysty i działający kod, który jednak nie jest powszechnym wzorcem.


title: Projektować wzorzec, czy nie projektować wzorca

text: Wzorce projektowe są dobre, ale złożone. Czy powinniśmy ich używać w małych projektach? Wdrażanie wzorców projektowych wymaga bardziej wyrafinowanych programistów, co z kolei podnosi koszty projektu. Z drugiej strony sprawiają, że kod jest schludny i czysty. Czy są niezbędne do małych projektów? **Aktualizacja:** Czy powinniśmy nalegać na używanie wzorców projektowych, gdy zespół nie radzi sobie z nimi efektywnie?


title: Co się stanie, jeśli nie będę korzystać z wzorców projektowania oprogramowania?

text: Jakie problemy mogę napotkać, jeśli nie będę korzystać z wzorców projektowania oprogramowania? Czy możesz mi opowiedzieć o problemach podejścia do projektowania przy użyciu standardowych technik obiektowych?


title: Jak poradzić sobie z problemami z narzędziami we wspólnym projekcie open-source?

text: Dwa różne zespoły (z różnych firm) łączą się, aby pracować nad wspólnym projektem open source. Uzgodnienie projektu technicznego to coś, z czym nie mamy problemu, ale borykam się z problemami z narzędziami/przepływem pracy. Bardzo lubię narzędzie do testowania BDD o nazwie `phpspec` (analogicznie do RSpec), podczas gdy wielu moich kolegów z zespołu trzyma się tego, co wiedzą (`phpunit`) niezależnie od zalet i wad każdego z narzędzi. Jak posuwasz się do przodu z projektem, gdy członkowie są w takim sporze? Czy powinieneś wymusić standardowe narzędzie do testowania? Czy istnieje sposób na wykorzystanie obu? Myślę, że sprowadza się to do tego, czy członkowie wyrwą się ze swoich stref komfortu, aby nauczyć się nowych technologii, które są lepsze do pracy. Jestem przekonany, że zawsze powinieneś być chętny do uczenia się nowych rzeczy, ale odnoszę wrażenie, że innym zależy wyłącznie na wykonywaniu zadań w jak najkrótszy sposób - tym samym przy użyciu narzędzi, z których korzystali wcześniej.


title: Jaki jest dobry sposób na zapoznanie się z PHP wywodzącym się ze środowiska ASP.NET?

text: Obecnie bardzo dobrze czuję się z budowaniem narzędzi/aplikacji internetowych w środowisku ASP.NET. Naprawdę nie zamierzam opuszczać tbh, ponieważ bardzo lubię C#, ASP.NET, MVC 3, Visual Studio itp. Jednak w tej chwili prawie nic nie wiem o PHP i wydaje mi się, że to wada, którą chciałbym prostować. Czy są jakieś książki (lub inne metody nauki), które byłyby dobrym źródłem do nauki PHP? Oczywiście istnieje wiele książek o PHP dla początkujących, ale jestem już zaznajomiony z wieloma zagadnieniami związanymi z budowaniem strony internetowej i jestem zainteresowany skupieniem się na samym PHP, które może nie być zgodne z zakresem niektórych początkujących książek o PHP. Przeszedłem przez podręcznik PHP całkiem sporo i nie wydaje się, aby przebiegał on tak płynnie, jak mógłby być idealny. Czy jest odpowiednia książka na początek o PHP? Brakuje mi spójności, jaką zawiera większość książek, gdy przeglądam te próbki. Jest dużo więcej informacji, ale wydaje się to bardziej odniesieniem podczas kodowania niż podstawowym narzędziem edukacyjnym.


title: Czy można stworzyć aplikację zarówno w stylu metro, jak i klasycznym?

text: Czy można stworzyć jedną aplikację, którą można uruchomić zarówno w stylu metro, jak i klasycznym w systemie Windows 8? Mam na myśli aplikację z tym samym rdzeniem i dwoma osobnymi interfejsami użytkownika, dostosowanymi do aktualnie używanego trybu.


title: Co znajduje się w Eclipse, poza PyDev, dla programisty Pythona?

text: Podobnie jak wiele innych osób, używam Eclipse z doskonałą wtyczką PyDev (dostępną w Eclipse Marketplace) do rozwijania moich projektów w Pythonie. I jak większość ludzi z tą samą konfiguracją, przyszedłem do PyDev bez żadnego wcześniejszego doświadczenia z Eclipse. Jakie inne narzędzia, wtyczki, funkcje itp. są dostępne w Eclipse, które mogą być przydatne dla nas, programistów Pythona? I/lub, mówiąc inaczej, jak moglibyśmy stać się bardziej biegli i lepiej wykorzystać środowisko Eclipse IDE do programowania w Pythonie? Zacznę dodawać własne 2€centy: EGit lub podobne wtyczki do CVS, SVN itp. są dobre do integracji z systemem kontroli wersji / repozytorium. (nawet jeśli przyznam, że zwykle piszę tylko wiersze poleceń git w terminalu).


title: Czy można wykonać TDD bez narzędzia testowego?

text: Chcemy zaimplementować dość przybliżony zarys rozwoju opartego na testach, w którym programista zadaje sobie testy na każdym etapie procesu rozwoju. Czytałem tutaj, że nie da się wykonać TDD bez narzędzia. Czy to prawda?


title: Koncentracje CS i ścieżki kariery

text: Zbliżam się do końca drugiego roku studiów (studia informatyki) i już niedługo będę musiała zdecydować o swojej koncentracji, ale szczerze mówiąc nie wiem, co oznacza każda koncentracja. Zasadniczo mam dwa pytania: 1\. Jak duży wpływ na twoją ścieżkę kariery ma twoja koncentracja? Na przykład, czy firma zajmująca się tworzeniem gier wideo patrzyłaby tylko na ludzi skoncentrowanych na tworzeniu gier? 2. Byłoby wspaniale, gdybyście w jednej lub dwóch linijkach powiedzieli mi, jakiego rodzaju pracy szukam dla każdego z stężeń? Muszę wybrać co najmniej dwa z 9 poniżej. \- Algorytmy i struktury danych \- Sztuczna inteligencja \- Bezpieczeństwo komputera i sieci \- Grafika komputerowa i wizja \- Interakcja człowiek-komputer \- Tworzenie i projektowanie gier \- Obliczenia numeryczne i symboliczne \- Języki programowania \- Systemy


title: Ostrzegaj o metodach innych firm, które są zabronione

text: Uwaga: To pytanie dotyczy kodu napisanego w Javie lub C#. Zarządzam kilkoma dużymi projektami, w których odkryliśmy problemy (niekoniecznie błędy) z niektórymi metodami stron trzecich/SDK i napisaliśmy własne rozszerzenia, które powinny być używane zamiast tego. Chcemy, aby programiści pamiętali, że korzystanie z tych metod nie jest zalecane w tym projekcie. Gdybyśmy korzystali z własnych bibliotek, moglibyśmy łatwo usunąć tę metodę lub oznaczyć ją jako przestarzałą/przestarzałą, ale nie możemy tego zrobić dla bibliotek, których nie napisaliśmy. Jako przykład używamy biblioteki, która udostępnia nam dwa przeciążenia: acme.calculate(int ilość_, double priceInUsDollars_); acme.calculate(ilość int_, ciąg currencyCode_, double priceInCurrency_); Chcemy, aby programiści zawsze używali pierwszego i uzyskiwali cenę w dolarach amerykańskich z naszych własnych standardowych systemów kursów walutowych. I byłoby miło, gdyby IDE (Eclipse/Visual Studio) ostrzegało programistów, gdy używają pierwszego. Wystarczy ostrzeżenie kompilatora. W tej chwili musimy polegać na recenzentach kodu, aby wykryć takie błędy, a jak widać nie jest to niezawodne podejście. Jednym z możliwych sposobów, w jaki jestem przygotowany, jest napisanie własnego sprawdzenia stylu czeku (http://checkstyle.sourceforge.net/writingchecks.html). Ale zastanawiałem się, czy jest coś prostego, czego mógłbym użyć. Czy ktoś zna sposoby uzyskania ostrzeżenia IDE/kompilatora opisanego przeze mnie? Mile widziane są rozwiązania inne niż IDE/kompilator.


title: Jakie tryby zysku są dostępne dla programistów?

text: To ważne pytanie, ponieważ „ubieganie się o pracę/staż” nie jest rozwiązaniem dla wszystkich, zwłaszcza w okresach stresu ekonomicznego, kiedy ciągłe odrzucanie może wpędzić dobrych programistów w depresję. Czy osoby z doświadczeniem mogą krótko skomentować inne sposoby uzyskiwania przychodów z programowania: * Tworzenie oprogramowania „bezpłatnego dla niekomercyjnego” * Przekształcenie pomysłu w startup z niemal zerowymi zasobami i **nie flopowaniem** * Przekształcenie pomysłu w startup z prawie zerowymi zasobami i wychodzącymi **zatrudnionymi** * Korzystanie z witryn outsourcingowych i **właściwie** zarabianie * Tworzenie bezpłatnego oprogramowania i pozyskiwanie sponsorów/reklamodawców (wiem, że wszyscy nienawidzimy spamu instalatorów, ale nadal)


title: Co lepiej zrobić osobną tabelę tymczasową lub wstawić bezpośrednio do dużej tabeli?

text: Mam dużą tabelę z 1 400 000 wierszy i codziennie muszę wstawiać do niej 3000 wierszy. Kiedy wstawiam 3000 wierszy dziennie, * powinienem najpierw wstawić do tabeli tymczasowej, a następnie zrzucić tę tabelę tymczasową do tabeli głównej. * wstaw bezpośrednio do dużego stołu. Które podejście jest szybkie i dlaczego?


title: Asynchroniczne wzorce projektowania/interakcji aktualizacji

text: Obecnie wiele aplikacji obsługuje aktualizacje asynchroniczne. Na przykład, jeśli patrzysz na listę widżetów i usuwasz jeden z nich, zamiast czekać na podróż w obie strony na serwer, aplikacja może ukryć ten, który usunąłeś, dając natychmiastową informację zwrotną. Rzeczywiste usunięcie na serwerze nastąpi w tle. Można to zobaczyć w aplikacjach internetowych, aplikacjach komputerowych, aplikacjach na iOS itp. Ale co z tym, gdy operacja w tle nie powiedzie się. Jak powinieneś przekazać informację zwrotną użytkownikowi? Czy należy przywrócić interfejs użytkownika do stanu sprzed usunięcia? A co, gdy wiele operacji w tle kończy się niepowodzeniem? Czy to zachowanie/wzór ma nazwę? Może coś opartego na wzorcu Command?


title: Czy istnieje określony sposób lub algorytm dekodowania protokołów?

text: Projektuję prosty analizator stanów logicznych, wiem, że najlepszym sposobem na dekodowanie protokołu takiego jak I2C, SPI, UART jest coś w rodzaju FPGA, ale chcę to teraz zrobić programowo :) Pracuję na procesorze ARM OMAP4460 . Chciałbym wiedzieć, czy istnieje specjalny sposób dekodowania protokołów, takich jak I2C, SPI, UART, czy jest to po prostu if() i flagi jako normalny sposób.


title: Czy zbyt wiele asercji ma zapach kodu?

text: Naprawdę zakochałem się w testach jednostkowych i TDD - jestem zainfekowany testem. Jednak testy jednostkowe są zwykle używane w przypadku metod publicznych. Czasami jednak muszę też testować pewne założenia-asercje w metodach prywatnych, ponieważ niektóre z nich są "niebezpieczne" i refaktoryzacja nie może dalej pomóc. (Wiem, frameworki testowe umożliwiają testowanie prywatnych metod). Tak więc stało się moim zwyczajem, że zarówno pierwsza, jak i ostatnia linia prywatnej metody są twierdzeniami. Zauważyłem jednak, że mam tendencję do używania asercji w metodach publicznych (jak również prywatnych) tylko „dla pewności”. Czy może to być „testowanie powielania”, skoro założenia metody publicznej są testowane z zewnątrz przez ramy testów jednostkowych? Czy ktoś mógłby pomyśleć o zbyt wielu twierdzeniach jako zapachu kodu?


title: Silnik renderujący szablony legalne użycie singletona?

text: Napisałem dziś w nocy samodzielną klasę singleton (rusztowanie), która służy jako fasada dla kilku innych klas, w tym klasy szablonu i klasy widoku. Zarówno szablony, jak i widoki są nazwane, a wystąpienia każdego z nich są przechowywane w obiekcie szkieletu. Szablony mogą zawierać widoki, a widoki mogą zawierać inne widoki. Szablon i zawarte w nim widoki są renderowane, gdy: scaffold->render('template_name') Tworzenie rusztowania jako Singleton wydawało się dobrym pomysłem, ponieważ: * Chcę kontrolować, kiedy i jak obiekt jest skonstruowany * Chcę tylko jednej instancji ( gui zostanie wyrenderowane tylko raz, niezależnie od renderowanego szablonu) * Cały stan można łatwo zwolnić z klasy szkieletu (jeśli ze względów testowych lub cokolwiek chciałem) Czy to wydaje się być akceptowalnym przypadkiem użycia? Jeśli nie, jakie konkretnie względy projektowe pomijam? Żadnych wojen religijnych, proszę. Nie uwzględniłem języka, ponieważ mam nadzieję na rozważenie języka, ale powiem: * Język skryptowy * Jednowątkowy


title: Dlaczego Python nie zezwala na wielowierszowe lambdy?

text: Czy ktoś może wyjaśnić konkretne powody, dla których BDFL zdecydowało się na tworzenie jednoliniowych lambd Pythona? To jest dobre: lambda x: x**x Powoduje to błąd: lambda x: x**x Rozumiem, że zrobienie lambda wieloliniowego w jakiś sposób „zakłóci” normalne reguły wcięć i będzie wymagało dodania większej liczby wyjątków, ale jest to nie warte korzyści? Spójrz na przykład na JavaScript. Jak można żyć bez tych anonimowych funkcji? Są niezbędne. Czyż Pythoniści nie chcą pozbyć się konieczności nazywania każdej funkcji wielowierszowej tylko po to, by przekazać ją jako argument?


title: Czy nauka C jest niezbędna dla informatyki?

text: Jestem front-end developerem, który ledwo widzi plik z rozszerzeniem `.h` lub `.c`. Znam podstawową składnię C, nauczyłem się jej w Unreality, ale nigdy nie interesowało mnie takie niskopoziomowe programowanie, ponieważ było to po prostu za dużo konfiguracji do prostych rzeczy. Jestem bardzo zainteresowany nauką wszystkich aspektów informatyki, ale chcę wierzyć, że tak naprawdę nie muszę znać konkretnego języka, aby zrozumieć większość pojęć w informatyce. Jednak kiedy zaczynam czytać książki i artykuły o podstawowych koncepcjach informatyki, takich jak struktury danych i projektowanie algorytmów, wydaje mi się, że muszę nauczyć się C, ponieważ wszystkie przykłady, a nawet lekcje są w C (a czasami w Javie). Moje pytanie brzmi, czy C jako język programowania jest niezbędny dla informatyki, czy po prostu zdarzyło nam się mieć wszystkie nasze zasoby w CS napisane w C? Czy można nauczyć się informatyki bez nauki C?


title: Jak Assembla wypada w porównaniu z FogBugz + Kiln

text: Wybieram rozwiązanie do zarządzania projektami i zawęziłem je do Assembla lub FogBugz + Kiln. Oto moje kryteria: * Usługa hostowana, ale z opcją przejścia do instalacji niestandardowej (wyklucza np. Codebase HQ) * Skoncentrowana wokół projektów, a nie repozytoriów (GitHub, chociaż ostatnio dodał kilka funkcji PM, wydaje się być skoncentrowany na repo) * Repozytorium Git musi posiadać SVN + Mercurial * Popularna usługa z (przynajmniej częściowo) gwarantowaną ciągłością - zarówno FogBugz, jak i Assembla wydają się być jednymi z najpopularniejszych rozwiązań PM * Wiki, dyskusje, przeglądy kodu, zarządzanie użytkownikami itp. Im więcej funkcji, tym lepiej. Wyklucza to (inaczej bardzo fajną usługę) BitBucket i inne. Zarówno FogBugz, jak i Assembla wydają się dość bogate w funkcje. Szukam kogoś, kto ma doświadczenie zarówno z FogBugz, jak i Assemblą i mógłby je porównać. Oto, co zebrałem do tej pory ze stron funkcji / zrzutów ekranu / przypadkowych wzmianek w sieci: * FogBugz wydaje się mieć całkiem niezły UX. Twórcy Assembla z pewnością bardzo się starają, a zrzuty ekranu nie wyglądają tak źle, ale wciąż są mniej eleganckie. * FogBugz jest oferowany z Kilnem, który z pewnością jest fajnym produktem, ale wolałbym Git od Mercurial. Wiem, że FogBugz może być używany z innymi usługami SCM, ale wolałbym mieć jedno zintegrowane rozwiązanie po wyjęciu z pudełka. * Assembla jest tańsza, w rzeczywistości znacznie tańsza, jeśli jest więcej niż kilku użytkowników. Może się mylę, to tylko moje pierwsze wrażenia. Jeśli ktoś mógłby zaoferować bardziej kompletne / wykształcone porównanie, byłbym wdzięczny.


title: jak zainteresować klientów i ekspertów dziedzinowych

text: Więc myślę, że to może wkrótce być **ja**! Wybacz moją ignorancję w tym poście, nie jestem formalnie wykształcony i młody! =S (Z http://theoatmeal.com/comics/design_hell) ![tekst alternatywny](http://i.stack.imgur.com/r3lVG.png) Tworzę wewnętrzną aplikację dla banku i może nie być duży, ale to największy projekt, nad którym pracowałem. ## Problemy, na które nie mogę wiele poradzić 1. W robieniu czegokolwiek jest mnóstwo biurokracji, 4 miesiące zajęło im podpisanie umowy ze mną. 2. Muszę pracować z menedżerami finansów, którzy nigdy nie pracowali z kimś, kto tworzył dla nich oprogramowanie. 3. Zwykle nie jestem traktowany poważnie, ponieważ jestem młody. ## Moje problemy 1. Menedżerowie mają w dupie Bank i nigdy nie zawracają sobie głowy czytaniem moich e-maili, ani nie dają mi wkładu w makiety lub dema. Na ostatniej makiecie spędziłem 20 godzin w ciągu 2 dni i wolą srać przez telefon niż przyjść na spotkanie! 2. Nowe funkcje pojawiają się i znikają jak ciepłe bułeczki i po prostu nie mogą zdecydować, które z nich są ważne. Albo nie chcą o tym dyskutować! A najlepsze psy ciągle mi przypominają o dealinach!? ## Moje pytanie Więc idę prosto do najlepszych psów, żeby grzecznie spróbować coś zmienić. Ci faceci są jednak starsi i nie dadzą mi dużo czasu, **Potrzebuję bardzo przekonującego, szybkiego, zwięzłego sposobu, aby wyjaśnić im, jak ważne jest, aby ich „menedżerowie” komunikowali się ze mną i mówili, czego do cholery chcą i czego nie robią** Wszelkie zabawne prezentacje lub zdjęcia, takie jak płatki owsiane, byłyby naprawdę niesamowite, aby pokazać najlepsze psy. ## Inne rozwiązania, o których myślałem 1. Rejestracja na teambox.com (w przeciwieństwie do poczty e-mail!) 2. Jeśli w ciągu 3 dni nie dostanę odpowiedzi na temat funkcji, to NIE WIĘCEJ! 3. Wyświetlam funkcje na tablicy, a oni otrzymują 5 sekund, aby powiedzieć mi, czy jest to ważne, czy nie. Jakieś inne zasady, które powinienem przyjąć? Jakieś inne pomysły? Wielkie dzięki, Gideon **EDYTUJ** * * * W odpowiedzi na pierwszy komentarz: Szefowie działów (najlepsze psy) to ludzie, którzy naprawdę nie mogą się doczekać błyszczącego oprogramowania, które rozwiąże wszystkie ich problemy. Są oni mniej więcej interesariuszami, ale nie mam z nimi zbyt wielu kontaktów, tylko z ich podwładnymi (menedżerami).


title: Czy usługi SSRS zastąpiły Crystal Reports jako nowy standard narzędzia do raportowania programu Visual Studio?

text: Nigdy wcześniej nie korzystałem z usług SQL Server Reporting Services (SSRS), ale korzystałem z małych raportów Crystal Reports. Mój obecny projekt w dużym stopniu wykorzystuje Crystal Reports dla Visual Studio 2005. Ten wybór przyniósł kilka nieprzyjemnych problemów z Crystal Reports. Nie udało się wydrukować lub wyeksportować pierwszego raportu z powodu błędu. Po zmarnowaniu tygodnia utknąłem w kolejnym problemie zmniejszania rozmiaru czcionki podczas drukowania i eksportu. Pomoc na forach również nie pojawi się wkrótce. Chcę wiedzieć, czy powinienem nauczyć się i przełączyć się na SSRS, czy też przeprowadzić migrację projektu do Visual Studio 2010 z wyższą wersją Crystal Reports. Czy SSRS zastąpił Crystal Reports jako de facto standardowe narzędzie do raportowania?


title: Dlaczego C++ jest preferowany w zastosowaniach komercyjnych od C?

text: Programuję głównie w C. Jednak jest całkiem oczywiste, że o wiele więcej komercyjnych aplikacji jest wykonywanych w C++. O ile wiem, C++ jest bardzo złożonym językiem o pozornie zawiłej składni i zbyt wielu konstrukcjach. C++ zachęca również do nadużywania obiektów, w których zrobią to struktury i funkcje. W rzeczywistości jedyną istotną zaletą, jaką widzę w C++, jest użycie szablonowych typów generycznych (chociaż według twórców Go, generyczne są złe dla programów). Zasadniczo moje pytanie brzmi, czy coś przegapiłem? A może C++ jest bardziej popularny wyłącznie dzięki szczęściu lub marketingowi? Edycja: przepraszam, że najwyraźniej zadałem załadowane pytanie; z perspektywy czasu widzę, że sposób, w jaki to sformułowałem, wydaje się być kompletną przynętą na płomienie. Chodziło mi o to, że skoro C++ ma tyle różnych konstrukcji i paradygmatów, dlaczego nie został zastąpiony przez języki, które robią mniej, ale są lepsze w tej konkretnej rzeczy? Na przykład zarówno Java, jak i C# są znacznie lepiej przystosowane do programowania obiektowego niż C++, podczas gdy C jest znacznie prostsze do programowania na poziomie systemu, a coś takiego jak lisp jest bardziej odpowiednie do programowania funkcjonalnego. Dlaczego C++ jest używany w jednym lub kilku z tych innych języków?


title: Czy powinienem rozpakować zamki przed archiwizacją?

text: Piszę małe narzędzie do osobistej archiwizacji. Często pracuję z wieloma bazami danych klientów przez krótkie okresy, moje narzędzie będzie wykonywać zadania wsadowe na noc, odłączy bazę danych i spakuje pliki bazy danych oraz wszelkie dodatkowe pliki, które znajdują się w folderze, w którym znajdowała się baza danych i przenieś go na dysk sieciowy. Moje pytanie jest dość często, że w folderze będą znajdować się pliki zip (najczęściej jest to oryginalna kopia zapasowa klienta, zanim wykonałem na niej przetwarzanie). Czy lepiej byłoby rozpakować plik do unikalnej nazwy podfolderu, usunąć zip, a następnie skompresować cały folder nadrzędny, czy też algorytmy kompresji są wystarczająco dobre, abym mógł zostawić plik spakowany (prawdopodobnie zostało to zrobione z ustawieniem 7zip Najszybszy ) i moja archiwizacja (która będzie ustawieniem 7zip Ultra) po prostu skompresuje (głównie) różnicę między dwoma poziomami kompresji? Jeśli uda mi się uzyskać kolejny 1% zniżki na plik bazy danych o pojemności 20 GB, może warto zrobić dekompresję.


title: Jak ustrukturyzujesz swoje oddziały w TFS

text: Nie jestem pewien, czy powinienem zadać to pytanie tutaj, czy na SO ... prześlę to do SO, jeśli to niewłaściwe miejsce. Moja grupa w pracy próbowała wymyślić dobry proces, którego moglibyśmy użyć z TFS. Zastanawiam się tylko, czy niektórzy z was mieli jakieś skuteczne strategie korzystania z TFS w wielu witrynach przy użyciu wielu gałęzi. Jednym konkretnym problemem, który mamy, jest prawdopodobnie nasz silnik wydawniczy. Mówiąc prościej, programista powinien mieć możliwość zaewidencjonowania swoich zmian w gałęzi DEV, a następnie ok określoną datę (powiedzmy datę zamrożenia), gałąź DEV zostanie „odwrotnie zintegrowana” z głównym pniem (QA) w który następnie zmiany zostaną przeniesione do gałęzi produkcji. Problem pojawił się, gdy użytkownik zaewidencjonował się w DEV Branch, ale nie chce, aby te zmiany zostały przeniesione do QA (ponieważ może inna część kodu nie jest jeszcze gotowa) ... masz jakieś przemyślenia na ten temat? z góry dziękuję


title: Najlepszy czas na rozpoczęcie pisania blogów technicznych

text: Chcę wiedzieć, ile czasu powinienem poczekać, aż zacznę pisać bloga, ponieważ, IMO, nowicjusz nie ma takich umiejętności, aby napisać coś istotnego. Mówię o blogach technicznych, takich jak pisanie o nowych funkcjach C# lub przewagach Ruby nad innymi językami.


title: Jak przepisać od podstaw kod, do którego posiadam prawa autorskie, aby móc go używać w swojej pracy bez utraty praw do pierwszej wersji?

text: Cóż, nie chcę, aby było to oprogramowanie typu open source! To jest problem. Ale chcę go używać w mojej obecnej pracy. Firma nie zgodziła się na podpisanie ze mną żadnej alternatywnej licencji i kazała przepisać wszystko od zera, aby była ich właścicielem. :( Jak więc zrobić to w bezpieczny sposób, żeby później firma nie wracała do mnie i nie mówiła, że używam kodu, który dla nich napisałem, który będzie podobny do pierwszej wersji, którą napisałem i posiadam praw autorskich, w moich osobistych projektach, a nawet w innej pracy? Jak mógłbyś przepisać drugą wersję mapy mieszającej, nie sprawiając, że będzie wyglądała jak pierwsza? To brzmi dla mnie trochę ciężko. :(


title: Wszelkie zalecenia dotyczące dobrej książki obiektowej

text: Chcę naprawdę zrozumieć raz na zawsze. Jakieś zalecenia dotyczące dobrej książki zorientowanej obiektowo? Programuję w .Net, więc jeśli jest zorientowany na .Net, tym lepiej. Pozdrowienia,


title: Identyfikacja problemu alokacji

text: Mam matrycę. Mam listę osób, które muszą zajmować komórki n1,n2,n3 itd., różne liczby komórek w różnych rzędach. Muszę umieścić ludzi w celach. Zajmowanie tej samej komórki w rzędach jest uważane za nakładanie się. Należy zminimalizować nakładanie się. Mam ludzi, którzy odwołują się do tego różnie jako do problemu optymalizacji, problemu alokacji, a nawet programowania liniowego. Najpierw muszę uzyskać konsensus co do tego, jak nazywa się ten rodzaj problemu. Po drugie, muszę wiedzieć, jak powinno wyglądać wydajne rozwiązanie, jeśli chodzi o notację big-o lub cokolwiek innego. Oto przykład: Jest plansza z 4 x 4 ogniwami. Jest wiele pionków w jednym kolorze (R, G, B). Każdy kawałek koloru musi wypełnić pewną liczbę kolumn w każdym rzędzie. Możliwy przykład: Wiersz1 Wiersz2 Wiersz3 Wiersz4 Czerwony 1 2 3 2 Niebieski 2 2 0 0 Zielony 1 0 1 2 To jest dane wejściowe. Układ wejść mógłby być inny, ale zajmuje całą planszę... żadna komórka nie jest pusta. Należy zminimalizować liczbę sztuk tego samego koloru zajmujących KOLUMNĘ. Jeden z możliwych (złych) układów na podstawie danych wejściowych jest taki: 1 2 3 4 1 r b b g 2 r r b b 3 r r r g 4 r r g g To jest złe, ponieważ w rzeczywistości maksymalizuje liczbę kolorów w tej samej kolumnie. Lepszy układ jest taki: 1 2 3 4 1 r b b g 2 b r r b 3 g r r r 4 r g g r Nakładanie się jest nieuniknione, ale powinno być zminimalizowane i jest to udowodnione. Nie wiem, czy jest tylko jedno najlepsze rozwiązanie, czy może być wiele rozwiązań. Nawet jeśli mogłoby być wiele rozwiązań, musimy wymyślić tylko jedno. Gdy myślę o tym bardziej, wygląda to na luźną wersję problemu ośmiu królowych. Martwię się, ponieważ wciąż widzę rekurencję i śledzenie wsteczne. EDYCJA 1: Myślę o zrelaksowanej wersji generowania puzzli sudoku.


title: Gdzie i jak odnieść się do kompozytowych komponentów MVP?

text: Uczę się o smaku widoku pasywnego MVP (Model-View-Presenter) MVC. Zamierzam ujawnić zdarzenia z interfejsów widoku, a nie używać wzorca obserwatora, aby usunąć jawne sprzężenie z prezenterem. **Kontekst:** Windows Forms / JavaScript po stronie klienta. Jestem przekonany, że wzorzec MVP (lub ogólnie MVC) może być zastosowany na różnych poziomach interfejsu użytkownika, od głównego „Okna” do osadzonego „Pola tekstowego”. Na przykład model pola tekstowego jest prawdopodobnie tylko ciągiem znaków, podczas gdy model pola „Okno” zawiera stan widoku specyficzny dla aplikacji (np. nazwisko osoby znajdującej się w zawartym polu tekstowym). Biorąc pod uwagę bardziej złożony scenariusz: * Przeglądarka dokumentacji, która zawiera: * Panel nawigacji spisu treści * Widok dokumentu * Panel wyszukiwania Ponieważ każdy z tych 4 elementów interfejsu użytkownika jest złożony i może być ponownie użyty w innym miejscu, sensowne jest zaprojektowanie ich przy użyciu MVP. Biorąc pod uwagę, że każdy z tych elementów interfejsu użytkownika składa się z 3 komponentów; który komponent powinien być zagnieżdżony? gdzie? kto je tworzy? **Pomysł #1 - Osadź widok wewnątrz widoku z widoku nadrzędnego** public class DocumentationViewer : Form, IdocumentationViewerView { public DocumentationViewer() { ... // Niejasne, w jaki sposób model i prezenter są wstrzykiwane... TocPane = new TocPaneView( ); } protected ITocPaneView TocPane { get; zestaw prywatny; } } **Idea #2 - Osadź prezenter w widoku z widoku nadrzędnego** public class DocumentationViewer : Form, IdocumentationViewerView { public DocumentationViewer() { ... // To nie wygląda na logikę widoku... var tocPaneModel = new TocPaneModel(); var tocPaneView = nowy TocPaneView(); TocPane = new TocPanePresenter(tocPaneModel, tocPaneView); } protected TocPanePresenter TocPane { get; zestaw prywatny; } } **Pomysł #3 - Osadź widok wewnątrz widoku od nadrzędnego prezentera** public class DocumentationViewer : Form, IdocumentationViewerView { ... // Część IDocumentationViewerView: public ITocPaneView TocPane { get; ustawić; } } public class DocumentationViewerPresenter { public DocumentationViewerPresenter (model DocumentationViewerModel, widok IdocumentationViewerView) { ... var tocPaneView = new TocPaneView(); var tocPaneModel = new TocPaneModel(model.Toc); var tocPanePresenter = new TocPanePresenter(tocPaneModel, tocPaneView); view.TocPane = tocPaneView; } } **Lepszy pomysł...**


title: Więc co naprawdę *miał* Alan Kay przez określenie "zorientowany na obiekt"?

text: Podobno Alan Kay jest wynalazcą terminu „zorientowany obiektowo”. Często cytuje się go, że powiedział, że to, co dzisiaj nazywamy OO, nie jest tym, co miał na myśli. Na przykład właśnie znalazłem to w Google: > Wymyśliłem termin „zorientowany obiektowo” i mogę powiedzieć, że nie miałem na myśli C++ > > \-- Alan Kay, OOPSLA '97 Mętnie pamiętam słysząc coś całkiem wnikliwego na temat tego, co miał na myśli. Coś w stylu „przekazywanie wiadomości”. Czy wiesz, co miał na myśli? Czy możesz podać więcej szczegółów, co miał na myśli i czym różni się od dzisiejszego zwykłego OO? Jeśli masz jakieś referencje, podziel się nimi. Dziękuję.


title: Jak szybciej i dokładniej obliczyć funkcję Sin?

text: Chcę obliczyć `y(n)=32677Sin(45/1024•n)`, gdzie `y` jest liczbą całkowitą, a `n` mieści się w zakresie od 0 do 2048. Jak mogę przyspieszyć i dokładniej wykonać ten proces? Teraz chcę pokazać odpowiedź referencyjną: Ponieważ `Sin(a+b)=Sin(a)Cos(b)+Cos(a)Sin(b)` oraz `Cos(a+b)=Cos(a) Cos(b)-Sin(a)Cos(b)". Mogę więc przechowywać tylko `Sin(45/1024•1)` i `Cos(45/1024•1)`. Następnie użyj tej formuły: `Sin(45/1024•2)=Sin(45/1024•1+ 45/1024•1)", `Cos(45/1024•2)=Cos(45/1024•1+45/1024•1)", `Sin(45/1024•n)=Sin(45/1024• (n-1)+45/1024•1)`, `Cos(45/1024•n)=Cos(45/1024•(n-1)+45/1024•1)` , W ten sposób może być szybciej bez zapisywania duża tablica.


title: Jak mogę się skupić i zmotywować na projekcie?

text: Pracuję nad założeniem własnej firmy zajmującej się tworzeniem oprogramowania, ale zauważyłem, że mam poważne problemy z dotrzymaniem terminów projektów i wyprowadzeniem ich z etapu „prawie skończonego”. Czuję, że moim problemem jest to, że za bardzo lubię skomplikowane programowanie i ostatecznie przepisuję kod, aby był czystszy/bardziej wydajny/mniej podatny na błędy, aby odłożyć bardziej „nudny” rozwój. Na koniec kończę z dopracowanymi aplikacjami, ale nad projektem spędzam dwa razy dłużej, niż powinienem. Jeśli kiedykolwiek chcę, aby moja firma odniosła sukces, muszę popracować nad skupieniem się na tym, co faktycznie należy zrobić, więc pytanie brzmi: jakich technik używasz, aby utrzymać koncentrację i motywację na projekcie w swojej karierze?


title: Jak skoncentrować się na jednym projekcie na raz. Dziel i rządź nie działa dla mnie

text: > **Możliwe duplikowanie:** > Wskazówki dotyczące utrzymania koncentracji i motywacji w projekcie Mam poważne problemy z koncentracją na jednym projekcie na raz. Nie potrafię nawet podążać za podejściem „dziel i zwyciężaj”. Kiedy zaczynam projekt, staram się zrobić wszystko tak starannie, jak to możliwe, ale bardzo szybko kończy się to zepsuciem tak wielu jego elementów. Staram się dzielić i zwyciężać, ale moje podejście nie działa gładko, a potem zastanawiam się tu i tam w innych projektach. Czasami staram się poświęcić tyle godzin na jakieś błahe sprawy, które w rzeczywistości nie są nawet problemami. Jak uniknąć tego żargonu i być płynnym programistą i mieć przyjemny przepływ pracy wokół moich projektów. Mam tendencję do tracenia koncentracji na bieżącym projekcie i zastanawiania się nad innym projektem.


title: Czy uaktualnienie certyfikatu z SQL Server 2008 do 2012 jest trudniejsze niż uzyskanie go od zera?

text: Zastanawiałem się nad nowym certyfikatem MCSA dotyczącym SQL 2012 i tym, jak wydaje się, że uaktualnienie certyfikatu z roku 2008 do 2012 jest trudniejsze niż uzyskanie certyfikatu 2012 od zera. Powodem, dla którego uważam, że to prawda, jest to, że każdy, kto posiada certyfikat MCTS SQL Server 2008, może go zaktualizować do MCSA 2012, przechodząc 2 testy (457 i 458). Jeśli próbujesz uzyskać go od zera, musisz przejść 3 testy (461, 462 i 463 - które są prawie takie same jak 432, 433 i 448 dla SQL 2008). Ale chodzi o to, że chociaż jeden test mniej do ulepszenia, wszystkie umiejętności potrzebne do przejścia 461, 462 i 463 są ściśnięte na 457 i 458, więc wydaje się, że łatwiej jest zacząć od zera niż ulepszać. jakieś pomysły?


title: Tworzenie dokumentu standardów kodowania

text: Pracuję w firmie zajmującej się systemami sterowania, gdzie podstawową pracą jest SCADA i PLC, a także inne systemy sterowania. Rozwój oprogramowania nie jest czymś, co zajmuje się firma, poza drobiazgami tu i tam, dopóki nie zapadła decyzja o stworzeniu wewnętrznego systemu zarządzania projektami i oceny. Ten projekt został podjęty przez ludzi, którzy przybyli tutaj jako programiści, a my jesteśmy w większości juniorami. Projekt zaczął się skromnie, więc dokumentowaliśmy tylko takie rzeczy, jak projektowanie, bazy danych itp., ale nigdy tak naprawdę nie uzgodniliśmy formatu/konwencji kodowania. Zaczęliśmy używać Stylecop, aby mieć pewność, że mamy dobrze udokumentowany kod, ale uważam, że potrzebujemy oficjalnego dokumentu dotyczącego konwencji/praktyk kodowania, abyśmy mogli kontynuować dobry standard, a jeśli w przyszłości będą jakieś większe prace rozwojowe, ktokolwiek nad tym pracuje ma dobrą płytkę stomijną. W tym tkwi problem, nie mam pojęcia, jak napisać dokument dotyczący konwencji i standardów kodowania, wszystko, o czym myślę, to przykłady dobrych i złych praktyk (na przykład przypadek wielbłąda przy nazywaniu zmiennych, unikaniu notacji węgierskiej itp.) Wszyscy jesteśmy wystarczająco kompetentni programiści (najwyraźniej), ale po prostu nie mamy karty na tego rodzaju rzeczy. Mówiąc o tym, moje pytanie brzmi: **Jakie są kluczowe aspekty i zawartość dobrego dokumentu standardów kodowania?**


title: jak bezpieczne/rozsądne jest używanie git do wdrażania na moim serwerze produkcyjnym aplikacji internetowej?

text: Zacząłem od sftp, a następnie przeszedłem na WebDAV i obecnie używam rsync przez ssh do wdrażania wszelkich aktualizacji/uaktualnień z mojego serwera deweloperskiego na serwer produkcyjny. Nadal nie jestem zadowolony z używania tego systemu i myślę, że użycie git do wdrożenia może być lepsze, głównie ze względu na możliwość natychmiastowego wycofania wszelkich zmian za pomocą tylko jednego polecenia. Oprócz używania tunelu ssh do ściągania i wypychania na serwer produkcyjny (pozostawiając usługę git za zaporą ogniową), zdałem sobie również sprawę, że muszę edytować .htaccess, aby zablokować dostęp sieciowy do folderu .git. Czy to jest właściwe podejście, czy powinienem sprawdzić coś jeszcze, zrobić coś w inny sposób, czy powinienem pójść w zupełnie innym kierunku?


title: Czy tylko firmy, a nie prywatni programiści, mogą korzystać z VS Studio 2012 Express Desktop?

text: Programowanie to moje hobby i właśnie pobrałem VS Studio 2012 Express Desktop. Teraz zamierzam go zarejestrować, ale chcą, abym przekazał im informacje biznesowe > ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/YrryP.png) Czy tylko firmy i prywatni programiści mogą używać VS Studio 2012 Express Desktop? A co mam wpisać w te pola tekstowe?


title: Pięciu nowych młodszych programistów i mnóstwo skomplikowanych zadań. Co teraz?

text: Nasza firma zatrudniła pięciu nowych młodszych programistów, aby pomogli mi opracować nasz produkt. Niestety nowe funkcje i nadchodzące poprawki błędów zwykle wymagają głębszej wiedzy, niż zwykle posiada świeżo upieczony programista (wątkowość/współbieżność, debugowanie wąskich gardeł wydajności w złożonym systemie itp.) Delegowanie (i planowanie) zadań, które (prawdopodobnie) mogą rozwiązać, odpowiadając ich pytania, mentoring/zarządzanie nimi, przeglądanie ich kodu pochłaniają cały mój czas i często czuję, że mógłbym rozwiązać problemy mniej czasu niż cały proces delegowania (licząc tylko mój czas). Poza tym nie mam czasu na rozwiązywanie zadań, które wymagają głębszej znajomości systemu/bardziej zaawansowanych umiejętności i nie wydaje się, żeby miało się to zmienić w najbliższej przyszłości. Więc co teraz? Co zrobić, aby efektywnie wykorzystać ich i swój czas?


title: Dlaczego Zend Framework jest tak skomplikowany?

text: Jestem web developerem i mam doświadczenie w tworzeniu kilku aplikacji webowych w PHP. Mam pomysł na stworzenie produktu dla siebie i zdecydowałem się na wykorzystanie frameworka opartego na MVC, ponieważ bardzo podoba mi się idea MVC i to, jak łatwo można zarządzać i modyfikować aplikację bez żadnych trudności. Wybrałem Zend Framework i wydaje się to trudniejsze niż nauka nowego języka programowania. Tak wiele rzeczy dzieje się jednocześnie, nawet po uruchomieniu małej aplikacji. Podobnie idea routingu jest bardzo złożona, ponieważ jest nowością dla programisty. Wiem, że faceci tutaj przeczytali tysiące takich pytań, jak to, które zadaję, ale nie chcę uczyć się Zend Framework z dnia na dzień. Jestem gotów poświęcić tyle czasu, ile potrzeba, ale do tej pory nie ma to dla mnie sensu. W bibliotece Zend jest tysiące klas, ale skąd noob miałby wiedzieć, gdzie użyć konkretnej klasy i jak jej użyć? Wciąż jest mi bardzo trudno zrozumieć bootstrap Zend Framework i jego mapowanie. Przeczytałem instrukcję, postępuję zgodnie z nią i wszystko zaczyna działać, ale tak naprawdę nie wiem dokładnie, jak to się dzieje. Nadal nie mam też pojęcia, jak współpracują ze sobą modele, widoki i kontrolery oraz jak zaplanować aplikację w Zend Framework. Jeśli chodzi o core php, mam dokładnie pomysł, co zrobić i łatwo przetłumaczyć je w kodzie, ale w Zend Framework nie wiem, jak przetłumaczyć mój pomysł.


title: Relacja między „linijkami najdłużej działającego programu” w języku a jego znajomością?

text: W niektórych aplikacjach online do głównego programu komputerowego jest napisane: > Proszę wymienić języki programowania, w których napisałeś programy. > Dla każdego języka podaj w wierszach długość najdłuższego działającego programu > napisanego w tym języku. Możesz przybliżyć, ale tylko > policzyć te części programu, które sam napisałeś. 1. Nie całkiem tego pamiętam i nigdy nie liczyłem linii każdego programu. Czy programiści zawsze wiedzą w przybliżeniu, ile linii w każdym z jego programów i rejestrują je? 2. Jaka jest relacja między „linijkami najdłuższego działającego programu” w języku a jego znajomością? Zazwyczaj, ile wierszy wskazuje, że programista jest doskonały, dobry, sprawiedliwy lub nie zna języka? Czy znajomość „linii najdłuższego programu roboczego” jest naprawdę pomocna?


title: Jak często uruchamiasz i testujesz swój kod podczas programowania?

text: Zwłaszcza pisząc nowy kod od zera w C, piszę go godzinami, a nawet dniami bez uruchamiania kompilatora do czegokolwiek poza okazjonalnym sprawdzaniem składni. Zwykle piszę większe fragmenty kodu ostrożnie i dokładnie testuję tylko wtedy, gdy jestem przekonany, że kod robi to, co powinien robić, analizując przepływ w mojej głowie. Nie zrozum mnie źle - nie napisałbym w ogóle 1000 wierszy bez testowania (to byłoby hazardem), ale napisałbym cały podprogram i przetestowałbym go (i naprawiłby go w razie potrzeby) po tym, jak myślę, że skończę. Z drugiej strony, widziałem głównie nowicjuszy, którzy uruchamiają i testują swój kod po każdej linijce wprowadzonej do edytora i myślą, że debuggery mogą być substytutem ostrożności i zdrowego rozsądku. Uważam, że po nauczeniu się składni języka jest to bardzo rozpraszające. Jak myślisz, jaka jest odpowiednia równowaga między tymi dwoma podejściami? Oczywiście ten pierwszy wymaga większego doświadczenia, ale czy wpływa pozytywnie czy negatywnie na produktywność? Czy ten drugi pomaga w dokładniejszym wykryciu błędów?


title: Dostęp warstwy biznesowej do warstwy danych

text: Mam warstwę biznesową (BL) i warstwę danych (DL). Mam obiekt o z kolekcją obiektów podrzędnych typu C. Chciałbym zapewnić semantykę, taką jak następujące o.Children.Add("info"). W BL chciałbym mieć statyczną KLASĘ, której wszystkie klasy warstwy biznesowej używają, aby uzyskać odniesienie do bieżącej instancji warstwy danych. Czy jest jakiś problem z tym lub muszę użyć wzorca fabryki, aby ograniczyć tworzenie do klasy A w BL, która zna instancję DL. * * * Pozwól mi wyjaśnić. W przeszłości podczas definiowania DL tworzyłem interfejs IDL, który implementuje DL. Jedynymi obiektami, na które zezwalam na tworzenie z mojego BL, są fabryki, które w swoich konstruktorach przyjmują odniesienie do IDL IE IDL idlRef = new DataLayer(); IBlFactory iFac = nowa BLFactory(IDL); IBLa = IBlFabryka.Geta(...); Ponieważ próbowałem wykorzystać statyki i singletony z mojego systemu, moja fabryka tworzy wszystkie obiekty i zawsze przekazuje referencję IDL do nowych obiektów. Niektórzy z mojego zespołu narzekali na moje częste używanie interfejsów i fabryk i chcieliby bezpośrednio korzystać z konkretnych klas z BL. Problem polega na tym, że jeśli masz obiekt, który można utworzyć, tj. Nowy obiekt, lepiej odciąć, korzystając z fabryki. IE IBLA oBLA = iFac.GetBLA(); lub zmuszanie klienta do przekazywania referencji do DL do nowego obiektu. IE BLA oBLA = nowy BLA(idlRef); czy też testowalność byłaby naprawdę uszkodzona przez posiadanie jednej statycznej właściwości w BL. Statyczny IDL Bieżący DL; Zezwolenie, choć z pewnym złamaniem enkapsulacji, bardziej zwięzły styl Zakładając, że każdy obiekt BL będzie wiedział, jaki jest bieżący DL.


title: Jakie są najlepsze i najgorsze zasady prowadzenia zespołu programistycznego, które widziałeś?

text: Gdybym miał zacząć zarządzać zespołem programistów (którym nie jestem, pytam tylko z ciekawości), jakie zasady dotyczące biura / zespołu, które widziałeś, są szczególnie sprzyjające lub szczególnie uniemożliwiające produktywność i pracę zespołową ? Niektóre z dobrze znanych złych to regularne nadgodziny, mikrozarządzanie, brak uprawnień administratora, bardzo rygorystyczne godziny pracy i niekończące się wymagania dotyczące spełniania. Czego jeszcze można unikać i jakie ciekawe zasady, które widziałeś, czynią cuda dla zespołu?


title: Jakie są najlepsze opcje edukacyjne dla inżynierów oprogramowania po studiach licencjackich?

text: Po niedawnym ukończeniu BSC (informatyka) pracuję jako inżynier oprogramowania. Z rocznym doświadczeniem, jakie opcje edukacyjne są dla mnie dostępne? Chcę iść dalej w zarządzaniu. Proszę o sugestie. Rozważam MSC, ale otrzymałem negatywną odpowiedź od wielu osób.


title: Pokazywanie interakcji użytkownika i interfejsu użytkownika na diagramie sekwencji

text: Muszę narysować diagram sekwencji i nie jestem pewien, czy poprawne jest pokazanie interakcji między użytkownikiem a interfejsem użytkownika na tym diagramie. Na przykład chcę, aby panel był widoczny lub niewidoczny na podstawie zaznaczenia pola wyboru przez użytkownika. Czy dobrze jest mieć to na diagramie sekwencji? i jak mogę to narysować? Dziękuję


title: Różnica między REPL a powłoką interaktywną

text: Noob pytanie. Nie jestem w stanie odróżnić REPL od powłoki interaktywnej po prostu czytając definicje w Wikipedii. Wiki zauważa, że REPL jest szczególnym rodzajem interaktywnej powłoki językowej. Czy to jednak odpowiedni podzbiór? Definicja Wiki wydaje się ograniczać terminologię REPL do języków podobnych do Lisp, podczas gdy podane właściwości tak naprawdę nie zawierają żadnych cech wyróżniających. W szczególności, czy słuszne byłoby nazywanie IPythona REPL?


title: Jak działa zasada inwersji zależności w językach bez interfejsów?

text: W C#/Java zasada odwrócenia zależności jest często demonstrowana przez klasy wysokiego poziomu, które zależą od interfejsu/abstrakcji (którego jest właścicielem). Klasy niskiego poziomu zaimplementują interfejs, odwracając w ten sposób zależność. Zastanawiam się, jak to jest stosowane w językach obiektowych bez interfejsu? Np. nie jestem ekspertem od Rubiego, ale wygląda na to, że w tym języku nie da się zdefiniować interfejsów jak w Java/.NET


title: Jakieś dobre narzędzia do zarządzania listą zadań?

text: Zmieniamy sposób zarządzania zadaniami administracyjnymi, wsparcia i rozwoju o niskim priorytecie. Plan jest taki, aby mieć „stos” zadań, który każdy może odebrać, jeśli/kiedy jest mu mało w pracy. Chcielibyśmy mieć narzędzie ułatwiające znajdowanie zadań, sprawdzanie ich i pracę nad nimi, a także ich tworzenie i priorytetyzację. Moglibyśmy to zrobić na prostym poziomie, używając niestandardowej listy punktów programu SharePoint, ponieważ jest ona dostępna i całkiem dobrze pasuje do naszego środowiska, ale czy ktoś ma jakieś doświadczenie w korzystaniu z narzędzi innych firm? Jest trochę podobny do standardowego systemu biletowego, więc myślę, że moglibyśmy spojrzeć na rzeczy takie jak Bugzilla, ale nie mam żadnego doświadczenia w takich rzeczach (nasz system zarządzania incydentami, którego używamy w hosue, nie jest odpowiedni do tego zadania) . czy ktoś używał jednego w ten sposób? Lub wszelkie inne sugestie dotyczące narzędzi byłyby mile widziane.


title: Kiedy zazwyczaj sam piszesz moduł oprogramowania, a kiedy kupujesz istniejący produkt?

text: Próbuję znaleźć uzasadnienie twojej decyzji, kiedy co zrobić. Byłoby wspaniale uczyć się od ciebie. Chętnie przedstawię więcej kontekstu, ale na razie chcę go uogólnić.


title: Używanie makra jako warstwy abstrakcji

text: Prowadzę dyskusję z kolegą na temat używania makra jako cienkiej (niezwykle) warstwy abstrakcji w porównaniu z używaniem otoki funkcji. Przykładem którego użyłem jest metoda Macro. #define StartOSTimer(period) (microTimerStart(period)) Metoda wrappera funkcji void StartOSTimer(period) { microTimerStart(period); } Osobiście podobała mi się druga metoda, ponieważ pozwala na przyszłe modyfikacje, zależności #include również są abstrakcyjne.