title: Wymagania systemowe serwera/oprogramowania dla asp.NET Framework 4.0

text: **Tło:** Ja i mój kolega otwieramy nową firmę zajmującą się projektowaniem i tworzeniem witryn internetowych. Zaprojektowaliśmy i wdrożyliśmy stronę internetową w Microsoft Visual Studio 2010 z wykorzystaniem formularzy internetowych w .NET Framework 4. Ponieważ byłem wtedy nowy w asp.NET, nie byłem pewien, jakiej bazy danych użyć. Dlatego stworzyłem nowy "Plik bazy danych Microsoft SQL Server" i dodałem wszystkie tabele itp. Następnie pracowałem z tą konfiguracją aż do ukończenia witryny. Strona działa jak marzenie w Visual Studio. **Problem:** Mieliśmy kupić serwer z lokalnego źródła, którego nie można nazwać, a ten serwer miał mieć Microsoft SQL Server 2005 dla bazy danych, i zakładam, że IIS skonfiguruje serwer i obsłużyć prośby itp. (proszę pamiętać, że moja wiedza na temat serwerów jest ograniczona) A ta firma miała skonfigurować wszystko bla bla bla, wszystko skonfigurować, więc wszystko, co musimy zrobić, to umieścić na niej naszą stronę internetową i życie jest słodkie. Problem polega na tym, że ta firma nas namieszała, powiedziała nam to i owo i okazuje się, że są bardzo nierzetelni i niewiarygodni. Wydaliśmy już z nimi sporą sumę pieniędzy, a oni ociągają się, oddając nam pieniądze, mówiąc, że to, o co prosiliśmy, jest niemożliwe, że nie możemy uruchomić SQL na starym serwerze bla bla bla. **Pytanie:** Mam stronę asp.NET z bazą danych serwera SQL (plik .mdf, jeśli to pomaga) i musimy wiedzieć, czego potrzebujemy, aby uzyskać ją w Internecie. rozważaliśmy zakup własnego komputera, umieszczenie na nim oprogramowania serwera MS, zainstalowanie serwera SQL 2005, zainstalowanie IIS i uruchomienie go z tego. Ale nie wiemy, co i jak zrobić. Zanim wszystkie te problemy z serwerem zaczęły się, próbowałem zainstalować kopię IIS na moim komputerze i hostować ją stamtąd jako test, aby przyzwyczaić mnie do oprogramowania, jednak próbowałem wielu samouczków i wszelkiego rodzaju i nie mogłem uzyskać naszej strony internetowej gościć! Mogą być tego przykłady w całym Internecie, ale nie mogę znaleźć odpowiedzi. Nie rozumiem większości rzeczy, o których ludzie mówią w tych artykułach. Wiem, że wędrowałem, ale w zasadzie. Muszę tylko wiedzieć, JAK umieścić aplikację asp.NET w Internecie i jakie są minimalne wymagania. Czy potrzebuję w ogóle oprogramowania SQL Server na moim serwerze? czy jest to wyłącznie do interakcji z bazą danych sql?


title: Wywiad ze stażystą z Microsoft

text: Obecnie jestem na drugim roku (informatyka i matematyka). Za dwa dni mam wywiad na kampusie z Microsoftem. Trochę się denerwuję, bo to będzie mój pierwszy wywiad. Zrobiłem przegląd podstawowych rzeczy, takich jak połączone listy i drzewa binarne. Nie jestem do końca pewien, jakie pytania zostaną mi zadane. Czy ktoś był na takim wywiadzie? Jeśli tak, jak to jest? Jakie pytania zostaną mi zadane? Każda pomoc/sugestie będą mile widziane! Czy ktoś może mi też dostarczyć listę rzeczy, które powinienem wiedzieć podczas rozmowy kwalifikacyjnej?


title: Zaangażowanie open source jako profesjonalne odniesienie

text: jeśli ktoś poświęca swój czas na projekt open source, może zainwestować znaczną ilość czasu bez otrzymywania zapłaty. O ile altruizm jest odczuwalny, o tyle zastanawiam się, czy „liczy się” jako czynność, którą można pokazać i która jest ceniona w podaniach o pracę. Jeśli firma jest warta twojego czasu i siły roboczej, to moim uczciwym zdaniem powinno być. Zastanawiam się więc, czy istnieje coś takiego jak powszechna praktyka w projektach open source w tym zakresie. Powiedzmy, coś w stylu > Pan Martin pracuje nad naszym projektem od pięciu lat i > przyczynił się do tego i tamtego,[...] Życzę mu wszystkiego najlepszego na przyszłość. >> Panie ChiefofProject Myślę, że to słuszna obawa. Czy masz doświadczenia, którymi możesz się podzielić?


title: 12-letni syn zainteresowany programowaniem na Androida

text: Tak więc mój 12-letni syn interesuje się programowaniem na Androida. Nigdy wcześniej nie robił prawdziwego programu, ale grał krótko z Alice. Próbuję wymyślić, jaki byłby najlepszy sposób na wprowadzenie go w programowanie, a dokładniej, czy lepiej byłoby, gdyby po prostu wskoczył do programowania na Androida, czy też powinienem najpierw kazać mu napisać Javę. Jakieś sugestie?


title: Czy „rozważ zwrócenie obiektu Null” dotyczy metody odczytu DAO?

text: Szukałem odpowiedzi na pytanie, co DAO powinien zwrócić, gdy wyszukiwanie kończy się na podmiot, który nie istnieje. Istnieje kilka ogólnych poprzednich pytań związanych ze zwracaniem wartości null, ale szukam odpowiedzi konkretnie w kontekście scenariusza pobierania DAO. Żeby było jasne, kiedy mówię _Null Object_, mam na myśli wzorzec Null Object. W przestrzeni Javy Josh Bloch zaleca rozwiązanie pustej kolekcji w książce _Efektywna Java_ (patrz punkt 43), która stanowi bardzo dobre wprowadzenie do problemu/rozwiązania. Pomimo tego, że byłem świadomy rady Blocha, kiedy po raz pierwszy pisałem to pytanie, uważałem, że zwracanie wartości null jest właściwe w scenariuszu odczytu/pobierania. Jestem w dobrym towarzystwie, popełniając błąd z wartościami null.


title: Jak dojrzały jest PyPy?

text: Dojrzałość PyPy staram się określić innymi sposobami niż czytanie opinii twórców. Dlatego jestem zainteresowany słuchaniem o wszelkich głośnych projektach o znaczeniu krytycznym przy użyciu PyPy. Wszystkie inne wskaźniki dojrzałości wydają się w porządku. Brakuje mi tego, zanim zdecyduję się na wykorzystanie go w moim głównym projekcie.


title: Praktyczne zasady dotyczące podziału na podprojekty

text: Budujemy klienta i serwer gry, nasz system jest podzielony na cztery główne projekty: (klient i serwer, współdzielone interfejsy, grafika źródłowa). Ponadto zarówno klient, jak i serwer mają zestaw bibliotek, w których umieszczamy wspólny kod odpowiednio dla klienta i serwera. Jak możesz sobie wyobrazić, prowadzi to do wielu projektów, naliczyłem 12 projektów w całym źródle. Moje pytania są; Jakie są dobre zasady dotyczące tego, kiedy zachować kod w jednym projekcie, a kiedy podzielić go na podprojekty. Nikt nie lubi dużych monolitycznych projektów, ale wiele małych projektów również powoduje duże obciążenie. Czy wszystkie projekty powinny być rozgałęzione i wydawane w trybie lock-step, aby wszystko było proste (jeden aktualny numer wersji dla wszystkich), czy też projekty biblioteczne powinny być rozgałęzione i wydawane osobno tylko wtedy, gdy ulegną zmianie. Doprowadzi to do złożonej mapy kompatybilnych wersji. Wiem, że nie ma absolutnej odpowiedzi na te pytania, ale jakie są znane najlepsze praktyki przy podejmowaniu decyzji i/lub dobrym materiale referencyjnym do przeczytania na ten temat?


title: Jak zaprojektować mechanizm rozszerzenia dla aplikacji java

text: Mam aplikację, w której mam zestaw podstawowych funkcji. 1. Sama aplikacja MUSI działać tylko w trybie podstawowym. 2. Chciałbym również, aby aplikacja była rozszerzalna, aby w przypadku istnienia pewnych plików jar/wtyczek w ścieżce klasy/lokalizacji instalacji dostępne były dodatkowe funkcje, po prostu byłyby tam rzeczy. To jest OPCJONALNE. Sposób, w jaki bym to zrobił, to użycie wzorca fabrycznego z modyfikacją. W pakiecie core mam punkt rozszerzenia (zaimplementowany przez publiczną zmienną statyczną lub singletona, lub inny model punktu rozszerzenia z mojego frameworka - Eclipse RCP). Rozszerzenia JAR/wtyczki pobierają ten punkt rozszerzenia i rejestrują swój obiekt fabryczny w tym punkcie rozszerzenia. (Najlepiej zrobić to za pomocą mechanizmu aktywacji wtyczek/funkcji RCP lub może to być po prostu wszystko, co powoduje ładowanie klasy jar rozszerzeń/fabryki wtyczek) Po uruchomieniu aplikacji, fabryka rdzeni będzie produkować obiekty z fabryki rozszerzeń, jeśli została zarejestrowana lub w inny sposób korzysta z głównej fabryki. W ten sposób aplikacja przechodzi z trybu podstawowego do trybu rozszerzenia, jeśli istnieje plik jar rozszerzenia. Zastanawiam się, czy jest to przyzwoity sposób na zrobienie tego, co chciałem zrobić, czy to tylko hack, antywstrzał itp... Proszę zaproponuj lepsze rozwiązanie, jeśli możesz. Dziękuję.


title: Metodyki wysokiej klasy zespołu programistycznego

text: Ostatnio otrzymałem zadanie podniesienia standardów i wydajności w zespole programistycznym. Czytałem podobne posty o zadatki na dobry zespół programistów, ale często omawiają one elementy ludzkie, takie jak „pasja do nauki”, „bycie graczem zespołowym” itp. To wszystko jest oczywiście ważne, ale jestem szczególnie zainteresowany pomysły dotyczące praktycznych metodologii. Niektóre są po prostu oczywiste, na przykład moje pierwsze implementacje to: * Implementacja kontroli źródła - cóż, czy muszę w ogóle wyjaśniać dlaczego? * Ustrukturyzowana metoda wdrażania kompilacji, której wszyscy przestrzegają - ułatwia wdrożenie wszystkim zaangażowanym * Standardy kodowania - zapewniają, że wszyscy pracują w ten sam sposób i (miejmy nadzieję) zmniejszają dług techniczny * Zachęcanie do korzystania ze społeczności programistów, np. StackOverFlow i tym podobne - utrzymuje nas na bieżąco z wielkim złym światem i przynosi pomysły spoza naszych biur ?


title: model obiektowy i model danych

text: Słyszałem/czytałem mieszane rzeczy, czy zacząć od modelu obiektowego, czy modelu danych. Coraz więcej osób mówi, aby zacząć od modelu obiektowego, ponieważ ułatwi to modelowanie danych. Moje pytanie brzmi: czy model obiektowy nie powinien zawsze sterować projektowaniem modelu danych? Dlaczego i kiedy projekt modelu danych byłby inny niż model obiektowy? Jeśli mamy dobry model obiektowy, to czy klasy, które wymyślimy, nie powinny przekładać się na tabele? A skojarzenia klasowe jako relacje między tabelami?


title: Na przykład metody, czy zawsze zwracanie siebie, czy to, zamiast używania zwracanego typu void, byłoby czystym stylem kodowania?

text: Właśnie natknąłem się na ten artykuł, a w szczególności na tę odpowiedź. Zasadniczo mówią o zwracaniu `self` z metod instancji, aby umożliwić łańcuchowanie metod. Mając to na uwadze, jedną z pierwszych myśli, która przyszła mi do głowy, było: _Dlaczego nie zawsze brać metody instancji z typami zwracanymi `void` i zmuszać je do zwracania `this` lub `self`? , było: _Prawdopodobnie jest powód, dla którego to nie jest bardziej powszechne._ Więc co może być w tym złego? Wygląda na to, że szczerze nie byłoby żadnego. Powodem jest to, że nic o samym istnieniu wartości zwracanej nie implikuje ani nawet nie wydaje się sugerować potrzeby użycia tej wartości zwracanej. Jeśli metodą jest wyspecjalizowany pobieracz, czytnik plików lub coś takiego, to jedno, ale jeśli ludzie nie chcą używać wartości zwracanej, naturalnie nie zwracają na to żadnej uwagi. Co więcej, nie powinno to być zbyt mylące, ponieważ `zwróć to;` jest dość trywialne; co najwyżej ktoś mógłby pomyśleć, że to nieistotne. Z pewnością wydaje się, że nic by to nie zaszkodziło, a ogólnie lepiej jest mieć za dużo niż za mało.


title: Jak ocenić jakość kodu Railsów?

text: **Czego szukasz w przeglądzie kodu, aby ocenić wiedzę programisty?** Biorąc pod uwagę możliwość przyjrzenia się pracy programisty nad rzeczywistym projektem, jakie znaki ostrzegawcze są wskazówką do nieostrożności lub braku doświadczenia? I odwrotnie, gdzie szukać w kodzie dowodów na umiejętności programisty lub znajomość najlepszych praktyk? Na przykład, jeśli patrzę na typową aplikację Railsową, byłbym szczęśliwy, widząc, że programista używa RSpec (okazując zaangażowanie w rozwój oparty na testach i wiedzę, że RSpec jest obecnie bardziej popularny niż domyślny TestUnit). Ale badając specyfikację modelu Rails, widzę, że deweloper testuje skojarzenia, co może wskazywać na brak rzeczywistego zrozumienia wymagań testowych Rails (ponieważ takie testy są zbędne, biorąc pod uwagę, że testują tylko to, co już jest zaimplementowane i przetestowane w ActiveRecord) . Mówiąc bardziej ogólnie, mógłbym sprawdzić, czy programiści piszą własne implementacje, a nie używają powszechnie dostępnych klejnotów, czy też czyszczą kod, czy nie zostawiają wielu zakomentowanych „resztek”. Co pomaga określić umiejętności programisty Railsów? Jaka jest Twoja lista kontrolna jakości kodu?


title: Podejście odgórne czy oddolne?

text: Jestem projektantem interfejsów, a teraz pracuję z zespołem programistów nad stworzeniem nowego CMS dla serwisu o dużej zawartości mediów. Gdy zacząłem opracowywać listę specyfikacji dla prototypu, okazało się, że jest bardzo obszerna. Teraz zdaję sobie sprawę, że strona klienta będzie ciężka w JS, z dużą ilością DnD i innych „fajnych designerskich rzeczy”. CMS będzie zawierał nawet mały system zarządzania projektami dla swoich użytkowników, nic wielkiego jak Basecamp, ale z kanałem komentarzy na żywo itp. Problem polega na tym, że zespół się teraz rozdzielił. Ktoś proponuje istniejące rozwiązanie backendowe używane w innym CMS, ktoś proponuje napisanie wszystkiego od nowa. Celem zachowania kodu jest to, że jest szybszy, punktem do przepisania jest poprawienie go pod kątem proponowanego projektu (w tym Node.js i inne rzeczy, których tak naprawdę nie rozumiem). Pytanie brzmi – czy specyfikacje interfejsu użytkownika mogą wpływać na back-end? Chłopaki, którzy proponują wykorzystanie istniejącego rozwiązania, zrobili wszystko z frameworkiem Yii (o ile wiem) i mówią, że wszystko na serwerze nie jest dotknięte tym „chłodzeniem interfejsu”. Inni twierdzą, że tak, że nawet autozapis nie może działać bez obciążenia serwera.


title: Pisanie bootloadera bez bootloadera

text: Mam pytanie, na które naprawdę nie mogę znaleźć prostej odpowiedzi. Zacznę od stwierdzenia, że nie proszę o samouczek krok po kroku, ani nawet nie planuję niczego robić. Jestem tylko ciekaw. Cały dzień czytam o rozwoju systemów operacyjnych io tym, jak są one budowane od podstaw. Teorię tego dość mocno trzymam. Jest jednak jeden krok, na który nie mogę znaleźć odpowiedzi. Przed istnieniem pełnego, wypełnionego narzędziami systemu operacyjnego, jak można by napisać prosty program ładujący dla komputera, który nie ma żadnego programu ładującego ani niczego w tym zakresie w sektorze rozruchowym? Jaki byłby pierwszy krok po zakupie komputera z minimalnym minimum? (tj. ekran, klawiatura, procesor, pamięć RAM, dysk twardy, dyskietka)


title: Muszę używać Visual Studio 2005. Jakie są dobre alternatywy dla używania LINQ?

text: Niedawno rozpocząłem nową pracę i jestem zmuszony do korzystania z VS 2005 i .NET 2. Było to dość bolesne z wielu powodów, ale jedyną dużą zmianą w stosunku do VS 2005 do jego następców było wprowadzenie LINQ i metod rozszerzających . Częstym wzorcem, który stosowałem podczas korzystania z wyliczeń, był następujący: foreach(var myObject in myObjects.Where(x => x.Property == someValue) { //Zrób coś } To, z czym mam trudności, nadchodzi z zwięzłym sposobem wyrażenia tej samej instrukcji w C# 2. Najlepsze, co wymyśliłem, to: foreach(MyObject myObject in myObjects) { if(myObject.Property == someValue) { //Zrób coś } } Jest istnieje bardziej efektywny lub wydajny sposób pisania tego kodu?Jak napisać kod C# 2, aby najłatwiej było go przekształcić w kod C# 5 (będziemy aktualizować do VS2012/.NET 4.5 po następnej wersji)?


title: Przerywanie wydajności pracy: nazwa?

text: Z pewnością jest to zabójca produktywności, gdy programiście nieustannie przerywają inni pracownicy, szefowie itp. - ale jest jeszcze gorzej, gdy programista jest stale przerywany przez własne narzędzia i sprzęt. Na przykład, jeśli programista musi czekać 10 minut na każdą wykonaną przez siebie kompilację — aby móc iteracyjnie testować kod, nad którym pracuje, wpływ na produktywność jest druzgocący. A może kompilacja jest szybka, ale kopiowanie bitów do testowej maszyny wirtualnej zajmuje 3 minuty. Po raz kolejny programista jest zirytowany brakiem „reakcji” w stosowanych narzędziach i procedurach. Uważam, że istnieje nazwa środowiska wolnego od tych problemów, a może nazwa nękana tymi przerwami w procesach i narzędziach. Nie pamiętam nazwy ani „etykiety” branży. Czy ktoś pamięta?


Czy potrafisz programować aplikacje na Androida w funkcjonalnym języku? Chodziło mi o to, czy można programować na Androida w języku, który został zaprojektowany od podstaw, aby był funkcjonalny? Zdaję sobie sprawę, że można używać komponentów funkcjonalnych OO lub języka proceduralnego do programowania w stylu funkcjonalnym, pytałem, czy można zastosować jeden z „języków funkcjonalnych” na Androidzie.


title: Znaczenie projektowania zorientowanego obiektowo

text: Zacząłem studiować projektowanie zorientowane obiektowo i modelowanie, korzystając z tej książki Jamesa Rumbaugha. Wykorzystuje narzędzie o nazwie Object Modeling Technique (OMT). Mam pewne pytania dla początkujących. Przeszukałem internet, ale nie znalazłem odpowiedzi 1. Książka jest dość stara. Nie wiem, dlaczego szkoła kazała mi się tego nauczyć. Wiem, że OMT jest poprzednikiem Unified Modeling Language (UML). Więc to marnotrawstwo? 2. Czy koncepcje bardzo się zmieniają, gdy przechodzimy z OMT na UML? Wiem, że OMT ma Model Obiektowy, Dynamiczny i Funkcjonalny. Wikipedia twierdzi, że UML jest kompatybilny z OMT, a UML też jest modelem. 3. Zgodnie z wikipedią modele UML są statyczne i dynamiczne i są reprezentowane przez różne diagramy, takie jak klasa, obiekt, aktywność, sekwencja ..... Nie mogłem znaleźć równoważności tego w OMT. 4. Czytałem, że istnieje wiele metod programistycznych zorientowanych obiektowo, takich jak OMT, Booch,.... Która jest używana przez Przemysł ? 5. Gdzie mogę uzyskać porównanie różnych metod programowania obiektowego?


title: Rozwój/administracja baz danych - Czego dokładnie powinienem się nauczyć?

text: Byłem trochę zmęczony zbliżaniem się do uczących się baz danych. Bawiłem się nimi już wcześniej, a „DATA” samo w sobie bardzo mi się podoba. Utrzymywanie/szukanie/przenoszenie, wszystko w tym abstrakcyjnym sensie, który kocham. (To nie jest pytanie dotyczące kariery, to jest pytanie do nauki.) Ale w miarę jak RDBMS zaczynają być łatwiejsze w utrzymaniu i dzięki narzędziom, których „każdy” może używać do zarządzania danymi, których obawiałem się w przypadku zadań administratora baz danych. (Ale wszędzie widzę zadania dla SQL!). Wiem, że "No-SQL" to wielka sprawa, ale ma swoją niszę. Ale to zostawia mnie tutaj... niepewnego "co" studiować. Jakie narzędzia powinienem mieć w swoim pasie narzędziowym? Jestem pewien, że RDBMS będą dostępne zarówno w użyciu, jak i utrzymaniu starszego kodu. Ale co jeszcze? Oczywiście dane zawsze będą w pobliżu, ale czy jest to bezpieczne pole, czy umierające? A na czym powinienem się skoncentrować?


title: Czy mogę legalnie używać ikony innego oprogramowania?

text: Załóżmy, że dołączam funkcję do mojego oprogramowania do przeglądania obrazów, która otwiera obraz w programie Photoshop („Wyślij do Photoshopa”), używając struktury automatyzacji OLE programu Photoshop. Czy mogę używać ikony Photoshop.exe jako obrazu tego przycisku „Wyślij do”?


title: Czy mam wystarczająco dużo doświadczenia, aby od razu uczyć się i rozwijać w Ruby on Rails?

text: ### Pytanie ogólne Rozumiem, że dyskusje toczące się wokół pytań w tej formie niosą ze sobą ryzyko, że staną się zbyt szczegółowe, aby pomóc innym. Więc może lepszym, ogólnym pytaniem byłoby: > Jakie doświadczenie, jeśli w ogóle, można łatwo przełożyć na Ruby on Rails; a jeśli > brak, to jak wygląda krzywa uczenia się w porównaniu z innymi popularnymi > językami? ### Tło Mam możliwość zbudowania strony internetowej przy użyciu dowolnych technologii, których chcę używać. Jest to dość prosta strona internetowa do * wystawiania produktów, * przyjmowania płatności, * zarządzania danymi klientów, * udostępniania portalu zaplecza dla pracowników do zarządzania danymi, * ewentualnego podłączania informacji o lotach (produkty są związane z podróżami), * ewentualnie integracji blog i wszystkie gadżety społecznościowe. ### Konkretny problem Do dzisiejszego wieczoru muszę powiadomić klienta, czy jestem zainteresowany podjęciem tego projektu, zanim porozmawia z innymi potencjalnymi programistami, ale jestem na granicy. 1. Już pracuję w pełnym wymiarze czasu pracy programistycznej C++, więc pieniądze nie robią tego za mnie. Jest to okazja, aby (otrzymać zapłatę) nauczyć się nowych technologii i na koniec mieć prawdziwy, działający produkt. 2. Słyszałem i czytałem świetne rzeczy o Ruby i jestem naprawdę zaintrygowany. 3. Zrobiłem kilka wstępnych tutoriali Ruby, bez potu. 4. Jednak uważam, że tutoriale Rails są trochę przytłaczające, zwłaszcza że nie mogę ich nigdzie wypróbować. 5. Badanie hostów Rails, takich jak Heroku i EngineYard, sprawia, że myślę, że może nie wiem, w co się pakuję. Statek opuszcza port! Chciałbym mieć więcej czasu na naukę, jeszcze lepiej _zabawę_ się językiem, ale wkrótce muszę się zdecydować! Czy powinienem zaryzykować czy zdać? ### Dodatkowe szczegóły Moje doświadczenia są w C/C++/Tcl/Perl/PHP/jQuery i podstawowa znajomość Java/C#. Nie uczyłem się formalnie CS, więc nie byłem narażony na zasady projektowania, paradygmaty programowania itp., co jest moim największym zmartwieniem. Czy mój brak zrozumienia w tej dziedzinie sprawi, że nauka RoR będzie frustrująca? Czy będzie to tak niezgodne z C++ „sposobem” myślenia, że będę żałować, że nigdy nie zacząłem? Czy próbując tego narażam klienta na ryzyko? Jeśli to pomaga, szybko uczę się nowych rzeczy (do tej pory samoukiem) i bardzo dbam o poprawność, używanie rzeczy zgodnie z ich przeznaczeniem i tak dalej. Przeczytałem wiele zaleceń **Agile Development with Rails** i chciałbym je przeczytać (choć być może, rozwijając równolegle, przez krótki czas). Co gorsza, poddałbym się i zagrałem standardowy koncert LAMP, oczywiście nie obciążając klienta za zmarnowany czas. Ale mam nadzieję, że całkowicie uniknę tego projektu, jeśli do tego dojdzie! Z góry dziękuję za wszelkie wskazówki, spostrzeżenia, głosy zaufania, głosy zniechęcenia (na lepsze) i takie tam.


title: Czy ktoś używa Ceiling i *nie* od razu rzutuje go na liczbę całkowitą?

text: Myślę, że za każdym razem, gdy użyłem `Math.Ceiling` lub jego wariantu językowego, _zawsze_ musiałem rzucić to na liczbę całkowitą. To znaczy... o to chodzi, prawda? Aby uzyskać liczbę całkowitą. Dlaczego więc nie zwraca po prostu `int`?


title: Jaki jest właściwy poziom blokowania witryn dla Ciebie jako programisty?

text: Prawie wszyscy programiści pracujący dla dużej korporacji znajdują się po złej stronie oprogramowania blokującego witryny. Może to być zarówno frustrujące ( _ „Pozwól mi przeczytać tego cholernego bloga!”_ ), jak i pomocne ( _ „Woah! Uniknęliśmy kuli w tej witrynie”_ ). Twoim zdaniem, jaki jest właściwy poziom blokowania dla programistów i dlaczego?


title: Ustawienia plików cookie Metoda przechowywania

text: Mam aplikację sieci web, która musi przechowywać pewne niewrażliwe preferencje dla użytkownika. W tej chwili zapisuję ich preferencje językowe i tryb, w którym chcą, aby okno było otwierane domyślnie w dwóch plikach cookie: * "lang" może być "en" lub "de" * "tryb" może być "design" lub "view" W przyszłości może dodam jeszcze kilka. Nie wiem ile, ale chyba nigdy więcej niż tuzin. Język jest analizowany przy każdym żądaniu, podczas gdy plik cookie trybu jest używany tylko sporadycznie. Widziałem zalecenie, które miało sens. Nie powinienem próbować robić tego, co pierwotnie planowałem, i mocno wpisywać klasę ustawień użytkownika zdeserializowaną przy każdym żądaniu ze względu na związane z tym obciążenie. Widzę tutaj trzy opcje i nie jestem pewien, która jest ogólnie najlepsza. * Zachowaj wszystko bez zmian, dodaj nowy plik cookie dla każdego nowego ustawienia * Połącz pliki cookie w jeden plik cookie ustawień i dodaj do niego przyszłe wartości * Zmień plik cookie trybu na ustawienia (pozostawiając sam język), dodaj nowe wartości ustawień użytkownika do ustawienia cookie Wszystko oczywiście działałoby. Skłaniam się ku opcji trzeciej, ale nie jestem pewien, czy jest na to najlepsza praktyka?


title: Czy mogę połączyć się z biblioteką gpl z aplikacji o zamkniętym kodzie źródłowym?

text: Ok, zanim wszyscy zaczną krzyczeć o zduplikowanych pytaniach, tak, widziałem już kilka takich pytań tutaj. Ale nikt nie odpowiada na pytanie. Jeśli linkuję do biblioteki gpl bez modyfikowania tej biblioteki, czy muszę zwolnić mój kod źródłowy? Zgodnie z tym pytaniem Czy mogę używać oprogramowania na licencji GPL w komercyjnej aplikacji, odpowiedź brzmi: tak! Ale ta odpowiedź nie jest dla mnie satysfakcjonująca. Odpowiedź zasadniczo mówi, że nie mogę używać kodu gpl w żaden sposób bez uczynienia mojego kodu otwartym kodem źródłowym. Ale oto pytanie, które mnie naprawdę interesuje, jeśli poprzednie jest prawdziwe, to oznaczałoby to, że żadna osoba ani organizacja nie mogłaby kiedykolwiek wydać żadnego zastrzeżonego oprogramowania na Linuksie. Co musi być nie tak. Po prostu dlatego, że aby jakakolwiek aplikacja mogła robić cokolwiek użytecznego, otwierać pliki, pisać do konsoli, tworzyć połączenia tcp, aplikacja musi być dołączona do `libc`, która jest na licencji GPL. Więc moje pytanie jest takie, jeśli GPL stwierdza, jak wszystkie poprzednie odpowiedzi na tej stronie mówią, że program, który łączy się z innym programem gpl, musi być samym gpl, w jaki sposób można tworzyć/wydawać/sprzedawać dowolną zastrzeżoną aplikację w ogóle, który działa na Linuksie? Ponieważ jak opisałem powyżej, ta aplikacja musi być lubiana w kodzie gpl tylko po to, by działała pod Linuksem. Bardziej praktyczny przykład mówi, że linkuję do biblioteki dzielonej, która jest objęta gpl w aplikacji nie korzystającej z gpl, czy to zmusiłoby aplikację nie korzystającą z gpl do przekształcenia się w gpl? Bardziej konkretnie, jeśli użyję biblioteki gpl bez jej modyfikacji, a następnie rozprowadzę ją jako `.so`so lub `.dll`, czy wymagałoby to, aby moja aplikacja była open source?


title: Dlaczego nie pojawił się szybszy, „lepszy” język niż C?

text: Przy dzisiejszych wszystkich nowych „nowoczesnych” językach, jak to się dzieje, że C jest nadal ogłaszany jako najszybszy i „najbliższy maszynie”? Naprawdę nie wierzę, że istnieje tylko jeden poprawny sposób robienia rzeczy, a C istnieje od bardzo dawna (od lat 60-tych!). Czy naprawdę nie wymyśliliśmy nic lepszego niż coś, co zostało napisane prawie 50 lat temu? Zdaję sobie sprawę, że współczesne języki są na wyższym poziomie i zajmują się pewnymi zadaniami, takimi jak zbieranie śmieci i alokacja pamięci, a także wykorzystują biblioteki i tym podobne. Pytam tylko, dlaczego nigdy nie było prawdziwej drugiej opcji do C. Czy to możliwe, że C jest tak doskonałe, że żaden inny sposób obsługi komputera nie byłby możliwy (pomijając adaptację programistów)? **EDYTUJ** Słuchaj, nie próbuję stukać w C ani w twój ulubiony język. Zastanawiam się, dlaczego C stało się standardem i dlaczego nigdy nie pojawiły się inne alternatywy, a C zostało po prostu „zaakceptowane”.


title: Ilu programistów pracuje na tej samej zwirtualizowanej maszynie Microsoft Windows?

text: Ilu programistów c# w **tej samej** zwirtualizowanej wersji systemu Microsoft Windows warto mieć? Jeśli każdy korzysta z własnego folderu dokumentów i ustawień, czy powinienem oczekiwać, że wszystko będzie dobrze? Tylko system Windows Server zezwala na jednoczesnych użytkowników, jeśli ta opcja jest włączona; Ilu jednoczesnych użytkowników otrzymujesz po wyjęciu z pudełka?


title: Dlaczego nie ma kompilatora Pythona do natywnego kodu maszynowego?

text: Jak rozumiem, przyczyną różnicy prędkości między skompilowanymi językami a pythonem jest to, że pierwszy kompiluje kod aż do kodu natywnej maszyny, podczas gdy python kompiluje się do kodu bajtowego Pythona, który ma być interpretowany przez PVM. Widzę, że w ten sposób kody Pythona mogą być używane na wielu systemach operacyjnych (przynajmniej w większości przypadków), jednak nie rozumiem, dlaczego nie ma dodatkowego (i opcjonalnego) kompilatora dla Pythona, który kompiluje się tak samo jak tradycyjne kompilatory . Pozostawiłoby to programiście wybór, co jest dla niego ważniejsze; wieloplatformowe wykonanie lub wydajność na maszynie natywnej. Ogólnie; dlaczego nie ma języków, które mogłyby zachowywać się zarówno jako skompilowane, jak i interpretowane?


title: Jakiego wzoru należy użyć w tym przypadku?

text: Jestem pewien, że taki scenariusz zdarzył się już wcześniej i chcę wiedzieć, czego doświadczenie nauczyło, że jest najlepszym rozwiązaniem. Mam wiele zajęć, które są w swoim rodzaju. Powiedz, że wszystkie obiekty to „Treść”. Mogą to być na przykład „Artykuł” lub „Książka”. Powodem, dla którego chcę abstrakcji "Content", jest to, że chcę zdefiniować szereg zachowań dla wszystkich obiektów "Content" i nie muszę budować nowej tabeli DB i 10 klas zasadniczo tego samego kodu dla każdego typu "Content". Na przykład, aby dołączyć "Tag" lub "Przesłanie" do obiektu zawartości byłoby znacznie przyjemniejsze, gdybym, powiedzmy, miał tylko dwie kolumny, jedną dla ContentID, a drugą dla TagID. Rozwiązaniem, z którym się bawiłem, jest posiadanie tabeli zawartości z unikalnym identyfikatorem, a następnie posiadanie odwołań do kluczy obcych we wszystkich innych tabelach (książka, artykuł itp.). Okazało się to całkiem solidne, ale po prostu nie jestem tego pewien. Czy wiesz, jak nazwać ten opisany wzór?


title: Czy to użycie relacji rozszerzenia w diagramie przypadków użycia jest poprawne?

text: Na tym obrazku: ![http://i.stack.imgur.com/hUoau.jpg](http://i.stack.imgur.com/DST87.jpg) Czy aktualizacja ocen rozszerza funkcję wyświetlającą oceny? Nie jestem pewien, czy notacja jest poprawna, więc mam nadzieję, że będziecie to wiedzieć.


title: Codzienne stand-upy – tak czy nie?

text: Jak cenne są (lub nie) codzienne spotkania stand-up? Jeśli nie jesteś z tym zaznajomiony, odnosi się to do codziennego spotkania, które jest częścią zwolenników Scrum (i niektórych innych zwinnych metodologii). Pomysł polega na tym, że organizujesz codzienne spotkanie ograniczone czasowo do 15 minut, na którym wszyscy muszą stać (aby zachęcić ludzi do konkretów). Na spotkaniu chodzisz po sali i każdy mówi: \- Co zrobiłeś wczoraj \- Co planujesz zrobić dzisiaj \- Jakiekolwiek blokady lub przeszkody w twoich postępach. Czy uważasz, że ta praktyka ma wartość? Czy ktoś pracował w miejscu, które to zrobiło i co myślisz?


title: Frameworki do kierowania na wiele środowisk

text: Co powinno skłaniać do podjęcia decyzji o robieniu rozwoju w jednej lub więcej niż jednej strukturze? Na przykład ERP jest (w większości) uruchamiany na stacji Windows. Wykorzystuje pełny dostęp do zasobów urządzenia, takich jak drukarki, czytniki kodów kreskowych, czytniki linii papilarnych i tym podobne. Zwykle jest bardziej responsywny i łatwiejszy w rozwoju. Biorąc to pod uwagę, niektóre jego części muszą być dostępne wyłącznie w trybie samoobsługowym przez klientów, dostawców i partnerów przedsiębiorstwa. Można to osiągnąć za pomocą smartfonów, tabletów, a nawet komputerów stacjonarnych z przeglądarką internetową. Jaka ekonomia się za tym kryje? Czy należy zachować dwa zespoły, z których każdy pracuje na własnych ramach? A może należy wybrać najbardziej liberalne ramy? Czy powinno mnie obchodzić coś innego niż technologie HTML? Czy powinienem rozważyć natywną technologię dla każdego urządzenia?


title: CCtalk czy to wciąż nowoczesny protokół, czy jest przestarzały?

text: Muszę napisać kod, aby zintegrować maszynę z akceptorem monet. Ten akceptor monet (euro itp.) ma kilka metod połączenia. Producent napisał C++ dll i C# przykład wywołania, aby używać go z połączeniem USB. Jest to jedyna dostarczona próbka kodowania, którą do tej pory mogłem zdobyć. Jednak dostępne są również dwa inne złącza. Jeden jest jeszcze dla mnie nieznany, wydaje się, że niektóre porty sprzętowe io. Drugi to złącze CC-talk. Z tego, co o tym czytałem, jest to rodzaj wolnego protokołu połączenia szeregowego RS323, który działa na 2 sposoby i jest powszechnie używany w systemach bilingowych. Nigdy wcześniej o tym nie słyszałem, aż do teraz. WIĘC zastanawiam się, czy też powinienem go używać. Myślę o tym, że może to być dość stary protokół, ale nie jestem pewien. Na forach nie ma zbyt wiele "rozmów CC" i tylko kilka pytań dotyczących przepełnienia stosu. To może być wskazówka, że jest stary lub że jest czymś bardzo bezpiecznym i tajnym? Szukam tutaj wskazówek, aby zdecydować, gdzie umieścić swoją energię. Być może są tu jacyś programiści, którzy są zaznajomieni z CC-talk Jaka jest twoja opinia na ten temat, czy jest to przestarzały protokół dla starego sprzętu w dzisiejszych czasach, w większości zastępowany przez sieci USB lub tcp/ip. A może jest w tym coś bardzo konkretnego i dobrego, jeśli chodzi o możliwość tworzenia bezpiecznych transakcji i tego typu rzeczy. Dla przypomnienia moje urządzenie i wrzutnik znajdują się w odległości 1 metra, więc nie będę miał problemów z utratą sygnału. (jeśli to było dobre w cc-talk)


title: Czy w tym momencie publiczne pola Javy to tylko tragiczna historyczna wada projektu?

text: Wydaje się, że w tym momencie ortodoksją Javy jest to, że w zasadzie nigdy nie powinno się używać pól publicznych dla stanu obiektu. (Niekoniecznie się zgadzam, ale to nie dotyczy mojego pytania). Biorąc to pod uwagę, czy słusznie byłoby powiedzieć, że z miejsca, w którym jesteśmy dzisiaj, jasne jest, że pola publiczne Javy były błędem/wadą projektu języka? A może istnieje racjonalny argument, że są one użyteczną i ważną częścią języka, nawet dzisiaj? Dziękuję! **Aktualizacja:** znam bardziej eleganckie podejścia, takie jak C#, Python, Groovy itp. Nie szukam bezpośrednio tych przykładów. Zastanawiam się tylko, czy ktoś jeszcze głęboko w bunkrze mamrocze o tym, jak wspaniałe są naprawdę pola publiczne i że masy to tylko owce itp. **Aktualizacja 2:** Wyraźnie statyczne końcowe pola publiczne są standardem sposób na tworzenie publicznych stałych. Odnosiłem się bardziej do używania pól publicznych dla stanu obiektu (nawet stanu niezmiennego). Myślę, że to, że używa się publicznych pól dla stałych, ale nie dla stanu, wydaje się wadą projektową… reguły języka powinny być egzekwowane naturalnie, przez składnię, a nie przez wytyczne.


title: Skąd powinny pochodzić wartości haszyszu soli?

text: Kiedy dodajesz wartości soli do wartości skrótu dla czegoś takiego jak hasło, które nie może być przechowywane w postaci zwykłego tekstu, z jakiego miejsca najlepiej pobrać wartości soli? Dla kontekstu załóżmy, że dotyczy to haseł do logowania na stronie internetowej.


title: Jak wyodrębnić aktywną ścieżkę kodu ze złożonego algorytmu?

text: Ostatnio zdziwił mnie intrygujący pomysł. Zastanawiam się, czy istnieje (znana) metoda wyodrębnienia wykonanego kodu źródłowego z dużego złożonego algorytmu. Postaram się rozwinąć to pytanie: Scenariusz: Istnieje ten złożony algorytm, nad którym wiele osób pracowało przez wiele lat. Algorytm tworzy opisy pomiarów dla złożonego urządzenia pomiarowego. Dane wejściowe do algorytmu to duży zestaw parametrów wejściowych, nazwijmy to recepturą. Na podstawie tej receptury algorytm jest wykonywany, a receptura określa, które funkcje, pętle i konstrukcje jeśli-to-inaczej są stosowane w algorytmie. Po zakończeniu algorytmu na wyjściu powstanie zestaw obliczonych parametrów pomiarowych. A dzięki tym wyjściowym parametrom pomiarowym urządzenie może wykonać swój pomiar. Teraz jest problem. Ponieważ z biegiem czasu algorytm stał się tak złożony i duży, bardzo trudno jest odnaleźć się w algorytmie, gdy chcesz dodać nowe funkcje do przepisów. Zasadniczo osoba chce modyfikować tylko te funkcje i bloki kodu, na które ma wpływ jego przepis, ale musi zagłębić się w cały algorytm i przeanalizować kod, aby zobaczyć, który kod jest odpowiedni dla jego przepisu, i dopiero potem proces nowa funkcjonalność może zostać dodana we właściwym miejscu. Nawet w przypadku prostych dodatków ludzie gubią się w ogromnej ilości złożonego kodu. Rozwiązanie: Wyodrębnić aktywną ścieżkę kodu? Prowadziłem burzę mózgów nad tym problemem i myślę, że byłoby świetnie, gdyby istniał sposób na przetworzenie algorytmu z parametrami wejściowymi (receptura) i tylko wyodrębnienie aktywnych funkcji i bloków kodu do nowego zestawu plików źródłowych lub struktura kodu. Właściwie mówię tutaj o wyciąganiu prawdziwego kodu źródłowego. Kiedy aktywny kod zostanie wyodrębniony i odizolowany, spowoduje to powstanie podzbioru kodu źródłowego, który jest tylko ułamkiem oryginalnej struktury kodu źródłowego, i znacznie łatwiej będzie osobie analizować kod, rozumieć kod i tworzyć jego lub jej modyfikacje. Ostatecznie zmiany mogą zostać ponownie scalone z oryginalnym kodem źródłowym algorytmu, a może zmodyfikowany wyodrębniony kod źródłowy może być również wykonany samodzielnie, tak jakby był „uproszczoną” wersją oryginalnego algorytmu. Dodatkowe informacje: Mówimy o algorytmie z kodem C i C++, około 200 plików i może 100 000 linii kodu. Kod jest kompilowany i kompilowany przy użyciu niestandardowego środowiska kompilacji opartego na programie Visual Studio. Więc...: Naprawdę nie wiem, czy ten pomysł jest po prostu naiwny i głupi, czy też jest wykonalny przy odpowiedniej ilości inżynierii oprogramowania. Mogę sobie wyobrazić, że w świecie inżynierii oprogramowania było więcej podobnych sytuacji, ale po prostu nie wiem. Mam spore doświadczenie w inżynierii oprogramowania, ale zdecydowanie nie na poziomie projektowania dużych i złożonych systemów. Byłbym wdzięczny za każdą odpowiedź, sugestię lub komentarz. Z góry dziękuję!


title: Historyjki użytkownika jako definicja kontraktu?

text: Często jestem proszony o napisanie dokumentu wymagań dla nowej pracy. Piszę wymagania używając historyjek użytkownika. Lista wymagań jest następnie wykorzystywana jako umowa z klientem, określająca funkcjonalność, która zostanie dostarczona. Pojawia się pokusa, aby dodawać coraz więcej szczegółów i coraz więcej historii w celu zdefiniowania wodoszczelnej specyfikacji, która wyklucza wszelkie kosztowne błędy. Problem polega na tym, że historyjki użytkowników po prostu nie pasują do tego zadania. Czy ktoś może wyjaśnić rolę historyjek użytkownika? Na przykład, czy ta sama historyjka użytkownika jest odpowiednia dla klienta, programisty i autora specyfikacji funkcjonalnej? Cofając się trochę, może też pytam, jak najlepiej zdefiniować umowę o tym, co będzie, a czego nie będzie dostarczane w projekcie oprogramowania?


title: Jak zdecydować, czy podjąć pracę, której nie mogę dodać do mojego portfolio?

text: Jestem programistą, ale ponieważ ledwo byłem na profesjonalnym rynku, moje portfolio jest teraz raczej puste. Mimo to zacząłem próbować uruchomić swoją stronę internetową, aby trochę pomóc, ale to, czego naprawdę potrzebuję w tej chwili, to możliwość poszerzenia mojego portfolio. Mam faceta, który chce, żebym wykonał dla niego dużo pracy i jestem skłonny to robić przynajmniej przez jakiś czas, dopóki nie dostanę lepszej pracy. Prawdziwym problemem jest jednak to, że nie chce, żebym nikomu mówił, że pracuję dla niego. Naturalnie, ponieważ staram się zarówno zarabiać pieniądze, jak i powiększać swoje portfolio, jest to problem. Jednym z powodów stworzenia aplikacji było udowodnienie, że potrafię ją napisać, ale jeśli nie mogę nikomu powiedzieć, że ją napisałem, rozwijanie aplikacji wydaje się bezcelowe; Być może lepiej będzie, jeśli założę własną aplikację i zjem straty w zyskach, ponieważ mogę uzyskać z tego więcej pracy, ale oczywiście w tym samym czasie rozpaczliwie potrzebuję gotówki. Mam zlecenia gdzie indziej, ale prawdopodobnie szybciej dostanę zapłatę wykonując tę konkretną pracę. Na jakie czynniki powinienem zwracać uwagę przy podejmowaniu decyzji o podjęciu pracy za pieniądze, o których nie mogę mówić?


title: Dlaczego ludzie przepisują niektóre biblioteki do wielu języków programowania?

text: Istnieje kilka bibliotek, które są dostępne w swoich wersjach napisanych w wielu różnych językach programowania, jak np. Lucene, który jest napisany w Javie (jak mówią w 100% czystej Javie), ale ma też swoje wersje w C++, C, Perl , Ruby, Lisp i kilka innych języków. I mówię o _implementacjach_ w tych językach, a nie tylko interfejsach FFI. Dlaczego ludzie to robią? Widzę jeden oczywisty powód: wdrażanie i dystrybucja (a prawdopodobnie także rozwój) są łatwiejsze, gdy projekt ma mniej zależności. Ale czy jest coś jeszcze? W jakich sytuacjach warto?


title: Jak zarządzać programistą z dobrą znajomością języka programowania, ale bardzo słabymi umiejętnościami analitycznymi

text: Pracuję jako team leader w szybko rozwijającej się firmie usługowej. W moim zespole jest jeden programista, który nie radzi sobie dobrze i nie jest w stanie rozwiązać nawet najprostszych problemów bez karmienia łyżką. Odbyłem z nim wiele spotkań, a nawet siedziałem obok niego podczas kodowania, aby zrozumieć pierwotną przyczynę problemu. Ma bardzo dobrą znajomość Javy, jednak brakuje mu umiejętności analitycznych i IQ, aby zrozumieć problem i znaleźć rozwiązanie. Kiedy siedziałem z nim podczas kodowania, zauważyłem, że ma dobrą wiedzę domenową, świadomość bazy kodu, ale nie potrafi myśleć i znaleźć rozwiązania problemów i nie był w stanie naprawić błędów. Jest także informatykiem, absolwentem. Wie, że nie radzi sobie dobrze, a ja próbowałem go motywować, karać itp. Poświęca dużo wysiłku i jest skupiony. Ale nie ma poprawy w jego wydajności. Teraz prosi mnie o sugestie, jaką pracę powinien wybrać. Jest bardzo pracowity i skupiony, tylko jego niezdolność do rozwiązywania problemów uniemożliwia mu występy. Czy powinien zostać wysłany do projektów testowania oprogramowania? Czy powinniśmy zasugerować mu, aby poszedł do pomocy technicznej? Co najbardziej mu odpowiada, biorąc pod uwagę problem, z którym się zmaga? Może praca pisarza technicznego lub coś takiego. Proszę o przekazanie mi swoich opinii na ten temat, abym mógł mu odpowiednio doradzić.


title: dlaczego nie użyć niezarządzanego bezpiecznego kodu w c#

text: W c# istnieje opcja wykonania kodu bez zaznaczenia. Generalnie nie jest to zalecane, ponieważ kod zarządzany jest o wiele bezpieczniejszy i rozwiązuje wiele problemów. Zastanawiam się jednak, czy jeśli jesteś pewien, że Twój kod nie spowoduje błędów i wiesz, jak obsługiwać pamięć, to po co (jeśli lubisz szybki kod) postępować zgodnie z ogólną radą? Zastanawiam się nad tym, ponieważ napisałem program do kamery wideo, który wymagał bardzo szybkiej manipulacji bitmapą. Sam stworzyłem kilka szybkich algorytmów graficznych, które działają doskonale na mapach bitowych przy użyciu kodu niezarządzanego. Teraz zastanawiam się ogólnie, jeśli jesteś pewien, że nie masz wycieków pamięci lub ryzyka awarii, dlaczego nie częściej używać kodu niezarządzanego? PS Moje pochodzenie: wszedłem w ten świat programowania i pracuję sam (robię to od kilku lat), więc mam nadzieję, że to pytanie dotyczące projektowania oprogramowania nie jest takie dziwne. Tak naprawdę nie mam innych ludzi, takich jak nauczyciel, który pytałby o takie rzeczy.


title: Pozbądź się długich/złożonych instrukcji if..else, korzystając z Łańcucha Odpowiedzialności?

text: Mam HttpHandler, który umożliwia użytkownikom logowanie się do systemu poprzez przekazanie zaszyfrowanego kodu. Wewnątrz `ProcessRequest` wykonuje kilka kroków. 1. Pobierz zaszyfrowany kod z żądania (może być w Form/X-Header/Query) 2. Odszyfruj go. (Wyniki w ciągu JSON) 3. Deserializacja do typu dynamicznego 4. Określ typ żądania, może to być logowanie/rejestracja/aktywacja 5. Sprawdź poprawność żądania 6. Załaduj subskrypcję użytkownika 7. Załaduj encję użytkownika 8. If Req.Type = Logowanie -> Logowanie za pomocą FormsAuth 9. If Req.Type = Zarejestruj -> Utwórz użytkownika 10. If Req.Type = Zarejestruj -> Wyślij e-mail aktywacyjny Trwa to dalej. Obecnie jest to coś w rodzaju długiej instrukcji if/else, którą próbuję zrefaktoryzować. Zastanawiam się nad użyciem wzorca Chain Of Responsibility, aby przekonwertować te kroki w if/else na łańcuch, który jest wykonywany sekwencyjnie. Będzie to jednak różniło się od pierwotnego KR-u, ponieważ tylko kilka ostatnich kroków faktycznie „obsłuży” wniosek, pierwsze kroki będą tylko wykonywać wstępne przetwarzanie i przygotować ostatnie kroki, aby wykonać swoje zadanie. Moim głównym problemem jest to, że różne etapy łańcucha będą działać na różnych danych wejściowych. Kilka pierwszych kroków (odszyfrowanie, deserializacja itp.) będzie działać na ciągach, podczas gdy druga połowa powinna najlepiej działać na zdeserializowanym obiekcie dynamicznym. Nie podoba mi się sposób, w jaki to brzmi. Czy próbuję dopasować okrągłe wieczko do kwadratowej butelki? Czy nie jest to scenariusz, w którym KR może/należy zastosować? Czy są jakieś inne wzorce/strategie, których mógłbym użyć do rozwiązania takich scenariuszy. Myślałem również o użyciu wzoru dekoratora, ale to mi nie pasuje, ponieważ chciałbym móc przełączać niektóre kroki (np. aktywacja e-mailem) w niektórych scenariuszach. UWAGA: Widziałem również to pytanie, ale nie jestem pewien, czy odpowiada na moje pytanie.


title: Prawidłowy sposób wstrzykiwania zależności w usłudze Logiki biznesowej?

text: Obecnie struktura mojej aplikacji jest taka jak poniżej Aplikacja internetowa --> Usługa WCF (tylko fasada) --> Usługi logiki biznesowej --> Repozytorium -> Kontekst danych Entity Framework Teraz każda moja usługa logiki biznesowej jest zależna od więcej niż 5 repozytoriów (Mam zdefiniowane interfejsy dla wszystkich repozytoriów) i teraz robię wstrzyknięcie konstruktora (biedny mans DI zamiast używania właściwego IOC, ponieważ ustalono, że byłoby to przesadą dla naszego projektu). Repozytoria mają odwołania do kontekstów danych EF. Teraz niektóre metody w usłudze Logiki biznesowej wymagają tylko jednego z 5 repozytoriów, więc jeśli muszę wywołać tę metodę, skończę na utworzeniu instancji usługi, która utworzy wszystkie 5 repozytoriów, co jest marnotrawstwem. Przykład: public class SomeService : ISomeService { public(IFirstRepository repo1, ISecondRepository repo2, IThirdRepository repo3) {} // Moja metoda DoSomething zależy tylko od repo1 i nie używa repo2 i repo3 public DoSomething() { //do wykonania używa repo1 niektóre rzeczy, nie używa repo2 i repo3 } public DoCoś2() { //używa repo2 i repo3 do zrobienia czegoś, nie wymaga repo1 } public DoCoś3() { //używa repo3 do zrobienia czegoś, nie wymaga repo1 i repo2 } } Teraz, jeśli muszę użyć metody `DoSomething` na `SomeService`, kończę tworzeniem zarówno IFirstRepository,ISecondRepository jak i IThirdRepository, ale używając tylko IFirstRepository, teraz to mnie wkurza, wydaje mi się, że akceptuję, że jestem nie- koniecznie tworząc repozytoria i nie używając ich. Czy to poprawny projekt? Czy są jakieś lepsze alternatywy? Czy powinienem patrzeć na instancję Lazy `Lazy<T>` ?


title: Czy jest jakaś korzyść z przejścia z C# na Javę?

text: Jestem programistą .NET od około sześciu lat. W ciągu tych sześciu lat pracowałem dokładnie w **jednym** sklepie .NET, który stosował każdy rodzaj rzeczywistego wzorca projektowego lub najlepszych praktyk branżowych. Ta świadomość frustrowała mnie, gdy rozważam przejście na Javę i wykorzystanie mojego doświadczenia w C#, ponieważ społeczność Java wydaje się mieć większy wpływ na właściwą inżynierię oprogramowania niż społeczność .NET, która wydaje się bardziej skoncentrowana na RAD techniki i quasi-proceduralny kod i wcale nie chcą się poprawiać. Na przykład przeciętny sklep Java prawdopodobnie używa frameworka MVC, takiego jak Spring, Seam lub sędziwego starego Strutsa, używa Hibernate, prawdopodobnie pisze testy jednostkowe, wie, jak prawidłowo korzystać z kontroli źródeł i chociaż istnieje niebezpieczeństwo, że astronauta architektury jest bardziej niż prawdopodobne jest stosowanie wzorców projektowych i przestrzeganie dobrych praktyk, takich jak zasady SOLID. W przeciwieństwie do tego, przeciętny sklep .NET używa nietypowych DataSets, pisze cały kod, aby rozwiązać problem w obsłudze zdarzeń WebForms, myśli, że testowanie oznacza ładowanie wbudowanego serwera WWW i zabawę z aplikacją, jeśli w ogóle korzysta z kontroli źródła użyj czegoś takiego jak Visual SourceSafe i uważaj, że jest świetny i nie ma pojęcia, co oznacza zasada pojedynczej odpowiedzialności ani dlaczego jest to _dobra rzecz_. Próby wprowadzenia takich rzeczy jak ORM, wzorce projektowe, testy jednostkowe zwykle spotykają się z pustym spojrzeniem lub całkowitym odrzuceniem z powodu nawet niezrozumienia, dlaczego te rzeczy są lepsze niż debugger lub pisanie kodu w module obsługi zdarzeń widżetu - to jak rozmowa z mur z cegły. Jestem świadomy "ALT.NET" (sam go śledzę), ale znajduję środowisko, które o tym wie, nie mówiąc już o podążaniu za nim, i wydaje się to być jak znalezienie igły w stogu siana i próba zmiany organizacji korzystanie z nich zawsze kończyło się dla mnie źle, do tego stopnia, że faktycznie pokazano mi drzwi i odpuściłem chęć robienia rzeczy lepszych niż robiła to firma, zanim dołączyłem. Czy moja próba wykorzystania umiejętności C# i przejścia na Javę przyniosłaby jakiekolwiek **jakąkolwiek** korzyść? Kończą mi się opcje, aby znaleźć sklep .NET, który faktycznie podąża za prawdziwymi koncepcjami inżynierii oprogramowania, zamiast po prostu wyrzucać kod, i zaczynam myśleć, że moje szanse na znalezienie tego rodzaju miejsca znacznie wzrosną, jeśli będę nieużywanie stosu technologii, który popycha odwrotnie jako właściwą drogę.


title: Jak przenieść nazwy użytkowników/hasła na serwer STUN lub TURN w celu długoterminowego uwierzytelniania poświadczeń?

text: Specyfikacje STUN i TURN umożliwiają uwierzytelnianie klienta przy użyciu nazw użytkowników i haseł oraz wywoływanie tego uwierzytelnienia za pomocą długoterminowych poświadczeń. W rzeczywistości TURN wymaga, aby klienci uwierzytelniali się w ten sposób. Przypuszczam jednak, że prawie wszystkie wdrożenia uruchamiają swoje serwery STUN lub TURN niezależnie od serwera bazy danych. Na przykład w przypadku aplikacji VOIP, która korzysta z serwerów TURN, przypuszczalnie wszystkie dane użytkownika byłyby przechowywane w bazie danych, zarządzanie kontami użytkowników może być głównie obsługiwane przez serwer sieciowy, podczas gdy klienci nadal musieliby mieć możliwość uwierzytelnienia się w oddzielny serwer TURN. Jaka jest najlepsza praktyka dla serwera STUN/TURN, aby uzyskać dostęp do nazw użytkowników i haseł z bazy danych w celu uwierzytelnienia klientów? Jeśli większość wdrożeń lub Twoje rozwiązanie opiera się na konkretnej implementacji serwera STUN/TURN, która obsługuje określone funkcje, wszelkie zalecenia dotyczące serwerów STUN/TURN również będą mile widziane.


title: Czy mogę dostać pracę w przemyśle lotniczym jako programista, jeśli jestem samoukiem?

text: Jestem zatrudnionym, samoukiem programistą aplikacji. Chociaż kocham rozwój, jestem dość znudzony. Aby to zrównoważyć (i ponieważ uwielbiam się uczyć), studiuję między innymi zaawansowaną matematykę, fizykę, inżynierię i zaawansowane zagadnienia z zakresu informatyki. Jestem wdzięczna za dobrą pracę, którą mam, płaci rachunki i wyżywia moją rodzinę, ale chcę robić więcej. Bardzo interesuję się przemysłem lotniczym, ale brakuje mi dyplomu inżyniera lub informatyki. Chciałbym stworzyć oprogramowanie, które pomaga w projektowaniu samolotu lub oprogramowanie, które przyczynia się do funkcjonalności lub działania samolotu. Czuję, że mogę się utrzymać podczas dyskusji na te tematy, a także czuję, że w tym momencie posiadam wystarczającą wiedzę, aby zrobić wypad w teren. Miałem niespokojną młodość. Jestem teraz żonaty, mam dzieci i ustatkowałem się, ale wciąż jestem dość młody. Znowu jestem wdzięczny, że mam solidną pracę, w której mogę robić to, co kocham i dobrze zarabiać, ale czuję się jak głupie decyzje, które podjąłem w młodości, w połączeniu z moją decyzją o nauce programowania zamiast chodzenia do studia naprawdę mnie paliły, jeśli chodzi o możliwości kariery. Ostatnio pracowałem nad pakietem do projektowania silników odrzutowych i symulatorem testów przy użyciu Haskella. Może jeśli to skończę, będę mógł to komuś pokazać i znaleźć pracę pomimo mojego braku dyplomu i trudnej przeszłości? Nie mogę nierealistycznie zakładać, że dla takiego giganta jak Lockheed byłby wiele warty, ale może pomyślą, że jest fajny czy coś takiego. Czy jest ktoś, kto może się odnieść, a jeśli tak, czy w cudowny sposób udało ci się znaleźć drogę do tej lub innej zaawansowanej dziedziny? Co mogę zrobić, aby zrobić to w tej branży? Czy muszę się zapisać na studia, czy mogę zastosować jakiś hack? Czy jesteś inżynierem oprogramowania dla lotnictwa? Jak wygląda to pole w rzeczywistości? Potrzebujesz stażysty?


title: Powody tworzenia prototypów w C++

text: Jestem początkującym programistą, próbuję zrozumieć wszystko, więc wybaczcie prawdopodobnie przyziemne teoretyczne pytanie: widzę w samouczku C++, że prototypowanie jest potrzebne, aby kompilator wiedział, że funkcja(?) nadchodzi, a nie zgłaszać wszelkie błędy. Dlaczego nie przeszukuje dokumentu, aby znaleźć funkcję, której szuka? Może pytanie, które zadaję, brzmi; jaki jest cel prototypowania? Czy można go używać w innych językach?


title: Czy wzorzec strategii może być nadużywany?

text: Przykład: plik reprezentujący zserializowaną wersję obiektu musi zostać odczytany i zdeserializowany. Zaimplementowanie tego byłoby proste, gdybyśmy zajmowali się tylko jednym formatem serializacji, ale istnieje wiele takich formatów (JSON, YAML itp.). Jednym ze sposobów radzenia sobie z tym byłoby utworzenie abstrakcyjnego typu/interfejsu serializatora z metodami takimi jak `deserializeToArray`, `deserializeToObject` itd. i przekazanie tego interfejsu jako zależności w celu oddzielenia wszystkich zależnych klas od konkretnej implementacji. Można to dalej uogólnić przez to, że metody serializacji faktycznie będą implementacjami innego interfejsu, który nazwiemy `Transform`. Więc tutaj ponownie efektywnie wykorzystujemy wzorzec Strategia, tym razem hermetyzując rodzinę algorytmów do przekształcania jednego rodzaju danych w inny pożądany format obiektu lub tablicy. Czy to może nadużycie wzorca Strategia? Czy istnieją lepsze sposoby na uporządkowanie rzeczy lub wzorce bardziej pasujące do tego rodzaju problemu? Czy istnieją wady korzystania z kilku zagnieżdżonych wzorców strategii, jak w tym przykładzie?


title: Eliminowanie znaków tabulacji w nowym języku

text: Pracuję nad nowym językiem programowania, który określa strukturę za pomocą wcięć zamiast nawiasów klamrowych w sposób Python i CoffeeScript. Oczywiście umieszczanie linii wciętych spacjami obok linii wciętych tabulatorami zepsuje ten rodzaj składni, więc tego nie zezwalam - każdy plik źródłowy musi używać jednego lub drugiego, a nie obu. Zastanawiam się, czy nie byłoby lepiej nakazać jednego lub drugiego na całym świecie tylko po to, aby wyeliminować możliwość marnowania czasu na kłótnie? Spacje wydają się być nieco bardziej popularne niż tabulatory, więc gdybym miał to zrobić, przypuszczam, że nakazałbym wcinanie spacjami (pomimo tego, że osobiście wolę używać tabulatorów). Czy są sytuacje, w których wyeliminowanie możliwości wcięć tabulatorami mogłoby sprawić problem?


title: Projektowanie schematu trwałości dla BigTable na AppEngine

text: Próbowałem zaprojektować schemat magazynu danych dla bardzo małej aplikacji. Ten schemat byłby bardzo prosty, jeśli nie trywialny, przy użyciu relacyjnej bazy danych z kluczami obcymi, relacjami wiele-do-wielu, złączeniami itp. Problem polegał jednak na tym, że moja aplikacja była przeznaczona dla Google App Engine i musiałem projektować dla baza danych, która nie była relacyjna. W końcu się poddałem. Czy istnieje książka lub artykuł opisujący zasady projektowania aplikacji przeznaczonych dla takich baz danych? Książki, które znalazłem, dotyczą programowania dla App Engine i nie poświęcają wielu słów zasadom projektowania baz danych.


title: Przepływ pracy w Git dla małych zespołów

text: Pracuję nad przepływem pracy git do wdrożenia w małym zespole. Główne pomysły w przepływie pracy: * istnieje wspólny master projektu, do którego wszyscy członkowie zespołu mogą pisać * cały rozwój odbywa się wyłącznie w gałęziach funkcji * gałęzie funkcji są sprawdzane przez członka zespołu innego niż autor gałęzi * gałąź funkcji jest ostatecznie połączył się ze współdzielonym wzorcem i cykl rozpoczyna się od nowa Artykuł szczegółowo wyjaśnia kroki w tym cyklu: https://github.com/janosgyerik/git-workflows-book/blob/small-team-workflow/chapter05.md Czy to ma sens, czy czegoś mi brakuje?


title: Czy tworzenie strony internetowej w oparciu o ajax i modal to dobry pomysł?

text: Witam Jestem nowicjuszem w tworzeniu stron internetowych i tworzę prostą stronę internetową do zarządzania częściami. Wpadłem na pomysł zrobienia czegoś w stylu "One page". Raz renderuj układ, a później zastąp zawartość treści wywołaniami ajax. Ponieważ każda „część” strony internetowej, taka jak StorageList, składa się z widoków „takich jak tworzenie, szczegóły, edycja itp.”, postanowiłem wyświetlić te strony w oknach modalnych nad stroną główną i uzyskać to: ![tutaj wprowadź opis obrazu](http: //i.stack.imgur.com/Uh4rp.png) Te mody są również ładowane za pomocą ajax. Jak widać "Ajax. Ajax wszędzie" :) A teraz moje pytanie, czy moje podejście jest dobre, czy zrobienie tej strony w oparciu o wywołania ajaxowe i dynamicznie ładowaną zawartość sprawi mi w przyszłości jakieś problemy w utrzymaniu?


title: Jakie są rozsądne ograniczenia stylistyczne dotyczące wnioskowania o typie?

text: C++0x dodaje cholernie wszechstronną obsługę wnioskowania o typach. Bardzo mnie kusi, aby używać go wszędzie, gdzie jest to możliwe, aby uniknąć niepotrzebnych powtórzeń, ale zastanawiam się, czy usuwanie wyraźnych informacji o typie z całego miejsca jest tak dobrym pomysłem. Rozważmy ten dość wymyślny przykład: `Foo.h`: #include <set> class Foo { private: static std::set<Foo*> instancje; publiczne: Foo(); ~Foo(); // Co zwraca? Kogo to obchodzi! Po prostu prześlij to! static decltype(instances.begin()) begin() { return instances.begin(); } static decltype(instances.end()) end() { return instances.end(); } }; `Foo.cpp`: #include <Foo.h> #include <Bar.h> // Typ musi być określony tylko w jednej lokalizacji! // Ale muszę otworzyć nagłówek, aby dowiedzieć się, co to właściwie jest. decltype(Foo::instances) Foo::instances; Foo() { // Jaki jest typ x? auto x = Bar::get_something(); // Co zwraca funkcja do_something()? auto y = x.zrobić_coś(*to); // Cóż, można to jakoś zamienić na bool... if (!y) throw "stała, stara szkoła"; instances.insert(to); } ~Foo() { instancje.erase(to); } Czy powiedziałbyś, że to rozsądne, czy jest to całkowicie śmieszne? W końcu, zwłaszcza jeśli jesteś przyzwyczajony do programowania w dynamicznym języku, tak naprawdę _nie musisz_ przejmować się typami rzeczy i możesz ufać, że kompilator wyłapie wszelkie rażące nadużycia systemu typów. Ale dla tych z was, którzy polegają na wsparciu edytora dla sygnatur metod, nie mają szczęścia, więc używanie tego stylu w interfejsie biblioteki jest prawdopodobnie naprawdę złą praktyką. Uważam, że pisanie rzeczy ze wszystkimi możliwymi typami niejawnymi sprawia, że mój kod jest o wiele łatwiejszy do naśladowania, ponieważ usuwa prawie cały zwykły bałagan C++. Twój przebieg może się oczywiście różnić i właśnie o tym jestem zainteresowany. Jakie są konkretne zalety i wady radykalnego użycia wnioskowania o typie?


title: Wybór między tablicą 1-wymiarową i 2-wymiarową

text: Wdrażam klasę Szachownica do reprezentowania szachownicy. Muszę zaimplementować możliwe **transformacje** (odbicia i obroty) na szachownicy. Możliwe przekształcenia obejmują kombinację: 1. Odbicia w pionie 2. Odbicia w poziomie 3. Odbicia po przekątnej Tak więc mamy **8** możliwych przekształceń szachownicy. Na szachownicy znajdują się **64** kwadraty o numerach **[0..63]**. Zatem reprezentacja całkowitych wartości wynikowych po przekształceniach to **8*64** (Liczba przekształceń * Rozmiar_szachownicy). Istnieją dwa podstawowe sposoby reprezentowania **transformed_board** za pomocą tablic: Tablica jednowymiarowa z przekształconą_tablicą[8*64] Tablica dwuwymiarowa z przekształconą tablicą[8][64] **Pytania** : * Które podejście jest lepsze ? * Jakie są zalety i wady każdego podejścia? * Jak wpłynie na wydajność w odniesieniu do czynnika czasu?


title: Jak uczeń programisty może poprawić swoje umiejętności pracy zespołowej?

text: Jestem teraz studentem. Ostatnio pracuję w projekcie jako lider z trzema innymi studentami. Z powodu braku doświadczenia nasz projekt rozwija się powoli, a nasi członkowie są sfrustrowani. Nie mają poczucia spełnienia w projekcie. Jestem też pod presją i sfrustrowany. Ale jako lider zespołu myślę, że muszę ich naciskać. Ale nie wiem jak to zrobić. Czy pomagam im rozwiązać problem z kodowaniem, czy tylko zachęcam? Ale jeśli będę zwracał na to zbyt dużą uwagę, spowolniłoby to moje postępy. Nie jest to kwestia techniczna, ale jest bardzo powszechna w tworzeniu oprogramowania. Mam nadzieję, że doświadczeni programiści dadzą mi jakieś sugestie. Dziękuję!


title: Dlaczego Entities nie mogą odwoływać się do innych encji w agregacie z wyjątkiem katalogu głównego?

text: Czytałem w kilku miejscach następującą regułę dotyczącą agregatów: > Encje w jednym agregacie mogą zawierać odniesienia do dowolnego innego elementu głównego agregatu, > ale nigdy do encji lub obiektu wartości w innym agregacie. Co może się nie udać, jeśli Entity posiada bezpośrednie odniesienie do encji w innym katalogu głównym Aggregate? Czy ktoś może wyjaśnić, dlaczego taka zasada jest ważna? a najlepiej zilustrować przykładem, proszę?


title: Konwencja nazewnictwa JavaScript

text: Używam Javascript od dłuższego czasu, ale zawsze ignorowałem powszechne konwencje nazewnictwa, które widzę w Internecie (camelCase). Wiem, że wszystko zależy od preferencji programisty, ale dlaczego wielbłąd ma znaczenie dla JavaScript? Jestem pierwotnie programistą PHP i mam swoją własną konwencję nazewnictwa i używam jej wszędzie, gdzie mogę, w tym Javascript. Cóż, muszę poświęcić moją konwencję nazewnictwa, jeśli chodzi o Javę, ponieważ przepływ programu czasami zależy od tych nazw. W każdym razie moja konwencja wygląda następująco: var variable_name = 'Zawsze używam podkreśleń do oddzielania słów'; var another_variable = 'Często używam też pojedynczych cudzysłowów'; function epic_name_tutaj (some_paramaters ...) { // Nawiasy klamrowe w osobnych wierszach do_something(); } if (x == y) { // To samo dzieje się tutaj } Ten styl pisania kodu wziąłem z pracy z phpBB, ich dokumentacja zachęca ludzi do używania tego stylu. Dlaczego widzę wiele osób piszących JavaScript w camelCase? I czy będzie problem, jeśli go nie użyję?


title: Kilka współzależnych modeli, każdy z kilkoma źródłami danych — jak uniknąć piekła i koszmaru

text: Obecnie pracuję nad projektem, który wymaga skomplikowanej struktury modelu i borykam się z doborem odpowiedniej architektury. Przede wszystkim istnieje kilka współzależnych modeli. Zmiana w jednym modelu może wywołać zmiany w kilku innych modelach. Na przykład użytkownik wprowadza zapytanie, pierwszy model sprawdza bazę danych pod kątem typu zapytania, a drugi model żąda swoich danych w zależności od typu zapytania. Po drugie, każdy model może mieć kilka źródeł danych. Źródła danych są używane warunkowo, w zależności od konfiguracji systemu. Aplikacja musi działać bezproblemowo — na przykład, jeśli jedno źródło danych nie zwraca wymaganych informacji, model musi spróbować użyć innego. Ważną rzeczą jest również to, że baza kodu zostanie docelowo rozszerzona o inne modele. Zatem modele, źródła danych itp. muszą być bardzo modułowe. Obecnie istnieje kilka sposobów na zorganizowanie warstwy modelu: 1. „Głupie” modele odtworzone przez obiekty fabryki po zmianie danych wejściowych (lub powiązanego modelu). Zależności modelu są rozwiązywane w obiekcie operacji, hermetyzując całą procedurę aktualizacji. Obiekt operacji jest konfigurowany i uruchamiany przez model domeny. Nie wiem jednak, gdzie wstrzyknąć źródło danych. 2. Modele „inteligentne” z zawartą w nich logiką aktualizacji. Każdy model wysyła zapytanie do rodzaju mapera/menedżera źródeł danych, który działa jako proxy dla różnych źródeł danych. Modele zgłaszają swoje aktualizacje do modelu domeny. Zależności są rozwiązywane przez kontroler modelu lub obiekt menedżera zależności. Która architektura jest tu bardziej odpowiednia? Skłaniam się ku pierwszej, ponieważ (według mnie) lepiej jest pracować z niezmiennymi modelami, aktualizując całe drzewo przy zmianie danych wejściowych. Takie podejście daje kilka korzyści: na przykład łatwiej jest serializować, ponieważ obecność modelu jest równa skończonemu stanowi. Ale naprawdę nie mam pewności co do źródeł danych...


title: Czy Microsoft Visual Studio Express 2012 dla Windows Desktop nie jest już darmowy? Albo dlaczego jest napisane, że produkt wygasł?

text: Chciałem wypróbować ten produkt, gdy usłyszałem, że istnieje darmowa wersja Visual Studio. Pobrałem więc coś od Microsoftu o nazwie „Visual Studio Express 2012 na pulpit systemu Windows” i nigdy tak naprawdę tego nie używałem. Teraz, kiedy go uruchamiam, po raz pierwszy od jakiegoś czasu, jest napisane, że produkt wygasł. Miałem wrażenie, że to po prostu freeware, więc czy to prawda, że nie ma na stałe darmowej wersji tego IDE, którą każdy ma swobodę pobierania bez ponoszenia kosztów? Moja teoria jest taka, że strona Microsoftu jest wybredna, jeśli chodzi o łatwe znajdowanie tego, czego chcesz. Więc może po prostu pobrałem niewłaściwą rzecz. Wszedłem na tę stronę: Microsoft Pod jakimś fioletowym tekstem nagłówka zatytułowanym „Visual Studio Express 2012” i podtekstem „Produkty Visual Studio Express 2012 zapewniają bezpłatne narzędzia programistyczne do tworzenia nowoczesnych aplikacji na najnowszych platformach”. Czuję, że to właśnie musi być odpowiednie miejsce do pobrania IDE. Więc kliknąłem na pulpit systemu Windows, pobrałem go, zainstalowałem. Produkt wygasł. Wniosek? To nie jest darmowe. Pomyślałem, że zapytam tutaj, czy to prawda, żeby mieć pewność. Nadal uważam jednak, że Microsoft jest po prostu wybredny. Może powinienem pobrać 2010?


title: 1 Interfejs 2 Implementacje i wyjątek EJB

text: W moim projekcie JavaEE mam taki interfejs: @Local public interface DataAccess { ... } I implementujące go dwa bezstanowe ziarna: @Stateless public class DataAccess_Online implementuje DataAccess { ... } @Stateless public class DataAccess_Offline implementuje DataAccess { .. } I otrzymuję wyjątek: > Nie można rozwiązać referencji Lokalny ejb-ref.... ponieważ w aplikacji są 2 ejbs > z interfejsem ...DataAccess Problem jest jasny, może istnieć tylko jedna klasa implementująca DataAccess. Ale byłoby wygodnie, gdybym mógł użyć dwóch. W kliencie chcę pracować tylko na interfejsie DataAccess, więc nie muszę rozróżniać w kodzie między trybem online/offline, oba oferują te same metody. W kliencie mam wstrzyknięcie zależności: @EJB DataAccess da; I widzę, jaki jest problem z dwiema implementacjami DataAccess, ale co powinienem zmienić, aby działało? Klient zawsze zaczyna od wersji online DataAccess, ale po pewnym czasie może poprosić o wersję offline, więc wersja offline potrzebuje tylko tego samego interfejsu, jeśli potrzebuję wstrzyknięcia DataAccess, zawsze będzie to wersja online. Jak mogę użyć dwóch implementacji interfejsu razem z wstrzykiwaniem zależności @EJB?


title: Czy istnieje duża różnica między JMF 1.0 a JMF 2.1.1?

text: W porządku, to pytanie wynika z faktu, że jest bardzo niewiele zasobów internetowych do nauki JMF. Dostępne książki są dość stare, niektóre z nich nie zostały opublikowane. To pytanie jest rozszerzeniem mojego innego pytania, w którym poprosiłem o nazwę książki, której mógłbym użyć do nauki JMF. Czy jest więc istotna różnica między JMF 1.0 a JMF 2.1.1? Czy powinienem iść dalej i kupić książkę, która obejmuje JMF 1.0?


title: Dlaczego sieć zdobyła przestrzeń aplikacji zdalnych, a X nie?

text: X Window System ma 25 lat, wczoraj obchodził urodziny (15-go). Jak zapewne zdajesz sobie sprawę, jedną z jego najważniejszych cech jest oddzielenie strony serwera od strony klienta w sposób, jakiego nie mają systemy okienkowe Microsoftu, Apple'a czy Waylanda. W dawnych czasach (przepraszam za niejednoznaczne sformułowanie) wielu wierzyło, że X będzie dominował nad innymi sposobami tworzenia okien z powodu tego oddzielenia serwera i klienta, umożliwiając uruchamianie aplikacji na serwerze w innym miejscu, podczas gdy użytkownik klika i pisze na niej własny komputer w domu. To zastosowanie oczywiście nadal istnieje, ale jest w najlepszym razie marginalizowane. Kiedy piszemy i używamy programów, które działają na serwerze, prawie zawsze używamy sieci z jej html/css/js. Dlaczego sieć wygrała, a X nie? Technologie używane w sieci (wspomniane html/css/js) to bałagan. W połączeniu ze wszystkimi back-endowymi frameworkami (Rails, Django i wszystkimi) jest to naprawdę dżungla do poruszania się. Mimo to sieć kwitnie dzięki kreatywności i postępowi, podczas gdy zdalne aplikacje X nie.


title: Przyczyny zachowań związanych z polimorfizmem w java

text: Przeczytałem ten kod gdzieś class Foo { public int a; publiczne Foo() { a = 3; } public void addFive() { a += 5; } public int getA() { System.out.println("jesteśmy tutaj w klasie bazowej!"); zwrócić; } } public class Polimorfizm rozszerza Foo{ public int a; public Polimorfizm() { a = 5; } public void addFive() { System.out.println("jesteśmy tutaj!" + a); a += 5; } public int getA() { System.out.println("jesteśmy tutaj w podklasie!"); zwrócić; } public static void main(String [] main) { Foo f = new Polimorfizm(); f.dodajPięć(); System.out.println(f.getA()); // SOP 1 System.out.println(f.a); // SOP 2 } } Dla SOP1 otrzymujemy odpowiedź 10, a dla SOP2 otrzymujemy odpowiedź 3. Powodem tego jest to, że nie można nadpisać zmiennych, podczas gdy można to zrobić dla metod. Dzieje się tak, ponieważ typ zmiennej referencyjnej jest sprawdzany podczas uzyskiwania dostępu do zmiennej, a typ obiektu jest sprawdzany podczas uzyskiwania dostępu do metody. Ale zastanawiam się, dlaczego tak jest? Czy ktoś może mi wyjaśnić, co jest przyczyną takiego zachowania?


Narzędzia takie jak pc-lint lub QAC mogą być użyte do przeprowadzenia statycznej analizy kodu na podstawie kodu. Z mojego doświadczenia wynika, że analiza statyczna często generuje ogromną ilość szumu, tj. ostrzeżeń o rzeczach, które nie są prawdziwymi błędami, ale w jakiś sposób naruszają jedną z reguł w danym zestawie reguł. Wyłączenie pewnych reguł (na stałe w zestawie reguł lub poprzez specjalne komentarze w kodzie) może być naprawdę uciążliwym procesem. Jakie są prawdziwe korzyści statycznej analizy kodu?


title: Jaka jest twoja rada dla nowego rekrutera?

text: W przyszłym miesiącu mój znajomy rozpoczyna pracę jako rekruter techniczny w firmie tymczasowej. Będzie rekrutował pracowników niższego szczebla dla firmy na poziomie Google/MS/Apple. Jako facet w dużej mierze nietechniczny, jak myślisz, jakie rady byłyby dla niego najbardziej pomocne? Widziałem wiele opowieści grozy o rekruterach, więc chcę mu pomóc, aby nie powodował żadnej z nich w przyszłości.


title: Jaka jest dobra prędkość dla skrobaka internetowego?

text: Obecnie pracuję nad webscraperem, który będzie przetwarzał łącznie około 2 milionów stron. Ale nie jestem do końca pewien, jak to porównać. Obecnie przetwarza około 100 000 stron na godzinę z prędkością około 2mb/s. Nie nasyca przepustowości serwera, ale próbowałem wielu sposobów, aby przyspieszyć, ale bezskutecznie. Procesor działa średnio w 50%.


title: Dlaczego Java MessageDigest.getInstance() ma String jako parametr?

text: Zakładam, że tak jest, więc można by to rozszerzyć o niestandardowe algorytmy, ale czy nie byłoby wygodniej zastosować tutaj, powiedzmy, wzorzec metody fabrycznej i uniknąć całego „NoSuchAlgorithmException”? Coś w stylu: MessageDigest.getMD5Algorithm(); lub MessageDigest.getInstance(DigestAlgorithmFactory.getMD5Algorithm()) Zgaduję, że jest tu większy obraz, ale po prostu go nie widzę.


title: Zaglądanie do plików nagłówkowych Microsoftu

text: Kiedy otwieram niektóre z często używanych plików nagłówkowych, takich jak vector.h lub cstdlib.h, wydaje się, że wygląda to na bałagan w instrukcjach #ifndefine #define #endif. Czy ktoś może rozszyfrować ten bałagan i dać mi wgląd w to, co się tam dzieje?


title: Co to jest „ciąg zakończony zerem”?

text: Właśnie zacząłem czytać C++ i natknąłem się na termin „Null Terminated String”, czytałem o tym, ale nie mogłem zrozumieć, co to właściwie oznacza. Chcę również wiedzieć, jaka jest różnica między ciągiem c (określanym również jako „ciąg zakończony zerem”) a ciągiem c++.


title: Oprogramowanie do przeglądania portalu klienta

text: Czy każdy może udostępniać dowolne oprogramowanie/techniki, których używa, pokazując klientom elementy graficzne, storyboardy, elementy itp. do projektu internetowego, nad którym pracuje? Chciałbym mieć sposób, aby klient mógł się zalogować i zobaczyć aktualizacje tego, co się dzieje i zobaczyć elementy, które powstały na przestrzeni czasu projektu. Mogą to być aktualizacje statusu, elementy kreatywne, linki do prototypów, makiety itp. Z góry dziękujemy za wszelkie pomysły, które najlepiej się dla Ciebie sprawdziły.


title: Procesy rozwoju, wykorzystanie kontroli wersji i testy jednostkowe

text: ### Przedmowa W swoim czasie pracowałem w kilku „płaskich” organizacjach. Większość zasad/procesów kontroli wersji została "zatwierdzana dopiero po przetestowaniu". W każdym miejscu nieustannie angażowaliśmy się w „trunk” (cvs/svn). To samo dotyczy testów jednostkowych – zawsze była to mentalność „musimy to zrobić”, ale nigdy tak naprawdę nie materializuje się w formie merytorycznej, ponieważ nie ma instytucjonalnej bazy wiedzy, aby to zrobić – nie ma mentoringu. ### Kontrola wersji Nacisk na zarządzanie kontrolą wersji w jednym miejscu był bardzo rygorystyczny dla komunikatów o zatwierdzeniu (format i treść). Inne miejsca pozwalają pracownikom robić „cokolwiek”. Aspekt rozgałęziania, tagowania, zatwierdzania, wycofywania i łączenia rzeczy zawsze był źle zdefiniowany i prawie nigdy nie był używany. Ten rodzaj wydaje się pozostawiać system kontroli wersji w pozycji wymyślnego mechanizmu przechowywania plików z komponentem metadanych, który tak naprawdę nigdy nie jest dostępny/używany. (To samo dotyczy testów jednostkowych i wprowadzania kodu do drzewa źródłowego) ### Testy jednostkowe Wygląda na to, że w większości miejsc, w których pracowałem, panuje mentalność „musimy/powinniśmy to zrobić”. Jako polityka lub standardowa procedura operacyjna nigdy nie zostaje wdrożona, ponieważ wydaje się, że istnieje bardzo źle zdefiniowane zrozumienie, co to oznacza, co będzie testowane i jak to zrobić. ### Podsumowanie Wygląda na to, że w większości miejsc, w których byłem, uważano, że kontrola wersji i testowanie jednostkowe są „ważne”, ponieważ modne czasopisma branżowe twierdzą, że tak jest, ale jeśli jest bardzo mało mentoringu, aby korzystać z tych narzędzi lub jakiejkolwiek prawdziwej polityki biznesowej, wtedy pełna moc kontroli wersji/testów jednostkowych nigdy nie jest tak naprawdę wyrażana. Tak więc pomruki, takie jak ja, nigdy tak naprawdę nie rozumieją sensu poza tym, że „to dobrze” i „powinniśmy to zrobić”. ### Pytanie Zastanawiałem się, czy istnieją blogi, książki, białe księgi lub czasopisma internetowe o tym, co można nazwać procesem biznesowym lub „standardowymi procedurami operacyjnymi” lub przypadki użycia do kontroli wersji i testowania jednostkowego? Chcę wiedzieć więcej, niż mówią mi dzienniki branżowe, i poważnie podejść do robienia tych rzeczy. ### PS: @Henrik Hansen miał świetny komentarz na temat braku definicji pytania. Nie interesuje mnie konkretny produkt lub metodologia testowania jednostkowego/wersjonowania (np. XP) - bardziej interesuje mnie przepływ pracy na poziomie indywidualnego zespołu/programisty niż ewangelizacja. Jest to mniej więcej produkt uboczny sytuacji w zakresie zarządzania, w której działałem, a nie tylko brak czytania książek o inżynierii oprogramowania lub czasopism o procesach rozwojowych. Wiele z tego, co widziałem/przeczytałem, to materiały bardziej zorientowane na marketing niż jakikolwiek konkretny opis „no cóż, tak działa nasz sklep”.


title: Maszyny wirtualne i aplikacje internetowe do testowania jednostek/integracji

text: Jestem w trakcie dodawania testów jednostkowych do projektu, nad którym pracuję w pracy i pojawiła się sugestia, że powinienem użyć maszyn wirtualnych do zapełnienia bazy danych dobrymi danymi. Było to sugerowane jako alternatywa do tego, co zwykle robię, czyli używania pliku urządzeń yaml do ładowania danych. Chociaż uważam, że użycie maszyny wirtualnej do bazy danych testów jednostkowych może przynieść pewne korzyści, ogólnie nie uważam tego za świetne rozwiązanie. Pierwszą obawą, jaką mam, jest szybkość przeprowadzania testów. Nie wiem, ile czasu zajęłoby wywołanie i zniszczenie nowej instancji maszyny wirtualnej na podstawie migawki, ale domyślam się, że wstawianie danych trwałoby dłużej niż pliki urządzeń danych yaml. Testy jednostkowe powinny być uruchamiane tak szybko, jak to możliwe, ponieważ powinny być wykonywane co najmniej raz przed jakimkolwiek wypchnięciem do repozytorium kontroli wersji i może się to zdarzyć kilka razy dziennie (nawet więcej w trybie naprawy błędów). Kolejnym problemem jest posiadanie danych w znanym stanie dla wszystkich testów. Oczywiście, pierwszy test wykonywany na bazie danych maszyny wirtualnej będzie wiedział, w jakim stanie jest baza danych, jednak gdy test zmodyfikuje dane, może to zepsuć inne testy. Dzięki plikom danych urządzeń yaml każdy test gwarantuje, że wiadomo, w jakim stanie znajduje się baza danych. Ostatnim poważnym problemem jest złożoność, która prawdopodobnie pociąga za sobą użycie konfiguracji VM (oczywiście mogę się mylić, ponieważ nigdy nie miałem takiej konfiguracji zanim). Oczywiście nie możemy po prostu uruchomić phpunit z użyciem maszyn wirtualnych w konfiguracji. Najpierw musielibyśmy stworzyć skrypt, który zasadniczo tworzy i usuwa maszynę wirtualną. To musiałoby działać na wszystkich systemach operacyjnych lub musielibyśmy zmusić wszystkich do pracy w środowisku VM (a uruchomienie VM w VM wygląda na to, że naprawdę będzie jeszcze wolniej). Sugestia VM miała na celu zwalczanie problemu zarządzania plikami danych urządzeń Yaml, jednak wydaje mi się, że zarządzanie plikiem Yaml byłoby łatwiejsze z dwóch opcji. Czy ktoś kiedykolwiek pracował w środowisku, w którym programiści używali maszyn wirtualnych do bazy danych, której wymagały testy jednostkowe (lub testy integracyjne lub jakkolwiek chcesz to nazwać) i zakończyły się sukcesem?


title: Hackathon i zakres

text: Lubię chodzić na hackathony, ponieważ daje to wiele korzyści (jak darmowa pizza), ale nigdy nie udało mi się doprowadzić projektów do dobrego zakończenia. Większość hackathonów w mojej okolicy to około 8 godzin rzeczywistego kodowania. Jaki jest najlepszy sposób na zarządzanie projektem w tak krótkim czasie? Od stworzenia pomysłu do jakiegoś półproduktu. Czy w tak krótkim czasie projekt powinien mieć jedną funkcję i jeśli zostanie zrealizowana, można uruchomić inną? Czy wszyscy powinni pracować nad tą samą funkcją? Jak należy kształtować przywództwo? Czy powinno być przywództwo czy demokracja bezpośrednia? Zawsze wydaje się, że albo zakres projektu jest zbyt duży, albo stracimy dużo czasu na rozwiązanie jakiegoś problemu.


title: Od konsoli do aplikacji GUI

text: Jestem początkującym programistą i do tej pory pracowałem tylko z aplikacjami konsolowymi w C++. Jeśli chodzi o kodowanie, jak powstaje graficzna strona programów? Rozumiem, że logika, której używam z aplikacji konsolowych, będzie taka sama, ale jak programiści tworzą grafikę, w której ta logika jest następnie używana? Wiem, że to trochę niejednoznaczne pytanie, ale w zasadzie staram się zrozumieć, jak mam stworzyć program, który nie jest aplikacją konsolową, taką jak gra wideo lub aplikacja na iPhone'a.


title: Licencjonowanie oprogramowania i prawa autorskie Open source

text: Widziałem kod źródłowy zawierający informację o prawach autorskich na początku pliku. Większość z nich to albo Powszechna Licencja Publiczna GNU, albo Licencja Apache. Jeśli chcę tworzyć oprogramowanie typu open source, jakie kroki powinienem wykonać? Czy potrzebuję licencjonowania mojego oprogramowania rejestrując się gdzieś, czy po prostu dodaję tekst, jak opisano w Apache License 2.0. Jeśli zmodyfikuję kod źródłowy innego oprogramowania open source, co powinienem zrobić? Czy powinienem poprosić ich o pozwolenie?


title: Czy metody dostępu do danych ORM powinny być opakowane czy używane bezpośrednio?

text: Korzystamy z wbudowanego wewnętrznie ORM. Każda tabela jest reprezentowana przez klasę Model, która dziedziczy po klasie modelu bazowego, która ma kilka metod, takich jak GetAll, GetWhere (aby uzyskać wiersze z określonymi wartościami kolumn), GetFirstWhere itd., aby uzyskać dostęp do danych z tabeli. Pojawia się pytanie, czy te metody powinny być chronione (aby każdy dostęp do bazy danych musiał wywoływać publiczną metodę opakowującą dla dokładnego zapytania) czy metody publiczne (aby kod w dowolnym miejscu mógł wywołać GetAll, GetWhere itp.) Widzę kilka zalet i minusy dla obu stron. Który styl byłby uważany za najlepszą praktykę i łatwiejszy do utrzymania? **Chronione** _Zalety:_ łatwo zobaczyć wszystkie zapytania dotyczące tabeli, wystarczy otworzyć plik modelu. Może to być przydatne do sprawdzania, czy tabela jest poprawnie indeksowana itp. _Wady:_ dodatkowa praca i obciążenie poznawcze dla każdego dostępu do danych. Teraz muszę sprawdzić, czy metoda zapytania już istnieje i utworzyć ją, jeśli nie; Muszę wyszukać nazwy metod, które wydają się być specyficzne, takie jak „GetThisThingByIDAndName”; Ponadto, jeśli chcę zmienić zapytanie, muszę się upewnić, że nic innego nie używało tej metody ani nie tworzyło nowej metody. Wiele z tych zapytań zostanie użytych tylko raz, aw praktyce jest mnóstwo tych metod, których nazwy nie zawsze wyjaśniają dokładnie, co robi metoda. **Publiczne** _Zalety:_ ujednolicony interfejs dostępu do danych pozwala programistom łatwo zapamiętać kilka metod dostępu do danych i konsekwentnie ich używać w różnych tabelach, co przyspiesza i ułatwia tworzenie aplikacji. Ponadto mogą wprowadzać zmiany bezpośrednio w miejscu, w którym odbywa się zapytanie, bez uszkadzania czegoś w innym miejscu bazy kodu. _Wady:_ wymaga wyszukiwania w celu znalezienia wszystkich zapytań w tabeli. Jeśli nie będziesz ostrożny, może dojść do powielania.


title: Jak działa kliknięte zdarzenie na niskim poziomie?

text: W szczególności w odniesieniu do operacji przeciągania i upuszczania, w jaki sposób przycisk, pole tekstowe lub cokolwiek innego wie, że zostało kliknięte (lub odwrotnie, skąd menedżer wyświetlania wie, co kliknął). Czytałem trochę o sposobie przeciągania i upuszczania COM i wydaje mi się, że rozumiem ogólny pomysł: po zwolnieniu myszy wykryj, co zostało kliknięte. Gdy mysz jest nadal w dół, a pozycja kursora przesuwa się, pewna ilość przechowuje dane związane ze źródłem przeciągania. Po uruchomieniu zdarzenia mouseup upuść dane, jeśli kursor myszy znajduje się nad celem upuszczania. Jeśli nie jest celem upuszczenia, anuluj operację. Możesz rozszerzyć to do scenariusza, w którym klikasz i przeciągasz, aby wybrać wiele plików. Skąd interfejs użytkownika wie, jakie pliki wybrał? Czy menedżer wyświetlania ma obliczony zakres pikseli dla każdego elementu i porównuje z nim kliknięcia pozycji myszy? Jeśli tak, skąd menedżer wyświetlania o tym wie? Jeśli odpowiedź jest zbyt długa lub trudna do wyjaśnienia, czy możesz wskazać mi jakieś zasoby, które mógłbym przeczytać? Rozumiem, że przechowujesz dane w zdarzeniu kliknięcia myszą, ale jest to widok wyższego poziomu „po prostu wywołaj te funkcje API”.


title: Konwerter języka programowania aplikacji mobilnych?

text: Rozmawiałem z przyjacielem o tworzeniu aplikacji mobilnej (android/iphone), ale nigdy wcześniej nie bawiłem się kodem do tworzenia aplikacji mobilnych. Mój przyjaciel bezczelnie powiedział mi, że _„nie muszę znać kodu aplikacji mobilnej...”_, ponieważ _„istnieją konwertery, które konwertują twój kod na kod aplikacji mobilnej”._ Moje pytanie jest dwojakie: 1 . Czy to prawda? Gdzie mogę znaleźć te legendarne konwertery i czy są dobre? 2. Jestem całkiem przydatny z PHP/Javascriptem/Java (w kolejności poziomu umiejętności). Jaki język aplikacji mobilnej byłby dobrym punktem wyjścia? Lub... który z moich poniższych języków kodu „najlepiej konwertuje” na język aplikacji mobilnej?


title: Czy drukowanie liczb wiąże się z zamianą liczb na znaki?

text: W językach programowania, kiedy liczby (całkowite lub rzeczywiste) są drukowane, czy są one najpierw konwertowane na kody czytelnych znaków, które mają reprezentować liczby, a następnie kody są dekodowane na znaki czytelne? Na przykład w C funkcje takie jak `printf` mogą wypisać wartość zmiennej całkowitej `a` na ekran lub pliki. Załóżmy, że wartość „a” wynosi 1. Czy „printf” najpierw konwertuje liczbę „1” na liczbę „0x31”, która jest kodem ASCII znaku „1”, a następnie dekoduje „0x31” na znak „1” w swoim wyjście? Dziękuję i pozdrawiam!


title: Jak uruchomić kod C++ w przeglądarce za pomocą asm.js?

text: Aplikacja asm.js jest bardzo szybka (blisko natywnej szybkości C++): http://kripken.github.io/mloc_emscripten_talk/micro4b.png Ale jak to możliwe napisać w C++, przekonwertować do kodu LLVM, a potem trochę sztuczka z emscripten/asm.js ? Nie znalazłem żadnego poradnika na ten temat. A jeśli piszę kod w C++, to jak korzystać z API js, na przykład XMLHttpRequest, WebSockets, Canvas czy WebGL?


title: Czy Instalatory Windows dla wewnętrznych aplikacji biznesowych mają sens?

text: Staram się zbudować ogólne zrozumienie tego, co jest powszechne w tej sytuacji, abym mógł zdecydować, czy ma sens kontynuowanie tego. 1. Czy instalatorzy są mile widziani w typowym środowisku korporacyjnym z następującymi warunkami? * Proces kontroli zmian * Środowiska Dev/QA/produkcyjne * Wyznaczone zespoły wdrożeniowe dla różnych obszarów (firewall, baza danych, okna itp.). 2. Czy istnieje „papierek lakmusowy”, który można zastosować do aplikacji, aby sprawdzić, czy jest dobrym kandydatem do stworzenia instalatora? * * Czy instalatory są na tyle proste, że każda aplikacja powinna mieć jeden? * Czy instalatorzy są nawet właściwym narzędziem? 3. Czy rozsądne jest oczekiwanie, że programiści nauczą się czegoś takiego jak WiX, aby wspierać instalatory? * Ogólnie rzecz biorąc, łatwość utrzymania jest problemem, np. czy tworzenie instalatora jest umiejętnością niszową? > ## * > > Na przykład mam zestaw aplikacji winform, które znajdują się we wspólnym katalogu > na serwerze produkcyjnym. Określone grupy mogą uruchamiać aplikacje > z tego katalogu, ale tylko administratorzy systemu mogą modyfikować pliki wykonywalne. Bieżący proces wdrażania obejmuje > kopiowanie/wklejanie przez administratora plików > wykonywalnych i bibliotek do katalogu współdzielonego. > > Ponieważ aplikacje nie są instalowane na komputerach poszczególnych użytkowników, > czy jest sens tworzenie instalatora do wdrażania nowych wersji > tych aplikacji w katalogu współdzielonym? Edytuj — czułem, że odpowiedzi tutaj dały solidną radę, więc chciałem podzielić się tym, co wymyśliłem dla mojego obecnego projektu, w którym musiałem zbudować dużą liczbę aplikacji i wdrożyć je w poszczególnych folderach. Znalazłem pakiet NuGet o nazwie _PublishedApplications, który naśladuje zachowanie _PublishedWebsites dla projektów internetowych. Pomysł polega na zainstalowaniu pakietu NuGet do projektów i dodaniu obiektu docelowego, który skopiuje artefakty kompilacji do katalogu _PublishedApplications w ścieżce wyjściowej. To zachowanie jest aktywowane przez uruchomienie programu MSBuild z wiersza polecenia i określenie właściwości `outdir`: msbuild /p:Configuration=Release /p:outdir=C:\path\to\outdir MySolution.sln Dzięki temu uzyskasz podobną strukturę katalogów do następującego: * C:\ścieżka\do\outdir * _PublishedApplications\ * Project1\ * `dll, exe itp.` * Project2\ * `...` Stamtąd, tworząc plik zip, który można rozpakować w różnych środowiska jest dość bezbolesne.


title: Jak należy ustrukturyzować moduły w aplikacji Angular.js?

text: Jestem całkiem nowy w Angular.js, a myli mnie to, jak najlepiej używać modułów w aplikacji. Wydaje mi się, że moduły mogą zawierać dowolne inne typowe konstrukcje w AngularJS (kontrolery, dyrektywy, filtry, usługi itp.), ale stąd nie jestem pewien, które moduły powinny zawierać jakie rzeczy. * Czy powinienem mieć jeden moduł, który zawiera wszystkie inne obiekty w mojej aplikacji? Wydaje się, że jest to najłatwiejsze do skonfigurowania, ale dla mnie pachnie Antywzorcem Boga Obiektu. * Czy powinienem podzielić moduły według typów obiektów? czyli jeden moduł dla sterowników, jeden dla dyrektyw itd.? * Czy mam je podzielić według użycia? Czyli wszystkie dyrektywy, usługi i filtry, które są używane dla części aplikacji, są razem? * jakaś inna strategia, której jeszcze nie widziałem/o której nie pomyślałem? Każda pomoc byłaby bardzo mile widziana.


title: Testowanie jednostkowe i sprzężenie

text: Jako programista powinienem dążyć do niskiego sprzężenia między klasami. Ale niskie sprzężenie nie oznacza „braku parowania”, więc czasami muszę pozwolić na pewną elastyczność kodu i użyć „nowego” wewnątrz modelu domeny. (Jestem pewien, że wszyscy robią to w prawdziwym kodzie produkcyjnym) Jeśli użyję "nowego" wewnątrz metody do stworzenia obiektu i muszę przetestować tę metodę, mam problem. Ponieważ nie mogę kpić z obiektów, nie mogę przetestować metody w izolacji. Wiem, że mogę użyć wstrzykiwania zależności lub mogę wysyłać obiekty jako parametry, ale nie mówię o tych jasnych przypadkach. Czy jest to akceptowalne w praktyce? Czy jest lepszy sposób? (Nie zawsze mogę wstrzyknąć) Czy to jest test jednostkowy czy test integracyjny? Przykład PHP: class Car { protected $objDoor; public function createComponents() { $this->objDoor = new Door(); } }


title: Czy posiadanie funkcjonalności w DB jest przeszkodą na drodze do skalowalności?

text: Mogę nie być w stanie nadać pytaniu odpowiedniego tytułu. Ale oto jest, Rozwijamy portal finansowy do zarządzania majątkiem. Spodziewamy się, że z aplikacji skorzysta ponad 10000 klientów. Portal oblicza różne analizy wydajności na podstawie analizy technicznej rynku akcji. Wiele funkcjonalności opracowaliśmy poprzez procedury składowane, funkcje zdefiniowane przez użytkownika, wyzwalacze itp. poprzez bazę danych. Pomyśleliśmy, że możemy uzyskać ogromny wzrost wydajności robiąc rzeczy bezpośrednio w bazie danych niż za pomocą kodu C#. I rzeczywiście osiągnęliśmy ogromny wzrost wydajności. Kiedy próbowałem pochwalić się osiągnięciem naszemu CTO, zakwestionował moją decyzję o zaimplementowaniu funkcjonalności w bazie danych, a nie w kodzie. Według niego takie aplikacje mają problemy ze skalowalnością. W jego słowach „W dzisiejszych czasach rzeczy są przechowywane w pamięci/cache. Dane w klastrach są trudne do zarządzania w czasie. Facebook, Google nie mają nic w bazie danych. To era cienkich serwerów i grubych klientów. DB służy tylko do przechowywania zwykłych danych a funkcjonalność powinna być całkowicie oddzielona od bazy danych”. Czy możecie mi dać kilka sugestii, czy to, co mówi, jest słuszne. Jak zabrać się za architekta takiej aplikacji?


title: Potrzebujesz jasności na GPL

text: Załóżmy, że ktoś pisze jakiś kod i publikuje go jako open source na licencji GPL. Później postanawiają zamknąć źródło swojej aplikacji i wystawić ją na sprzedaż. Czy to narusza GPL? Cały kod w zamkniętej aplikacji źródłowej został napisany przez wspomnianego autora. Ponieważ jest "właścicielem" kodu, myślę, że może zmienić licencję na dowolny sposób. Czy to prawda?


title: W jaki sposób Facebook usuwa html/apostrofy dla XSS, ale także je wyświetla?

text: Nie jestem do końca pewien, czy jest to pytanie do programrs.se, a nie do przepełnienia stosu, ale oto idzie. Tak więc Facebook [lub jakakolwiek inna duża firma], gdy otrzyma coś takiego jak apostrof lub html, może pozbawić go złośliwego zamiaru, ale nadal wyświetlać go prawidłowo. Moja obecna funkcja odkażania w PHP po prostu usuwa te znaki / czyni je nieszkodliwymi poprzez htmlentities() i tym podobne. Więc gdybym napisał tag HTML, chciałbym, aby został oczyszczony, ale także wyświetlany na stronie internetowej. Jak mam to zrobic?


title: O co chodzi z przeglądami kodu?

text: Zastanawiałem się ostatnio nad przeglądami kodu, w oparciu o to, ile pytań na ten temat widziałem. Pomiędzy stażami, kontraktami i pełnoetatowymi pracami pracowałem dla sześciu różnych firm, z których tylko jedna wykonała przeglądy kodu. W ostatnich dwóch miejscach, w których pracowałem, kod był dobry (a przynajmniej wystarczająco dobry), jeśli wszystkie testy jednostkowe przeszły pomyślnie, i otrzymał pieczątkę aprobaty naszego testera. Wszyscy byliśmy kompetentnymi programistami, więc jeśli kod zadziałał, byliśmy szczęśliwi. Kilka miesięcy lub lat później pojawiło się coś, co mogło zostać uchwycone w recenzji, ale było ich tak mało, że nie jestem pewien, czy byłoby to przydatne. Myślę, że moje pytanie brzmi: 1. Czy uważasz, że recenzje są przydatne? 2. Jak często je robisz? 3. Ile czasu poświęcasz na przeglądanie kodu?


title: Najlepsza praktyka propagowania preferencji aplikacji

text: Jakie jest Twoje podejście do propagacji we wszystkich klasach/oknach preferencji/ustawień Twojej aplikacji? Czy udostępniasz klasę preferencji_manager wszystkim klasom/oknom, które jej potrzebują, czy też tworzysz zmienne w każdej klasie/oknie i aktualizujesz je ręcznie za każdym razem, gdy zmieniane są ustawienia? * * * Obecnie posiadam klasę `PreferencesInterface`, która przechowuje wszystkie preferencje i jest odpowiedzialna za domyślne ustawienie wszystkich wartości za pomocą dedykowanej metody wywoływanej na create, a w razie potrzeby wszystkie wartości są publiczne, więc nie są pobierane/ustawiane, mają również wirtualne `SavePreferences `/`LoadPreferences` metody. Następnie mam `PreferencesManager`, który wywodzi się z `PreferencesInterface` i jest odpowiedzialny za implementację `SavePreferences`/`LoadPreferences`. Zrobiłem to w zasadzie dla _cross-platform_, aby każda platforma mogła mieć inną implementację rzeczywistego przechowywania (registry, ini, plist, xml, _cokolwiek_).


title: Potrzebna rada: Deweloperzy zablokowani przez oczekiwanie na kod do scalenia z innej gałęzi za pomocą GitFlow

text: Nasz zespół właśnie przeszedł z FogBugz & Kiln/Mercurial na Jira & Stash/Git. Używamy modelu Git Flow do rozgałęziania, dodając gałęzie podzadań z gałęzi funkcji (w odniesieniu do podzadań Jira funkcji Jira). Używamy Stash do przypisania recenzenta, gdy tworzymy żądanie ściągnięcia, aby ponownie połączyć się z gałęzią nadrzędną (zwykle programujemy, ale w przypadku podzadań z powrotem do gałęzi funkcji). Problem, który znajdujemy, polega na tym, że nawet przy najlepszym planowaniu i podziale przypadków funkcji, gdy wielu programistów pracuje razem nad tą samą funkcją, powiedzmy na interfejsie i zapleczu, jeśli pracują nad współzależnym kodem, który jest w osobnych oddziałach jeden deweloper blokuje drugiego. W miarę rozwoju staraliśmy się przeciągać między gałęziami. Próbowaliśmy również utworzyć lokalne gałęzie integracji, które każdy programista może pobrać z wielu gałęzi, aby przetestować integrację w miarę rozwoju. Wreszcie, i wydaje się, że jak dotąd działa to najlepiej dla nas, chociaż z nieco większym obciążeniem próbowaliśmy od razu utworzyć gałąź integracyjną z gałęzi funkcji. Gdy gałąź podzadań (poza gałęzią funkcji) jest gotowa do żądania ściągnięcia i przeglądu kodu, ręcznie scalamy również te zestawy zmian w tej gałęzi integracji funkcji. Następnie wszyscy zainteresowani programiści mogą przeciągnąć się z tej gałęzi integracji do innych zależnych gałęzi podzadań. Uniemożliwia to nikomu czekanie, aż gałęzie, od których są zależne, przejdą przegląd kodu. Wiem, że niekoniecznie jest to kwestia Gita – ma to związek z pracą nad współzależnym kodem w wielu gałęziach, wymieszanym z naszym własnym procesem pracy i kulturą. Gdybyśmy nie mieli ścisłej polityki weryfikacji kodu dla deweloperów (gałąź prawdziwej integracji), wówczas deweloper 1 mógłby połączyć się w celu opracowania, z którego mógłby czerpać deweloper 2. Inną komplikacją jest to, że jesteśmy również zobowiązani do przeprowadzenia wstępnych testów w ramach procesu przeglądu kodu przed przekazaniem funkcji do kontroli jakości. Oznacza to, że nawet jeśli programista front-end 1 pobiera bezpośrednio z gałęzi back-end developera 2, gdy idź, jeśli programista zaplecza 2 zakończy, a jego żądanie ściągnięcia znajduje się w przeglądzie kodu przez tydzień, programista frontonu 2 technicznie nie może utworzyć swojego żądania ściągnięcia/przeglądu kodu, ponieważ jego/jej recenzent kodu nie może test, ponieważ kod back-end developera 2 nie został jeszcze włączony do developmentu. Podsumowując, w tych przypadkach znajdujemy się w podejściu znacznie bardziej szeregowym niż równoległym, w zależności od tego, którą drogą idziemy, i chcielibyśmy znaleźć proces, którego można użyć, aby tego uniknąć. Ostatnią rzeczą, o której wspomnę, jest to, że zdajemy sobie sprawę z tego, że udostępniamy kod w gałęziach, które nie zostały jeszcze sprawdzone i sfinalizowane, ale w istocie używamy kodu beta innych. Do pewnego stopnia nie sądzę, że możemy tego uniknąć i do pewnego stopnia jesteśmy w stanie to zaakceptować. W każdym razie, wszelkie pomysły, wkład, itp... bardzo mile widziane. Dziękuję!


title: Zasoby do zrozumienia architektury iOS

text: Niedawno skończyłem czytać znakomitą książkę Randalla Hyde'a Write Great Code: Volume 1: Understanding the Machine i mam znacznie lepszą wiedzę na temat tego, co dzieje się teraz pod maską. Chcę zacząć tworzyć aplikacje na iPhone'a i jest na to wiele poradników. Jednak obejmując mój wewnętrzny Hyde, chcę najpierw poznać architekturę systemu iOS. Apple ma naprawdę dobry przegląd tutaj: Przegląd technologii iOS Zanim zacząłem, chciałem wiedzieć, czy są jakieś inne dobre zasoby do **zrozumienia architektury iOS i wykorzystania tej wiedzy do programowania iPhone'a**. Dziękuję.


title: Bezpieczeństwo modułów zewnętrznych

text: Opracowuję kilka zewnętrznych modułów do aplikacji. Te moduły są plikami BPL i jeśli są obecne w folderze aplikacji, aplikacja je ładuje i używa wszystkiego, co jest dostępne w środku. Jak mogę zapobiec udostępnianiu tych modułów przez moich klientów? Potrzebuję ich autoryzacji do korzystania z modułów (moduł po module). Aby mieć jakąś licencję, rejestrację modułu, jaka jest najlepsza metoda? Dziękuję


title: Style kodowania w przypadku korzystania z kilku różnych bibliotek

text: Pracuję nad pewnym kodem C++, który używa kilku bibliotek, w tym niektórych bibliotek C, które mają różne style kodowania. Zostanie udostępniony jako open source, gdy osiągnie stan użyteczności. Co spowodowałoby najmniej zamieszania dla krótkoterminowego współpracownika, który sprawdza kod, aby naprawić jeden błąd lub dodać jedną funkcję? * Miej jeden spójny styl kodowania w całej aplikacji, nawet jeśli czasami nie pasuje on do typowego stylu kodowania używanych bibliotek. * Gdy biblioteka jest intensywnie używana w pewnym module, zastosuj się do typowego stylu kodowania tej biblioteki (tj. stylu kodowania używanego we własnym kodzie i dokumentacji biblioteki) w tym module. Uważam, że ta ostatnia ułatwi ekspertom w tej konkretnej bibliotece dokonanie jednorazowego wkładu i ułatwi włączenie kodu samouczka/przykładu podczas programowania. Jednak powoduje to również niespójność stylu kodowania w całej aplikacji. Jakie są plusy i minusy każdego podejścia?