title: Jaki jest idealny sposób przekazywania reguł/opcji do metod budujących SQL?

text: Próbujemy wymyślić sposób obsługi kodu, który buduje dynamiczny SQL dla naszej aplikacji, który jest bardzo skoncentrowany na bazie danych. Rzeczy takie jak Linq to SQL i Entity Framework nie wchodzą w rachubę, więc proszę o żadne sugestie, nasza ścieżka została dla nas zdefiniowana. Naszym głównym celem jest oddzielenie SQL od reszty kodu (logika biznesowa itp.). W tej chwili myślimy o użyciu metod rozszerzających do przechowywania kodu SQL i wymyśleniu pewnego rodzaju obiektu konfiguracyjnego, którego programiści mogą użyć do zdefiniowania, jak powinno być zbudowane zapytanie (podyktowane logiką biznesową, poza klasą Extension). na przykład mam poniżej jakiś prototypowy kod. Deweloperzy ustawiliby strukturę konfiguracji (zgodnie z regułami biznesowymi) i przekazali ją do GetSQL. public static class LocationSql2Extension { public enum SelectFields { Default, DefaultAnd_Description_LocationSize } public enum FilterBy { Default, DefaultAnd_Description } public enum OrderBy { DefaultAnd DefaultAnd_LocationType_LocationID_Description } public struct Konfiguracja { public SelectFields SelectFields; public Filtruj według Filtruj według; Public OrderBy OrderBy; } public statyczny ciąg GetSQL(ta usługa LocationService2, konfiguracja konfiguracji) { ciąg sqlSelectFields = string.Empty; ciąg sqlWhere = ciąg.Pusty; ciąg sqlOrderBy = ciąg.Pusty; if (config.SelectFields == SelectFields.DefaultAnd_Description_LocationSize) { sqlSelectFields = ", Description, LocationSize"; } if (config.FilterBy == FilterBy.DefaultAnd_Description) { sqlWhere = "WHERE L.Description = ?"; } if (config.OrderBy == OrderBy.DefaultAnd_LocationType_LocationID_Description) { sqlOrderBy = ", L.LocationDescription"; } ciąg sql = ciąg.Format(@" SELECT L.TypLokacji, L.Identyfikator Lokalizacji {0} FROM Location AS L INNER JOIN GroupLoc AS GL ON L.LocationType = GL.LocationType AND L.LocationId = GL.LocationId AND GL.LocLevel >= 4 AND GL.GroupId = ?{1} ORDER BY L.LocationType||L.LocationId {2} ", sqlSelectFields, sqlWhere, sqlOrderBy); zwróć sql; } } i do wywołania powyższego kodu mamy to: public class LocationService2 { public string BuildSql() { var config = new LocationSql2Extension.Configuration(); //TODO: Dodaj logikę biznesową, aby sterować tymi wartościami config.SelectFields = LocationSql2Extension.SelectFields.Default; config.OrderBy = LocationSql2Extension.OrderBy.DefaultAnd_LocationType_LocationID_Description; config.FilterBy = LocationSql2Extension.FilterBy.DefaultAnd_Description; zwróć to.GetSQL(config); } } Deweloperzy mogliby dowolnie konfigurować Enum, a to tylko prosty przykład. Nie czujemy się komfortowo z tym podejściem Enum/Struct i szukamy czegoś bardziej ogólnego, z którym programiści mogą łatwo pracować, ale nie jest tak ogólne, aby nie wyłapywało żadnych błędów w czasie projektowania. To jest prosty przykład, aw naszym systemie mamy bardzo duże i złożone zapytania. Jakieś sugestie?


title: Jak mogę poprawić moje pisanie techniczne?

text: Pisanie dokumentacji jest częścią programowania, a pisanie _dobrze_ jest częścią tego, co czyni dokumentację użyteczną. Więc jakie są wskazówki lub wytyczne dotyczące dobrego pisania w sferze technicznej? Jakie są zasoby (on-line lub na martwych drzewach), które mogą mi pomóc ulepszyć moją dokumentację?


title: Posiadanie repozytorium Git i mercurial w tym samym katalogu

text: Ill wyjaśnię mój problem, obecnie używam wewnętrznej instalacji gitorious przy użyciu git. Chciałbym rozpocząć testowanie FogBugz i Kiln z Fog Creek, który używa rtęci. Chciałbym choć przez chwilę kontynuować rozwój z wykorzystaniem obu rozwiązań. Czy ktoś wie o jakichkolwiek długoterminowych poważnych skutkach posiadania repozytorium git i mercurial w tym samym katalogu. A może istnieje lepszy sposób na synchronizację serwerów git i mercurial. Próbowałem tego z repozytorium testowym i nie widziałem żadnych problemów. Dzięki za wszelką pomoc.


title: Jak przetłumaczyć kod ML na F#?

text: Ostatnio znalazłem książkę _Purely Functional Data Structures_, a wszystkie przykłady w tej książce są podane w ML z wersjami Haskella w załączniku. Ale znam tylko jeden język programowania z paradygmatem funkcjonalnym: F#. Po odrobinie badań odkryłem, że F# jest (lub był) portem .NET CAML, który wywodzi się z ML. Słyszałem, że wspomniałem, że CAML to tylko dialekt ML. Biorąc pod uwagę to, czy można przetłumaczyć ML na F# bez dużej wiedzy na temat ML? Jakie są kluczowe różnice w stosunku do języków? A może najlepiej po prostu nauczyć się ML?


title: Wieloprocesy pamięci współdzielonej

text: Buduję aplikację wieloprocesową i muszę zapisać identyfikator sesji, identyfikator sesji jest 32-bitowy i oczywiście nie można go użyć dwa razy w ciągu jego życia, obecnie używam bazy danych, która zapisuje cały identyfikator w tabeli, a ja wykonaj następujące czynności, tabela identyfikatorów jest (klucz int, używany znak (1)) //1 jest używany, 0 nie jest 1\. zablokować tabelę 2\. zdobądź jeden klucz na jedną sesję 3\. zaktualizuj w nim używane pole na używane 4\. odblokuj Po zakończeniu sesji użyj poniższego procesu, aby uwolnić klucz, 1\. zablokować tabelę 2\. zaktualizuj w nim używane pole na nieużywane 4\. unlock Naprawdę zastanawiam się, czy jest to dobra/szybka implementacja. i pamiętaj, że jest to aplikacja wieloprocesowa.


title: Jakiego narzędzia użyć do zarządzania projektem?

text: Jakiś czas temu oglądałem te castingi wideo i podobało mi się, jak projekt był zarządzany. Czy istnieje narzędzie dla linuksa podobne do procesu docelowego (strona procesu docelowego)? Jeśli nie, jakiego narzędzia używasz do zarządzania projektem zwinnym (linux lub międzyplatformowym)? Dziękuję


title: Co to jest „kanarek procesowy”

text: W książce „Hard Code” Erica Brechnera stwierdza: > Kłamstwo jest jednym z nielicznych cennych kanarek procesowych, które mogą > ostrzegać przed problemami. Słyszałem, jak deweloper lub dwa rzucają wokół starego „kanarka”. Co to jest? [Google nie odpowiedział za mnie. Być może moje słowa kluczowe były złym wyborem.]


title: Ignorowanie testów jednostkowych - dobre i złe powody, kiedy i dlaczego?

text: Niedawno rozpocząłem nowy projekt ponownego wdrożenia głównej części automatyzacji. Ponieważ jest to bardzo ważne, robię to, abym mógł przetestować różne podstawowe scenariusze, a także rzeczy, o których wiemy, że stary system nie robi. Robiąc to, muszę stworzyć kilka testów „piaskownicy”, które ćwiczą algorytmy „kandydujące” w całkowitej izolacji, dzięki czemu mogę wybrać ten, który najlepiej spełnia wymagania. Stworzyłem również kilka testów, aby dowiedzieć się, dlaczego inne testy kończą się niepowodzeniem, które ponownie są kodowane w sposób „piaskownicy” i nie testują rzeczywistego kodu produkcyjnego (zamiast tego mają uproszczenie środowiska produkcyjnego, które mogę zmienić, dopóki nie znajdź problem/przyczynę/rozwiązanie). Żaden z nich nie ma trwałej wartości dla regresji; raz wybiorę algorytm, którego być może nigdy nie użyję, a gdy test wykaże, dlaczego inny test kończy się niepowodzeniem, mogę poprawić test wstępny (lub jego przećwiczony kod produkcyjny) i zweryfikować poprawność, i nie przejmuję się już tym, że drugi test jest trudny -coded środowisko ćwiczeń nadal nie działa. Podczas nauki TDD uczono mnie, że NIGDY nie usuwasz testu jednostkowego; nawet jeśli pierwotny cel testu stał się nieistotny, kod w teście może być użyteczny dla innych programistów jako model lub test może zostać później zrefaktoryzowany w innym celu. Zamiast tego, jeśli test stał się zbędny lub nieistotny i nie powinien być już wykonywany, zaliczony lub niepomyślny, należy go zignorować. Czy jest to „powszechnie akceptowane” stanowisko dotyczące ignorowania testów? Czy może to wiązać się z nadużyciami (np. „Myślę, że to już nie ma znaczenia i się nie udaje, więc po prostu to zignoruję”)?


title: Jak wyjaśnić różnicę między NULL a zerem?

text: Praca nad problemem, który wykorzystuje formułę zmiany procentowej: zmiana procentowa = 100 * [(nowa wartość - stara wartość) / stara wartość] Jak wyjaśnić różnicę, jeśli `nowa wartość lub stara wartość = NULL`, a nie `0` komuś, kto może nie być programistą? Mój szef zastanawia się, dlaczego w TextBox jest pusty ciąg zamiast wartości, ponieważ mamy starą wartość, ale nie mamy nowej.


title: Czy jest jakiś statyczny analizator kontraktów kodu dla Java 1.6?

text: Użyłem języka Java Modeling Language (JML) z jego kontrolerem asercji środowiska uruchomieniowego jml4c do pisania kontraktów kodu w java. Jednak byłoby wspaniale mieć również statyczny kontroler, który dostarcza sugestii, gdzie kontrakt może zostać zerwany podczas procesu kompilacji, coś w rodzaju biblioteki kontraktów kodu opracowanej dla platformy .NET. Esc/Java2 robi to dla wersji Java 1.4. Czy istnieje takie narzędzie, które obsługuje java 1.6?


title: Próba zrozumienia schematu podwójnej wysyłki

text: Próbowałem poznać schemat podwójnej wysyłki i było mi ciężko. W końcu spróbowałem przykładowego programu, aby pomóc sobie zrozumieć. Oto sedno sprawy. Ale potem zdecydowałem się spróbować bez podwójnej wysyłki i rozwiązanie nie wyglądało straszniej niż zwykle. Co ja robię źle?


title: Jaka jest różnica między „przypadkiem użycia”, „historią użytkownika” i „scenariuszem użycia”?

text: Czy istnieje dokładna, ale prosta i zrozumiała definicja rozróżnienia między „przypadkiem użycia”, „historią użytkownika” i „scenariuszem użycia”? jest sporo wyjaśnień, ale w tej chwili nie widzę nikogo, które wyjaśniałoby różnice w jednym zdaniu lub w dwóch... (np. http://c2.com/cgi-bin/wiki?UserStoryAndUseCaseComparison bardzo długie i trudne do zdobycia, pełne dyskusji)


title: Jakie są początkowe warunki Agile?

text: Po pierwsze pozwól, że powiem, że uważam, iż proces zwinny może działać dzięki następującym zasadom leżącym u podstaw: * Przynosi koncentrację * Ogranicza hałas, który naprawdę przynosi koncentrację Po drugie zastanawiam się, jakie są warunki początkowe potrzebne, aby proces Agile mógł odnieść sukces? Na przykład, czy potrzebujemy: * Żadnych istniejących błędów * W pełni zautomatyzowany proces testowy lub przynajmniej wysoce zautomatyzowany proces testowy * Ludzi oddanych projektowi * Bardziej jasno zdefiniowany nowy rozwój * Rozwój, który nie _sprawia, że jest szybszy lub bardziej stabilny_ * ? Więc czego potrzebujesz, aby odnieść sukces? Czy istnieją różne implementacje Agile, które lepiej radzą sobie z brakiem niektórych z tych warunków początkowych?


title: przydatność sumy kontrolnej PNG a jej brak w innych formatach FourCC

text: PNG to jeden z rodziny formatów kontenerów ogólnie nazywanych FourCC lub OSType. [A]IFF i WAV to dwa inne popularne przypadki tego formatu. Chcę opracować nowy format dla specjalistycznego typu danych. Wzorowałem format ściśle na PNG. PNG jest nietypowy dla rodziny FourCC, ponieważ każdy blok kończy się sumą kontrolną. Teoretycznie można to wykorzystać do sprawdzenia uszkodzonych danych. Czy ta suma kontrolna jest przydatna w praktycznych przypadkach? Nowe formaty, takie jak WebP Google (oparty na RIFF), nie mają sumy kontrolnej. Nie mogę znaleźć wskazówek, co z tym zrobić, w tym: * czy wszyscy czytelnicy powinni weryfikować sumę kontrolną, czy większość czytelników ją zignorować? * co powinien zrobić czytelnik, jeśli się myli? Ponieważ nie jestem przekonany, że jest to przydatne, a wspieranie sumy kontrolnej komplikuje sprawę, pominę sumę kontrolną w następnej wersji. Ale ponieważ jest w PNG, myślę, że jest dobry powód, chciałem uzyskać informacje zwrotne na temat tego, jak ludzie faktycznie używają tego pola i jego względnego znaczenia.


title: Czy można stworzyć coś open-source bez publikowania tego?

text: Pracowałem nad jakimś oprogramowaniem, będąc „zatrudnionym” przez firmę A. Teraz chcę kontynuować pracę nad tym samym oprogramowaniem, będąc zatrudnionym przez firmę B. Firma B chce, aby oprogramowanie stało się oprogramowaniem typu open source, aby zapobiec jakiejkolwiek przyszłości kwestie prawne pomiędzy spółką A a nimi. Skonsultuję się z prawnikiem firmy A, aby upewnić się, że wszystko jest w porządku, ale podejrzewam, że będzie dobrze, ponieważ firma A jest w rzeczywistości uczelnią publiczną, która przychylnie patrzy na powiązania branżowe. Martwi mnie jednak, że potencjalni konkurenci uzyskają dostęp do tego kodu, zanim upublicznimy jego wyniki. **Czy możliwe jest stworzenie oprogramowania typu open source bez udostępniania go nikomu poza firmą B** (ani w formie binarnej ani źródłowej), **czy muszę opublikować oprogramowanie w momencie, gdy stanie się ono open-source lub udostępniony komuś?** Jeśli odpowiedź zależy od konkretnej użytej licencji open-source, prosimy o uprzejmość i podanie szczegółów dotyczących różnic.


title: Metodologie cyklu życia oprogramowania dla zespołów jednoosobowych

text: Buduję system oprogramowania dla mojego projektu magisterskiego i szukałem porady na temat konkretnych metodologii, które pasowałyby do "zespołu jednoosobowego"...


title: Czy pisanie bloga programistycznego zmniejsza szybkość uczenia się w porównaniu z czytaniem tylko blogów innych osób?

text: Jeśli chcę skoncentrować się na doskonaleniu swoich umiejętności lub wiedzy, czy powinienem pisać własnego bloga programistycznego w celu utrwalenia mojej wiedzy, czy też powinienem skoncentrować się na czytaniu blogów/filmów/podcastów/książek innych osób?


title: Jakie są praktyczne zalety LISP-a, takiego jak składnia, której Clojure używa w porównaniu z Javą, taką jak składnia Scala?

text: Spędziłem kilka miesięcy ucząc się Scali i zostałem przytłoczony liczbą różnych konstrukcji, które miał. Po przyjrzeniu się funkcjom częściowym, częściowo zastosowanym, dopasowaniu wzorców, składni aktora, pomyślałem o nauce Clojure, która nie ma zbyt wiele w pod względem składni, ale patrząc na sposób, w jaki obsługiwana jest interoperacyjność Java, wydaje się, że bardzo trudno jest się do tego przyzwyczaić. na przykład: rzeczy takie jak `doto, new i .` Za każdym razem, gdy zaczynam pisać funkcję, zdarza się, że piszę `(1 + 2)` zamiast `(+ 1 2).` Wygląda na to, że będę musiał całkowicie zapomnij, jak piszę zwykłe programy, aby przyzwyczaić się do tej składni. Trudno jest również poradzić sobie z efektami ubocznymi, które powodują i pozwalają na to forma. Czy nie są one podobne do funkcji typu void ? Rzeczy takie jak rejestracja wywołania zwrotnego, normalne I/O, jak takie rzeczy mogą być wolne od skutków ubocznych. Do tej pory wszystko, co naprawdę podobało mi się w programowaniu funkcjonalnym, to to, że niezmienność ułatwia współbieżność podczas pracy z danymi współdzielonymi, funkcjami jako obiektami pierwszej klasy i posiadaniem funkcji wyższego rzędu, nakładaniem, mapowaniem i redukcją za pomocą funkcji i list. Chciałem wiedzieć, czy odniosę praktyczne korzyści, gdy przyzwyczaję się do tej składni? Jeśli nadal uczę się Scali i unikam używania var, zawsze używam rekurencji zamiast pętli. Mogę zrobić wszystkie powyższe rzeczy i nadal pisać zrozumiały kod.


title: W jakich przypadkach utrzymywanie kodu źródłowego w tajemnicy jest uzasadnione?

text: Kiedy pracowałem jako freelancer, napotkałem wiele przypadków, w których klienci chronili swoje pomysły i kod źródłowy swoich projektów (takich jak aplikacje internetowe) tak bardzo, jak to możliwe, bez względu na to, jak nieważne, nieciekawe i nieoryginalne były projekty i koncepcje . Wysłałem już pytanie dotyczące utrzymywania pomysłów w tajemnicy i otrzymałem wiele świetnych odpowiedzi. Teraz moje obawy dotyczą bardziej tajemnicy kodu źródłowego. Zgodnie z moimi obserwacjami: * baz kodu, nad którymi musiałem pracować w trakcie mojej kariery, * mojej własnej chęci zachowania części mojego kodu źródłowego w tajemnicy oraz: * kilku artykułów, takich jak np. otwarta odpowiedź na Simona Stuarta autorstwa popularnym współpracownikiem Programrs.SE Mason Wheeler, dochodzę do wniosku, że kod źródłowy jest utrzymywany w tajemnicy głównie z tych powodów: 1. Ponieważ autor wstydzi się kodu tak złej jakości lub firma obawia się utraty reputacji, jeśli ktoś zobaczy tak złą bazę kodu, lub że biorąc pod uwagę niską jakość kodu, nikomu nie przyniesie niczego użytecznego, aby go otworzyć: nawet gdyby ktoś był zainteresowany, nie byłby w stanie uruchomić rozwiązania (lub często nawet skompilować). 2. Ponieważ części kodu są kradzione (głównie z projektów open source objętych licencją, która ogranicza jego użycie w danej sytuacji), 3. Ponieważ kod opiera się na bezpieczeństwie przez ukrywanie, a autorowi nie zależy na zasadzie Kerckhoffsa. 4. Ponieważ produkt jest tak łamliwy, że pokazanie kodu spowodowałoby zbyt wiele szkód: jeśli aplikacja o zamkniętym kodzie źródłowym z wszystkimi tymi wyciekami bezpieczeństwa wytrzymałaby nowicjusza, ta sama aplikacja o otwartym kodzie miałaby znacznie mniejsze szanse, ponieważ nawet początkujący haker musiałby po prostu przestudiować kod, aby odkryć wszystkie dziury. Jeśli nie jest jasne, o czym mówię, oto przykład: if (credentials.password === 'masterPassword12345') { isLoggedIn = true currentUser = referencje.userName } else { authentication(credentials) } 5. Ponieważ autor jest ponad - oszacował kod źródłowy (oraz własne umiejętności i wiedzę). Przykład: przekonanie, że domowy algorytm związany z kryptografią (który nigdy nie został przez nikogo sprawdzony) jest lepszy niż jakikolwiek powszechnie znany. 6. Ponieważ autor uważa, że idea kodu jest świetna i że zostałby skradziony. 7. Z powodu syndromu „To nie jest wystarczająco doskonałe”. Innymi słowy, deweloper jest skłonny udostępnić publicznie kod źródłowy, gdy jest on „wystarczająco dobry”, ale dzień po dniu wciąż trzeba coś poprawiać, więc kod nigdy nie zostanie wydany. Wszystkie te powody dają raczej negatywny obraz osób, które są przeciwne publikowaniu kodu źródłowego. Czy istnieją uzasadnione przypadki, aby nie udostępniać publicznie kodu wysokiej jakości, zgodnie z zasadą Kerckhoffsa?


title: Programowanie na serwerze produkcyjnym

text: Dziś zostałem okrzyknięty za tworzenie aplikacji na serwerze produkcyjnym. Cytat, " _tworzenie na serwerze produkcyjnym jest niedopuszczalne - nigdy!_ " Oto sytuacja. 1. Ustawiam instancję programistyczną: `http://example.com:3000` 2. Instancja produkcyjna to: `http://example.com` 3. Kończę całą moją pracę programistyczną na `http:// example.com:3000` i kiedy klient jest zadowolony ze zmian, przenoszę je do `http://example.com`. Aplikacja, z którą pracuję, jest starą aplikacją Ruby on Rails i muszę powiedzieć, że początkowo próbowałem skonfigurować środowisko programistyczne lokalnie, ale nigdy nie mogłem go uruchomić. Po chwili prób zrezygnowałem i postanowiłem rozwijać się na serwerze produkcyjnym. Znowu, czy jestem idiotą? Prawdopodobnie tak, ale zajmuję się tworzeniem stron internetowych od kilku lat i nigdy nie spotkałem się z taką sytuacją. Kto ma rację i dlaczego?


title: Czy to kandydat do Singletona?

text: Mam termometr zewnętrzny podłączony przez USB, który jest kontrolowany przez moje oprogramowanie. Różne części mojego systemu będą z niego korzystać, ale nigdy w tym samym czasie (wszystko w jednym wątku). Jest to jednak pojedyncze urządzenie komunikujące się przez ustanowione połączenie, więc z jakiegoś powodu uważam, że albo jego metoda (GetTemperature) powinna być statyczna, albo mogę to zrobić jako Singleton. Chętnie na sugestie. Dziękuję


title: Czy jest różnica między „autoplagiatowaniem” w programowaniu a robieniem tego jako pisarz?

text: Przeczytałem ten artykuł Gawkera o tym, jak pisarz ponownie wykorzystał niektóre ze swoich starszych materiałów do nowych zadań dla różnych czasopism. Czy istnieje podobny etyczny (społeczny?) dylemat, gdy robi się to samo w dziedzinie programowania? Czy ponowne wykorzystanie biblioteki dzielonej, którą zgromadziłeś przez lata, oznacza autoplagaryzm? Chodzi mi o to, że wydaje się, że kreatywny świat tworzenia oprogramowania nie jest tak rygorystyczny w kwestii autoplagaryzmu, jak powiedzmy dziennikarstwo czy blogowanie. W rzeczywistości podczas jednego z moich wywiadów w GS zostałem zapytany, jakie biblioteki rozwijałem przez lata, co sugerowało, że otrzymanie tej pracy wiązałoby się z udzieleniem tej firmie licencji na pomocne części kodu. Czy są przypadki, w których, mimo że samoplagarowanie jest legalne, byłoby to źle widziane w świecie oprogramowania?


title: Jak podejść do starego „to będzie tylko mała aplikacja”? Tak, jasne?

text: Ok, spotkałem się z tym wiele razy, ale tutaj jest gorszy scenariusz nieco przerysowany. **Klient mówi** „hej, możesz zrobić nam ten mały moduł do wykonania tego małego zadania”? **Ja:** „Pewnie nie ma problemu”. Opierając się więc na budżetach i ograniczeniach itp., pomijam niektóre prace architektoniczne i od razu sięgam po to, aby się nie pocić. Potem proszą o kolejny moduł. I kolejny. I kilka ulepszeń. I to wszystko dzieje się bardzo powoli, przez lata. I zanim się zorientujesz, masz tę potworną aplikację, która jest okropnie zaprojektowana. Co robisz, gdy jesteś proszony o zrobienie czegoś małego? Nie wiesz, czy będzie rosło... czy klient będzie nadal prosił o dodatki (i oni też nie). Nie możesz nadmiernie zaprojektować tej rzeczy, ponieważ w końcu jest to tylko mała aplikacja i pójdą gdzie indziej, jeśli powiesz (w tym, że znam cały głos) „Cóż, na wszelki wypadek zaprojektujmy tę rzecz na warstwy z topem -o- bezpieczeństwo linii i separacja obaw. W rzeczywistości chodźmy z narzędziem do wstrzykiwania zależności, które naprawdę sprawi, że ta rzecz będzie fantastyczna bla bla bla ”. Powiedzą „tak dobrze” i pójdą do kogoś innego. Budżet, czas i percepcja są tak samo ważne, jak samo zaprojektowanie aplikacji. Jak należy do tego podejść? Myślę, że pytanie naprawdę sprowadza się do „Kiedy nie masz wszystkich informacji dotyczących końcowego wyniku tego, co wydaje się być małą aplikacją, jak uniknąć (lub złagodzić) podejmowanie decyzji architektonicznych i projektowych na wczesnym etapie, które będą całkowicie nieodpowiednie później?


title: Czy mogę użyć kodu GPLd, który napisałem w pracy, jako próbki kodu bez pozwolenia?

text: Obecnie jestem zatrudniony w firmie zajmującej się tworzeniem stron internetowych w Wordpress. W okresie mojego zatrudnienia napisałem wiele niestandardowych wtyczek specjalnie dla wielu klientów. Dzisiaj zapytałem mojego szefa, co mogę wykorzystać jako próbki kodu, ponieważ odchodzę. Mój szef zabronił mi brania jakichkolwiek niestandardowych wtyczek, które zakodowałem (co jest całą pracą programistyczną, którą wykonałem). Jednak wszystkie te niestandardowe wtyczki, które zakodowałem, są obecnie objęte licencją GPL (chociaż nigdy nie zostały wydane ani udostępnione). Jeśli miałbym wziąć ten niestandardowy kod, który napisałem na GPL (ale nigdy nie został wydany) i dostarczyć go jako próbki kodu, czy mój obecny pracodawca byłby w stanie podjąć przeciwko mnie jakiekolwiek kroki prawne?


title: Architektura do budowania szablonów, aplikacja WYSIWIG

text: Buduję projektanta `WYSIWYG` w `Ember.js`. Projektant umożliwi użytkownikom tworzenie kampanii – pomyśl o MailChimp. Aby zbudować kampanię, użytkownicy wybiorą istniejący szablon. Szablon będzie miał zdefiniowany układ. Użytkownik zostanie wtedy przeniesiony do projektanta, gdzie będzie mógł edytować tekst i styl, a dodatkowo zmienić niektóre opcje układu. Zastanawiałem się, jak najlepiej zorganizować tę aplikację i jest kilka przeszkód. W szczególności wyniki kampanii będą dynamiczne: ostatecznie zostaną gdzieś opublikowane, a kiedy konsumenci (nie _moi_ użytkownicy, ale osoby klikające kampanię, którą stworzył mój użytkownik) odwiedzą kampanię, niektóre dane ulegną zmianie , w zależności od typu konsumenta oglądającego kampanię. Oznacza to, że ostatecznym wynikiem projektanta będzie dynamiczna witryna. Dane, które są dynamiczne dla _tej_ witryny — produktu końcowego — nie będą manipulowane przez użytkownika w projektancie. Jednak dane, które będą manipulowane przez użytkownika w projektancie, to takie rzeczy, jak kopia, style, opcje układu itp. Pierwszy zestaw zmiennych wywołam jako dane po stronie serwera, a drugi dane po stronie klienta. Wygląda więc na to, że proces będzie przebiegał mniej więcej tak: * Będę musiał stworzyć szablony dla tego projektanta, które będą miały dwa dynamiczne segmenty. Na przykład, dane po stronie serwera mogą być wyrażeniami `Liquid`, a danymi po stronie klienta `Handlebars` wyrażeniami. * Kiedy użytkownik tworzy kampanię, skompilowałbym szablon na zapleczu, używając pewnych fikcyjnych danych dla zmiennych po stronie serwera, i wyświetlał szablon `handlebars` do aplikacji `Ember`. * Następnie użytkownik edytował szablon, a aplikacja „Ember” zapisywała wszystkie swoje zmiany w zmiennych JS, które zasilały szablon. W ten sposób będzie mógł podejrzeć szablon. * Gdy zapisze, odeśle wybrany szablon wraz ze wszystkimi danymi i opcjami, które wprowadził. * Kiedy nadejdzie czas publikacji, system zaplecza będzie musiał zrobić dwie rzeczy: * skompilować szablon za pomocą `Handlebars` używając danych kampanii, a następnie * skompilować szablon za pomocą `Liquid` używając danych po stronie serwera * * * Czy moje myślenie na ten temat jest z grubsza trafne, czy istnieje prostszy sposób?


title: Najlepsze praktyki dotyczące zdalnego resetowania zawartości/ustawień aplikacji mobilnej

text: Jakie byłoby najlepsze podejście do zresetowania zawartości/ustawień aplikacji mobilnej? Powiedzmy, że aplikacja działa na wielu platformach: apple/android przy użyciu javascript/phonegap. Obecny sposób, w jaki jest to zaprojektowane, to posiadanie obszaru administracyjnego, który może zobaczyć urządzenia mobilne (użytkownicy, którzy się zalogowali). Administrator ma możliwość oflagowania urządzenia do zresetowania. Aplikacja regularnie odpytuje serwer, aby sprawdzić, czy należy go zresetować. Resetowanie będzie rzadkie, ale odpytywanie nie. Odpytywanie nie powoduje żadnych problemów z wydajnością, ale wydaje się, że ciągle pyta serwer, czy ma wysadzić aplikację. Przydałaby się raczej metoda push niż pull, ale nie jestem pewien, jak by to wyglądało. Czy ktoś ma jakieś alternatywne propozycje projektowe? Czy są jakieś wady obecnego projektu?


title: Czy dress code wpływa na wydajność twoich programistów?

text: Czy uważasz, że zmuszanie programistów do nienoszenia tego, co lubią, wpływa na ich wydajność? Mogę rozszerzyć pytanie o to, co chcą postawić na biurku lub powiesić na ścianie. Czy masz doświadczenie, które pokazuje, że danie programistom większej swobody w sprawach osobistych może zwiększyć ich produktywność? Osobiście uważam, że powinno to mieć wpływ.


title: Jaka jest różnica między wyżarzaniem kwantowym a wyżarzaniem symulowanym?

text: W obu algorytmach wykorzystywane są funkcje obiektywne, które będą realizowane na komputerach niekwantowych. Oba algorytmy są metodami znajdowania globalnego minimum danej funkcji celu. Z wikipedii: > Wyżarzanie kwantowe można porównać do symulowanego wyżarzania (SA), którego parametr > „temperatura” odgrywa podobną rolę do pola tunelowania QA > siły. Co oznacza „tunelowanie siły pola”? Wydaje się, że jedyną różnicą między algorytmami jest wybór kolejnego stanu kandydującego, czy to prawda? Wreszcie, jakie są zalety wyżarzania kwantowego? Czy jest szybszy, czy po prostu lepiej radzi sobie z lokalnymi minimami?


title: optymalizacja przepływu pracy w aplikacjach internetowych

text: Mam debugowanie i serwer na żywo z konfiguracją LAMP z kilkoma skryptami Pythona. Obecnie pracuję z eclipse i Expandrive (poprzez SSH) na serwerze debugowania. Ilekroć chcę opublikować nowy kod na serwerze live, kopiuję i wklejam kod za pomocą eksploratora Windows z debugdrive do livedrive. Myślę, że to środowisko naprawdę jest do bani, jakie są dobre alternatywy?


title: Refaktoryzacja kodu zapachów w ASP.NET Web Forms Code Behind Files: Czy jest to ryzykowne? Czy to mądre? Czy to strata czasu?

text: Biorąc pod uwagę długą metodę z Pac-Man ifs, czy mądrze byłoby: 1. Rozbić bloki kodu na regiony. 2. Następnie zrefaktoryzuj bloki kodu na metody. A może lepiej zostawić to w spokoju? Czy byłoby to ryzykowne? Czy byłaby to strata czasu? Wobec braku zautomatyzowanych testów jednostkowych, staram się zrozumieć relację ryzyko-nagrodę związaną z tym postępowaniem.


title: Sprawdzanie modelu w aplikacji Rails

text: Uczę się Ruby on Rails i jestem nowicjuszem. Większość mojego tła znajduje się w ASP.net MVC na zapleczu. Kiedy bawię się podstawowym projektem rusztowania, zastanawiam się nad tym przypadkiem: wskakujesz do ustalonego projektu Rails i chcesz poznać model. Na podstawie tego, co do tej pory widziałem (znowu proste rusztowanie), właściwości dla danej klasy nie są od razu ujawniane. Nie widzę akcesorów właściwości w klasach modelu. Rozumiem, że dzieje się tak z powodu dynamicznej natury Rubiego i takie rzeczy nie są konieczne, a nawet pożądane. Konwencja zamiast kodeksu, rozumiem. (Jestem zaznajomiony z pojęciami dynamicznymi, głównie za pośrednictwem JS.) Ale jeśli jestem gdzieś poza widokiem i chcę szybko dowiedzieć się, czy (np.) obiekt Person ma właściwość MiddleName, w jaki sposób mógłbym się tego dowiedzieć? Nie muszę wchodzić w migracje, prawda?


title: Nie mam dyplomu, ale mam 7 lat doświadczenia z ASP.NET, C#, czy instytut może zaoferować mi dyplom?

text: Nie mogłem znaleźć czasu i pieniędzy na naukę ze względu na problemy finansowe, jednak udało mi się znaleźć kilka dobrych miejsc pracy i projektów oraz 2 międzynarodowe, a moje portfolio ma teraz również dobrych klientów, jednak nadal czuję, że brakuje mi czegoś ważnego, więc było zastanawiam się, czy ktoś zna uczelnię/uniwersytet, który oferuje stopnie naukowe, jeśli jesteś wykwalifikowanym profesjonalistą, jestem również gotów studiować przez kilka tygodni, jeśli jest to wymagane. _Aktualizuj_ Dzięki za odpowiedzi chłopaki, w mojej okolicy nie ma zajęć wieczorowych ani weekendowych na studiach licencjackich, jednak są takie dla magisterskich i niewielu moich znajomych z pracy studiuje w weekendy (to właśnie moja motywacja pochodzi z).


title: Nowy kodeks cesarza, czyli: jak komunikować skuteczność kodu?

text: Wprowadziłeś więc pewne zmiany w kodzie, które, miejmy nadzieję, przyspieszą jakąś część aplikacji. Ale jest tylko jeden problem – nie wiesz, jak zagra na żywo. Różne sieci, różne maszyny, inna pamięć, inna konfiguracja, różne pory dnia, różni użytkownicy, różne obciążenia serwerów itd. itd. Więc... (a) Czy pytasz ich, czy ta część aplikacji jest szybsza? (b) Czy prosisz ich o monitorowanie tej części wniosku? Lub... (c) Czy po prostu prosisz ich, aby sprawdzili, czy zauważą jakąkolwiek różnicę w ogólnym zastosowaniu? W końcu nie możesz być w 100% pewien, że nie wpłynęło to na coś innego. Każde z tych podejść wydaje się mieć problemy (wiem to, ponieważ wypróbowałem je wszystkie): (a) Zadajesz wiodące pytanie. Zanim taka poprawka zacznie funkcjonować, pojawia się nowy scenariusz ubierania się cesarza. Deweloper uważa, że kod powinien być szybszy, więc jest jakaś krucjata, aby wszyscy w to uwierzyli, zanim zostanie uruchomiony. Więc… jest na żywo. Niektórzy mówią, że jest szybszy, niektórzy nieco wolniejszy, a inni mniej więcej tak samo. Co wtedy? (b) Znowu: niektórzy ludzie mówią, że jest szybszy, niektórzy nieco wolniej, a inni mniej więcej tak samo. Co wtedy? (c) Nie zadajesz już wiodącego pytania, ale zaczynasz być uderzany całym torem problemów, o których ludzie wiedzieli od miesięcy (może lat), a teraz otworzyłeś puszkę Pandory. Skąd możesz mieć pewność, które z tych (jeśli w ogóle) są nowymi problemami? A może powinienem zadawać zupełnie inne pytania. jakieś pomysły? **EDYTUJ:** Bez wątpienia istnieją procesy prowadzące do tego punktu, które można potencjalnie ulepszyć. Ale sedno pytania jest takie: zmiana jest testowana i wprowadzona w życie. Masz mnóstwo statystyk, które dowodzą, że zmiany powinny poprawić wydajność. Twój szef podał statystyki raz jeszcze, ale teraz chce się upewnić, że użytkownicy są zadowoleni, zanim podpisze wydanie. Jakie pytania powinieneś zadać użytkownikom?


title: Wypełnianie luki między badaniami informatycznymi a inżynierią oprogramowania

text: Czy uważasz, że istnieje przepaść między badaniami w dziedzinie informatyki a problemami inżynierii oprogramowania? Na przykład, czy inżynierowie oprogramowania kiedykolwiek muszą się martwić „faktoryzacją i izomorfizmem grafów” lub niektórymi złożonymi problemami informatycznymi, jeśli muszą… powiedzmy zbudować witrynę z koszykiem? Prawdopodobnie nie. A jeśli istnieje rozdźwięk między informatyką a inżynierami budującymi aplikacje? Czy tak powinna istnieć inżynieria i nauka? Czy inżynierowie zagłębią się w wiele lat prac badawczych, aby rozwiązać konkretny problem, który mają? Edycja-1: Po zastanowieniu się, nauka ogólna prawdopodobnie ma ten sam problem. Jestem pewien, że w takich firmach jak McDonald's i Taco Bell pracują najlepsi chemicy, których zadaniem jest zrobienie lepszego, łatwiejszego do wyprodukowania burgera.


title: Jako programista iOS, na jakie pytania techniczne należy się przygotować?

text: Właśnie skończyłem wczoraj wywiad techniczny, a ankieter zapytał o teorię grafów, strukturę danych i przechodzenie. Nie ma to nic wspólnego z rzeczami iOS. Więc przyszedłem nieprzygotowany. To było właściwie dla społecznościowej firmy zajmującej się grami mobilnymi, czy to jest powód, dla którego pytają o takie rzeczy zamiast rzeczy na iOS? Teraz wydaje mi się, że jestem po prostu przytłoczony materiałami do przejrzenia i przestudiowania do przyszłych wywiadów, muszę przejrzeć całą strukturę danych/algorytm przechodzenia/przeszukiwania i jednocześnie podstawy iOS/objective-C. Czy ktoś może mi pomóc, jak się przygotować? Czy moje przeszłe doświadczenia to tylko szczególny przypadek, ponieważ była to firma zajmująca się grami?


title: Jaki jest akceptowalny współczynnik awaryjności oprogramowania?

text: Powiedzmy, że tworzę oprogramowanie z algorytmem genetycznym. Aby mieć pewność, że oprogramowanie działa poprawnie we wszystkich sytuacjach, musiałbym przetestować wszystkie sytuacje, których może być zaporowo (lub nieskończenie) wiele. Dlatego rozwijam oprogramowanie z ewoluującymi danymi wejściowymi testowymi (niektóre stałe, niektóre odziedziczone, a niektóre losowe). Teraz, z każdym pokoleniem, prawdopodobieństwo wymiernie wzrasta, że najbardziej dopasowane funkcje będą rozwiązaniami ogólnymi, a nie tylko rozwiązaniami dla znanych danych. Jako programiści mamy błędy, a nasze oprogramowanie może zawodzić, w rzeczywistości dość często. Ogólnie rzecz biorąc, nie mamy pojęcia o prawdopodobieństwie niepowodzenia w dowolnym momencie, chociaż możemy rozpoznać konkretne przypadki, w których oprogramowanie ulegnie awarii. Wszystko, co możemy zrobić, aby zmniejszyć wskaźnik awaryjności, to dokładnie przetestować i ćwiczyć tworzenie dobrego oprogramowania. Ale logicznie rzecz biorąc, cały czas rozpowszechniamy wadliwe oprogramowanie. Czy jako programista czułbyś się niekomfortowo, wiedząc _jak często_ może zawodzić się oprogramowanie, ale nie wiedząc nic o konkretnych przypadkach, w których może się to zdarzyć? Jaka awaryjność jest akceptowalna? 0,01%? 0,0001%? Czy pod względem współczynników niepowodzeń utrzymywałbyś algorytm genetyczny na wyższym poziomie niż człowiek?


title: Najlepszy sposób na zbudowanie hierarchicznego menu CLI?

text: Chcę zbudować interfejs wiersza poleceń z menu i podmenu i docelowo liśćmi drzewa powinny być operacje typu... zarządzanie bankiem -> zarządzanie kontem -> dodaj konto (wstaw informacje o koncie) I szukam dobrego sposób, który działa zgodnie z zasadami OO... Dzięki za każdą radę!


title: Czy istnieje lepsza strategia niż poleganie na kompilatorze do wyłapywania błędów?

text: Od jakiegoś czasu programuję w C i C++, chociaż powiedziałbym, że daleko mi do bycia ekspertem. Od pewnego czasu używam różnych strategii do tworzenia kodu, takich jak testy jednostkowe, projektowanie sterowane testami, przeglądy kodu i tak dalej. Kiedy pisałem swoje pierwsze programy w BASIC-u, wpisywałem długie bloki, zanim stwierdziłem, że się nie uruchamiają, a debugowanie było koszmarem. Więc nauczyłem się trochę napisać, a potem to przetestować. W dzisiejszych czasach często łapię się na tym, że wielokrotnie piszę mały fragment kodu, a następnie używam kompilatora, aby znaleźć wszystkie błędy. To jest w porządku, jeśli wykryje literówkę, ale kiedy zaczniesz dostosowywać typy parametrów itp. Tylko po to, aby się skompilować, możesz schrzanić projekt. Wydaje się również, że kompilator wkrada się w proces projektowania, podczas gdy powinien być używany tylko do sprawdzania składni. Istnieje tutaj niebezpieczeństwo nadmiernego polegania na kompilatorze, aby ulepszyć moje programy. Czy istnieją lepsze strategie niż to? Niewyraźnie pamiętam jakiś czas temu artykuł o firmie rozwijającej kompilator typu C, w którym dodatkowy plik nagłówkowy określał również prototypy. Pomysł polegał na tym, że niespójności w definicji API byłyby łatwiejsze do wychwycenia, gdybyś musiał zdefiniować ją dwukrotnie na różne sposoby.


title: Jako małpa kodu, jak rozmawiać o programowaniu z facetem, który prawie ma doktorat z informatyki?

text: Kolega mojej żony przyjeżdża dziś wieczorem na kolację i jest o wiele mądrzejszy ode mnie. Co nas łączy, cóż... Licencjat z informatyki, a to powinno wystarczyć na początek rozmowy. Ale prawie ukończył studia doktoranckie i wyprzedza mnie o lata świetlne w swojej konkretnej dziedzinie, którą uważam za fascynującą, ale nie mam żadnego uzasadnionego powodu, aby się tym przejmować (z wyjątkiem może lepszej drogi przez duży ruch – jest specjalistą od kombinatoryki tak myślę) i wyszłam za mąż, miałam dzieci i jestem profesjonalnym programistą oprogramowania do dokumentacji medycznej. Mamy ze sobą wiele wspólnego, ale jest moment, w którym żadne z nas się nie przejmuje ani nie rozumie – chociaż naprawdę chcę się od niego uczyć i nie jestem pewien, czy chciałby nawet porozmawiać o swojej pracy. Więc dla wszystkich lekarzy lub kod małp, co jest dobrym początkiem rozmowy!


title: Czy typy nullable są lepsze od liczb magicznych?

text: Ostatnio miałam małą debatę ze współpracownikiem. W szczególności używamy C#, ale może to dotyczyć dowolnego języka z typami dopuszczającymi wartość null. Powiedzmy na przykład, że masz wartość, która reprezentuje maksimum. Jednak ta maksymalna wartość jest opcjonalna. Twierdzę, że liczba dopuszczalna do wartości null byłaby lepsza. Mój współpracownik popiera użycie zera, powołując się na precedens. To prawda, że takie rzeczy jak gniazda sieciowe często używały zera do reprezentowania nieograniczonego limitu czasu. Gdybym miał dziś pisać kod dotyczący gniazd, osobiście użyłbym wartości null, ponieważ uważam, że lepiej odzwierciedlałoby to, że NIE ma limitu czasu. Która reprezentacja jest lepsza? Oba wymagają sprawdzenia warunku dla wartości oznaczającej „brak”, ale uważam, że typ dopuszczający wartość null przekazuje intencję nieco lepiej.


title: Po co wymyślono MYDŁO?

text: To pytanie jest inspirowane tym. Jaki był początkowy cel wynalezienia SOAP? Dlaczego został wynaleziony, kiedy mieliśmy stary rodzaj HTTP i REST?


title: Wady zarządzania pamięcią w oparciu o zakres

text: Bardzo lubię zarządzanie pamięcią oparte na zakresie (SBMM) lub _RAII_ , ponieważ jest to częściej (mylnie?) określane przez społeczność C++. O ile mi wiadomo, z wyjątkiem C++ (i C), nie ma obecnie używanego innego głównego języka, który czyni SBMM/RAII ich głównym mechanizmem zarządzania pamięcią, a zamiast tego wolą używać garbage collection (GC). Uważam to za dość mylące, ponieważ 1. SBMM sprawia, że programy są bardziej deterministyczne (możesz dokładnie określić, kiedy obiekt jest niszczony); 2. w językach używających GC często trzeba ręcznie zarządzać zasobami (patrz na przykład zamykanie plików w Javie), co częściowo niweczy cel GC i jest również podatne na błędy; 3. Pamięć sterty może również (bardzo elegancko, imo) być powiązana z zakresem (zobacz `std::shared_ptr` w C++). Dlaczego SBMM nie jest szerzej stosowany? Jakie są jego wady?


title: Czy przegląd kodu może pomóc w nauce przepływu kodu i/lub technologii dużej bazy kodu?

text: Jestem nowy w VC++, więc nie jestem za bardzo zaznajomiony z COM, ActiveX, IDL itp. Kiedy wspomniałem o tym mojemu kierownikowi technicznemu, przydzielił mi zadanie wykonania przeglądu kodu plików, które uważał za ważne pod względem kodu, z którym wkrótce będę pracować. Rzeczywista baza kodu to ok. 10000 plików. Jestem trochę sceptyczny, czy przegląd kodu może pomóc w zrozumieniu VC++ (już intensywnie pracowałem z C++ na Linuksie od 2 lat i mam duże doświadczenie w Actionscript, Processing i wielu innych językach). Ponieważ kod musi jeszcze zostać zbudowany i uruchomiony w moim systemie (wolę umieszczać punkty przerwania i znajdować przepływ kodu), mój kierownik techniczny zlecił mi pracę z przeglądem kodu. Czy jest lepszy sposób?


title: Czy istnieją języki programowania, których ich programy nie działają na maszynie wirtualnej lub natywnie, ale raczej na interpreterze?

text: W tym pytaniu przedstawiłem pomysł na prosty język programowania. Sposób, w jaki będą uruchamiane programy napisane w tym języku, znajduje się w interpreterze napisanym w Javie, który bezpośrednio zinterpretuje kod źródłowy i wykona go. Powiedziałbym, że nie ma wątpliwości, że język ten zostałby uznany za „język programowania”. Jest w stanie tworzyć programy, które mogą działać, i istnieje platforma, na której można je uruchamiać (interpreter). Jednak większość odpowiedzi na moje pytanie mówiło, że ten interpreter nie będzie uważany za maszynę wirtualną. Jestem przyzwyczajony do myślenia, że wszystkie języki programowania tworzą programy, które są najczęściej albo kompilowane do kodu maszynowego i wykonywane natywnie, albo kompilowane do pewnego rodzaju kodu bajtowego lub IL i interpretowane (wykonywane) na maszynie wirtualnej. (Lub jak w rzadkim przypadku języka Dart, interpretowanego i wykonywanego przez maszynę wirtualną, która bezpośrednio interpretuje kod źródłowy, bez IL lub kodu bajtowego). Ale w moim przypadku - **jeśli to prawda, że mój interpreter nie jest uważany za VM** \- programy napisane w moim języku nie działają na VM i nie działają natywnie, ale raczej na interpreterze. Moje pytanie: Czy istnieją języki programowania, których programy są najczęściej wykonywane w podobny sposób? Nie na maszynie wirtualnej i nie natywnie, ale **raczej działa na interpreterze? (co nie jest uważane za VM** \- _chociaż muszę dodać, że nadal nie rozumiem, dlaczego interpreter, który jest używany jako platforma dla innych programów do uruchamiania, nie jest uważany za VM_ ).


title: Czy można zatrudnić programistę oprogramowania open source do widelca (zamkniętego źródła)?

text: Chcę rozwidlić istniejący projekt open source, aby wdrożyć pewną ważną funkcję w oparciu o projekt badawczy. Nie jestem jeszcze pewien, czy zmiany staną się otwartym czy zamkniętym źródłem (oryginalny projekt jest na licencji BSD). Chodzi o to, że mogę dostarczyć kod nowej funkcji, ale zagłębienie się w projekt i zaprojektowanie interfejsu między istniejącą aplikacją a moją nową funkcją zajęłoby mi trochę czasu. Więc fajnie byłoby mieć programistę, który zna już projekt. Pytanie brzmi teraz, czy powinienem po prostu zapytać wśród obecnych programistów (lista dyskusyjna deweloperów), czy któryś z nich byłby skłonny zaimplementować fork (odpłatnie). Czy jest to ogólnie przyjęta praktyka w społeczności open source? Czy znasz historie przypadków/przykłady? (Gdzie wiadomo było, że się wydarzyło? Gdzie wiadomo było, że odmówiono i dlaczego?)


title: Jaki temat rozmawiasz ze swoim menedżerem podczas spotkania jeden na jednego?

text: Co tydzień mam zaplanowane 30-minutowe spotkanie z moim menedżerem, aby porozmawiać o praktycznie wszystkim. Do tej pory nie traktowałem tych pojedynków bardzo poważnie. Jako postanowienie noworoczne chciałbym poważniej potraktować moje indywidualne spotkania z moim menedżerem. Myślę, że jednym ze sposobów, w jaki mógłbym to zrobić, jest zaplanowanie z wyprzedzeniem (wymyślenie listy pytań i/lub programu) mojego indywidualnego. Z wyjątkiem raportu o stanie, jaki temat omawiasz ze swoim przełożonym podczas spotkania indywidualnego? Czy kiedykolwiek widziałeś plan spotkania jeden na jednego?


title: Informacje zwrotne na temat tablicy Kanban dla architektów rozwiązań

text: Zanim zacznę, muszę wydać prewencyjne przeprosiny: > _Jest bardzo prawdopodobne, że część terminologii / słownictwa, której używam w tym poście, jest po prostu błędna, istnieje również duża szansa, że całkowicie > źle zinterpretowałem niektóre klucze aspekty. Jestem w tym nowy, więc nie bądź zbyt > krytyczny, mile widziany jest konstruktywny feedback ;)_ # Tło Obecnie przenosimy dział rozwoju składający się z 200 osób z wielometodologii do "Zwinnego". Dlaczego, dlaczego, plusy i minusy tego są daleko poza zakresem tego pytania. Ten dział rozwoju składa się z zespołu usług architektonicznych, który składa się z 10 osób, oficjalnie znanych jako „architekci rozwiązań”. W rzeczywistości obejmują one więcej niż tylko rozwiązanie, są to ludzie techniczni, którzy zajmują się każdym technicznym aspektem architektonicznym projektu (tj. sprzętem, oprogramowaniem, bezpieczeństwem, zarządzaniem itp.). Zapewniają również funkcje ad hoc zespołowi programistów (przeglądy kodu, wytyczne dotyczące standardów itp.) i szerszemu biznesowi (wkład techniczny do przetargów, podgląd techniczny wymagań klienta przed zawarciem umowy) W ramach tego przejścia otrzymałem zadanie stworzenia tablicy Kanban w celu uzyskania wglądu w działania związane z pracą, za które odpowiada zespół Serwisu Architektonicznego. Istnieje mnóstwo przykładowych tablic dla zespołów programistycznych/kodujących, ale żadnej nie mogę znaleźć dla architektury. Zaczerpnąłem więc z różnych źródeł i stworzyłem „coś”, naprawdę byłbym wdzięczny za autentyczne opinie na ten temat. Warto również zauważyć, że zostanie to przedstawione zespołowi jako punkt wyjścia/praca w toku. To jest ich tablica i chcę, żeby ją posiadali, wszystko co robię to tworzenie fundamentów dla chłopaków, na których mogą budować (i zmieniać w razie potrzeby) Do tej pory mam coś takiego # Główna tablica Główna tablica jest tam, gdzie trzymamy wszystkie aktywne / backlogowe projekty - cała aktywna praca będzie na tej tablicy. Będzie to krótki przegląd w codziennym architektonicznym scrum, z bardziej dogłębnym przeglądem pod koniec każdego tygodnia. -------------------------------------------------- ----------------------- | Ocena | Wdrożenie | Ad-hoc | | Do zrobienia | Robi | Gotowe | Do zrobienia | Robi | Gotowe | Do zrobienia | Robi | Gotowe | -------------------------------------------------- ----------------------------- Osoba | | | | | | | | | | -------- ----------------- ---------------- --------- -------- Osoba | | | | | | | | | | -------- ----------------- ---------------- --------- -------- Osoba | | | | | | | | | | -------- ----------------- ---------------- --------- -------- Osoba | | | | | | | | | | -------------------------------------------------- ----------------------------- Opisy kolumn / cele to: **Ocena** : Projekty, w których dana osoba wykonuje inicjał analiza techniczna, czyli omówienie opcji technicznych z właścicielem produktu, określenie wielkości projektu. Przykładem projektu ewaluacyjnego może być ocena przez architekta nowej technologii lub współpraca z klientem w celu stworzenia wspólnie uzgodnionego rozwiązania technicznego. **Implementacja** : Projekty, które są aktywnie rozwijane (kodowanie, testowanie itp.), a osoba pełni funkcję SA dla szerszego zespołu projektowego. Jako przykład może to być rozwój aspektów kodowania "obustronnie uzgodnionego rozwiązania technicznego" wspomnianego powyżej, ale również może to być architektoniczne nadzorowanie implementacji nowego sprzętu. **Ad-Hoc** : wszystkie dziwne i cudowne rzeczy, które się pojawiają, a których nie można umieścić w pozostałych dwóch kolumnach. Jako przykład w dziwnym, rekurencyjnym świecie jest dla mnie karta w kolumnie ad-hoc do stworzenia tablicy KanBan :). **Osoba** : Dosyć wyjaśniająca, osoba, która jest „właścicielem” kart w tym rzędzie. Aby było trochę fajniej, w rzeczywistości zawiera awatar wybranej przez tę osobę. **Todo** : To właściwie nasz backlog, karty tutaj są uporządkowane od góry do dołu według priorytetu. Gdy przestrzeń w komórce osoby wykonującej pracę staje się dostępna, bierzemy ją z góry todo. **Praca** : Dość oczywiste **Gotowe** : Elementy, które zostały ukończone od ostatniego przeglądu pełnego zarządu (co tydzień w piątek po południu) ## Limity WIP Zamiast robić to, co robimy teraz (tzn. oddawać pracę do kogoś piszczy), chciałbym, aby płyta główna pracowała z obiektywnymi/dowodowymi limitami WIP. Intencją jest, aby rozmiar każdej z kart planszy: * XS (bardzo mały): 3 punkty * S (mały): 5 punktów * M (średni): 8 punktów * L (duży): 13 punktów * XL (bardzo duży) ): 21 punktów Rozmiar jest bardzo duży z punktu widzenia obciążenia pracą architektów, na przykład projekt, który wymaga 1 roku kodowania dla 10 osób, ale minimalny wkład w architekturę to XS lub S. Jednak projekt, który ma ogromny wkład w architekturę, ale minimalny wkład w kodowanie, mógłby być XL. Z czasem powinniśmy być w stanie wypracować limit WIP dla każdej osoby. Wiemy więc, że Jonny Smith może pracować z prędkością 42 punktów i dlatego przydziela projekty do tego poziomu. Ponieważ nie robiliśmy tego wcześniej, moim zamiarem jest ustalenie początkowego limitu wysoko, chodzi o to, że kiedy ktoś piszczy, możemy (jako zespół) spojrzeć na to obiektywnie i ustalić, czy naprawdę jest to za dużo, czy też dlatego, że nasze procesy itp. są zbyt uciążliwe i należy je usprawnić. * **UWAGA** : Ze wszystkiego tutaj te obliczenia WIP są tym, który "wydaje się" najmniej właściwy* # Tablica lejka Aby śledzić wszystkie losowe rzeczy, które przelatują przez zespół, mamy również tablicę lejka. Jest to stosunkowo prosta tablica, która wygląda tak: --------------------------------------- ---------------------------------- | Ocena | Wdrożenie | Ad-hoc | -------------------------------------------------- ----------------------- | | | | | | | | | | | | | | | | | | | | -------------------------------------------------- ---------------------- Ponieważ zespół został poinformowany o "projektu", ale nie został on jeszcze oficjalnie usankcjonowany (tzn. można go umieścić w kolumnach Todo na planszy głównej), a następnie trafia na planszę lejka. Przedmioty tutaj nie są przypisane do osoby. Chodzi o to, że możemy śledzić te przypadkowe rzeczy, które przychodzą i upewnić się, że nie zostaną zapomniane. Ponadto, gdy osoba kończy projekt ewaluacyjny, przechodzi on z Wykonanej oceny zarządu głównego do tablicy lejka wdrożeniowego (chyba że od razu staje się projektem wdrożeniowym). szybki telefon do właściciela produktu z pytaniem, czy jest to nadal aktualne (byłby to projekt ad hoc na głównej tablicy) # Tablica Sukcesów Jest to po prostu prosta tablica do śledzenia tego, co zrobiliśmy w ciągu ostatnich X miesięcy. Zawiera karty, które przeszły przez lejek i/lub tablice główne ----------------------------------- ------------------------------------- | Sukcesy | -------------------------------------------------- ----------------------- | | | | | | | | | | -------------------------------------------------- ---------------------- Pomysł polega na tym, że od czasu do czasu możemy obejść tę planszę i wzajemnie poklepać się po plecach :) # Karty plansz Karty, które znajdują się na planszach następujące informacje: ----------------------------------------- ------------------------------- | ROZMIAR (XS,S,M,L,XL) | WŁAŚCICIEL CZŁONKA ZESPOŁU | RAG | -------------------------------------------------- ----------------------- | | | TYTUŁ PROJEKTU | | | -------------------------------------------------- ----------------------- | | | | ZALEŻNE | ZALEŻNOŚCI | | | | -------------------------------------------------- ----------------------- | | | RÓŻNE INFORMACJE | | | -------------------------------------------------- ----------------------- | SZERSZY ZESPÓŁ PROJEKTOWY (JEŚLI MA ZASTOSOWANIE) | | Inni architekci, kierownik projektu, główny programista, biznes | | Analityk, Scrum Master | -------------------------------------------------- ---------------------- Jak zauważysz, szczegółowość karty jest na dość wysokim poziomie „Projektu”, nie planuję robić stylu programisty tablica podzielona na zadania (myśli o tym mile widziane). Warto również wspomnieć, że w zależności od tego, gdzie znajduje się karta, nie wszystkie sekcje będą miały zastosowanie. Planuję również kodowanie kart kolorami, ponieważ jako pierwszy krok mam: Żółty : Wszystko, co jest umowne z klientem Różowy : Wszystko, co jest wewnętrzne (tj. nie skierowane do użytkownika końcowego) Zielony : Wszystko, co jest projektem grupowym firmy Karty zostaną magnetyczne, a nie post-it, mam nadzieję znaleźć takie, które są jak mini białe tablice, ponieważ ułatwi to życie, gdy rzeczy się zmienią # Inne rzeczy * Jeśli nie ma ich na karcie na tablicy, to jeśli chodzi o zespół nie istnieje * Same tablice są tablicami z kółkami, możemy je zabrać gdziekolwiek chcemy * W przyszłości możemy rozważyć skorzystanie z wirtualnej tablicy (fizyczne tablice są łatwiejsze do zmiany, gdy zdecydujemy, że kolumna X jest najlepsza na na lewo od Y, a nie na prawo) # Pytania 1. Po przeczytaniu mojego nowicjusza Kanban War and Peace, co myślisz? (proszę nie przejmuj się mną :))


title: Projektowanie interfejsów i async

text: Załóżmy, że stworzyłem interfejs `IFolderRepository` za pomocą takich metod: IEnumerable<Folder> GetAllFolders(); Folder GetFolderWithId(int id); void AddFolder(Folder nowyFolder); void ModifyFolder(Folder folderToModify, Folder folderAfterModification); void RemoveFolder(Folder do usunięcia); i zaimplementowałem `DatabaseFolderRepository` i powiedzmy `CacheFolderRepositoryDecorator`. Teraz „setki wierszy później” chciałbym dodać funkcjonalność folderów SkyDrive, więc jestem gotowy do dodania „SkyDriveFolderRepository”. Niestety, podczas gdy implementacja `DatabaseFolderRepository` wykorzystywała metody synchroniczne do komunikacji z bazą danych, skydrive one używa dużo `async` i `await`. Co zrobić w takim przypadku? W przypadku void metod oznaczenie asynchroniczne nie jest rozwiązaniem (konieczność obsługi wyjątków). Czy powinienem zmienić interfejs, aby zwracał `Task<T>`? Jasne, że zadziała w powyższym przykładzie, ale są to tylko 2 klasy implementacji interfejsu. A może większość moich interfejsów powinna mieć zwracane typy `Task` (w przeciwieństwie do reguły, która nie będzie potrzebna)?


title: Zastąpienie instancji Java?

text: Więc jestem całkiem nowy w programowaniu w prawdziwym świecie (poza projektami akademickimi) i natknąłem się na wiele postów mówiących, że używanie `instanceof` jest złą rzeczą do określenia, jaką klasą jest konkretny obiekt. Moja sytuacja jest taka, że mam trzy klasy, podstawową klasę produktu, jedną, która rozciąga się poza tę i drugą, która rozciąga się poza nią. Wszystkie są przechowywane w tej samej tabeli w bazie danych i mam trochę kodu, który musi użyć metod na każdym z nich, aby pobrać z nich dane. Jaka jest najlepsza praktyka, aby obejść ten sposób? Przeczytałem kilka rzeczy o polimorfizmie, ale nie mogę znaleźć żadnych przykładów, które rozwiązałyby problem, który mam. Wszystkie one zwykle zastępują metodę, która dla mnie nie zadziała, ponieważ muszę wyciągnąć różne rzeczy z różnych obiektów. Czy jest lepszy sposób na zrobienie tego, czy też utknąłem z użyciem `instanceof` lub jakiegoś rodzaju odbicia, aby uzyskać pola specyficzne dla obiektów?


title: Przepływ pracy TDD dla (specyficznych dla wdrożenia) przypadków brzegowych

text: Tworząc funkcje za pomocą TDD, tworzę test dla każdej kombinacji funkcji i przypadku. Tak więc jeden test na pomyślne utworzenie użytkownika, jeden na błędy walidacji i jeden na błędy bazy danych. Generalnie nie testuję każdego z wieloma różnymi typami danych, ponieważ piszę testy w celu dopracowania funkcji, a mniej w celu wyłapania błędów. Nie wydaje mi się, że czasochłonne jest napisanie kilku przypadków (nawet z „dostawcą danych”) dla każdej opracowanej przeze mnie funkcji, aby sprawdzić, czy funkcja działa poprawnie we wszystkich przypadkach. Czasami jednak istnieją pewne błędy specyficzne dla implementacji, na które należy uważać podczas wdrażania tej funkcji. Po napisaniu testu funkcji, który pozwala mi napisać implementację, zauważę, że niektóre przypadki brzegowe wymagają dokładniejszego przetestowania ze względu na implementację. Jak zorganizować te testy z resztą testów specyficznych dla funkcji? Czy testy, które opisuję, to testy regresji? **Edycja:** Chyba nie wiedziałem, co mam na myśli z „różnymi typami danych” i „działa dobrze we wszystkich przypadkach”. Moim głównym problemem jest pisanie testów specyficznych dla implementacji – a konkretnie przepływu pracy i organizacji. _Testujemy_ interfejs. Na początku testujemy tylko tę funkcję. Ale pewna implementacja wymaga więcej testów.


title: Analiza wymagań oprogramowania czy inżynieria wymagań?

text: Rozglądałem się za artykułami dotyczącymi analizy wymagań, ale trochę nie rozumiem tego terminu, ponieważ na podstawie Wikipedii analiza wymagań jest etapem inżynierii wymagań. Ale gdy zaczniesz szukać więcej, wiele stron internetowych używa ich zamiennie, ponieważ oznaczają to samo, czy możesz mi to wyjaśnić?


title: Niestandardowa wyszukiwarka

text: Zrobiłem aplikację internetową i teraz chciałbym dodać do niej opcję wyszukiwania. Ponieważ jest to projekt edukacyjny, nie stać mnie na zakup licencji Google. Dlatego rozważam stworzenie własnej wyszukiwarki. Z tego, co przeczytałem, można to zrobić na dwa sposoby: za pomocą `Apache Lucene` lub `Apache Solr`. Trochę czytałem o obu, ale tak naprawdę nie rozumiem, jaka jest między nimi różnica. Który powinienem wybrać? Szukam czegoś za darmo, co jest łatwe do nauczenia i używania, więc masz inne sugestie, daj mi znać.


title: Testowa aplikacja do wykonywania zapytań LinQ przeciwko AdventureWorks

text: Szukam aplikacji "test bed", która pomoże mi nauczyć się Linqa poprzez pisanie zapytań i natychmiastowe wykonywanie ich w bazie danych AdventureWorks. Dlaczego AdventureWorks? Ponieważ jest to przykładowa baza danych, której Microsoft używa w swojej dokumentacji?


title: Jak narysować diagram klas, w którym klasa zawiera 6 innych klas lub wiele różnych?

text: Znam podstawy, ale nie potrafię tego modelować (jest to ćwiczenie bez rozwiązania): > Zamówienie może zawierać 1 lub więcej kartonów piwa. Każdy karton zawiera 6 piw > tego samego rodzaju, ale niektóre składają się z 3 różnych rodzajów piwa > (wciąż 6 w sumie). LUB 6 piw 3 różnych rodzajów?


title: Mój szef ma zły przypadek „Tutaj nie wynaleziony”

text: Mój dział specjalizuje się w przekształcaniu danych klientów na schemat naszej bazy danych, aby mogli korzystać z naszego oprogramowania. Obecnie mamy aplikacje C#, które pobierają `IDataReader` (99% czasu jest to `SqlDataReader`), wykonują pewne czyszczenie i mapowanie, wstawiają je do obiektu `DataRow`, a następnie używają `SqlBulkCopy` do wstaw go do naszej bazy danych. Czasami (zwłaszcza, gdy źródłowa baza danych zawiera obrazy jako obiekty `varbinary`), ten proces może naprawdę utknąć w wyniku transferu SQL z serwera do aplikacji, aby po prostu zawrócić i wrócić do serwera. Czuję, że jeśli przepiszemy niektóre konwersje jako pakiety SSIS, może to znacznie przyspieszyć. Jednak największym kamiennym murem, na który się natykam, jest sytuacja, w której mój szef, w stylu Nie wymyślony, odpycha się i mówi: „A co, jeśli Microsoft zrezygnuje ze wsparcia dla SSIS? To nie pierwszy raz, kiedy trafiam na pytanie „A co, jeśli usuną tę funkcję…?” odpowiedź od mojego szefa. Nie mam czasu na napisanie konwersji w stary sposób, samouczenie się SSIS, a także napisanie go w nowy sposób, aby zademonstrować/przetestować korzyści (Żaden z nas nie używał SSIS, więc byłby okres, w którym moglibyśmy trzeba się nauczyć, jak z niego korzystać). Co powinienem zrobić w tej sytuacji? Przestać forsować nową technologię? Poczekaj, aż opuści wydział (jestem drugą co do wielkości osobą na wydziale po nim, ale mogą minąć lata, zanim odejdzie/przejdzie na emeryturę)? Znaleźć nowy sposób, by przestać bać się narzędzi innych firm?


title: Zmiana architektury z dysku na pamięć RAM do odczytu i zapisu par klucz/wartość przychodzących przez sieć

text: WebApp zapisuje strumień danych przychodzących przez sieć na dysk jako parę klucz/wartość, a następnie odczytuje i wysyła go ponownie przez sieć po kilku milisekundach w 99% przypadków. W 1% przypadków zapis/odczyt może być oddzielony od kilku godzin do kilku dni (naprawdę nie wiem). Opóźnienie to ścisłe „nie” w aplikacji i musimy obsłużyć 100% klientów, dlatego planuję umieścić dane w pamięci RAM, a później odczytać i wysłać je przez sieć i zapisywać na dysk tylko wtedy, gdy dane nie są odczytywane z pamięci RAM w ciągu określony prefiks interwału. Jakie może być możliwe rozwiązanie tego problemu? PS - Memcached wygląda na dobre rozwiązanie do korzystania z pamięci RAM zamiast dysku, ale czy memcached może odczytywać/zapisywać dysk po time_to_live? Patrzę też na Couchbase, ale nie chcę zapisywać na dysku we wszystkich przypadkach, ponieważ 99% zapis/odczyt dzieje się w ciągu milisekund. Czy to możliwe, że po time_to_die Memcached może zapisać klucz/wartość do Couchbase zamiast usuwać go z pamięci RAM i odczytywać na żądanie? **[Edytuj 1]** Po spędzeniu kilku ostatnich prób zbadania różnych opcji. Poniższe wygląda jak możliwe rozwiązanie 1. Zapisz strumień danych jednocześnie do pamięci RAM (używając Memcached) i dysku używając (GlusterFS). 2. W przypadku, gdy dane są wymagane przez warstwę aplikacji sprawdź je najpierw w pamięci RAM (Memcached) czy zwraca dane ok, jeśli nie sprawdza danych na dysku GlusterFS. 3. Usuń strumień danych z pamięci RAM, jeśli dane są wymagane przez aplikację lub gdy osiągnięty zostanie time_to_live, w zależności od tego, co nastąpi wcześniej. Sugestia mile widziana.


title: Umiejętności projektowania CSS

text: Widziałem ten artykuł: **CSS3 Loading elements** na stronach HTML5 i CSS3 Tutorials. Jak ktoś dokonał tych obliczeń? jaki kąt, ile miejsca, ile obrotu dać? Jeśli robię to ręcznie, zaczynając numer jeden, obawiam się, że proces ten trwa zbyt długo. Czy istnieje jakieś narzędzie lub sztuczka, które to robią, czy też opiera się na jakiejś technice, której w jakiś sposób nie jestem świadomy? [EDYTUJ] Próbuję dostosować szerokość i wysokość tego CSS, aby był mniejszy i jest zepsuty. Wydaje się, że jest obliczony tak, jak jest i nie możesz go dotknąć.


title: Czy są jakieś ankiety dotyczące efektywności Scrum?

text: Minęły lata, odkąd Scrum został szeroko zaadoptowany w świecie oprogramowania. Zastanawiam się, czy jest jakieś badanie efektywności wykonywane przez mniej lub bardziej niezależne osoby/instytuty. Oczywiście scrumowi guru, którzy podróżują po całym świecie, prowadząc wykłady i szkolenia, zawsze znajdują wiele doskonałych prezentacji, jednak wolałbym słuchać kogoś, kto nie sprzedaje Scruma. Przez efektywność mam na myśli całkowitą produktywność (dostarczona wartość/koszt), ale nie pewne cechy wewnętrzne, takie jak komunikacja wewnątrz zespołów i tak dalej. Aktualizacja na podstawie dyskusji w komentarzach: Jednym ze sposobów na przeprowadzenie takiej ankiety/analizy może być porównanie podobnych projektów opracowanych w Scrum i bez Scrum. Myślę, że jeszcze 10 lat temu były projekty podobne do niektórych obecnych. Oczywiście nie ma sensu, jeśli stosowane technologie są zupełnie inne, więc projekty te muszą być realizowane na tej samej/podobnej technologii.


title: Najlepsza praktyka dotycząca jeśli/zwrotu

text: Chcę wiedzieć, co jest uważane za lepszy sposób zwracania, gdy mam instrukcję `if`. Przykład 1: public bool MyFunction() { // Pobierz ciąg dla tego przykładu string myString = GetString(); if (myString == null) { return false; } else { mójCiąg = "Nazwa " + mójCiąg; // Zrób tutaj coś więcej... return true; } } Przykład 2: public bool MyFunction() { // Pobierz ciąg dla tego przykładu string myString = GetString(); if (myString == null) { return false; } mójCiąg = "Nazwa " + mójCiąg; // Zrób tutaj coś więcej... return true; } Jak widać w obu przykładach funkcja zwróci `true/false`, ale czy dobrym pomysłem jest umieszczenie instrukcji `else` jak w pierwszym przykładzie, czy też lepiej jej nie umieszczać?


title: Konwencja nazewnictwa dla jednostki asocjacyjnej

text: Projektując relację wiele-do-wielu w bazie danych, musimy umieścić kolejną tabelę na środku, aby stała się 3 tabelami z relacją 1 do wielu. Wikipedia powiedziała mi, że nazywa się to bytem asocjacyjnym. Zawsze mam problem z nazwaniem takich tabel. Czy jest dla nich jakaś konwencja? lub jak nazywasz te tabele?


title: Dokument architektury oprogramowania powinien przedstawiać zastosowaną technologię?

text: Czy pisząc dokument architektury oprogramowania powinniśmy przedstawić zastosowaną technologię i jak łączy się ona z cechami systemu, które chcemy osiągnąć? Na przykład wybraliśmy .NET, ponieważ arg1, arg2 .. Moje odczucie jest NIE, architektura powinna być stabilna w zmianach; ale konkretna realizacja niektórych modułów może się zmieniać w zależności od zastosowanej technologii.


title: Pierwsze i wielowątkowość

text: Używam do obliczania liczb pierwszych za pomocą kodu liniowego, co zajęło dużo czasu. Ponieważ mam 8-rdzeniowy procesor, pomyślałem o wielowątkowości. Najpierw umieszczam ogromną liczbę int w wektorze, a następnie dzielę wektor między wątki, które usuwają każdą liczbę, która nie jest liczbą pierwszą. Pierwszy wątek przetworzył pierwszą część/_nwątku_, drugi przetworzył drugi/_nwątek_ i tak dalej. Co prowadzi mnie do problemu z zasobami z powodu równoczesnego dostępu. Następnie spróbowałem podzielić wektor na wektory _nthread_, aby dać jeden wektor każdemu wątkowi, usuwając problem współbieżnego dostępu. Ale nie jestem przekonany, że jest to najlepszy sposób, ponieważ przetwarzanie liczb pierwszych od 1 do 10 000 jest szybsze niż przetwarzanie liczb pierwszych od 10 001 do 20 000. * Czy istnieje lepszy sposób na czerpanie zysków z wielowątkowości? * Jeśli nie, jaki jest najlepszy sposób na podzielenie wektorów, aby wątek zajął tyle samo czasu?


title: Próba zdobycia pierwszej pracy w oprogramowaniu ... Mając ogromne trudności (stopień licencjata z najwyższej szkoły państwowej)

text: Mam wieloletnie doświadczenie w kodowaniu Java, ale nie mam własnych aplikacji ani próbek kodu. 1) Czy aplikacja na Androida/iOS pomoże mi w pracy w Enterprise Java, czy też ponieważ pola są tak różne, będzie to nieistotne? 2)Jeśli (1) jest nieistotne, co jeszcze mogę zrobić, aby uniknąć zostania programistą/projektantem stron internetowych (HTML/CSS). Dziękuję Ci


title: Testy jednostkowe działają, ale nadal są błędy?

text: **Krótka historia** Jestem nowy w świecie zautomatyzowanych testów jednostkowych i mockowania obiektów; wcześniej robiliśmy testy jednostkowe (w tym testowanie integracyjne i błędnie nazywaliśmy to testami jednostkowymi) ręcznie, ale teraz ~~planowaliśmy zmienić to wszystko na~~ Naciskam naszą organizację na zautomatyzowane testy jednostkowe. **Problem polega na tym, że:** Mam komponent, dla którego napisałem Testy jednostkowe (uwaga: nie używam tutaj żadnego TDD, najpierw pisany jest kod, a następnie Testy jednostkowe) obejmujące każdą gałąź (jeśli/inne lub pętle) kodu. Jeśli uruchomię pakiet testów jednostkowych, powie, że każda metoda działa zgodnie z oczekiwaniami. To dobrze; ale kiedy próbuję przemierzyć cały przepływ, widzę, że jest wiele błędów (brakująca metoda), które powinny zostać dodane. Czy istnieje sposób, aby to sprawdzić automatycznie? **Aktualizacja** Zgodnie z poniższymi odpowiedziami KeithS i Schleis, wydaje mi się, że potrzebuję testów funkcjonalnych (lub testów integracyjnych). Czy są jakieś przydatne linki do automatycznych testów funkcjonalnych? Próbowałem go w Google, ale wszystkie pokazują ogólne wyniki mówiące o testach ręcznych.


title: Jak zostać ekspertem w C++

text: Mam pewne doświadczenie w programowaniu Java i tworzeniu aplikacji dla przedsiębiorstw. Zrobiłem OOP, struktury danych w C++ na studiach licencjackich. Ale przez lata nie mogłem dotknąć C++. Teraz ponownie zainteresowałem się C++ i chciałbym podszlifować swoją wiedzę o C++ i zostać ekspertem w C++ . Jak ponownie rozpocząć moją podróż w C++? W tej podróży chciałbym nauczyć się zaawansowanych pojęć w C++, takich jak programowanie sieciowe, przetwarzanie rozproszone itp.


title: Który proces potomny odziedziczy wątki procesu nadrzędnego?

text: Co się stanie, gdy jeden proces ma wątki podrzędne i proces podrzędny, czy proces podrzędny odziedziczy wszystkie wątki podrzędne procesu nadrzędnego? Załóżmy, że system operacyjny to Linux. Niech będzie to model Java Threading.


title: Czy wielowątkowość powinna być używana do zadań, które nie obejmują operacji IO?

text: Czytałem książkę o systemie operacyjnym i pomyliłem się z różnymi terminologiami. Mam nadzieję, że wyjaśnię tutaj moje wątpliwości. Te pytania mogą być bardzo podstawowe dla niektórych ekspertów, ale uważam, że ta platforma najlepiej nadaje się do takich wyjaśnień. Procesy są uruchamiane przez procesor, a całą tą operacją zarządza system operacyjny. W przypadku procesora jednordzeniowego w dowolnym momencie będzie działał tylko jeden proces. Procesor zapisuje stan procesu w Bloku Kontroli Procesu i uruchamia inny oczekujący proces, a przełączanie to jest tak szybkie, że wydaje się, że wszystkie procesy działają jednocześnie. Wyczuwano potrzebę różnych wątków w procesie, aby uzyskać bardziej precyzyjną kontrolę nad procesem, co oznacza, że jeśli proces czeka z powodu jakiejś operacji związanej z wejściem/wyjściem, to nawet jeśli ten proces jest wybrany przez procesor, nic nie zrobi. Tak więc, jeśli wiele wątków działa w ramach jednego procesu, to jeśli jeden wątek zajmuje się aktywnością we/wy , inne wątki mogą wykonać pewne rzeczywiste obliczenia, pod warunkiem, że proces ten zostanie wybrany przez procesor. Oto moje pytania: Czy wielowątkowość jest skuteczna tylko wtedy, gdy zadanie obejmuje aktywność we/wy? Dlaczego wielowątkowość jest preferowana w stosunku do wieloprzetwarzania? (czy to dlatego, że wątki będą współdzielić tę samą przestrzeń pamięci? ) Dlaczego procesory wielordzeniowe są lepsze do wielowątkowości? (Myślę, że będą lepsze, nawet jeśli nie użyjesz wielowątkowości, dlaczego tak ekscytacja w imię wielowątkowości?). W każdym razie wątki w różnych procesach nie będą współdzielić tej samej pamięci, więc dwa wątki działające w różnych procesach na różnych rdzeniach są jak uruchamianie różnych procesów. Chodzi o to, że będą równoległe i to rzeczywiste podobieństwo, a nie pseudorównoległość.


title: Jakie są korzyści z używania komentarzy

text: Właśnie przyjąłem nową pracę. Nasza aplikacja znajduje się w obszarze 50 000 linii kodu. Żaden z nich nie jest skomentowany. Trudno mi zrozumieć, jak działa aplikacja. Chciałbym temu zapobiec dla następnej osoby, która dołączy do projektu, zachęcając zespół do używania komentarzy. Zapomnij o tym, czy popierasz komentarze lub uważasz, że są one duplikacją kodu. Jakie są niektóre korzyści z używania komentarzy, które mogę wykorzystać jako powody, dla których zespół zacznie z nich korzystać. Jakie są argumenty przemawiające za komentarzami (Nie szukam przeciwstawnych argumentów). Czy są jakieś publikacje lub badania, które pokazują, że używanie komentarzy poprawia jakość kodu lub coś w tym stylu?


title: Dlaczego słowo kluczowe „końcowe” jest tak rzadko używane w branży?

text: Odkąd kilka lat temu odkryłem moc słowa kluczowego `final` w Javie, pomogło mi to uczynić mój kod bardziej czytelnym, ponieważ ludzie mogą łatwo zobaczyć, które zmienne są tylko do odczytu. Może również zapewnić niewielki wzrost JIT i chociaż jest to bardzo ograniczone, nie może zaszkodzić, szczególnie w przypadku urządzeń wbudowanych, takich jak platformy Android. Ale przede wszystkim przyczynia się do tego, że projekt jest bardziej odporny na zmiany i pomaga innym twórcom, gdy muszą zmodyfikować bazę kodu. Jednak przeglądając niektóre kody źródłowe JDK, nigdy nie natknąłem się na to słowo kluczowe, zarówno dla klas, metod, jak i zmiennych. To samo dotyczy różnych systemów, które musiałem zrecenzować. Czy jest powód? Czy powszechnym paradygmatem projektowania jest to, aby wszystko zmieniało się od wewnątrz?


title: Dlaczego znak dolara jest używany do skrócenia opisu skrytki?

text: Jakie jest historyczne znaczenie skrótu, powiedzmy, pamięci podręcznej L1 jako L1$?


title: Gdzie mogę znaleźć wysokiej jakości materiały dla programistów, którzy nie mówią po angielsku?

text: Niedawno przejrzałem CV bardzo obiecującego studenta, który nie jest rodzimym użytkownikiem języka angielskiego (myślę, że jego językiem ojczystym jest bengalski). Jego dorobek akademicki też ma pewne luki - przydałoby mu się kilka solidnych kursów typu struktura danych i algorytmy. Gdzie radziłbyś temu uczniowi zajrzeć, aby znaleźć materiały programistyczne/szkoleniowe, które prawdopodobnie będą dobrej jakości i w jego ojczystym języku? Jest daleki od biegłości i wskazał, że bariera językowa jest zbyt wysoka, aby mógł spróbować kursu prowadzonego w języku angielskim. Czy jest w ogóle możliwe, aby jednocześnie uczył się angielskiego i uzupełniał luki w swoim szkoleniu, czy też radziłbyś, aby robił to po prostu seryjnie?


title: Pomysły na sprawienie, by potencjalny klient zaufał bazie danych witryny

text: Tworzę witrynę dla potencjalnego klienta, który będzie potrzebował wielu funkcji dla członków i różnych ról, które będą pełnić, ale także chce mieć zaufanie do „bazy danych”. To właśnie ta ostatnia pozycja sprawia, że chcą kupić system w puszkach od kogoś „ustalonego”, który jest zarówno dość drogi, jak i ogólny / nie tak dostosowany do potrzeb. Czy masz jakieś przemyślenia lub pomysły na to, co mogę zrobić, aby wzbudzić w nich zaufanie, że baza danych będzie solidna? Myślałem o generowaniu danych testowych w celu wypełnienia bazy danych, wykonywaniu kopii zapasowych bazy danych i łatwej możliwości przełączania się między bazą danych i ? Wdrażam witrynę za pomocą Grails i obecnie korzystam z bazy danych MySql. Klient jest bardzo mały ... po prostu martwi się scenariuszem, w którym jego rzeczy naprawdę "startują", szybko stając się duże. Myślę, że szukam po prostu przemyśleń na wysokim poziomie od niektórych z was ekspertów (ale konkrety/referencje też nie bolą! :-) Dzięki, Ray P.S. Wtyczki Grails Security Core i UI wyglądają naprawdę fajnie dla wszystkich użytkowników / ról / zabezpieczeń, zostały podłączone i działają w ciągu kilku godzin wczoraj ... dzięki frameworkowi Grails i twórcom wtyczek!!


title: Dlaczego niektóre elementy kodu (klasy, metody itp.) w publicznych interfejsach API z czasem stają się przestarzałe?

text: Dzisiaj nasz profesor dyskutował z klasą, co oznacza „klasa X czy metoda X jest deprecjonowana”? Z tego, co zrozumiałem, oznacza to na przykład, że nie dostaniemy tej metody lub klasy w API Javy w przyszłości, więc lepiej użyjmy innej metody lub klasy zamiast tej klasy. Potem pojawia się kolejne pytanie, dlaczego są deprecjonowane? Domyślam się, że na to pytanie jest tak, ponieważ programiści Java API mogą znaleźć te klasy lub metody, które używają algorytmu, który nie jest wydajny i zastępują je inną klasą lub metodami, które są bardziej wydajne. Ale profesor nie był zadowolony z mojej odpowiedzi i kazał mi wygooglować. I nic nie mogłem znaleźć. Czy możesz mi powiedzieć, dlaczego zajęcia są przestarzałe?


title: Czy to normalne, że programista jest indywidualistą? czy jest to uważane za problem z postawą?

text: Słownik mówi, że **maveric** to ktoś, kto jest > * kimś, kto wykazuje dużą niezależność w myśleniu i działaniu > * nieortodoksyjny > * buntownik (osoba, która bierze udział w zbrojnym buncie przeciwko > ukonstytuowanej władzy, **zwłaszcza w nadzieja na poprawę warunków** ) > Żadna z tych rzeczy nie jest zła, ale w rzeczywistości jest dobra, jak widzę. Ale ludzie używają terminu buntownik lub maverick z negatywną konotacją programistów w.r.t. Czy to jest uzasadnione? W rzeczywistości osobiście uważam, że programista powinien być indywidualistą wnoszącym nowe pomysły i ulepszenia w stosunku do istniejących. także bycie ortodoksyjnym grzechem w dziedzinie programowania. Moje środowisko jest takie, że jeśli twój przełożony patrzący na słońce mówi, że jest noc, to JEST noc; nie zasługujesz na bycie sceptykiem! Jeśli staniesz się sceptykiem, kwalifikujesz się do bycia Maverick/Rebel i żaden menedżer nie będzie Cię zabawiał w swoim projekcie. Jestem tylko ciekaw, czy jest tak samo we wszystkich organizacjach, aby wiedzieć, jak bardzo możesz być buntownikiem.


title: Dlaczego złożoność czasowa sortowania przez scalanie k-way O(nk^2)?

text: Jestem stosunkowo nowy w analizie algorytmów i biorę odpowiedni kurs na Coursera, gdzie natknąłem się na sortowanie przez scalanie. Złożoność czasowa dwukierunkowego sortowania przez scalanie to `n log2 n`, trójstronnego sortowania przez scalanie to `n log3 n`, a czterokierunkowego sortowania przez scalanie to `n log4 n`. Ale w przypadku k-way złożoność wynosi nk^2. Dzieje się tak, ponieważ zwracamy uwagę na scalającą część algo; „(2n + 3n + 4n...kn)”. Ale w przypadku algorytmów 2, 3 i 4-drożnych zwracamy uwagę na rekurencyjne wywołanie jednej funkcji; „(2T(n/2) + c.n)”. Czy ktoś może wyjaśnić, dlaczego tak jest? Albo popraw moje podejście do tego pytania.


title: Jakie jest zastosowanie Splay Trees w prawdziwym świecie?

text: Zdecydowałem się nauczyć o zrównoważonych drzewach poszukiwań, więc wybrałem 2-3-4 i rozłożyłem drzewa. Jakie są przykłady wykorzystania drzew splay w świecie rzeczywistym? W tym Cornell: http://www.cs.cornell.edu/courses/cs3110/2009fa/recitations/rec-splay.html Przeczytałem, że drzewa splay to „Dobrym przykładem jest router sieciowy”. Ale z pozostałych wyjaśnień wydaje się, że routery sieciowe używają tablic mieszających, a nie drzew rozkładających, ponieważ czas wyszukiwania jest stały zamiast O (log n).


title: Dlaczego umieszczamy prywatne funkcje członkowskie w nagłówkach?

text: Odpowiedzią na pytanie, dlaczego umieszczamy prywatne zmienne składowe w nagłówkach C++, jest to, że rozmiar klasy musi być znany w punktach, w których deklarowane są instancje, aby kompilator mógł wygenerować kod, który odpowiednio porusza się po stosie. Dlaczego musimy umieszczać członków prywatnych w nagłówkach? Ale czy jest jakiś powód, aby deklarować funkcje prywatne w definicji klasy? Alternatywą byłby zasadniczo idiom pimpl, ale bez zbędnej pośredniości. Czy ta funkcja językowa jest czymś więcej niż historycznym błędem?


title: Jak „obsługi komercyjnie” powinni być programiści?

text: Obserwowałem odpowiedzi na wiele pytań na tej stronie i doszedłem do wniosku, że komercyjny pragmatyzm nie bierze udziału w wielu dyskusjach na temat rozwoju oprogramowania. W rezultacie poważnie zastanawiam się nad umiejętnościami komercyjnymi w branży, w szczególności zdolnością do dostarczania projektów na czas i w ramach budżetu. Nie widzę na stronie żadnych wskazań, że komercyjnie udana realizacja projektu jest poważnym problemem, jednak branża ma reputację słabej wydajności w tym zakresie. Rzadko, jeśli w ogóle, koszt czasu wpływa na dyskusje. Nigdy nie widziałem takich pojęć, jak koszt alternatywny, czas wprowadzenia na rynek, przewaga konkurencyjna czy przepływ środków pieniężnych, nie mówiąc już o omawianiu w technicznych odpowiedziach na pytania. Jak możesz odpowiedzieć na praktycznie każde pytanie, nie rozumiejąc tła komercyjnego, na którym jest zadawane? Nawet projekty open source muszą działać wydajnie i wykorzystywać swoje ograniczone zasoby, aby zapewnić jak największą wartość za wysiłek. Zazwyczaj małe start-upy mają problemy z przepływem gotówki, które przewyższają obawy o długowieczność, ale zazwyczaj nadal zaleca się im zbudowanie przyszłości, której prawdopodobnie nie będą miały, jeśli to zrobią. Czy można uczciwie powiedzieć, że te problemy są wyłącznie do rozwiązania przez menedżerów i kierowników projektów, czy też my, jako programiści, jesteśmy również odpowiedzialni za zapewnienie sukcesu na czas, w ramach realizacji budżetu projektów, nawet jeśli budżety te nie pozwalają na osiągnięcie inżynierii doskonałość?


title: Adaptacyjny interfejs z Opengl i uczeniem maszynowym w C#

text: Do mojego projektu semestralnego muszę wybrać dowolny projekt interfejsu adaptacyjnego. Mój język to C# i muszę używać OpenTK (opakowania dla OpenGL). Mam pomysł, że powinienem pokazać dwa punkty i jakieś przeszkody, a mój podmiot (użytkownik) przeciągnie obiekt z jednego miejsca do miejsca końcowego, unikając przeszkód. Może również losowo umieszczać przeszkody. Moje oprogramowanie powinno być w stanie nauczyć się niektórych ścieżek wykonując testy, a następnie po nauce powinno być w stanie przewidzieć najkrótszą ścieżkę. Nie wiem, jak głupio brzmi ten pomysł, ale to tylko pomysł. Potrzebuję pomocy przy wszelkich pomysłach na adaptacyjny interfejs, ewentualnych małych projektach lub jeśli mój pomysł jest w porządku, to proszę, czy możesz mi powiedzieć, co należy wykorzystać do jego realizacji? Mam na myśli to, że wraz z OpenGl for the Graphics, czego mogę użyć do uczenia maszynowego?


title: niewyraźne linie między warstwą kontekstową aplikacji webowej, warstwą usługową i warstwą dostępu do danych na wiosnę

text: Pierwotnie zadałem to pytanie w SO, ale za radą przeniosłem pytanie tutaj ... Przyznam się, że jestem wiosennym nowicjuszem, ale możesz mnie poprawić, jeśli się mylę, ten jeden liner wygląda trochę podejrzanie w najlepszym praktyki w pewien sposób: @RepositoryRestResource(collectionResourceRel="people"...) public interface PersonRepository extends PagingAndSortingRepository<Person, Long> kontekst aplikacji jako repozytorium jpa, automagicznie łączące wszystkie domyślne operacje CRUD w kontekście trwałości (który jest skonfigurowany zewnętrznie). a także konfiguruje domyślną funkcjonalność kontrolera/żądania-mapowania/obsługi w przestrzeni nazw "/people" względem skonfigurowanego mapowania serwletów dyspozytora. Oto mój punkt. Właśnie przekroczyłem 3 warstwy koncepcyjne jednym wierszem kodu! jest to sprzeczne z moim instynktem separacji obaw, ale chciałem usłyszeć twoją opinię. I ze względu na to, że jestem na stronie z pytaniami i odpowiedziami, chciałbym wiedzieć, czy istnieje lepszy sposób na oddzielenie tych różnych warstw - Usługi, Dane, Kontrolery - przy zachowaniu jak najmniejszej konfiguracji


title: Obsługa załączników dla aplikacji internetowej z Jackrabbit

text: Muszę zarządzać załącznikami w mojej aplikacji internetowej Spring i pomyślałem, że użyję repozytorium open source. Moja aplikacja to system zatwierdzania zadań wykorzystujący **J2EE / SPRING 3 Framework** i **Postgress DB**, aby umożliwić użytkownikowi śledzenie zadania na każdym etapie procesu zatwierdzania. Jest to w pełni zarządzany, współpracujący system, który działa z centralnego serwera i jest dostępny przez standardową przeglądarkę internetową. Użytkownik powinien mieć możliwość dodania załącznika do żądania lub kroku zatwierdzenia, więc postanowiłem użyć **Jackrabbit** z **menedżerem trwałości bazy danych Postgres**. Zajrzałem do tego posta: http://onjava.com/pub/a/onjava/2006/10/04/what-is-java-content-repository.html?page=1 To naprawdę ciekawe, ale ja' Mam kilka pytań na temat tego rodzaju rozwiązania :- * Widziałem, że Jackrabbit jest samodzielnym rozwiązaniem osadzonym w bazie danych Derby dla trwałości, czy wystarczy do profesjonalnego korzystania z repozytorium z ponad 50 żądaniami / dni (z załącznikiem) ? * Czy istnieje powód, dla którego powinienem użyć innego menedżera bazy danych w celu utrwalenia zamiast domyślnego?


title: Czy klient może pozwać Cię za „zepsute” oprogramowanie, jeśli jesteś wykonawcą opłacanym godzinowo?

text: Pracuję dla klienta od ponad półtora roku w stawce godzinowej. Do tej pory był całkiem zadowolony z dotychczasowej pracy i wszystkie faktury zapłacił bez zastrzeżeń, ale jego biznes zaczął ostatnio podupadać, powodując u niego wiele stresu, niechęci do wydatków i napiętych relacji między nami. Zrezygnowałem z projektu kilka dni temu (z wielu powodów) i nie był z tego zadowolony. Zasadniczo powiedział, że muszę kontynuować pracę, w przeciwnym razie pozwałby mnie o pewną kwotę pieniędzy, którą mi zapłacił, ponieważ nie uważa, że praca jest „za co zapłacił” (to zupełnie nie tak, ale tutaj nie ma to znaczenia) . Nie mamy podpisanej umowy. Jedyną „umową” jaką posiadamy jest umowa ustna/e-mailowa, stwierdzająca, że będę świadczyć dla niego usługi w tempie X na godzinę. Mam kopie wszystkich opłaconych faktur, które mu wysłałem, i są one podzielone według stawek godzinowych. Jego firma również wysyła mi co roku 1099. Poza tym nie zostawiłem niczego „zepsutego” ani nawet w stanie niedokończonym (za ile jest to warte). Nie sądzę, żeby miał nogę, na której mógłby stanąć, ale nigdy wcześniej nie byłem pozwany, więc bardzo się martwię. Teraz wiem, że powinienem był nalegać na uzyskanie czegoś na piśmie przed rozpoczęciem. Czy ktoś ma jakieś rady? **Czy ma uzasadnioną sprawę?** OŚWIADCZENIE: Zdaję sobie sprawę, że każda udzielona porada prawna jest tutaj praktycznie bezwartościowa i powinienem skonsultować się z prawnikiem :).


title: Dziedziczenie a powstrzymywanie podczas rozszerzania dużego projektu starszego typu

text: Mam starszy projekt Java z dużą ilością kodu. Kod wykorzystuje wzorzec MVC i jest dobrze zorganizowany i dobrze napisany. Posiada również wiele testów jednostkowych i nadal jest aktywnie utrzymywany (naprawianie błędów, dodawanie drobnych funkcji). Dlatego chcę zachować oryginalną strukturę i styl kodu tak bardzo, jak to tylko możliwe. Zamierzam wstrzyknąć nowe zachowanie do istniejącej klasy. Jak kaczka wytrenowana do skakania. Następnie proszę wszystkie moje kaczki, aby skoczyły. Ci, którzy potrafią - skaczą. Ci, którzy nie mogą nic zrobić, co jest ze mną w porządku. Nowa funkcja, którą zamierzam dodać, jest koncepcyjna, więc muszę wprowadzać zmiany w całym kodzie. W celu zminimalizowania zmian zdecydowałem się nie rozszerzać istniejących klas, lecz zastosować otoczkę: class ExistingClass { // ....istniejący kod // mój kod dodanie nowej funkcjonalności private ExistingClassExtension extension = new ExistingClassExtension(); public ExistingClassExtension getExtension() {return extension;} } ... // gdzieś w kodzie ExistingClass instance = new ExistingClass(); ... // kiedy potrzebuję nowej funkcjonalności instance.getExtension().newMethod1(); Cała funkcjonalność, którą dodaję, znajduje się wewnątrz nowej klasy ExistingClassExtension. Właściwie to dodaję tylko te 2 linie do każdej klasy, która wymaga rozszerzenia. Dzięki temu nie muszę tworzyć nowych, rozszerzonych klas w całym kodzie i mogę użyć istniejących testów, aby upewnić się, że nie ma regresji. Jednak moi koledzy twierdzą, że w tej sytuacji nie jest to właściwe podejście OOP i muszę dziedziczyć po `ExistingClass`, aby dodać nową funkcjonalność. Co myślisz? Znam tu wiele pytań dotyczących dziedziczenia/powstrzymywania, ale myślę, że moje pytanie jest inne. EDYCJA: Większość osób odpowiadających na moje pytanie zakłada, że relacja zawierania wygląda tak: class NewClass { OldClass instanceOfOldClass; void staraFunkcjonalność() { instanceOfOldClass.oldFunctionality();} void nowaFunkcjonalność() { // tutaj nowy kod } } Ale czy nie jest to również rodzaj relacji ograniczającej? class StaraKlasa { nieważna StaraFunkcjonalność(); NewClass instanceOfNewClass; void NowaFunkcjonalność {instanceOfNewClass.NewFunctionality();} }


title: Nieprawidłowe kodowanie w DataReceivedEventArgs

text: Uruchamiam proces cmd.exe i przekierowuję stdin, aby przekazać do niego skrypt oraz przekierowuję stdout i stderr, aby odczytać dane wyjściowe cmd. Oto kod mojego DataReceivedEventHandler: (o, a) => { if(!String.IsNullOrEmpty(a.Data)) { bw.Write(a.Data.ToUTF8()); bw.Write((bajt)'\n'); } } W kodzie `bw` jest instancją BinaryWriter, `ToUTF8` jest metodą rozszerzenia ciągu, która konwertuje ciąg do zakodowanej w UTF8 tablicy bajtów. Kiedy używam tego kodu w osobnym procesie, działa dobrze, jednak gdy używam tego kodu jako biblioteki współdzielonej w innym procesie, a.Data nie zawiera poprawnych zlokalizowanych znaków (takich jak na przykład znaki rosyjskie). Jak więc przekonwertować znaki? Jak uzyskać kodowanie OEM cmd? Dlaczego kod działa dobrze w oddzielnym procesie i nie działa jako biblioteka współdzielona w innym procesie?


title: Język programowania a język znaczników a język skryptowy

text: Do tej pory nie znam różnic **KLUCZ** między tymi trzema. Kiedy ktoś mnie o to pyta, odpowiadam tylko, że C# to język programowania, HTML i XML to języki znaczników, a JavaScript i VBScript to języki skryptowe. Ale jakie są kluczowe różnice, które je od siebie odróżniają?


title: Czy tworzenie kopii zapasowej bazy danych MySQL w Git to dobry pomysł?

text: Staram się poprawić sytuację kopii zapasowej dla mojej aplikacji. Mam aplikację Django i bazę danych MySQL. Przeczytałem artykuł sugerujący tworzenie kopii zapasowej bazy danych w Git. Z jednej strony podoba mi się to, ponieważ zsynchronizuje kopię danych i kod. Ale Git jest zaprojektowany dla kodu, a nie dla danych. W związku z tym będzie wykonywał dużo dodatkowej pracy, porównując zrzut MySQL przy każdym zatwierdzeniu, co nie jest naprawdę konieczne. Jeśli skompresuję plik przed zapisaniem, czy git nadal będzie porównywał pliki? (Plik zrzutu ma obecnie 100 MB nieskompresowanego, 5,7 MB po spakowaniu.) Edycja: kod i definicje schematu bazy danych są już w Git, to naprawdę dane, o które teraz martwię się tworzenie kopii zapasowych.


title: Po HTML i CSS

text: Chcę tworzyć dynamiczne, profesjonalne strony internetowe. Skończyłem naukę HTML i CSS, ale jak rozumiem, te dwie technologie pozwalają na tworzenie tylko statycznych stron internetowych. Słyszałem o PHP i JavaScript jako o czymś, co umożliwia tworzenie dynamicznych stron internetowych. Czy to prawda? Jaka jest różnica między obydwoma? Czy są inne języki?


title: Umieszczanie obrazów w Git dla CRM

text: Zbudowałem ten CMS, który ma możliwość dodawania wpisów do bazy danych. Każdy tworzony wpis zawiera od 5 do 10 nowych zdjęć przedstawiających produkt na sprzedaż. Każdy obraz ma rozmiar około 150 KB. Wiem już, że obrazy zawsze powinny być przechowywane w Git, ale moim problemem jest to, że użytkownicy zespołu sprzedaży, którzy dodają nowe wpisy w CMS, pracują oczywiście na serwerze produkcyjnym z wykorzystaniem gałęzi master. Naszym normalnym rozwojem jest kod rozwojowy w twoim "środowisku deweloperskim" w gałęzi, następnie przenieś te zmiany do "środowiska tymczasowego" dla kontroli jakości i na koniec, jeśli wszystkie testy zakończą się pomyślnie, przenieś te zmiany do "serwera produkcyjnego/na żywo". Jaki będzie najlepszy sposób, aby te nowe obrazy, które są codziennie przesyłane do naszego repozytorium, skoro te obrazy są już na serwerze live?


title: Czy korzystanie z nowej klasy System.Tuple jest zły projekt?

text: Podoba mi się koncepcja System.Tuple, ponieważ pozwala mi zwrócić wiele parametrów w jednym wywołaniu funkcji bez tworzenia nowej klasy, jednak czy to jest sprzeczne z dobrymi praktykami programistycznymi, takimi jak wzorce i praktyki firmy Microsoft, zasady SOLID itp. Próbuję tylko ocenić, jak swobodnie powinienem korzystać z tej funkcji lub czy powinienem jej używać tylko w skrajnych przypadkach, gdy jest to konieczne.


title: Migracja bazy kodu - stary system wersjonowania do nowoczesnego

text: Nasza obecna baza kodu jest zawarta w starym i przestarzałym systemie wersjonowania (Visual Sourcesafe 5.0, połowa lat 90-tych) i zawiera mieszankę pakietów, które nie są już używane, te, które są używane, ale nie są już aktualizowane, oraz nowszy kod. Jest to również mieszanka 4 języków i zawiera biblioteki dla niektórych naszych systemów (takich jak implementacje Dialogic, Sun Tzu {clipper}). Dzieli się to na następujące kategorie: 1. Starszy kod — już nie używany (systemy, które zostały wycofane lub zastąpione, itp.) 2. Starszy kod — w bieżącym użyciu (Brak zamiaru aktualizacji lub drobnych poprawek błędów, w razie potrzeby tylko większe poprawki ) 3. Aktualny kod — w bieżącym użyciu i będzie używany w przyszłych wersjach/rozwojach 4. Biblioteki pomocnicze — zarówno dla starszego, jak i bieżącego kodu (niektóre starsze biblioteki również nie są już dostępne) Chcielibyśmy przeprowadzić migrację do nowszy system wersjonowania, ponieważ dodamy więcej programistów i poszerzymy zasięg o programistów zdalnych. Jak ją zorganizujesz podczas migracji? Czy po prostu wykonujesz zrzut wszystkich danych, a następnie importujesz je do nowego systemu, czy segregujesz według typu przed wprowadzeniem ich do nowego systemu? Czy tworzysz osobny obszar dla bibliotek, czy trzymasz je z odpowiednimi pakietami? Czy dzielisz się według języka, systemu, obu? Ogólny zarys i metodologia są w porządku, nie trzeba ich rozbijać na poszczególne poziomy programu.


title: Co należy umieścić na stronie/formularzu Informacje?

text: Chciałem dodać prosty formularz, który podaje numer kompilacji mojego projektu w formularzu, aby szybko zidentyfikować wersję, którą mam uruchomioną. Potem zdałem sobie sprawę, że nie jestem pewien, co pasuje do strony z informacjami. W moich licealnych projektach robiłbym głupie ekrany powitalne z tymi informacjami, obrazami i innymi niepotrzebnymi informacjami. Jakie standardowe/odpowiednie elementy należy umieścić na stronie „O mnie” w aplikacji?


title: Czy to dobry sposób na porównanie dwóch liczb?

text: Jeśli mamy liczby podwójne, powiedzmy, że chcę sprawdzić, czy jakiś parametr double jest równy zero, który jest przekazywany jako double: public bool PrawieEqual(double x, double y) { double epsilon = Math.Max(Math.Abs(x) , Matematyczne Abs(y)) * 1E-15; return Math.Abs(x - y) <= epsilon; } biorąc pod uwagę double pokazuje 15 dokładnych cyfr. Więc myślisz, że to, co napisałem, jest dobre? czy ma problemy? cóż, po prostu napisałem prostą metodę, taką jak ta: public bool ReallyEqual(double x, double y) { return (x == y); } a potem nie mogłem znaleźć przypadku, w którym zwracane wartości tych dwóch metod są różne. zawsze zwracali ten sam wynik. :(


title: Przedstaw pracę programisty dzieciom w wieku szkolnym za pomocą sieci społecznościowej

text: Często reprezentuję swoją firmę tworzącą oprogramowanie na konferencjach i innych wydarzeniach. Jednak tym razem zostałem przydzielony do wprowadzenia dzieci w wieku szkolnym (12-18) do pracy programisty. Teraz problem polega na tym, że nasi PR-owcy kazali mi używać Facebooka („użyj fajnych rzeczy, które znają dzieci”), aby zrobić dobre wrażenie. Teraz jestem zakłopotany i nie mam pojęcia, jak wypełnić lukę między prezentowaniem roli programisty, inżynierów wymagań i ogólnie programowania na Facebooku. Zamierzam wygłosić 5 minutową przemowę, a potem pozwolić im „zrobić coś”, co dotyczy Facebooka. Czy ktoś wpadł na pomysł, jak to zrobić? Czy można pozwolić im stworzyć prostą aplikację na Facebooka?


title: Jaki jest najlepszy sposób uzyskania dostępu do wielu właściwości podrzędnych?

text: Mam sytuację, w której muszę uzyskać dostęp do kilku „podwłaściwości” obiektu i napisanie takiego kodu jest dla mnie dość przerażające. Zastanawiałem się, jak najlepiej poradzić sobie z tą sytuacją: void Main() { MojaKlasa aKlasa = new MojaKlasa(); aKlasa.BKlasa.CKlasa.DoCoś(); } Oprócz tego, że jest to brzydkie, nie ma sprawdzania wartości null, a gdyby je wykonać, kod wyglądałby na jeszcze bardziej zagracony. W tej chwili tworzę skróty, ale są też trochę zapachem kodu: public class MojaKlasa { public MojaBKlasa BClass { get; ustawić; } public void DoCoś() { if (BClass == null || BClass.CClass == null) wyrzuć nowy wyjątek(); BClass.CClass.DoCoś(); } } Jaki jest najlepszy sposób na dostęp do wielu takich właściwości?


title: Czy powinienem przekazać obiekt do konstruktora, czy utworzyć instancję w klasie?

text: Rozważ te dwa przykłady: ### Przekazywanie obiektu do klasy konstruktora ExampleA { private $config; funkcja publiczna __construct($config) { $this->config = $config; } } $config = nowa konfiguracja; $przykładA = nowy PrzykładA($konfiguracja); ### Tworzenie instancji klasy PrzykładB { private $config; funkcja public __construct() { $this->config = nowa konfiguracja; } } $przykładA = nowy PrzykładA(); Jaki jest właściwy sposób obsługi dodawania obiektu jako właściwości? Kiedy powinienem używać jednego z drugim? Czy testowanie jednostkowe wpływa na to, czego powinienem używać?


title: Czy mogę sprzedawać aplikację, którą napisałem w pracy?

text: Pracuję w banku i opracowałem własną aplikację internetową, która pomaga śledzić przeterminowane kredyty i wszystkie interakcje między bankiem a klientami. Niedawno zewnętrzny konsultant, który odwiedza wiele różnych banków, powiedział mi, że każdy z nich umarłby, gdyby miał system łagodzenia strat, taki jak ten, który zbudowałem. Właśnie przeczytałem odpowiedź Joela na podobne pytanie dotyczące własności praw autorskich. W swoim przykładzie powiedział, że chociaż **_Joe został zatrudniony do napisania kodu, nadal posiada prawa autorskie._** Czy więc mam prawa autorskie do tej aplikacji i czy mogę ją odsprzedać innym bankom? ### Aktualizacja 20.05.2011: Dziękujemy wszystkim za szczere uwagi dotyczące tego problemu. Zawsze rozumiałem to oprogramowanie napisane w pracy przez pracownika jako należące do pracodawcy. Byłem oszołomiony, gdy przeczytałem scenariusz opisany przez Joela i pomyślałem, że zapytam o twoje opinie. Miło wiedzieć, że zawsze wyznawałem te same przekonania co ty... Kodeks należy do pracodawcy.


title: Pomoc w wyborze odpowiedniego typu licencji na oprogramowanie

text: Pracuję nad oprogramowaniem, które chciałbym sprzedać; jednak chciałbym, aby źródło było „otwarte” w tym sensie, że nie widzę powodu, dla którego ludzie nie mieliby mieć możliwości przeglądania go w celach edukacyjnych. Większość mojego osobistego procesu uczenia się polega na patrzeniu na podobne przykłady pracy innych osób. Chciałbym chronić swoją własność intelektualną, ale też dać coś pożytecznego dla społeczności programistów (bez czego wielu z nas nie zaszłoby zbyt daleko). Nie martwię się zbytnio kradzieżą mojego „algorytmu”, ponieważ to, co robię, nie jest aż tak głębokie. Prawdopodobnie poczekałbym, aż oprogramowanie będzie gotowe do wydania, zanim opublikuję źródło w dowolnym miejscu. Czy są jakieś licencje, które są odpowiednie do tego typu rzeczy? Ewentualnie, czy istnieją lepsze zasoby niż ta strona, do których powinienem skierować swoje poszukiwania? Dzięki, brian


title: Zezwalaj użytkownikom Administratora na logowanie się jako inni użytkownicy

text: Czy uważasz, że dobrą praktyką jest zaimplementowanie możliwości zezwolenia administratorowi na logowanie się jako inny użytkownik z pominięciem hasła? Można to zaimplementować za pomocą hasła głównego lub funkcji w administracji użytkownika „Zaloguj się jako ten użytkownik”. Administratorzy proszą o taką funkcję, aby na przykład móc spróbować odtworzyć zgłoszony problem lub sprawdzić, czy granty są w porządku.