title: alternatywa dla zmiennych środowiskowych

text: Ilość serwerów i złożoność naszej aplikacji rośnie, a teraz mamy serwery w różnych regionach (hostowane na AWS). Niektóre operacje na bazie danych wymagają małych opóźnień, więc utknęliśmy bazę danych w każdym regionie (co jest w zasadzie pamięcią podręczną użytkownika), aby utrzymać niskie opóźnienia w sieci. Sposób, w jaki serwer aplikacji aktualnie wie, do której pamięci podręcznej/bazy danych użytkownika ma wykonać swoje wywołanie, zależy od ustawionej w nim zmiennej środowiskowej. To działa dobrze, ale wydaje się hackowe i nieoptymalne. Czy można to zrobić automatycznie? Rozważałem użycie pakietu takiego jak fping i pingowanie każdej bazy danych, gdy serwer aplikacji jest ponownie ładowany (lub buforowany po raz pierwszy) i używając odpowiednich opóźnień, aby zdecydować, która baza danych ma najniższe opóźnienie dla każdego serwera aplikacji. Nie jestem jednak pewien, czy to najlepszy pomysł.


title: Powody, dla których programista Java uczy się RoR

text: Zastanawiasz się tylko, czy są jakieś powody, dla których programista Java powinien uczyć się **Ruby on Rails**, wiedząc, że istnieją technologie takie jak _Grails_ lub (zwłaszcza) **Spring Roo**, które mogą być bardziej znajome?


title: Algorytmy dziel i zwyciężaj — dlaczego nie podzielić na więcej części niż dwie?

text: W algorytmach dziel i zwyciężaj, takich jak quicksort i mergesort, dane wejściowe są zwykle (przynajmniej w tekstach wprowadzających) dzielone na **dwa** , a dwa mniejsze zestawy danych są następnie przetwarzane rekurencyjnie. Ma dla mnie sens, że przyspiesza to rozwiązanie problemu, jeśli dwie połówki zajmują mniej niż połowę pracy związanej z całym zbiorem danych. Ale dlaczego nie podzielić zbioru danych na trzy części? Cztery? _n_? Myślę, że praca polegająca na dzieleniu danych na wiele, wiele podzbiorów sprawia, że nie jest to tego warte, ale brakuje mi intuicji, aby zobaczyć, że należy zatrzymać się na dwóch podzbiorach. Widziałem również wiele odniesień do szybkiego sortowania trójdrożnego. Kiedy to jest szybsze? Co stosuje się w praktyce?


title: Jeśli programujesz w ASP.NET, jakich innych technologii używasz?

text: Nie byłem pewien, czy bardziej pasuje to tutaj, czy StackOverflow. Zawsze odrzucałem tworzenie stron internetowych, ponieważ stos technologii wydawał się po prostu bałaganem. Wygląda na to, że sieć stała się dość popularna, więc zamierzam zająć się tworzeniem stron internetowych, przynajmniej w przypadku małego projektu, o którym myślę. Jestem programistą Microsoft, więc zamierzam używać ASP.NET. Wiem, jak działają technologie internetowe na wysokim poziomie, rozumiem, co może zrobić Javascript, dostaję AJAX (koncepcyjnie). CSS i HTML wydają się brzydkie, ale rozumiem, do czego służą. Czy jako programista ASP.NET pracujesz bezpośrednio z JavaScript lub HTML? Czy AJAX jest zgrabnie wyabstrahowany, czy też robisz to „ręcznie”? Czy są jakieś inne technologie, z których korzystasz? I w podobnej notatce, nie do końca widzę, gdzie HTML 5 pasuje do ASP.NET, jeszcze. Wygląda na to, że Microsoft wydaje wiele szumów, że HTML 5 jest w rzeczywistości przyszłością sieci w przeciwieństwie do Silverlight, więc czy wszyscy profesjonalni programiści ASP.NET rozumieją lub używają funkcji HTML 5? Doceniam, że to trochę niejasne, myślę, że wiele z nich stanie się jaśniejsze, gdy zacznę, ale czułbym się bezpieczniej, gdybym miał kilka kojących słów i wskazówek od ludzi, którzy już przez to przeszli.


title: ile naprawdę muszę wiedzieć, aby zostać Jr Developerem?

text: Uważam, że bardzo dobrze rozumiem podstawy logiki programowania (przekazywanie zmiennych, zagnieżdżone instrukcje warunkowe itp.). Obecnie przeglądam książkę na temat ASP.NET i jestem prawie zagubiony we wszystkich modelach renderowania stron, niestandardowych renderowanych kontrolkach, kontrolkach złożonych itp. Rozumiem, jak używać standardowych kontrolek bez problemu. Czy naprawdę muszę rozumieć te wszystkie inne rzeczy, aby zostać młodszym programistą? Wszelkie porady są mile widziane!


title: Co wyróżnia się w CV Juniora

text: Szukam porady, miejmy nadzieję od osób bardziej doświadczonych ode mnie. Zacznę aplikować na stanowiska juniorów do rozwoju .net latem. W tej chwili jedyne, co mam na swoim CV, to projekt, który wykonałem na Windows Phone 7 o nazwie sprout sms. Umożliwia użytkownikowi wysyłanie tekstu internetowego dostarczonego przez irlandzkich operatorów. Aplikacja radzi sobie dobrze i jest w pierwszej dziesiątce na moim lokalnym rynku (Irlandia). Z zawodu jestem sprzedawcą i taki jest zakres mojego zatrudnienia. Nie byłem na studiach i ze względu na zobowiązania finansowe nie byłbym w stanie przejść na ścieżkę edukacji w pełnym wymiarze godzin. W młodszym wieku byłem na bieżąco z różnymi technologiami związanymi z .net i zamierzam teraz zmienić karierę. To, co chcę zobaczyć, to to, co wyróżnia się w CV juniorów. Mój brak wykształcenia jest przeciwko mnie, więc staram się to zrekompensować praktycznym doświadczeniem. Jestem otwarta na wszelkie sugestie i od końca tego miesiąca mogę śmiało realizować „nacięcia”, które wyróżnią moje CV. Krótko mówiąc, jeśli zatrudniasz Juniora, co chciałbyś zobaczyć, co skłoniłoby Cię do ponownego spojrzenia lub poproszenia o rozmowę kwalifikacyjną? UWAGA: Obawiam się, że jest to subiektywny temat, zamiast debatować, jakie są najlepsze pozycje w CV Juniora. Chciałbym się skoncentrować na tym, jakie informacje przekażesz juniorowi, który chce ubiegać się o pracę w tym roku. Dzięki wszystkim, którzy odpowiedzą. EDYCJA: Dzięki za wszystkie odpowiedzi, gdybym mógł, udzieliłbym wszystkim odpowiedziom zielonego haczyka. Przyznałem kleszcza na podstawie tego, co czułem, że otrzymałem odpowiedź, ale wszystkie są warte kleszcza. Zagłosowałem za wszystkimi odpowiedziami, które również dały dobre informacje. Jeśli uważasz, że możesz dodać więcej do tego pytania / odpowiedzi, byłoby to bardzo mile widziane. EDYCJA 2: Chciałem tylko, aby wszyscy wiedzieli, że korzystając z podanych tutaj porad i odrobiny wytrwałości, dostałem swoją pierwszą rolę dewelopera. Na wynos? Projekty osobiste lub pomoc w innych projektach mają duże znaczenie, umieć rozmawiać, bronić się i ustępować podczas omawiania ich.


title: Jak łatwo jest uzyskać pracę programisty na poziomie podstawowym?

text: > **Możliwy duplikat:** > Jakie podstawowe umiejętności musi posiadać nowy absolwent informatyki, aby > był zdolny do zatrudnienia? Jestem na przedostatnim semestrze na kierunku Informatyka i zastanawiam się nad pracą jako programista. Jak łatwo jest dostać pracę jako programista na poziomie podstawowym? Jakie umiejętności powinienem posiadać?


title: Jakich umiejętności szukasz, zatrudniając nowicjusza/nowicjusza do rozwoju?

text: Naprawdę chcę zadać te pytania moim kolegom programistom tutaj w Programrs.SE, ponieważ zatrudniam nowicjuszy dla mojej firmy. Mimo że znam kilka podstawowych pytań, które można zadać nowicjuszom podczas rozmowy kwalifikacyjnej i chcę wiedzieć, jakie są umiejętności, których szukasz, zatrudniając nowicjusza / nowicjusza do rozwoju?


title: Jakie podstawowe umiejętności musi posiadać nowy absolwent informatyki, aby nadawać się do zatrudnienia?

text: Dyplom informatyki (jak każdy licencjat) nie przygotowuje Cię do natychmiastowej produktywności. I mam wrażenie, że pracodawcy coraz mniej chętnie organizują to szkolenie wstępne. (A przynajmniej jeśli posiadasz te **podstawowe umiejętności*** , masz do wyboru większy wybór „pierwszych prac”). Na jakich umiejętnościach powinien skoncentrować się senior, aby uczynić siebie bardziej zdolnym do zatrudnienia? A jak możesz zdobyć te umiejętności? *EDIT: _nie mówię_ o doświadczeniu/opanowaniu _technologii_. Mówię o **podstawowych umiejętnościach**, takich jak kontrola źródła (nie opanowanie konkretnego SC, ale po prostu umiejętność posługiwania się _jeden_ zrozumieniem pojęć) i testowanie jednostkowe (posiadanie pisemnych testów jednostkowych wykorzystujących przynajmniej część sławy) itp. .


title: Dobre referencje dotyczące cen aplikacji?

text: Czy ktoś może wskazać mi materiały referencyjne na temat tego, czego firmy mogą się spodziewać za aplikacje zlecane na zewnątrz? Miałem nadzieję, że znajdę coś w publikacji branżowej lub podobnej, ale znalazłem tylko dwa lub trzy artykuły do przytoczenia z jakimkolwiek poczuciem wiarygodności. Rozmawiamy z klientem o jego pierwszej aplikacji (i naszej) i ponieważ żadna ze stron nie wie, jakiej liczby oczekiwać na początku negocjacji, chciałbym trochę amunicji, aby móc powiedzieć: „Na otwartym rynku , możesz spodziewać się, że aplikacja taka jak ta zacznie działać w okolicy...” Wszelkie linki, a nawet sugestie wyszukiwanych haseł będą mile widziane. Dziękuję, scenariusz Mary Kroll Post: mam gotowe „Wielbłądy i gumowe kaczuszki” Joela Spolsky'ego oraz „Don't Just Roll the Dice” Neila Davidsona. Skupiam się bardziej na tym, co jest powszechne w branży, niż na stawce x godzin itp.


title: Czy niedogodności związane z łączeniem w SVN przed wersją 1.5 są już przestarzałe, gdy brak metadanych już nie występuje?

text: Zaczynam pracę z SVN i tak wiele źródeł twierdzi, że łączenie jest bardzo trudne w SVN w porównaniu z narzędziami DVCS. Ostatnie pytania, jakie mogłem znaleźć tutaj na SE, pochodzą z 2012 roku. Czasami pojawia się wzmianka, że powodem jest to, że SVN przed wersją 1.5 nie miał metadanych, ale SVN jest teraz w wersji 1.8.9. Biorąc pod uwagę, że SVN jest teraz znacznie bardziej dojrzały niż wersja 1.5, a zwłaszcza fakt, że nie używaliśmy SVN 1.5, więc nie cierpimy z powodu wspomnianego braku metadanych -- ** czy te argumenty przeciwko SVN?** Rozumiem, że DVCS ma zupełnie inne podejście, które często jest bardziej pożądane, ale dla tych, którzy „muszą” używać SVN z jakiegokolwiek powodu, łączenie nie jest już tak naprawdę „piekłem”, prawda?


title: Właściwa kolejność czynności przy scalaniu za pomocą SVN?

text: Jestem całkowicie nowy w CVCS (w szczególności SVN). Uważam, że większość zasobów skupia się bardzo mocno na poleceniach wiersza poleceń (nieistotne; używamy Eksploratora Windows + TortoiseSVN) i na strukturze (np. projekty wewnątrz naszego zewnętrznego TTB itp.). Oto kwestia łączenia, której nie jestem pewien: na podstawie moich testów w piaskownicy zrozumiałem, że **scalanie powinno odbywać się trochę wstecz?** Najpierw pomyślałem, że scalanie oznacza przejście z gałęzi do pnia, ale teraz wydaje mi się, że powinienem faktycznie scalić pień z moją gałęzią, naprawić tam konflikty i tylko _wtedy_ zatwierdzić moją gałąź do gałęzi? Powiedzmy, że jestem odpowiedzialny za scalenie gałęzi z główną linią i wszyscy zadeklarowali swoje lokalne zmiany w tej gałęzi. Przełączam teraz moją kopię roboczą na gałąź i łączę magistralę z moją kopią roboczą, aby lokalnie rozwiązywać wszelkie konflikty i porządkować. Po zakończeniu zatwierdzam moją kopię roboczą do bagażnika (na tym etapie nie powinno być żadnych konfliktów lub prawie żadnych konfliktów). Zasadniczo jest to również to, co należy zrobić podczas zatwierdzania zmian z kopii roboczej do gałęzi. Prawidłowy? Zło? Czy brakuje mi niektórych kroków? Wydaje się to skomplikowane, ale ma sens. Nie kłóćmy się o to, że łączenie w SVN jest trudniejsze niż w DVCS, ponieważ nie jest to coś, co mogę zmienić. Nie pytam też o konkretne akcje wiersza poleceń, ponieważ używamy TortoiseSVN.


title: planowanie pełnowymiarowej aplikacji webowej

text: Chciałem zbudować pełnowymiarową aplikację CMS, która będzie ukierunkowana na określone przepływy pracy, ale przeszkodą na mojej drodze jest to, że musiałbym usiąść i w pełni poznać karierę, aby zaplanować i zbudować aplikację, która pomoże lub poprowadzi pracodawców już w środowisku. To nie jest tak bardzo pytanie programistyczne, ale w oparciu o niektóre z twoich doświadczeń, o czym muszę pomyśleć przed rozpoczęciem pracy z aplikacją? Oto kilka pytań, które sobie zadałem: 1. Jakie jest zapotrzebowanie na tę aplikację? 2. kto jest grupą docelową? 3. czego muszę się nauczyć? 4. czy naprawdę warto poświęcić czas na naukę? 5. czy to będzie kosztować i ile? 6. w jaki sposób usługa będzie świadczona klientowi? 7. Czy ta aplikacja już istnieje? Jeśli tak, jakie funkcje ma, a jakich nie ma 8. jakich naprawdę oczekują klienci w tej aplikacji, których nie mogą znaleźć. Rozumiem, że większość z tego może być rozsądna, ale posiadanie części twojego wkładu z własnego doświadczenia może pomóc w odpowiedzi na pytania, o których prawdopodobnie nawet nie pomyślałem. Będę używał php5 i mysql, ponieważ to już wiem. Moje pytanie w zasadzie jest takie, że gdybyś miał zbudować aplikację internetową, powiedzmy CMS do księgowości i nie miałbyś pojęcia na ten temat i że był to bardzo gorący projekt, co byś zadał sobie? (to jest na przykład)


title: Edytor WYSIWYG - wbudowane komentarze

text: Pracuję na stronie cms kierowanej przez użytkowników. Pomyśl o tym jak o przepełnieniu stosu. Użytkownicy mogą pisać posty i publikować je w sieci. Do generowania treści używam edytora WSGI. Jedną z wdrażanych przeze mnie funkcji jest możliwość komentowania przez użytkowników określonej sekcji posta użytkownika. Staram się wymyślić czysty sposób na zaimplementowanie tej funkcji. Moim obecnym planem jest dostosowanie edytora WYSIWYG do generowania unikalnego identyfikatora na `<p>`, a następnie oddzielne przechowywanie komentarzy, a po załadowaniu strony również czytanie komentarzy i wykonywanie magii jquery. Wszyscy użytkownicy, którzy będą generować treści, będą administratorami, więc nie boję się, że ktoś będzie grzebał w identyfikatorach. To jedno z podejść, które znalazłem, ale miałem nadzieję, że uzyskam informację zwrotną lub alternatywne sposoby osiągnięcia tego, czego potrzebuję. Kolejną rzeczą, którą próbuję rozgryźć, jest to, jak mogę poradzić sobie z użytkownikiem edytującym post, który został skomentowany...


title: Czy metody iteracyjne zmniejszają złożoność cyklomatyczną i poprawiają podatność na wsparcie?

text: Czy metody iteracyjne, takie jak często spotykane we współczesnych językach, takich jak C#, JavaScript i (miejmy nadzieję) w Javie 8, zmniejszają wpływ złożoności cyklomatycznej na zrozumiałość i możliwość obsługi kodu? Na przykład w C# możemy mieć następujący kod: List<String> filterList = new List<String>(); foreach (String s in originalList){ if (matches(s)){ filterList.add(s); } } Ma to prostą cyklomatyczną złożoność wynoszącą 2. Możemy łatwo przepisać to jako: List<String> filterList = originalList.where(s => match(s)); Który ma prostą złożoność cyklomatyczną równą 0. Czy to faktycznie skutkuje bardziej obsługiwanym kodem? Czy są jakieś aktualne badania na ten temat?


title: Jak mogę przekonwertować pliki PPT na PNG w PHP bez COM?

text: Muszę przekonwertować pliki Powerpoint do PNG w PHP. Mogę wykonać konwersję za pomocą COM w PHP, ale COM jest obsługiwany tylko w systemie Windows. Muszę to zrobić zarówno w systemie Windows, jak i Linux. Zastanawiam się, czy ktoś da mi wskazówki dotyczące tego nawrócenia.


title: Konwencja nazw dla czytelnika i pisarza

text: Próbuję nazwać składnik, który będzie mógł zarówno odczytywać z `InputStream` (plik lub w inny sposób), jak i pisać do `OutputStream`; służąc w ten sposób zarówno jako „Czytnik”, jak i „Writer”. Jak dotąd najlepsze, jakie wymyśliłem, to: * `ReaderWriter` * `IOStreamManager` * `StreamManager` Jakieś dobre pomysły?


title: Jak można oczekiwać używania otwartych gniazd z kontynuacją [rozdzieloną]?

text: Próbuję dowiedzieć się, jak otwarty uchwyt gniazda lub pliku powinien współdziałać z kontynuacją. Wyszukiwanie wykazało, że `dynamic-wind` jest prawdopodobnie częścią rozwiązania, ale bardziej interesuje mnie metodologia niż implementacja, a jedyne, co udało mi się znaleźć, to jak wdrożyć ją w różnych warunkach. Czy programiści w ogóle używają gniazd w kontynuacjach w taki sposób, że konieczne jest ich zamknięcie przez `dynamic-wind`? A może jest to zwykle sposób na zaimplementowanie bloku „w końcu”, jeśli kontynuacja kończy się poza miejscem, w którym obsługiwane jest gniazdo? Co powinno się stać, jeśli kontynuacja zostanie ponownie wprowadzona po tym, jak hipotetyczny „dynamic-wind” zamknie gniazdo?


title: Co oznacza „trywialne”?

text: Często spotykasz stwierdzenia typu „wszystkie nietrywialne programy zawierają błędy” lub „wszystkie nietrywialne abstrakcje są nieszczelne”. Ale co sprawia, że program jest „trywialny” zamiast nietrywialny? Gdzie jest granica, przy której możemy powiedzieć, że program nie jest trywialnymi i „przepraszającymi” błędami? Nawet coś o długości zaledwie kilku linijek może zawierać błędy. Załóżmy, że masz prosty program wiersza poleceń w C, który pyta „Jak się nazywasz?”, odczytuje odpowiedź za pomocą scanf lub pobiera, przechowuje ją w buforze i wypisuje „Witaj” + imię. Ten program może łatwo mieć przepełnienie bufora, jeśli dane wejściowe są większe niż bufor, więc może mieć błąd, nawet jeśli jest to tylko kilka linii. Ale jeśli upewniłeś się, że zawsze przydzielasz eblnough pamięci lub sprawdzane granice itp., nie masz błędu. Czy program jest „trywialny” czy nie? Może być wadliwy lub nie, ale jest mały i prosty. Czy możemy nadać jakiekolwiek znaczenie idei „trywialnego programu”, czy jest to tylko wymówka dla niechlujstwa?


title: rekomendacja wzorca bezpieczeństwa użytkownika/najlepsze praktyki

text: Szukam dobrego odniesienia do wzorców, które mają zastosowanie do bezpieczeństwa użytkowników i list ACL dla aplikacji sieciowych dla wielu użytkowników. Piszę od nowa dość dużą aplikację. Teraz patrzę na zarządzanie użytkownikami i bezpieczeństwo. Nie interesują mnie metadane użytkowników, ale listy ACL i bezpieczeństwo. Obecnie aplikacja posiada użytkowników, grupy i role. Użytkownicy i role mają listy ACL. Grupy nie. Użytkownik może należeć do żadnej lub dowolnej liczby grup i/lub ról. Nie mogę znaleźć dobrego powodu, aby nie łączyć ról i grup. Chciałbym jednak usłyszeć różne opinie na ten temat. Miło byłoby wskazać na pewne wzorce projektowe i odniesienia na ten temat.


title: Analiza techniczna w tworzeniu oprogramowania

text: Co powinna zawierać dobra analiza techniczna w tworzeniu oprogramowania? Dlaczego potrzebujemy analizy technicznej? dlaczego nie możemy po prostu zacząć kodować? Dostałem to pytanie od klienta, który nie zapłaci za analizę.


title: Czego powinienem się uczyć, HTML czy XHTML?

text: Po prostu uczę się HTML, ale niektórzy twierdzą, że XHTML jest lepszy. W3C zaleca XHTML i wiem, że W3C jest bardziej wiarygodny, prawda?


title: Gdzie mogę dowiedzieć się o dziwactwach poszczególnych przeglądarek?

text: Jestem profesjonalnym programistą iOS, Java i C#. Teraz chcę zbudować stronę internetową. Problem polega na tym, że już zacząłem go budować i stwierdzam, że IE nie renderuje go poprawnie. Jednak w FF renderuje się znacznie lepiej. Gdzie jest najlepsze źródło informacji dla kogoś na moim stanowisku? Jestem profesjonalnym programistą, ale potrzebuję czegoś, co pozwoli mi szybko przyswoić sobie „dziwaczność”, jeśli chcesz, css i html.


title: Jak sprzedajesz pomysł wysyłania programistów na konferencje użytkowników?

text: Jak sprzedajesz kierownictwu firmy, aby wysyłać programistów na konferencje użytkowników? Na razie załóżmy, że na początek wybralibyśmy konferencje krajowe.


title: Historyczne początki Scala implicits

text: Scala została nazwana złożoną z bogatym zestawem funkcji przez wielu moich kolegów, a niektórzy nawet obwiniali wszystkie te _nowe_ funkcje. Podczas gdy większość programistów jest świadoma funkcji obiektowych, a przynajmniej ci przyzwoici również wiedzą o programowaniu funkcjonalnym, jest jedna cecha szczególnie w Scali, której nie znam jej historycznych początków. Biorąc pod uwagę, że główną mantrą naszego zawodu jest nie wymyślanie koła na nowo, jestem raczej przekonany, że Scala nie ma żadnych niesłychanych wcześniej funkcji, ale w razie potrzeby mogę zostać poprawiony w tej kwestii. Aby przejść do właściwego pytania, chociaż jestem świadomy pochodzenia większości funkcji Scali, nigdy wcześniej nie widziałem czegoś takiego jak jego „ukryte” deklaracje. Czy istnieją inne (starsze!) języki, które również zapewniają tę funkcję? Czy ma sens rozróżnianie różnych przypadków niejawnych (ponieważ mogą one pochodzić z różnych źródeł), a mianowicie niejawnych konwersji i niejawnych parametrów?


title: Jak obliczenia kwantowe zmienią programowanie?

text: Czym różni się programowanie algorytmu kwantowego? Jak wyglądałby język C, gdyby został zaprojektowany dla kubitów? Czy typy się zmienią?


title: Jaka jest złożoność programowania niezarządzanego pamięcią?

text: Innymi słowy, jakie konkretne problemy rozwiązało automatyczne zbieranie śmieci? Nigdy nie zajmowałem się programowaniem niskopoziomowym, więc nie wiem, jak skomplikowane może być uwalnianie zasobów. **Aktualizacja** \- przepraszam za niepotrzebną zwięzłość, proszę pozwolić mi rozwinąć moje pytanie: rodzaje błędów, które adresuje GC, wydają się (przynajmniej zewnętrznemu obserwatorowi) tego rodzaju rzeczami, które programista znający dobrze swój język, biblioteki , pojęcia, idiomy itp. nie pasowałyby. Ale mogę się mylić: czy ręczna obsługa pamięci jest wewnętrznie skomplikowana?


title: Lepsze podejście do aktualizacji strony na żywo na serwerze

text: Podczas aktualizacji mojej strony na serwerze kieruję się bardzo surowym podejściem. Podejście, które stosuję, nie wydaje się właściwe, więc jestem zainteresowany poznaniem zalecanego sposobu aktualizacji projektu **LIVE**, czy to na współdzielonym hoście, czy na serwerze dedykowanym. W tej chwili, w przypadku jakichkolwiek zmian w widoku, po prostu przesyłam i nadpisuję pliki widoku na serwerze. Podobnie w przypadku wszelkich zmian w kodzie przesyłam i nadpisuję pliki .dll i .pdb. Obecnie moja strona nie ma żadnego ruchu, więc do tej pory nie było żadnego problemu. Ale czy jest to zalecane podejście dla witryny o dużym natężeniu ruchu. A jeśli nie, to jak należy podejść do aktualizacji na serwerze.


title: Czy zajęcia menedżerskie mogą być oznaką złej architektury?

text: Ostatnio zacząłem myśleć, że posiadanie wielu klas menedżerskich w swoim projekcie to zła rzecz. Pomysł nie jest wystarczająco dojrzały, abym mógł przedstawić przekonujący argument, ale oto kilka ogólnych punktów: * Odkryłem, że jest mi dużo trudniej zrozumieć systemy, które w dużej mierze opierają się na „menedżerach”. Dzieje się tak dlatego, że oprócz rzeczywistych komponentów programu musisz również zrozumieć, w jaki sposób i dlaczego jest używany menedżer. * Menedżerowie często wydają się być wykorzystywani do łagodzenia problemów z projektem, na przykład gdy programista nie mógł znaleźć sposobu na stworzenie programu Just WorkTM i musiał polegać na klasach menedżerów, aby wszystko działało poprawnie. Oczywiście menedżerowie mogą być dobrzy. Oczywistym przykładem jest `EventManager`, jedna z moich ulubionych konstrukcji wszech czasów. :P Chodzi mi o to, że menedżerowie wydają się być nadużywani przez większość czasu i to tylko z powodu maskowania problemu z architekturą programu. Czy zajęcia menedżerskie naprawdę są oznaką złej architektury?


title: Instrukcje - jak aktualne?

text: Jeśli masz produkt, który jest na rynku od dłuższego czasu, ale wciąż jest codziennie aktywnie rozwijany - jak często należy aktualizować instrukcje? Jeśli Twoi użytkownicy są stale aktualizowani do najnowszej wersji, ponieważ Twoja organizacja uważa za stosowne, że najnowsze poprawki błędów są zawsze w dostarczonej wersji. Oznacza to, że możesz naprawić błąd jednego dnia, a następnego dnia trafi do produkcji.


title: Sprzęt z kodem gpl

text: Powiedzmy, że sprzedaję sprzęt, który używa jądra linux. Czy muszę gdzieś powiedzieć, że działa linux (lub inny kod gpl)? Powodem, dla którego o to pytam, jest to, że kupiłem telewizor, który, jak się dowiedziałem, działa na Linuksie. Nigdzie nie jest napisane, że działa Linux, co wydaje mi się pogwałceniem gpl. Jeśli nigdzie nie podają, że używają kodu gpl, skąd mam wiedzieć, że mam prawo poprosić o źródło? I powiedzmy, że chcę kod źródłowy jądra, jak mam go zdobyć? Po prostu iść do firmy i po prostu tego zażądać?


title: C programowanie wielu backendów pamięci masowej

text: Zaczynam projekt poboczny w C, który wymaga wielu zapleczy pamięci masowej, które mają być napędzane przez określony element logiki. Każdy z tych backendów pamięci masowej byłby powiązany z decyzją, którego użyć, określoną w czasie wykonywania. Czyli na przykład jeśli wywołam swój program z jednym zestawem parametrów, wykona on operacje w pamięci, ale jeśli zmienię konfigurację programu, zapisze się na dysk. Podstawowym założeniem jest to, że każdy backend pamięci masowej powinien implementować ten sam protokół. Innymi słowy, logika wykonywania operacji powinna wiedzieć, na którym backendzie działa. Obecnie sposób, w jaki myślałem o zapewnieniu tej pośredniości, to posiadanie `struktury` wskaźników do funkcji z logiką wywołującą te wskaźniki. Zasadniczo struktura zawierałaby wszystkie operacje potrzebne do zaimplementowania logiki wyższego poziomu Np. struct Kontekst { void (* doPartOfDoOp)(void) int (* getResult)(void); } //logika.h void doOp(Kontekst * kontekst) { //kilka kontekstu->doPartOfDoOp(); } int getResult(Context * context) { //kilka rzeczy return context->getResult(); } Moje pytanie brzmi, czy ten sposób rozwiązania problemu jest taki, jaki zrozumiałby programista C? Z zawodu jestem programistą Java, ale lubię używać C/++. Zasadniczo struktura Context zapewnia interfejs podobny do poziomu pośredniego. Chciałbym jednak wiedzieć, czy istnieje bardziej idiomatyczny sposób osiągnięcia tego.


title: Wstrzykiwanie zależności: jak to sprzedać

text: Niech będzie wiadomo, że jestem wielkim fanem wstrzykiwania zależności (DI) i testów automatycznych. Mogłabym o tym mówić cały dzień. **Tło** Niedawno nasz zespół dostał właśnie ten duży projekt, który jest budowany od podstaw. Jest to strategiczna aplikacja o złożonych wymaganiach biznesowych. Oczywiście chciałem, aby był ładny i czysty, co dla mnie oznaczało: konserwowalny i testowalny. Więc chciałem użyć DI. **Opór** Problem tkwił w naszym zespole, DI to tabu. Została podniesiona kilka razy, ale bogowie tego nie pochwalają. Ale to mnie nie zniechęciło. **Mój ruch** Może to zabrzmieć dziwnie, ale biblioteki innych firm zwykle nie są zatwierdzane przez nasz zespół architektów (pomyśl: „nie mów o Unity, Ninject, NHibernate, Moq lub NUnit, bo inaczej skaleczysz się w palec”). Więc zamiast używać założonego kontenera DI, napisałem niezwykle prosty kontener. Zasadniczo łączy wszystkie zależności podczas uruchamiania, wstrzykuje wszelkie zależności (konstruktor/właściwość) i usuwa wszystkie obiekty jednorazowe na końcu żądania internetowego. Był niezwykle lekki i po prostu zrobił to, czego potrzebowaliśmy. A potem poprosiłem ich, żeby to przejrzeli. **Odpowiedź** Cóż, krótko mówiąc. Spotkałem się z dużym oporem. Głównym argumentem było: „Nie musimy dodawać tej warstwy złożoności do już złożonego projektu”. Ponadto „To nie jest tak, że będziemy podłączać różne implementacje komponentów”. I „Chcemy zachować prostotę, jeśli to możliwe, po prostu upchnij wszystko w jednym zespole. DI to niepotrzebna złożoność bez korzyści”. **Wreszcie moje pytanie** Jak poradzisz sobie z moją sytuacją? Nie jestem dobry w przedstawianiu moich pomysłów i chciałbym wiedzieć, jak ludzie przedstawią swoje argumenty. Oczywiście zakładam, że tak jak ja wolisz używać DI. Jeśli się nie zgadzasz, powiedz dlaczego, żebym mógł zobaczyć drugą stronę medalu. Byłoby naprawdę interesujące zobaczyć punkt widzenia kogoś, kto się nie zgadza. **Aktualizacja** Dziękujemy za odpowiedzi wszystkich. To naprawdę daje perspektywę. Wystarczająco miło mieć drugą parę oczu, aby wyrazić swoją opinię, piętnaście to naprawdę niesamowite! To są naprawdę świetne odpowiedzi i pomogły mi spojrzeć na problem z różnych stron, ale mogę wybrać tylko jedną odpowiedź, więc wybiorę tylko tę, która uzyskała najwięcej głosów. Dziękuję wszystkim za poświęcenie czasu na odpowiedź. Uznałem, że prawdopodobnie nie jest to najlepszy czas na wdrożenie DI i nie jesteśmy na to gotowi. Zamiast tego skoncentruję swoje wysiłki na uczynieniu projektu testowalnym i spróbuję zaprezentować zautomatyzowane testy jednostkowe. Zdaję sobie sprawę, że pisanie testów wiąże się z dodatkowym obciążeniem i jeśli kiedykolwiek zdecydujemy, że dodatkowy narzut nie jest tego wart, osobiście uważałbym to za sytuację wygraną, ponieważ projekt jest nadal testowalny. A jeśli w przyszłości zdecydujesz się na testowanie lub DI, projekt z łatwością sobie z tym poradzi.


title: Jak skonfigurować środowisko dla TopCodera?

text: Wypróbowałem dzisiaj TopCodera. Chociaż podobał mi się ten problem, edytor Java nie działał dla mnie. Czas zdalnej kompilacji i brak testów jednostkowych również utrudniał wykonanie zadania. Skończyło się na zakodowaniu rozwiązania w Eclipse i wklejeniu go do okna TopCodera. Wypróbowałem EclipseCoder, ale też nie odpowiadał moim potrzebom. Jakich narzędzi używasz i jak łączysz swoje środowisko programistyczne z TopCoderem? W jaki sposób TopCoder obsługuje zgłoszenia i czy istnieje sposób na przyspieszenie czasu ich przetwarzania?


title: W jaki sposób informujesz klientów o dokładnym czasie spędzonym na ich projektach?

text: Odpowiadając na pytanie, jakie są ważne punkty, które należy wziąć pod uwagę przy zakładaniu własnej firmy, wspomniałem o tym, że gdy klienci płacą za godzinę pracy, musi być dla nich jakiś sposób **aby mieć pewność, że nie t sprawić, by płacili za więcej godzin, które faktycznie spędziłeś pracując nad projektem**. Ale teraz, kiedy o tym myślę, jak można to wdrożyć? Innymi słowy, jak możesz udowodnić, że pracowałeś nad projektem 32 godziny w ostatnim tygodniu, a nie 10 godzin? W naszej firmie używamy podstawowego, domowego oprogramowania do śledzenia czasu, które jest bardzo pomocne, ale ma swoje ograniczenia: * Jeśli programista przegląda Facebooka przez ostatnią godzinę, ale zapomniał powiadomić aplikację, że nie pracuje już nad projektem, aplikacja nadal będzie liczyła czas na Facebooku jako czas spędzony w całości na projekcie. * Jeśli pracownik firmy ma wystarczające uprawnienia na poziomie bazy danych, nic nie może go powstrzymać przed modyfikacją rekordów czasu z ostatnich tygodni lub miesięcy (nawet jeśli może to być trudniejsze przy lepszym audycie i kontroli uprawnień). Wreszcie, nawet nie podajemy klientowi niektórych szczegółów dotyczących czasu, który spędziliśmy. * W naszych fakturach jest wystarczająco dużo szczegółów, aby wiedzieć, że przy określonej części projektu programista spędził 121 godzin pracując w C#/ASP.NET i 47 godzin w CSS/HTML, a administrator bazy danych spędził 39 godzin na projektowaniu bazy danych i 11 godzin na przeglądanie warstwy dostępu do danych i optymalizację zapytań, * Ale nic takiego nie było 24 września 2010 roku administrator bazy danych pracował nad projektem bazy danych od 9:34 do 11:48, a następnie od 16:01 do 16:42, potem od 16:50 do 17:24 i dokonał dwóch commitów do kontroli wersji, pierwszy o 11:47 z numerem 1234, drugi o 17:24 z numerem 1239 jako dowód. Jaka jest zatem obecna praktyka w innych firmach? **Jak radzisz sobie z zarządzaniem czasem, aby zapewnić klientom wystarczającą ilość informacji, aby mieć pewność, że płacą tylko za godziny/dni naprawdę spędzone na swoich projektach?**


title: Droga nad moją głową! (Radzenie sobie z lepszymi programistami)

text: Właśnie zostałem zatrudniony jako członek grupy, która rozwija się w C++. Przez ostatnie 11 lat kodowałem z przerwami w mojej ostatniej pracy (trochę C, trochę Fortran, trochę C++). Kodowanie, które wykonałem, polegało głównie na utrzymywaniu i dodawaniu nowych funkcji do jednego z naszych systemów. Kod, mający 10 lat, nie zawierał wszystkich elementów współczesnego C++. I oto moja nowa praca jest wypełniona programistami z 5-10 letnim doświadczeniem w czystym kodowaniu i wszyscy używają najnowocześniejszych aspektów C++ (C++11, szablon, lambda, itp.). Oczekują kogoś z takim samym doświadczeniem... jakie ja mam: pracuję w sumie 15 lat, ale kiedy patrzę na ich kod, nie mogę zrozumieć połowy! :-| Ktoś był w takiej sytuacji? Co byś polecił?


title: Jak programiści pracowali, kiedy komputer był bardzo drogi, rzadki, wielkości pokoju?

text: Zakładam, że nie byli w stanie siedzieć przed komputerem przez cały dzień, tak jak my dzisiaj. Jak więc napisali swój program? Na kartce papieru i wpisz ją później, gdy komputer będzie dostępny? Jak przeprowadzili testy?


title: Kod źródłowy a pliki źródłowe?

text: W mojej firmie jestem w sytuacji, w której może to być ważne wyróżnienie. Czy istnieje różnica między „kodem źródłowym” a „plikami źródłowymi” w kontekście technicznym? Czy istnieje rozróżnienie między „kodem źródłowym” a „plikami źródłowymi” w kontekście prawnym? Dziękuję. Edycja: widziałem kilka bliskich głosów na ten temat. Chcę zauważyć, że jest to możliwy problem między dwiema firmami – i tam, gdzie to konieczne, na pewno skorzystamy z porady prawnej. Pytam o to, ponieważ staram się być przygotowanym, jeśli zostaniem poproszony o jakiekolwiek definicje techniczne (jako rola programisty w tym).


title: Oprogramowanie bez testowalnego celu

text: Mam nadzieję, że zniesiesz mnie tutaj. Trudno wyjaśnić ten problem, zwłaszcza bez bezpośredniego odniesienia do konkretnej domeny. Pracuję nad komponentem większego systemu, który wykonuje kosztowne obliczeniowo przetwarzanie wstępne, aby komponent „w czasie rzeczywistym” mógł szybko wykonywać swoje funkcje. Mój produkt skutecznie tworzy duży zestaw danych wyszukiwania dla głównego komponentu do zapytania. Mój produkt oblicza wyniki skończonego zestawu „scenariuszy” (kilkaset tysięcy), z których każdy może wykonać klient. Komponent wykorzystuje algorytm k-shortest paths i szereg silników reguł do rozważenia każdego scenariusza i tworzenia wyszukiwań, operując na danych referencyjnych reprezentujących domenę problemu. W przypadku scenariuszy, które są bardzo często wykonywane przez naszych klientów, przypadki testowe są łatwe; oczekiwane wyniki są łatwe do opracowania i przeprowadzenia testów akceptacyjnych. Jednak w przypadku scenariuszy, które nie są „popularne”, oczekiwane wyniki są trudne do ustalenia, aw każdym razie ich wyniki mogą zostać zmienione przez zmiany danych referencyjnych, które są praktycznie niemożliwe do przewidzenia. Innymi słowy, zmiany danych referencyjnych zmieniają wejścia na algorytm o najkrótszej ścieżce, co z kolei może zmienić wyjście. Tworzenie testów akceptacyjnych dla tych niepopularnych przypadków jest również trudne, ponieważ firma „nie wie, czego nie wie”, a zatem nie ma punktu odniesienia, w odniesieniu do którego można by go przetestować. Ilekroć tester wraca do mnie z defektem, 99,9% pewności, to dlatego, że zmieniły się warunki w danych referencyjnych, a nie z powodu jakichkolwiek zmian w kodzie. Dlatego spędzam mnóstwo czasu na pogoni za defektami, które są „problemami z danymi”. Myślę, że to, co dezorientuje sytuację, to fakt, że dane referencyjne są kluczowe dla funkcjonalności systemu, a system bez określonego zestawu danych referencyjnych nie dawałby wyników, które miałyby jakiekolwiek znaczenie dla biznesu. Mógłbym stworzyć zestaw „fałszywych” danych referencyjnych do testowania, ale wszelkie twierdzenia dotyczące tych zaprojektowanych danych referencyjnych byłyby nieważne w prawdziwym świecie. Byłbym bardzo zainteresowany, aby usłyszeć jakiekolwiek opinie na ten temat, zwłaszcza od tych, którzy napotkali podobne problemy. Nie mogę po prostu wzruszyć ramionami i odpowiedzieć „problem z danymi”, ale dotrzeć do sedna problemu i wypracować, jak zbudować i przetestować tę rzecz w niezawodny, powtarzalny i wartościowy sposób.


title: Co oznacza „protokół pierwszej klasy”

text: Strona o Node.js opisuje HTTP jako „protokół pierwszej klasy” w node.js. Co to znaczy? http://nodejs.org/about


title: Wybór modułów node.js dla elastyczności wersji demo

text: Przygotowuję prezentację do omówienia i demo node.js dla programistów JavaScript po stronie klienta. Koncepcje językowe i składnia nie stanowią dla nich problemu, więc zamiast tego chciałbym od razu przejść do rzeczy i pokazać możliwości węzła, które różnią się od JavaScript po stronie klienta. W rejestrze NPM dostępnych jest wiele modułów i wiele osób ma znacznie większe doświadczenie z rejestrem niż ja. **Szukam wybranych modułów węzłów opartych na zaleceniach** z Twojego doświadczenia, które pokazują różne zastosowania węzła, które są praktyczne, bardzo przydatne i można je zademonstrować za pomocą małej próbki kodu bez konieczności posiadania dużej wiedzy o domenie w imieniu publiczności. Schludny i imponujący jest też dobry - mogę dorzucić kilka szokujących i zadziwiających przedmiotów dla fajnego czynnika. Aby być uczciwym, najczęściej brane pod uwagę odpowiedzi zostaną uwzględnione. Mam nadzieję, że zaowocuje to wszechstronną demonstracją technologii węzłów.


title: Z punktu widzenia inżynierii oprogramowania, jakie są wszystkie kroki w najnowocześniejszym SDLC, które mogę wykonać?

text: W hipotetycznej sytuacji firmy, która ma nieskończone zasoby (czas/budżet) na opracowanie produktu. czy ktoś może mi wymienić **WSZYSTKIE** możliwe kroki, które są wymagane w cyklu życia mojego systemu, aby osiągnąć cel, w **najnowocześniejszym widoku inżynierii oprogramowania**? CELEM tego pytania jest uzyskanie szczegółowej listy wszystkich różnych aspektów, które zrobiłbym w „najnowocześniejszym” cyklu życia oprogramowania. Nie interesują mnie ścieżki (metodologie tworzenia oprogramowania), ale wszelkiego rodzaju kroki. * * * Przykład: Koncentrując się na **"kroku testowania oprogramowania"** mogę przetestować produkty, aby zarchiwizować różne cele: * 5.1 Cel testu o 5.1.1 Testy jednostkowe o 5.1.2 Testy integracyjne o 5.1.3 Testowanie systemu o 5.1.4 Testowanie integracji systemu 5.2 Cele testowania 5.2.1 Testy regresywne 5.2.2 Testy akceptacyjne 5.2.3 Testy alfa 5.2.4 Testy beta 6.1 Testy wydajności oprogramowania i testy obciążenia 6.2 Testy stabilności 6.3 Użyteczność testowanie * 6.4 Testowanie bezpieczeństwa * 6.5 Internacjonalizacja i lokalizacja * 6.6 Testowanie niszczące I inne.. Próbując wyliczyć wszystkie aspekty testowania oprogramowania, jaki jeszcze aspekt muszę przetestować? Przeprowadź tego rodzaju rozumowanie we wszystkich aspektach cyklu życia oprogramowania.


title: Skutki uboczne Przełamywanie przezroczystości referencyjnej

text: Programowanie funkcjonalne w Scali wyjaśnia wpływ efektu ubocznego na złamanie przezroczystości referencyjnej: > efekt uboczny, który oznacza pewne naruszenie przezroczystości referencyjnej. Przeczytałem część SICP, która omawia użycie „modelu substytucji” do oceny programu. Ponieważ _z grubsza_ rozumiem model podstawienia z przezroczystością referencyjną (RT), można rozłożyć funkcję na jej najprostsze części. Jeśli wyrażenie to RT, możesz je rozłożyć i **zawsze** uzyskać ten sam wynik. Jednakże, jak stwierdza powyższy cytat, stosowanie efektów ubocznych może/złamie model substytucji. Przykład: val x = foo(50) + bar(10) Jeśli `foo` i `bar` **nie** mają skutków ubocznych, to wykonanie którejkolwiek funkcji **zawsze** zwróci ten sam wynik do `x` . Ale jeśli mają skutki uboczne, zmienią zmienną, która zakłóca/wrzuca klucz do modelu substytucji. Czuję się komfortowo z tym wyjaśnieniem, ale nie w pełni go rozumiem. Proszę mnie poprawić i uzupełnić wszelkie luki pod kątem skutków ubocznych łamiących RT, omawiając również wpływ na model substytucji.


title: Haskell GUI: ile można zrobić z Haskellem?

text: Chciałem wypróbować grafikę w Haskell. Z tego, co widziałem, dostępne biblioteki są albo nakładkami na biblioteki C/C++, albo ich abstrakcją z minimalnymi funkcjami. Biblioteki wysokiego poziomu wydają się nie odpowiadać moim potrzebom, więc zostały mi front-endy niższego poziomu. **To, czego potrzebuję, to renderowanie kafelków i tekstu** \- podstawy bardzo prostej gry. Wiem, jak to zrobić w C i myślałem, że mógłbym napisać grafikę w C i połączyć ją z Haskellem. Alternatywą jest napisanie grafiki za pomocą biblioteki Haskell. **Moje pytanie brzmi, czy dostępne biblioteki Haskella mogą osiągnąć to, czego chcę?** Nie chcę wyginać się do tyłu; czy C może zrobić to lepiej niż chciałbym wiedzieć.


title: Konfigurowanie środowiska Eclipse IDE do programowania w Pythonie i PHP

text: W Eclipse Download dostępne są różne wersje środowiska Eclipse IDE. Ponieważ nie jestem zainteresowany rozwojem Javy, pobrałem Eclipse Classic 3.7.1. Teraz chcę, aby moje IDE było skonfigurowane do programowania w Pythonie i PHP. 1) Czy pobrałem poprawną wersję? 2) Jakie narzędzia powinienem pobrać dalej. UWAGA : Nie zainstalowałem jeszcze niczego, po prostu pobrałem klasyczną wersję ze strony Eclipse.


title: Skoro XML jest tak zły… dlaczego używa go tak wiele osób?

text: Rozumiem cel XML, ale zawsze słyszę, jak ludzie narzekają na to, jak ZŁE jest? Naprawdę nie rozumiem, co jest w tym tak złego? Zwykle słyszę określenia „rozdęty” i „wolny”. Ale myślę, że jako programiści, do czego go głównie używasz? I czy naprawdę uważasz to za "złe"... ponieważ jeśli tak jest, to strasznie dużo ludzi używa go do przesyłania danych...


title: Jaki przepływ pracy byłby lepszy podczas pracy z Cloud9 i Git?

text: Pracuję z małym zespołem tworzącym aplikację internetową. Używamy Cloud9, aby maksymalnie uprościć współpracę i przenośność, ale utrudnia to określenie, jaki byłby najlepszy sposób na zintegrowanie tego z Cloud9. W tej chwili mamy to skonfigurowane tak, że jeden właściciel obszaru roboczego Cloud9 przyznał dostęp do odczytu/zapisu wszystkim współpracownikom projektu. Działa to dobrze w przypadku współpracy, ale jeśli współpracownik wypchnie swoją pracę do repozytorium git, zatwierdzenie zostanie przypisane właścicielowi obszaru roboczego cloud9, co nie jest idealne. Ludzie chcą uznania za swoją pracę, a to sprawia, że naprawdę trudno jest śledzić, kto co robi. Inną opcją, o ile widzę, jest to, aby każdy programista utworzył klon repozytorium na swoim własnym koncie cloud9 i stamtąd pracował. To rozwiązuje problem git, ale oznaczałoby to, że nie wykorzystano by tak wielu wspaniałych funkcji współpracy cloud9 (kredyt po wierszu autora, historia wersji pliku itp.). Oznaczałoby to również dodatkowy krok do aktualizacji obszaru roboczego dla osób, które nie są zbyt zaznajomione z git. Jak myślisz, jaki przepływ pracy najlepiej sprawdziłby się w tej sytuacji?


title: ASP.Net MVC 3: wiele wersji strony bez zmiany adresu URL, czy to możliwe?

text: Nasza strona internetowa jest napisana w ASP.NET MVC 3 i chcemy zmienić funkcję w podstawowej funkcjonalności witryny. Problem polega na tym, że nie każdy klient może zostać przeniesiony do tej nowej wersji/formatu (ze względu na pewne wewnętrzne ograniczenia techniczne), co oznacza, że musimy jednocześnie zachować 2 wersje tej samej funkcjonalności (backend i frontend). Nie chcemy, aby nasi klienci martwili się o adresy URL, więc idealnym rozwiązaniem byłoby zachowanie tego samego adresu URL, ale przekierowanie klientów do różnych wersji. Informacje o klientach są przechowywane w bazie danych. Czyli w momencie, gdy użytkownik (klient) się loguje, wiemy jaką wersję strony powinniśmy pokazać. Zastanawiam się nad routingiem i obszarami, ale nie jestem pewien, czy można na przykład mieć 2 obszary z różnymi wersjami tej samej aplikacji. Czy możliwe jest ładowanie zespołów w locie? Po zalogowaniu użytkownika możemy zdecydować, czy ma zostać przekierowany do nowej czy starej wersji. O ile wszyscy klienci zostali przeniesieni do nowej wersji, nie potrzebujemy już tego systemu. Jak mogę to zrobić w ASP.NET MVC?


title: najlepsze praktyki podczas pracy z katalogiem datadir bazy danych MySQL

text: W miejscu, w którym obecnie pracuję, robią coś, co uważam za dziwne w sposobie, w jaki pracują z katalogiem danych MySQL. Katalog, w którym przechowywane są pliki faktycznie przechowujące dane. > $ grep datadir /etc/mysql/my.cnf > datadir = /var/lib/mysql Gdzie znajdują się wszystkie pliki .frm .myd .myi. Przenosząc dane w sieci lub wykonując instalacje klienckie, kopiują te pliki bezpośrednio z tego katalogu i wklejają je do dowolnego katalogu, w którym skonfigurowali MySQL do użycia po stronie klienta. To samo robią w biurze. Jako administrator bazy danych zostałem nauczony, że powinieneś pracować ze skryptami. Wyeksportuj dane i strukturę bazy danych jako skrypt SQL i zaimportuj ją jako skrypt SQL, gdy chcesz rozpocząć z nią pracę. Ma to na celu ochronę integralności danych. Ponieważ te pliki mogą być w stanie niezgodnym z roboczą kopią danych. Ponieważ pamięci podręczne mogły nie zostać zapisane do plików bazy danych na dysku. Widzę, że zatrzymują serwer MySQL podczas kopiowania i wklejania, aby zapobiec uszkodzeniu danych. Zastanawiałem się, jakie najlepsze praktyki branżowe dotyczą tego zagadnienia. Wydaje mi się to dziwne. Biorąc pod uwagę, jak postrzegają bezpieczeństwo, hasła i dostęp do roota, myślę, że opracowali złą praktykę i robią to nieświadomie. Nie mają silnego zrozumienia niektórych podstaw działania systemów baz danych. Czy się mylę, czy powinienem po prostu płynąć z prądem i nie angażować się w próby zmiany tych praktyk.


title: pojedyncza tabela z dodatkowymi kolumnami vs wiele tabel duplikujących schemat

text: Pracuję nad projektem, w którym w pewnym momencie musiałem podjąć decyzję, czy w bazie danych powinienem mieć jedną tabelę z wieloma kolumnami, których nie używa każdy rekord, czy wiele tabel ze zduplikowanym schematem. Tworzę aplikację informacyjną o sporcie, która może obsługiwać wiele dyscyplin sportowych. Poradzimy sobie na przykład z NBA, NHL, MLB, NFL. Każdy sport ma bardzo podobne koncepcje - Drużyny, Harmonogramy, Kontuzje, Informacje o zawodnikach. Nasze źródło danych oczywiście nie podaje nam wszystkich danych w tym samym schemacie. Każdy sport ma inny schemat, do którego otrzymujemy dane od naszego dostawcy. Ponieważ nie było wystarczająco dużo czasu (żądania klientów) na przeprowadzenie wstępnej analizy kanałów danych w celu ustalenia podobieństw, zabezpieczyłem swój zakład i wziąłem „bezpieczny zakład” i stworzyłem osobne oddzielne tabele dla każdej dyscypliny zamiast jednego zestawu tabel, które wszystkie używany sport. Rezultatem jest zduplikowany schemat w kilku tabelach, a więc zduplikowane interfejsy do bazy danych (np. zapisane procesy). Mam coś takiego jak NBA_Game, NFL_Game, NBA_Team, NFL_Team itp. Każdy stół może mieć kilka właściwości, których nie ma drugi, i kilka wspólnych. to dotyczy powiedzmy 5-10 stołów w 4 lub 5 dyscyplinach sportowych. Nadal nie jestem pewien, czy jest to całkowicie zła rzecz - alternatywa, posiadanie jednego zestawu stołów o właściwościach, z których nie korzystałyby wszystkie sporty, również sama w sobie mogłaby być niewygodna. Czy ktoś, kto to zrobił, wpadł w pułapki tego rodzaju projektowania i mógłby podzielić się tutaj swoim doświadczeniem? Rzeczy, które mogą mi pomóc poznać teraz, zamiast uczyć się na trudnej drodze? Czy zrobiłeś to w inny sposób, mając jedną dużą tabelę/zestaw tabel z kolumnami, których nie używałby każdy rekord? Jakie pułapki napotkałeś, robiąc to? Czy istnieje jakaś alternatywa, taka jak dziedziczenie tabeli, z której korzystałeś w przeszłości, która działała lepiej? Dziękuję


title: Czy legalne jest odtwarzanie/otwieranie programu, który wcześniej kodowałeś dla innej firmy?

text: W mojej poprzedniej pracy stworzyłem ogólny pulpit nawigacyjny do automatyzacji zadań i okazał się on całkiem przydatny - no i oczywiście mój poprzedni pracodawca jest właścicielem całego kodu, który napisałem, gdy tam pracowałem. Teraz, kiedy już mnie tam nie ma, czy legalne jest odtworzenie tego pulpitu nawigacyjnego z pamięci i udostępnienie kodu? Jeśli go odtworzę, kod (może 2k-3k linii) może być prawie identyczny z oryginałem, ponieważ mam całkiem dobrą pamięć i mam tendencję do podążania za moim zwykłym stylem kodowania i konwencjami nazewnictwa. Edycja: trochę więcej tła – jest to dość ogólne oprogramowanie, które jest używane tylko wewnętrznie przez mały zespół (<10) w ramach globalnej korporacji. „Firma” nawet nie wie o tym systemie, bo to ja go tworzę z własnej inicjatywy. Jest zbudowany na pythonie/django. I przez prawie identyczne mam na myśli, że na przykład modele django będą miały tę samą nazwę/pola, a widoki będą używać podobnych zapytań, aby zwracać te same zestawy obiektów.


title: VB dla programistów C

text: Czy ktoś może polecić dobry przewodnik po VB.Net komuś, kto ma doświadczenie/komfortowy z C? Mogę znaleźć Python/Java/Lua dla programistów C, którzy używali ich wcześniej, ale nie mogę znaleźć niczego dla programistów C przechodzących do VB.Net (przejdę od używania C/C++ z gcc/g++ do VB.Net na VS 2010)


title: Dlaczego przejście z jednego języka na inny sprawia, że programista jest świeższy?

text: Obecnie zajmuję się językiem X od 2 lat. Jestem w tym bardzo dobry, ale język X nie jest popularny, więc praca dla niego nie jest łatwo dostępna. W związku z tym myślę o przejściu z języka X na język Y. Ale to oznacza, że znów będę świeższy. Czy warto dokonać zmiany? Nawet jeśli oznacza to utratę całego doświadczenia, jakie mam w innym języku?


title: używanie svn i mercurial w zaćmieniu dla tego samego projektu

text: Czy możliwe jest posiadanie w Eclipse 2 "dostawców zespołu" dla tego samego projektu. Np. svn i mercurial? Więc svn będzie używany do zatwierdzania w centralnym repozytorium, a mercurial tylko do pracy na moim komputerze. Np. kiedy otrzymuję aktualizacje z SVN, zobowiązuję się do mercurial, a następnie pracuję z mercurial. Kiedy wszystko jest gotowe do umieszczenia w centralnym miejscu, zatwierdzam w SVN. Nie ma potrzeby integrowania historii zmian. Tak, idealnie będzie to po prostu rtęć i najprawdopodobniej stanie się to później. Ale na razie chcę wypróbować jakieś brudne i szybkie rozwiązanie, jeśli istnieje :)


title: Co może się nie udać w komponowaniu nazwy metody z ciągu?

text: Mam fragment kodu, który komponuje nazwę metody do wywołania z parametru ciągu. Nie sądzę, żeby to było dobre, ale nie jestem pewien, co może się w tym nie udać. Oto uproszczony fragment tego kodu: switchToFilter = function(filter){ var filterMethod = 'switchTo' + filter; mójObiekt[metoda filtrowania](); }


title: Jak uniknąć niekonserwowalnego kodu podczas korzystania z SQL w ustawieniu MVC?

text: Chcę zaprezentować użytkownikowi listę produktów. Ta lista jest podzielona na strony i może być sortowana według identyfikatora produktu lub nazwy produktu w kolejności rosnącej lub malejącej. Używam ustawienia MVC, w którym chciałbym wykonać zapytanie do bazy danych w modelu. **Jak mam napisać funkcje, które odpytują bazę danych?** Przychodzi mi do głowy kilka opcji, z których każda ma swoje wady: 1. Mieć jedną funkcję dla każdej możliwej kombinacji kolumn sortowania i kierunków sortowania, każda z innym zapytaniem w środku: func GetProductsOrderByIdAsc() []*Product { … } func GetProductsOrderByIdDesc() []*Product { … } func GetProductsOrderByNameAsc() []*Product { … } func GetProductsOrderByNameDesc() []*Produkt { … } do wielu niemal identycznych zapytań SQL, czyli „zduplikowanego kodu”. 2. Połącz ciągi SQL: func GetProducts(orderBy string, orderDirection string) []*Product { return db.query(` SELECT id, nazwa, opis FROM produktów ORDER BY ` + orderBy + ` ` + orderDirection + ` `) } Jest to nieeleganckie, nieczytelne i nie do utrzymania, ponieważ szybko staje się bałaganem – wyobraź sobie dodanie stronicowania i filtrowania. Wiązanie parametrów nie zadziała tutaj, ponieważ są to kolumny, a nie wartości. 3. Sortuj, filtruj i twórz strony w Go zamiast w SQL. To rozwiązałoby problem z duplikacją kodu, ale może to być problem z wydajnością, gdy masz miliony rekordów. Jaki jest zwykły _konkretny_ sposób rozwiązania tego problemu? W idealnym przypadku nie byłoby zduplikowanego kodu, brzydkiej syntezy zapytań ani większych nieefektywności.


title: Pojedyncza baza danych, zależność od wielu systemów

text: Rozważmy środowisko, w którym mamy jedną, podstawową bazę danych, z wieloma oddzielnymi systemami korzystającymi z tej jednej bazy danych. Prowadzi to do tego, że wszystkie te systemy mają wspólną zależność, co ostatecznie wprowadza między nimi sprzężenie. Oznacza to, że nie zawsze możemy rozwijać systemy niezależnie od siebie. Zmiany strukturalne w bazie danych (nawet jeśli są przeznaczone tylko dla jednego, konkretnego systemu), wymagają pełnego testu WSZYSTKICH systemów i mogą wymagać „załatania” innych systemów, a następnie ich wydania. Jest to szczególnie trudne, gdy chcesz mieć oddzielne zespoły pracujące nad różnymi projektami. **Jaki jest dobry 'wzorzec', który pomoże uniknąć takiego sprzężenia?** Wyobrażam sobie, że baza danych powinna być zależna wyłącznie od jednego systemu. Jeśli inne systemy wymagają danych z jakiegokolwiek powodu, powinny zażądać ich od jakiegoś rodzaju usługi API. Wadą tego podejścia, która przychodzi na myśl, jest wydajność: routing danych między systemami o wysokiej przepustowości za pośrednictwem wywołań usług jest znacznie wolniejszy niż za pośrednictwem połączenia z bazą danych.


title: Jak odpowiadasz na pytania „Oceń siebie”?

text: Często zadawane mi pytania typu "Oceń siebie w java" To idzie jak ankieter : Oceń siebie w java w skali 10 ja: 9 ankieter : Oceń siebie w J2EE ja : 8 .... Ale tak naprawdę po prostu wymyśliłem dowolne liczby. Jasne, że dobrze znam Javę, ale co to znaczy powiedzieć „9 na 10”. Myślę, że to bardzo subiektywne pytanie, które ogólnie nie ma sensu. Problem polega na tym, że jeśli powiem 9, jeśli nie jestem w stanie odpowiedzieć na żadne pytanie, osoba przeprowadzająca wywiad może pomyśleć: „ten facet właśnie powiedział 9”. Z drugiej strony, gdybym powiedział 6 , jest duża szansa, że ankieter pomyśli: „Ocenia siebie tak nisko… niedobrze” Jak odpowiadasz na takie pytania?


title: Jakie są dobre kryteria korzystania z kulek Tracer?

text: Niedawno po raz pierwszy czytałem The Pragmatic Programmer i natknąłem się na koncepcję Tracer Bullets. Zdałem sobie sprawę, że kodowałem zgodnie z tym modelem w przeszłości i po prostu zapisałem sposób, w jaki pracowałem, w moim mózgu jako „zwinny”. Podają tylko jeden przykład tego, gdzie używali go w przeszłości. Sposób, w jaki sytuacja została zidentyfikowana jako dobry kandydat do Tracer Bullets, to > Było wiele niewiadomych i wiele różnych środowisk i nikt nie był > zbyt pewien, jak powinien zachowywać się GUI. To wydaje się być sposobem rozpoczęcia ogromnej liczby projektów, zwłaszcza gdy pracujesz z osobami nietechnicznymi nad typową aplikacją biznesową dla funduszu hedgingowego (jako przykład). Użyłem go, ponieważ po prostu czułem się dobrze, nie wiedząc tak naprawdę, jak się nazywa, ani nie wyjaśniając mi tego. Wiedziałem, że gdybym spróbował zebrać wszystkich w pokoju i skłonić ich do określenia wszystkiego (lub przynajmniej niektórych rzeczy) z góry, byłaby to kompletna katastrofa, ale znowu jest to coś w rodzaju uczucia ... Czy ktoś może wymyślić jakieś bardziej konkretne kryteria, kiedy ten model może być drogą do zrobienia?


title: Pomieszanie ról Scrum

text: Tutaj w biurze nasze role Scrumowe są nieco pomieszane, więc byłbym wdzięczny za każdą radę, jak to ulepszyć. Jesteśmy małym zespołem 4 programistów (jeden z nich jest de facto scrum masterem), a także mamy kierownika liniowego i Właściciela Produktu. Kierownik liniowy jednocześnie obejmuje Scrum i ma trudności z „odpuszczeniem”; ma w głowie Backlog Produktu i ustala dla niego priorytety. Poprzednia próba wyrwania mu tego z głowy doprowadziła tylko do krótkotrwałego, aktualnego Backlogu Produktu w Pivotaltracker.com – politycznie rzecz biorąc, był programistą, który zbudował obecny system 7 lat temu. Product Owner jest w firmie od około 2 lat i wydaje się mieć jasną wizję produktu, ale jest słabszy od naszego kierownika liniowego (który w rzeczywistości jest odpowiedzialny za ten i inne projekty). Poza tym nasza implementacja Scrum jest „z książki”. Jak myślisz, jakie są wady tej struktury, w którą się znajdujemy? Co można poprawić? Jak byś się poprawił?


title: Czy jest to poprawna implementacja klasy Immutable w Javie?

text: public final class ImmutableClass { private StringBuffer name; public ImmutableClass (StringBuffer name) { this.name=name; } public StringBuffer getName() { zwraca nazwę; } } Punkty, które brałem pod uwagę: 1. Uczyń klasę `final`, aby nie mogła być rozszerzona 2. Nie udostępniaj metod mutatorów `public` 3. Zachowaj zmienne instancji `private` Czy powyższe rozważania są wystarczające?


title: Artefakty techniczne SCRUM

text: Moja firma wprowadza SCRUM do tworzenia nowego oprogramowania. Obecnie jestem zarówno Product Ownerem, jak i Product Managerem odpowiedzialnym za techniczne aspekty oprogramowania. Rola kierownika technicznego nie jest częścią zespołu scrumowego. Zauważyłem, że w zespole scrumowym istnieje chęć traktowania rozwoju oprogramowania jako czarnej skrzynki, tzn. powinienem zajmować się wyłącznie historyjkami użytkowników i korzyściami biznesowymi. Jest to problem, ponieważ informacje potrzebne do informowania klientów o najbardziej odpowiedniej architekturze, mechanizmach wdrażania, wymaganiach systemu hosta itp. nie są dostępne (jestem odpowiedzialny za to w mojej roli menedżera). Na przykład zespół programistów może opracować system, który może być używany tylko z określonym sortowaniem bazy danych. Nie jest to coś, czego się kiedykolwiek spodziewałem, więc nie stworzyłbym historii użytkownika ani nie dyskutował z klientami, ale może to być strzałem w dziesiątkę dla produktu. Jaka dokumentacja i poziom przejrzystości są rozsądne? Cały zespół jest nowy w scrum, więc wszelkie porady są mile widziane. PS: Zastanawiam się, czy ta podwójna rola to dobry pomysł. Myślę, że niektórzy członkowie zespołu mogą myśleć, że Product Owner jest kogutem, co nie jest moim zamiarem ;-).


title: Jak mam odpowiedzieć mojemu przełożonemu na temat mojego rocznego przeglądu?

text: Podczas testów nasi testerzy oprogramowania zgłosili błąd NullException w aplikacji i zostałem poproszony o jego naprawienie. Przeprowadziłem dochodzenie, zaproponowałem poprawkę i wysłałem do zespołu przegląd kodu. Przetestowałem moje rozwiązanie, bawiąc się aplikacją, aby upewnić się, że NullException już nie występuje i prawdopodobnie coś innego nie jest zepsute i, dla mnie, było w porządku, więc wysłałem recenzję kodu. Mój kierownik, który jest również naszym głównym architektem, odpowiedział w e-mailu i powiedział, abym unikał wysyłania recenzji kodu w ten sposób i że rozważy ten incydent w mojej corocznej ocenie. Chcę odpowiedzieć i przeprosić, że nie testowałem go dokładnie przed wysłaniem recenzji kodu i zrobię co w mojej mocy w przyszłości, ale mówię też coś na swoją obronę. Wykonałem kilka testów białej skrzynki na aplikacji, ale ma znacznie większą wiedzę na temat aplikacji, więc może ją o wiele lepiej ode mnie. Plus, jaki jest w ogóle sens przeprowadzania przeglądu kodu?! Przeprowadzamy przegląd kodu, aby inni członkowie zespołu mogli przejrzeć nasz kod i znaleźć potencjalne problemy z naszym kodem, abyśmy mogli je naprawić przed wysłaniem kodu do klienta, więc dlaczego jest zły? Dlatego istnieją przeglądy kodu, prawda? Co myślisz?


title: Odroczone wykonanie Dispose dla obiektów IDisposable

text: Pracuję nad aplikacją, która wykonuje dużo szyfrowania i deszyfrowania w aplikacji i jest to prawdopodobnie wąskie gardło numer jeden, więc poświęciłem trochę czasu na poprawianie wydajności. Wiele z tego obejmowało po prostu buforowanie rzeczy w pamięci (zdaję sobie sprawę, że jest w tym coś z kompromisu w zakresie bezpieczeństwa), ale zauważyłem podczas profilowania, że Dispose() był sporą ilością czasu na odszyfrowywanie (wierzę, że w przypadku .NET kryptografia zeruje wszystko, więc ma to sens). Wpadłem więc na taki pomysł: Mieć „pulę do utylizacji”. Zamiast używać bloków, twórz obiekty, używaj ich, zwróć wynik i dodaj je do puli usuwania w ostatnim bloku. Wewnętrznie pula usuwania używa kolejki i licznika czasu, a za każdym razem, gdy licznik uruchamia, usuwa obiekty z kolejki i usuwa je. Próbowałem to zaimplementować i wydaje się, że działa i poprawia wydajność, ale z drugiej strony profilowanie go lokalnie nie jest naprawdę realistycznym przypadkiem użycia. Czy to dźwięk? Czy natrafię na niekontrolowane problemy z wydajnością, o których obecnie nie myślę? Przypuszczam, że powinienem dodać, że jest to aplikacja ASP.NET MVC, więc wszystko kręci się wokół żądań.


title: Dlaczego specyfikacja HTML\DOM nie zezwala hiperlinkom na ustawienie akceptowanego nagłówka?

text: Celem nagłówka `Accept` od klienta jest poinformowanie serwera, jaki rodzaj danych zaakceptuje jako odpowiedź na jego żądanie. Możemy ustawić ten nagłówek w asynchronicznych wywołaniach HTTP w JavaScript, ale nie w HTML. Rozważ na przykład link taki jak „Pobierz jako CSV”. Jeśli atrybut taki jak `accept="text/csv"` był dozwolony, a przeglądarka zinterpretowałaby to w celu wysłania nagłówka `Accept: text/csv` z tym żądaniem, serwer mógłby odpowiedzieć na semantykę żądania. Bez niego moglibyśmy utworzyć link, taki jak `<a href="/some/resource?format=csv">Pobierz jako CSV</a>`, a serwer musi zamiast tego odpowiedzieć na dowolny parametr ciągu zapytania. Jakie są przyczyny, zarówno techniczne, jak i historyczne, stojące za tym, że specyfikacja HTML\DOM nie zezwala na ustawienie nagłówka „Accept” za pomocą znaczników?


title: Backbone.js, Railsy i duplikacja kodu

text: Tworzę aplikację internetową i potrzebuję frameworka JS, takiego jak Backbone.js, do pracy z moim backendem dostarczonym przez Railsy, które w większości zwracają obiekty JSON po zapytaniach DB. Szukając w sieci odkryłem Backbone, który wydaje się być kompletny, dość popularny i aktywnie wykorzystywany w rozwoju, ale zauważyłem, że wiele rzeczy wykonanych przez Backbone jest po prostu duplikatem pracy wykonanej przez Rails: na przykład walidacja i modele. Mój pomysł na „idealny” (dla moich rzeczywistych potrzeb) JS mvc (nie można go nazwać mvc, ale nie mam lepszej nazwy) jest czymś naprawdę prostym, który ma funkcję dla każdej akcji w moim kontrolerze Rails, która jest wyzwalana przez określone zdarzenie (zmiany użytkownika/haszytu, kliknięcie przycisku...) i wysyła żądania do serwera, które odpowiadają obiektem JSON, a następnie ładuję szablon lub wykonuje kod JS. **Czy masz jakieś wątpliwości/sugestie dotyczące mojego pomysłu?** **Czy znasz jakiś „mikro” framework js taki jak ten, który opisałem?** **Jeśli pracowałeś z backone.js + rails, co może sugerujesz mi?**


title: Jestem nowy w programowaniu i interesuje mnie jdbc - potrzebne wskazówki i porady

text: Obecnie zdobywam stopień naukowy współpracownika w zakresie inżynierii oprogramowania. Powiedziano mi, że aby odnieść sukces w dziedzinie informatyki, trzeba się w czymś specjalizować. Po zbadaniu kilku obszarów zdecydowałem, że chcę specjalizować się w Java Database Connectivity. Zarabia przyzwoity dochód i wydaje się interesujący. Chciałbym wiedzieć, jak wygląda ta dziedzina. Jaka jest praca, szefowie/menedżerowie, płace itp. Chcę tylko wiedzieć jak najwięcej z pierwszej ręki od ludzi, którzy obecnie pracują w terenie. Jakie wskazówki udzieliłbyś nowicjuszowi na studiach i co chciałbyś wiedzieć przed wejściem do branży?


title: Jak wprowadzić Agile do zespołu, który używa sztywnych metod niezwiązanych z Agile?

text: Pomyśl o firmie, która jest dumnie certyfikowana za jakąś metodologię niezwinną, używa jej jako punktu sprzedaży dla swoich klientów, aby wykazać odpowiedzialność. Co zrobić, aby **progresywnie wprowadzać Kanban lub Scrum bez łamania całego ich systemu** i nadal upewniać ich, że **może być tak samo rozliczalny/kontrolowalny**? * * * Wiem, że jest to prawdopodobnie związane z „Jak wprowadziłbyś zwinną metodologię taką jak Scrum”, ale tutaj zastanawiam się nad sposobami obejścia/obejścia faktu, że firma narzuca pewien sposób zarządzania SDLC pod fałszywym udawać, że jest to jedyny sposób na posiadanie ścieżki audytu.


title: Utwórz i opóźnij zadanie o 24 godziny

text: Staram się wymyślić rozsądną architekturę, aby opóźnić zadanie o 24 godziny. Do tej pory myślałem o: * zadaniu unix cron, ale to nie będzie w stanie przyjąć obciążenia, które mu dajemy, ponieważ będziemy mieli wiele tysięcy opóźnionych zadań dziennie * Użyj RabbitMQ z wymianą martwych listów, jednak jest to hack i bycie hackiem jest najeżone problemami - niemożliwe do monitorowania bez uszkadzania wiadomości itp. * Inne rozwiązania, które wymyśliłem są oparte na ankietach, np. wstaw zadanie do MySQL i miej odpowiedzialnego odpytującego * Amazon SQS obsługuje tylko do 15 minut opóźnienia. Mógłbym napisać pętlę punt dla # opóźnień, ale to już jest zbyt duże wymyślanie koła. Dodatkowo korzystanie z SQS byłoby drogie, ponieważ płacimy za wiadomość. * Redis prawdopodobnie...? nie badali tego dokładnie. Wiem, że Memcached nie jest odpowiedni, ponieważ tak naprawdę nie gwarantuje trwałości tak długo. Jaka istniejąca technologia jest do tego dobra? Nie chcę tutaj wymyślać koła na nowo, biorąc pod uwagę, że jestem prawie pewien, że nie pracuję nad pierwszym oprogramowaniem, które wymaga wykonania zadania jutro. Do tej pory zajmowałem się bazami danych.


title: Czy dodawanie logiki w ustawiaczu właściwości jest uważane za złą praktykę?

text: Wskoczyłem do projektu i widzę, że inni programiści dodają dużo logiki w ustawiaczach syntetyzowanych właściwości. Rozumiem, jak to działa, ale myślę, że utrudnia to zrozumienie przebiegu programu; podczas czytania kodu, ilekroć widzę `self.something = cokolwiek`, zawsze sprawdzam, czy setter `coś` jest nadpisany. Jakie są twoje opinie na ten temat? Czy uważasz, że to oznaka złej architektury, czy wyszukane rozwiązanie? Chętnie przeczytam więcej na ten temat, jeśli masz odpowiednie linki/źródła, po prostu zbyt trudno jest uzyskać dobre wyniki w Google, więc postanowiłem zapytać również tutaj. Dziękuję za każdą odpowiedź i pamiętaj, że mówię o celu C na wypadek, gdybyś nie widział tagu (chociaż nie powinien to być problem związany z językiem).


title: Pokonanie mentalnej przeszkody dzięki algorytmom?

text: Jestem dziwnym programistą. Z zawodu jestem inżynierem oprogramowania i pisałem programy w więcej niż jednym języku o różnych możliwościach. Wiem sporo o różnych językach programowania i ogólnie o tworzeniu oprogramowania (co wiąże się z doświadczeniem i aktywnym budowaniem umiejętności). Mam jednak problem. Jestem _zły_ w algorytmach. Podejmowałem różne próby uczenia się i wreszcie mogę powiedzieć, że znam ten algorytm i potrafię go dobrze zaimplementować w języku programowania. Moje próby czasami zaczynały się od przygotowania do rozmowy, w której zadawali takie pytania, a kończyły się na nich. Po prostu zaczynam i chyba się gubię. Wiem, z czego się uczyć (kurs MIT dotyczący algorytmów i wiele innych zasobów). Wiem, powinienem po prostu schylić głowę, być zdeterminowanym i pisać algorytmy/programy na papierze i wdrażać to w praktyce. Ale wydaje mi się, że nie jestem w stanie. Wpadam w myślenie: „Nie potrzebuję tego algorytmu w mojej pracy lub z jakiegoś powodu w najbliższej przyszłości, a jestem dobry w kilku rzeczach, więc nauczę się tego, kiedy będę musiał…”. Naprawdę chcę się z tym pogodzić. Jakie są dobre ramy czasowe, aby ustawić siebie i jakąkolwiek radę, jak mam podejść do tego mentalnie i inaczej?


title: W jakich sytuacjach byłoby technicznie „niemożliwe” wydanie systemu jako open source?

text: Chociaż z pewnością istnieje wiele ekonomicznych, społecznych i praktycznych decyzji, które należy podjąć przy podejmowaniu decyzji, czy system powinien być open source, czy są sytuacje, w których niemożliwe jest, z czysto technicznego punktu widzenia, otwarcie kodu źródłowego? Głównie; funkcja, która po upublicznieniu kodu unieważnia/ogranicza funkcjonalność tej funkcji. Kilka przykładów, które przychodzą mi do głowy: * Oszukiwanie w Quake \- kiedy gra została wydana jako open source, musiałem wydać 'wrapper' z zamkniętym kodem źródłowym, aby zweryfikować kod klienta, aby zapobiec oszustwom. * Reddit - chociaż większość źródeł serwisu społecznościowego Reddit jest dostępna, ich mechanizmy antyspamowe nie są dostępne. Gdyby spamerzy wiedzieli, jak działają, łatwiej byłoby ich obejść. Zarówno związane z bezpieczeństwem, jak i w wyniku stosowania wdrożeń, eksperci ds. bezpieczeństwa prawdopodobnie krzywiliby się (Quake: ufając klientowi, Reddit: bezpieczeństwo przez ukrywanie). To, czy istnieją realne alternatywy dla tych wdrożeń, to zupełnie inna sprawa... Jakie są inne tego przykłady? Czy są jakieś, które nie są związane z bezpieczeństwem? Czy wszystkie one są spowodowane „obejściami”, aby nasze systemy działały z posiadaną przez nas technologią?


title: Typowe zastosowania PHP dla wiersza poleceń

text: Zacząłem od PHP jakiś czas temu. Robiłem wiele samouczków, stron z ćwiczeniami itp. i idzie mi świetnie. Jedną z rzeczy, które lubię w PHP, jest łatwość rozpoczęcia pracy (pobieranie WAMP i voila). Jednak dopóki nie dowiedziałem się o frameworkach PEAR i MVC, nie zastanawiałem się zbytnio nad używaniem interfejsu wiersza poleceń do programowania w PHP... Tak naprawdę nie korzystałem z wiersza poleceń tak bardzo i zajmie mi to trochę czasu do, więc mam kilka pytań: Jakie są najczęstsze zastosowania wiersza poleceń podczas tworzenia witryn i aplikacji internetowych w PHP? Czy możesz uruchamiać frameworki MVC, takie jak Zend, CakePHP itp., nigdy go nie używając? Czy oprócz PEAR są jakieś inne repozytoria PHP, które używają wiersza poleceń do pracy? (Wygląda na to, że jeśli chcesz uniknąć używania PEAR, istnieje niezliczona ilość innych klas/bibliotek PHP w Internecie, które można pobrać, a następnie po prostu skopiować i wkleić pliki do swojej witryny.)


title: Anemiczny model domeny, logika biznesowa i DataMapper (PHP)

text: Zaimplementowałem podstawową warstwę ORM opartą na DataMapper (nie chcę używać pełnego ORM, takiego jak Propel/Doctrine - do czegokolwiek poza prostymi operacjami pobierania/zapisywania wolę uzyskać dostęp do danych bezpośrednio za pomocą warstwy abstrakcji SQL) . Podążając za wzorcem DataMapper, starałem się zachować wszystkie operacje trwałości w Mapperze - łącznie z lokalizacją powiązanych encji. Moje Entities mają dostęp do swojego Mappera, chociaż staram się nie wywoływać logiki Mappera z interfejsu Entity (chociaż byłoby to dość proste). Wynikiem jest: // pobierz maper i wygeneruj encję $ProductMapper = $di->get('product_mapper'); $Product = $ProductMapper->znajdź('ja@email.com','email'); // łatwo może być to // $Product = $di->get('product'); // $Product->load('ja@email.com','email'); //.. mutuj niektóre wartości.. save $ProductMapper->save($Product) // używa __get do wywołania akwizycji relacji $Manufacturer = $Product->manufacturer; Przeczytałem kilka artykułów dotyczących koncepcji modelu Domeny Anemicznej, tj. Modelu, który nie zawiera żadnej „logiki biznesowej”. Jednak podczas demonstrowania rodzaju logiki biznesowej idealnie dopasowanej do modelu domeny, pozyskiwanie powiązanych elementów danych jest częstym przykładem. Dlatego chciałem zadać to pytanie: Czy logika trwałości jest odpowiednia w obiektach modelu domeny? A raczej - jaka logika trafia do klas Entity po wepchnięciu trwałości i obsługi relacji do mappera.


title: Jak uratować model biznesowy z niedopasowanej bazy danych?

text: Istnieje aplikacja, która umożliwia rozliczanie klientów korporacyjnych za usługi, z których korzystają ich klienci. Schemat bazy danych nie odzwierciedla prawidłowo modelu biznesowego. Na przykład na danym koncie usługi mogą być aktywowane i dezaktywowane. Istnieje tylko kolumna do reprezentowania, kiedy usługa została dezaktywowana, a kod w miejscu po prostu aktualizuje ten sam wiersz, jeśli usługa zostanie ponownie aktywowana, zamiast dodawać nowy wiersz. W idealnym przypadku, gdy usługa zostanie aktywowana i zaktualizowana po dezaktywacji, zostanie dodany wiersz, a kolumna będzie reprezentować datę aktywacji. W obecnej sytuacji nie ma solidnej historii rozliczeń dla tych klientów korporacyjnych, ale musi być odtąd. Czy ustawiamy „odcięcie” dla starszego modelu, który został uszkodzony i czyścimy tabelę do czysta? Czy dodamy odpowiednią kolumnę i zaczniemy poprawnie pracować z tabelą i po prostu sprawdzimy wiersze, które mają „datę aktywacji” równą null, aby wykryć starsze wersje? Musi być kilka sposobów radzenia sobie z tym, ale nie mam doświadczenia z tego rodzaju sytuacjami i chciałbym poznać kilka różnych podejść.


title: Zautomatyzowane wdrażanie/instalacja narzędzi programistycznych

text: Mój zespół chce zautomatyzować instalację/wdrożenie wszystkich naszych narzędzi programistycznych. Głównym motorem tego jest zapewnienie, że wszyscy w zespole mają spójną konfigurację środowiska programistycznego, a także umożliwienie nowemu rekrutowi łatwego rozpoczęcia pracy. Przez środowisko programistyczne rozumiem takie narzędzia jak SCM, toolchains, IDE itp., a przez spójny rozumiem każdego, kto używa tej samej wersji kompilatora do budowania kodu (to bardzo ważne!). Oto kilka naszych wymagań – * Zezwalaj na nienadzorowaną (cichą) instalację całej naszej konfiguracji programistycznej poprzez uruchomienie jednego skryptu * Możliwość wersjonowania * Możliwość wdrażania selektywnych aktualizacji (nowych wersji) dla określonych narzędzi * Możliwość raportowania, które narzędzia są zainstalowane i ich konkretne numery wersji * Musi działać w systemie Windows (Linux będzie dodatkowym bonusem) * Musi być łatwy w utrzymaniu Jakie są narzędzia, których użyłeś do automatyzacji takiego zadania?


title: Kto zajmuje się programowaniem opartym na testach?

text: Pracuję w przestrzeni korporacyjnej przez ostatnie 4 i pół roku i zauważyłem, że ogólnie rzecz biorąc, przedsiębiorstwa nie są środowiskiem sprzyjającym programowaniu w stylu test-first. Projekty są zazwyczaj o stałym koszcie, stałej osi czasu i stylu kaskadowym. Każde testowanie jednostkowe, jeśli w ogóle jest wykonywane, zwykle następuje po opracowaniu w fazie QA i jest wykonywane przez inny zespół. Przed podjęciem pracy w przedsiębiorstwie konsultowałem się z wieloma małymi i średnimi firmami i żadna z nich nie była skłonna zapłacić za projekt deweloperski typu „test first”. Zwykle chcieli, aby rozwój rozpoczął się natychmiast lub po krótkim okresie projektowania: tj. Coś bardziej zbliżonego do Agile, chociaż niektórzy klienci chcieli, aby wszystko było zmapowane w sposób podobny do wodospadu. W jakich sklepach, firmach i klientach programowanie oparte na testach sprawdza się najlepiej? Jakie rodzaje projektów sprzyjają TDD?


title: Kafelkowa przestrzeń 3D oglądana po jednej płaszczyźnie na raz; ogólne pojęcia do zrozumienia podczas programowania?

text: Nie proszę o to, żeby ktoś mi to dla mnie zaprogramował, nadal chciałbym to wszystko programować, jednak potrzebuję dodatkowego zaplecza matematycznego do tego typu rzeczy, ponieważ tak naprawdę nie bawiłem się zbytnio w przestrzenie 3D i myślę wiele potencjalnych „jeśli-to” i przełączników można uprościć, jeśli pomyślę o tej koncepcji we właściwy sposób. Będę używał języka programowania, który obsługuje kafelki 2D lub wyświetlanie tekstu (pomyśl o Java). Chcę wiedzieć, czy istnieją proste sposoby programowania w widoku, orientacji i poruszania się po tej wirtualnej przestrzeni, którą opiszę, bez uciekania się do wielu instrukcji przełącznika do kontrolowania, np. tego, co będzie wyświetlane na ekranie w zależności od lokalizacji komputera, zwróconego kierunek i obrót. Okej, do tej pory opracowuję koncepcje sposobu eksploracji środowiska 3D typu top-down labirynt z proceduralnie generowanym krajobrazem wokseli i postacią gracza 1x1x1, która może zobaczyć tylko płaszczyznę na poziomie oczu i jednostkę płaszczyzny 1 poniżej. komputer może poruszać się w następujący sposób; Proszę zauważyć, że zamierzam wybrać kierunek, w którym działa grawitacja, który PC uzna w dół, (nierealistyczny): * Podejdź do innego kwadratu niezasłoniętego ścianą lub urwiskiem * Obróć twarz w innym kierunku, w którym to przypadku stanie się inny kierunek. przód komputera (wizualnie). Komputer zawsze będzie wyglądał tak, jakby był skierowany w stronę użytkownika. * Rozpocznij skalowanie ściany, w którym to przypadku poprzedni kierunek w górę (z ekranu, w kierunku użytkownika) staje się do przodu. * Zejdź w dół i wspinaj się po ścianie dołu poniżej, w którym to przypadku poprzedni kierunek w dół staje się do przodu. * Odwróć się do góry nogami i przywiąż teraz do sufitu, skalując w górę lub w dół, aż komputer uderzy o podłogę. w takim przypadku może ponownie wybrać inne środki transportu. * Za każdym razem, gdy komputer się porusza, wszystkie inne jednostki mają szansę na poruszanie się w trybie turowym. To nie będzie jak piaskownica w stylu Minecrafta, więc edytowanie krajobrazu po pokoleniu prawdopodobnie nie będzie konieczne. Będę miał ekran, który wyświetla woksele 16x16x2 na raz. Podoba mi się jednak pomysł dynamicznie przydzielanych fragmentów. Planuję generować lub ładować wcześniej wygenerowane fragmenty wokseli 16x16x16 i sąsiednie 26 fragmentów w razie potrzeby. podczas rozładowywania porcji poza zasięgiem i zapisywania ich w pliku. Chcę poznać matematyczne/koncepcyjne idee stojące za generowaniem tych porcji i ładowaniem już wygenerowanych porcji. Uwaga: Nadal używam terminu woksel, chociaż na ekranie tekstowym będę je wyświetlać tylko jako kwadraty, ponieważ przestrzeń gry jest siatką 3D.


title: Czy używanie tej samej nazwy dla argumentów i członków jest złą praktyką?

text: Czasami piszę kod konstruktora jak class X { public: X( const int numberOfThingsToDo ): numberOfThingsToDo( numberOfThingsToDo ) { } private: int numberOfThingsToDo; }; lub w klasie C# X { public X( int numberOfThingsToDo ) { this.numberOfThingsToDo = numberOfThingsToDo; } private int numberOfThingsToDo; } Myślę, że głównym powodem jest to, że kiedy wymyślę odpowiednią nazwę członka, nie widzę powodu, aby użyć innej dla argumentu inicjującego ją, a ponieważ nie jestem również fanem stosowania podkreśleń, najłatwiej jest po prostu wybrać to samo imię. W końcu to pasuje. Czy jest to jednak uważane za złą praktykę? Jakieś wady (oprócz strzelania sobie w stopę, gdy zapominasz o „tym” w C#)?


title: substytut dziedziczenia statycznego

text: Obecnie mam kilka klas (~20), które robią to samo (abstrakcyjnie), a mianowicie generują instancję określonej klasy z pliku xml. Sposób, w jaki wykorzystują zawartość pliku xml, różni się nieco, a dane są przechowywane w różnych podstrukturach (pola, grupy itp.), które są współdzielone przez klasy, więc wyjąłem wszystkie informacje dotyczące analizy i pola pliki i utworzył klasę pomocniczą (tak jak końcowy typ skonstruowany) Wszystkie powyższe klasy i metody są statyczne, ponieważ nie muszą zawierać żadnego stanu. Następnie chciałem, aby wszystkie klasy pochodziły z jednej wspólnej klasy, aby nie odwoływać się stale do pozornie niepowiązanej klasy, tylko po to, aby odkryć, że dziedziczenie i statyka nie współpracują dobrze. Jaki jest właściwy sposób na skonfigurowanie tego? Jest to w zasadzie duży zestaw metod fabrycznych dla typu, który nie wymaga stanu. **Aktualizacja:** Przebieg kontroli jest obecnie następujący: 1. Wybierz jedną z ~20 metod fabrycznych 2. Wczytaj plik XML (wszystkie tagi, atrybuty są takie same we wszystkich plikach, ale pliki są różne w różnych metodach ). 3. Przekonwertuj zawartość plików XML na klasę, która ma pewne struktury danych jako składowe (`List<Field>, List<Group>, Dictionary<string,string>` itp.). Te struktury danych używają typów, które są zagnieżdżone w helperze. 4. Dodaj te kolekcje do niezainicjowanego obiektu. 5. Zwróć przedmiot dzwoniącemu. Obecnie 20 metod fabrycznych jest ich własnymi klasami statycznymi i wszystkie zwracają obiekty tego samego typu, nawet jeśli może istnieć pewna różnica semantyczna między „typami”, wszystkie elementy składowe i funkcje są takie same. Kod analizujący plik XML znajduje się w programie pomocniczym, ponieważ ta logika jest wspólna dla wszystkich metod fabrycznych. Krok 3 musi być inny dla wszystkich metod, tak aby ta część znajdowała się w klasach statycznych.


title: Przetwarzanie strumienia. Czy warstwy muszą być naruszone?

text: Sytuacja teoretyczna: jeden bilion foobarów jest przechowywany w pliku tekstowym (bez fantazyjnych baz danych). Każdy foobar musi mieć wykonaną na nim jakąś logikę biznesową. Zestaw 1 biliona nie zmieści się w pamięci, więc warstwa danych nie może zwrócić dużego zestawu do warstwy biznesowej. Zamiast tego mają być przesyłane strumieniowo na 1 foobar na raz i mieć logikę biznesową wykonywaną na 1 foobar na raz. Po zakończeniu strumień musi zostać zamknięty. Aby strumień został zamknięty, warstwa biznesowa musi go zamknąć (szczegół operacji na danych), naruszając w ten sposób separację obaw. Czy możliwe jest przyrostowe przetwarzanie danych bez naruszania warstw?


title: Alternatywa do posiadania pól, które mogą nie być używane w klasie

text: Piszę grę karcianą/planszową w Javie. Ponieważ gra ma wiele kart, które oddziałują na różne sposoby, moja klasa gracza stała się trochę nadęta wszystkimi tymi różnymi polami używanymi do śledzenia danych, których potrzebują konkretne karty. Jednak nie każda karta jest używana w każdej grze, więc wiele z tych pól nie jest używanych. Zamiast mieć kilka pól, które prawdopodobnie nie będą używane przez większość czasu, myślałem o napisaniu czegoś w rodzaju klasy mapy pól, która mogłaby dynamicznie „tworzyć” pola, gdy były potrzebne. Jeśli jeden typ karty wymagał od każdego gracza przechowywania pewnych danych na liście, może po prostu utworzyć jedną i zapisać ją na mapie pola tego gracza. Może się jednak trochę bałaganić: jakich kluczy powinienem używać? Smyczki? Po prostu zwykłe obiekty? A typem danych nie zawsze będzie List, więc prawdopodobnie musiałby to być `Map<String, Object>` i musiałbym umieścić rzutowanie. Czy klucze powinny być ich własną klasą, której tożsamość jest oparta na nazwie String, ale także zawierać pole `Class<?>`, aby mogło rzutować wynik za mnie? Podoba mi się ten pomysł, ponieważ oznacza, że nie muszę zadzierać z klasą Gracza za każdym razem, gdy tworzę nową kartę, ale wydaje się też trochę nieefektywny i nieelegancki. Czy to okropny pomysł?


title: Jak zwiększyć produktywność w projektowaniu i programowaniu?

text: Zwykle za każdym razem, gdy oglądam filmy instruktażowe (poza głównym tematem), wiele się uczę z ich nawyków pracy, na przykład; w jaki sposób ustawili swoje foldery, jakich ujęcia używają. Najlepszym przykładem było (już dawno) powiedziałem wideo jquery, a w połowie autor powiedział coś w stylu „swoją drogą, możesz mieć bibliotekę kodów” – to jedyna rzecz, jaką pamiętam z tego wideo (ale autor powiedział to jako coś, o czym zakładał, że ludzie wiedzą) Więc zastanawiałem się, czy ktoś zna jakąś wskazówkę lub jakąkolwiek stronę internetową, która jest inna, jak pracują inni profesjonaliści, jak ustalili swoje nawyki programistyczne, aby pomóc im nie tracić czasu na powtarzalne zadania.


title: Co możesz zrobić, aby zmaksymalizować swoje szanse na trafienie dobrych programistów w kampusie?

text: Zastanawiam się nad zwróceniem się do moich wykładowców na mojej uczelni o rekomendacje studentów do zatrudnienia. Jak dotąd e-maile, które wysłałem, nie są zbyt zachęcające. Wykładowcy albo wracają do mnie, że nie mogą dostać dobrych studentów, albo po prostu ignorują moją pocztę. Starałam się być tak uprzejma, jak tylko mogłam w e-mailu, więc myślę, że to nie kwestia etykiety je wyłącza. Mimo to planuję odwiedzić mój kampus. Co mogę zrobić, aby zmaksymalizować Twoje szanse na trafienie dobrych programistów w kampusie? Jakieś doświadczenie, którym możesz się podzielić?


title: Open Source: Czy testowanie/zgłaszanie błędów to duży wkład?

text: Czy podczas oceny wkładu w projekty open source testowanie kodu na różnych rzeczywistych danych wejściowych, ograniczanie dużej liczby skomplikowanych błędów do małych przypadków testowych i składanie dobrych raportów o błędach liczą się jako znaczący wkład? Zrobiłem to dla kilku projektów open-source (w szczególności kompilatorów D), w których chciałem pomóc, ale baza kodu była zbyt skomplikowana, aby nauczyć się poruszać w wolnym czasie. Interesuje mnie zarówno perspektywa głównych programistów (tych, którzy piszą kod i naprawiają błędy), jak i perspektywa pracodawców (na wypadek, gdybym kiedyś chciał umieścić to w swoim CV).


title: Dlaczego Java jako pierwszy język?

text: Dlaczego Java jest tak popularna jako pierwszy język do nauki początkujących? Wydaje mi się, że to straszny wybór: 1. Jest napisany statycznie. Wpisywanie statyczne nie jest przydatne, chyba że zależy Ci na wydajności lub skalowaniu do dużych projektów. 2. Potrzeba mnóstwa szablonów, aby uzyskać najprostszy kod. Spróbuj wyjaśnić „Witaj świecie” komuś, kto nigdy wcześniej nie był programowany. 3. Dobrze radzi sobie tylko ze średnimi poziomami abstrakcji i jest jednym paradygmatem, pomijając w ten sposób wiele ważnych pojęć. Nie da się w nim programować na bardzo niskim poziomie (wskaźniki, ręczne zarządzanie pamięcią) lub bardzo wysokim (metaprogramowanie, makra). 4. Ogólnie największą siłą Javy (czyli powodem, dla którego ludzie jej używają pomimo wad samego języka) są biblioteki i obsługa narzędzi, które są prawdopodobnie najmniej ważnym atrybutem dla początkującego języka. W rzeczywistości, chociaż przydatne w prawdziwym świecie, mogą one negatywy z pedagogicznego punktu widzenia, ponieważ mogą zniechęcać do nauki pisania kodu od zera.


Czy uważasz, że dobrze jest zacząć tworzyć aplikacje na Androida, mimo że jestem początkującym? Czy powinienem więc po prostu skoncentrować się na nauce java, c++, html, css, javascript, php, msql, c#, c, objective-c itp.?


title: Najlepsza architektura programistyczna dla małego zespołu programistów (stos WAMP)

text: Jestem w pierwszym miesiącu pracy w nowej firmie... a po tym, jak spotkałem dwóch programistów i zapytałem, jak są zorganizowane sprawy w zakresie projektów wewnątrz firmy, po prostu wzruszyli ramionami i powiedzieli, że nic nie jest zorganizowane.. Myślę, że w tym samym czasie moja szczęka uderzyła o ziemię.. ( Wiem, że niektórzy z was uważają, że powinienem odejść, ale jestem na uprzywilejowanej pozycji, jestem tam najbardziej doświadczony, więc jest dla mnie miejsce na rozwój w środku firmy i idę drogą ).. Rozmawiałem więc z informatykiem i jednym z programistów i może w tym tygodniu zdobędę serwer tylko dla siebie, żeby zacząć wszystko organizować. W poprzednich doświadczeniach pracy korzystałem z różnych architektur, na jednej rozwijałem na serwerze w sieci (oczywiście bez kontroli źródła). tylko kontrola źródła. A w domu mam mieszankę tych dwóch, wszystko, co koduję, jest na serwerze w sieci i mam te foldery pod kontrolą źródła, mam też konto no-ip skonfigurowane na tym serwerze, więc mam do niego dostęp wszędzie i mogę pokazać klientom wszystko. Uważam, że to ostatnie rozwiązanie (to, które mam w domu) jest najlepsze: * Serwer sieciowy ze stosem WAMP. * Serwer jako publiczny adres IP, dzięki czemu możemy uzyskać do niego dostęp po nazwie domeny. I używaj subdomen dla każdego projektu. * Wszyscy pracują bezpośrednio na serwerze sieciowym. Myślę, że problem pojawia się, gdy dwie lub więcej osób chce pracować nad tym samym projektem, w tym przypadku jedynym sposobem, aby to zrobić, jest użycie kontroli źródła i lokalnych repozytoriów, to jest świetne, ale myślę, że to znacznie zmienia rozwój skomplikowany. W podanym przeze mnie przykładzie, aby dokonać zmiany w kodzie, musiałbym po prostu otworzyć plik w moim ulubionym edytorze, dokonać zmiany, zmodyfikować bazę danych, zaewidencjonować zmiany w kontroli źródła i gotowe. Korzystając z lokalnych repozytoriów musiałbym pobrać najnowszą wersję, uruchomić skrypty na lokalnej bazie danych, aby ją zaktualizować, zmienić plik, zmienić bazę danych, sprawdzić zmiany na serwerze sieciowym, zaktualizować bazę danych na serwerze sieciowym, patrz jeśli wszystko działa dobrze na serwerze sieciowym i wszystko zostało zrobione, wydaje mi się to zbyt skomplikowane dla zmiany na prostej stronie php. Mógłbym udostępnić bazę danych dla rozwoju lokalnego i serwera sieciowego, to na pewno by pomogło. Być może najlepszym sposobem na to jest po prostu: * Serwer sieciowy ze stosem WAMP (serwer testowy, że tak powiem), serwer publiczny dostępny przez sieć. * Stos WAMP na każdym komputerze deweloperskim ( bez bazy danych ) * Programujemy lokalnie, testujemy, następnie sprawdzamy zmiany w serwerze testowym i presto. Co myślisz? Może powinienem zacząć to robić w domu.. Dzięki i pozdrawiam... Edit: Przepraszam, że popełniłem błąd i zamieniłem WAMP na LAMP, przepraszam za to..


title: Gdzie mam zatrudnić niezależnego programistę?

text: Chcę zatrudnić niezależnego programistę do opracowania małej wtyczki InDesign, ale nie mam pojęcia, jak ją znaleźć. Większość stron z ofertami freelancerów to śmieci, ale poza znalezieniem kilku firm w wyszukiwarce Google nie jestem pewien, gdzie jeszcze się udać. Czy są jakieś dobre strony do zamieszczania ofert pracy lub inne dobre sposoby na znalezienie programisty do zatrudnienia?


title: Używanie NetBeans i Eclipse razem

text: Pracuję nad projektem grupowym na uniwersytecie, który obejmuje pisanie aplikacji Swing, aplikacji na Androida oraz niektórych modeli danych Java i połączenia JDBC. Nauczono nas używać NetBeans, ale będziemy musieli używać Eclipse do napisania aplikacji na Androida. Uważam, że NetBeans ma ładniejsze narzędzia do tworzenia GUI niż wtyczka Eclipse Visual Editor, a pozostali członkowie grupy chcą używać NetBeans, ponieważ są z nim zaznajomieni. Mogę już przewidzieć starcia, ponieważ formularze JFrame utworzone w Eclipse nie otworzą konstruktora interfejsów w NetBeans. Czy ktoś ma radę na temat używania obu tych programów razem w projekcie grupowym? W tej chwili problemy, które widzę, to: * Wiele meta-plików z każdego IDE (które obecnie ignoruję za pośrednictwem .gitignore, czy to dobry pomysł?) Zaśmiecanie repozytorium i potencjalnie niezsynchronizowane ze sobą . * Wspomniany problem z GUI, czego szuka NetBeans, gdy chce pokazać widok Projekt? * Wyświetlane są różne szablony. Prawdopodobnie będę po prostu trzymać się NetBeans, dopóki nie przejdziemy do części dotyczącej Androida, ale jeśli istnieją sposoby na sprawienie, by grali przyjaźnie, chciałbym ich usłyszeć.


title: Przepływ pracy dla przypisania wtyczki

text: Rozpoczynam nowy projekt w PHP, wtyczkę do strony internetowej, która pobiera z niej dodatkowe dane poprzez cURL, getContents itp. i przestawia je w Excelu. To lokalny projekt, podstawowy skrypt, jak z bardzo ograniczonym interfejsem użytkownika. Używałem Codeigniter i jest to świetny framework dla stron internetowych, a nawet aplikacji Twitter, do której go używam, ale nie sądzę, że potrzebuję MVC (koniecznie) do tego małego projektu, ale też nie chcę iść odsłonić. Jaki byłby twój typowy przepływ pracy dla tego rodzaju weekendowego zadania, w którym tworzysz lokalny skrypt zrób coś lub jak w moim przypadku dodając funkcjonalność do strony internetowej? Czy jest coś pomiędzy lekkim frameworkiem MVC a pustą stroną?


title: Którego podejścia/technologii/narzędzia .NET REST należy użyć?

text: Wdrażam usługę sieciową RESTful i kilka aplikacji klienckich, które są głównie w Silverlight. Znajduję litanię opcji rozwijania API zarówno po stronie serwera, jak i klienta, ale nie jestem pewien, które podejście jest najlepsze. Martwię się o stabilność oraz platformę, która będzie istnieć za kilka miesięcy. Zaczęliśmy używać zestawu startowego REST z platformą .NET 3.5, ale przenieśliśmy się do nowego interfejsu API sieci Web WCF podczas aktualizacji do platformy .NET 4.0. Cała ich dokumentacja wskazuje, że interfejs API sieci Web WCF jest zamiennikiem RSK. Jednak interfejs API sieci Web jest dostępny tylko w wersji zapoznawczej 4 i nie obejmuje obsługi klientów Silverlight ani Windows Phone 7 (jeszcze). Web API WCF wygląda jak opakowanie na wierzchu usług WCF WebHttp Services dostarczonych w bibliotece `System.ServiceModel.Web`, co sprawia, że myślę, że być może prościej byłoby po prostu skorzystać z wbudowanych rzeczy, ale interfejs API sieci Web oferuje kilka fajnych funkcji. Jestem szczególnie zajęty, próbując określić najlepszy kurs dla strony klienta. Moim głównym wymaganiem jest to, że muszę szybko i łatwo obsługiwać deserializację do moich obiektów po stronie klienta. Internetowy interfejs API oferuje ładną bibliotekę klienta, ale nie ma wersji Silverlight. Chciałbym korzystać z najnowszego podejścia i zestawu narzędzi, który jest aktywnie rozwijany i wspierany. 1. Czy zestaw startowy REST jest naprawdę przestarzały? 2. Czy ktoś odniósł sukces we wdrażaniu zestawu narzędzi WCF Web API? 3. Czy warto używać jednej z tych funkcji za pośrednictwem wbudowanych funkcji usług WCF WebHttp dostępnych w `System.ServiceModel.Web`? 4. Czy istnieje jedno rozwiązanie, które działa dla każdego klienta (web, Silverlight itp.)? Jakie masz sugestie?


title: Jak wygląda twój przepływ pracy Lisp?

text: W tej chwili uczę się Lispa, wychodzę z progresji językowej Locomotive BASIC -> Z80 Assembler -> Pascal -> C -> Perl -> C# -> Ruby. Moje podejście polega na jednoczesnym: * napisaniu prostego web-scrapera przy użyciu SBCL, QuickLisp, closure-html i drakma * obejrzeniu wykładów SICP Myślę, że to działa dobrze; Opracowuję dobre „gogle do Lispa”, dzięki którym mogę teraz dość łatwo czytać Lisp. Rozumiem też, jak działa ekosystem Lisp, m.in. Quicklisp dla zależności. Tym, czego naprawdę mi brakuje, jest wyczucie tego, jak doprawiony Lisper faktycznie _działa_. Kiedy koduję dla .NET, mam skonfigurowane Visual Studio z ReSharper i VisualSVN. Piszę testy, wdrażam, refaktoryzuję, zatwierdzam. Potem, kiedy skończę z tym wystarczająco dużo, by dokończyć historię, piszę kilka AUAT. Następnie uruchamiam kompilację wydania w TeamCity, aby przekazać klientowi nową funkcjonalność w celu przetestowania i mam nadzieję, że zostanie zatwierdzona. Jeśli jest to aplikacja, która wymaga instalatora, używam WiX lub InnoSetup, oczywiście budując instalator przez system CI. Więc moje pytanie brzmi: jako doświadczony Lisper, jak wygląda _Twój_ przepływ pracy? Pracujesz głównie w REPL, czy w edytorze? Jak przeprowadzasz testy jednostkowe? Ciągła integracja? Pakowanie i wdrażanie? Kiedy siadasz przy biurku z parującym kubkiem kawy po jednej stronie i oprawionym w ramkę zdjęciem Johna McCarthy'ego po drugiej, co _robisz_? Obecnie czuję, że zaczynam radzić sobie z kodowaniem Lispu, ale nie z rozwojem Lispu ...


title: Jak głęboko programista powinien wiedzieć o wnętrzu silnika bazy danych?

text: Uczę się SQL Server 2012 wraz z C#. W przeszłości uczęszczałem na zajęcia z baz danych na studiach i dobrze znam język SQL i potrafię pisać zapytania. Jednak patrząc na dokumentację SQL Server (lub Oracle), wydaje się, że silnik DB (wraz ze wszystkimi towarzyszącymi mu technologiami) jest bardzo złożony i wymaga dużo czasu i wysiłku, aby się nauczyć. Poza pisaniem zapytań SQL, jak głęboko programista powinien wiedzieć o wnętrzu silnika bazy danych?


title: Co to jest rozwój oparty na „pociągu”?

text: Natknąłem się na kolejny nowy termin w metodologii rozwoju i nie udało mi się znaleźć dla niego definicji. W szczególności nazywa się to „rozwojem opartym na pociągu”. Oto kilka przykładów tego, gdzie widziałem ten termin. > Na początku tego tygodnia poprosiłem naszych inżynierów i kierowników ds. wydań, aby > usunęli z pociągów wersję Firefoksa dla systemu Windows Metro. (Johnathan > Nightingale) https://blog.mozilla.org/futurereleases/2014/03/14/metro/ Ze strony internetowej Mozilla poświęconej karierom: > Doświadczenie w pracy zarówno z metodologią zwinnego rozwoju, jak i opartym na szkoleniach > Rozwój/QA zespoły. Słyszałem o „pociągu” już wcześniej i nie tylko w kontekście Mozilli. Ale nie udało mi się znaleźć dobrych informacji na ten temat w sieci. Kiedy wyszukiwałem w Google „oprogramowanie oparte na pociągach”, w wynikach wyszukiwania znalazłem bardzo mało informacji. Najbliżej tego, co mógłbym wydobyć, co oddziela pociąg od wagonów, jest to, że „pociąg” polega na wypuszczaniu w regularnych odstępach czasu zgodnie z harmonogramem. Ale wydaje się również, że „pociąg” jest rodzajem konkretnej konfiguracji QA. **Co to jest „rozwój oparty na pociągu”?**


title: Jak nauczyć skrypt wykrywający sarkazm?

text: Obecnie tworzę zabawny skrypt, który w zasadzie dopasowuje podane frazy i daje predefiniowaną odpowiedź na podstawie punktów dopasowania. Możesz poprosić go o pobranie pewnych informacji na podstawie przekazów na żywo, uruchomienie zadań, opowiedzenie anegdot lub po prostu porozmawianie z nią. Mam już wbudowane wykrywanie dla badwords, caps locka lub obu. Program ma dziewczęce imię, a ja starałam się być jak najbardziej zbliżona do bycia dziewczęcą dziewczyną, logicznie rzecz biorąc (na przykład: każdy wie, że większość dziewczęcych dziewczyn zajmuje 700ms, aby odpowiedzieć na pytanie, oczywiście żartując). Oto mały przykład: > Klient: JAKI JEST TWÓJ PROBLEM? > Kiku: NIE UŻYWAJ TEGO TONU ZE MNĄ! > Klient: #### ty > Kiku: dlaczego jesteś dla mnie taki złośliwy :/ Jednak naprawdę chciałbym dodać do tego sarkazm. Więc jeśli napiszesz coś z sarkazmem, to wykryje to i odpowiednio zareaguje. Teraz jest to trudna część, **Jak uczysz scenariusza, czym jest sarkazm?** Dla mnie bardziej konkretna. Jakie są dziś najczęściej używane sarkastyczne słowa? Albo jak uzyskać te statystyki? Jak sprawić, by skrypt zrozumiał kontekst danej frazy? **AKTUALIZACJA** Ponieważ to pytanie jest coraz bardziej popularne, myślę, że należy nieco bardziej wyjaśnić. Jest bardzo jasne, że stworzenie skryptu w pełni wykrywającego sarkazm jest w zasadzie niemożliwe. Przynajmniej w rozsądnej sprawie. Jednak wierzę, że można wykryć pewną ilość **możliwego** sarkazmu. Obecnie doszedłem do tego stopnia, że mój skrypt może wykryć bardzo ograniczony sarkazm. Wstępnie zdefiniowałem kilka popularnych sarkastycznych słów (jednak same są bezużyteczne.) Na przykład: **jak, cokolwiek, tak, dobrze i świetnie.** A potem najpierw dopasowuje proste rzeczy, takie jak wielkie litery i cytat: `DZIĘKI jesteś taki mądry” lub „och, jesteś taki „SMART””. Ponieważ główną funkcją skryptu jest wykonywanie zadań lub pobieranie informacji, a następnie zapyta, czy o to ci chodziło. Potem pomyślałem, dodając „dzięki” jako specjalną zmienną. Zatem „tak, dzięki” lub „cokolwiek dzięki” wywoła możliwy sarkazm, a skrypt zapyta: „Czy wyczuwam sarkazm?” Najlepiej byłoby wtedy powiedzieć „przepraszam”, w przeciwnym razie doda ostrzeżenie, a jeśli limit zostanie osiągnięty – zacznie Cię ignorować. Ponieważ wydaje się, że te bardzo proste algorytmy rzeczywiście działają, ten pomysł ma przyszłość, oczywiście po wielu dostrajaniu i ulepszaniu. Jednak czy ktoś mądrzejszy stworzyłby oprogramowanie open-source z myślą o tym samym pomyśle. Wtedy ta funkcja może być podłączona do wielu funkcji w Internecie. Obsługa klienta prawdopodobnie skorzystałaby najbardziej, jednak ten rodzaj oprogramowania może być również używany do wykrywania treści „oznaczanych”.


title: Edycja linii Copyright w Apache2 license.txt

text: Chcę opublikować swój program na licencji Apache2. Dodałem część „ZAŁĄCZNIK” tekstu licencji do górnej części mojego pliku source.txt i zmodyfikowałem rok i nazwę praw autorskich. Ale kiedy dodam plik license.txt do tego samego archiwum z kodem źródłowym, czy powinienem edytować wiersz praw autorskich z moim nazwiskiem i rokiem? A może powinienem pozostawić kopię pliku license.txt w stanie nienaruszonym, pobraną ze strony Apache?