title: Jak zaprojektować DAL, gdy mam do czynienia z relacjami?

text: Załóżmy, że opracowuję narzędzie do śledzenia błędów, w którym bilet _należy do_ najwyżej jednego etapu, a kamień milowy może _mieć wiele_ biletów. Gdy kamień milowy zostanie usunięty (z bazy danych), wszystkie bilety powiązane z tym kamieniem milowym muszą mieć nieustawioną relację (tj. ustawioną na „null”). To jest prosta relacja. Klasy są dość proste i mapowane bezpośrednio do bazy danych: public class Ticket { public ObjectId Id { get; ustawić; } ciąg publiczny Tytuł { get; ustawić; } public ObjectId MilestoneId { get; ustawić; } } public class Milestone { public ObjectId Id { get; ustawić; } ciąg publiczny Tytuł { get; ustawić; } } Teraz nadchodzi trudna część: gdzie i jak zresetować pola `MilestoneId`? Jednym z możliwych rozwiązań jest napisanie warstwy dostępu do danych poprzez utworzenie jednej gigantycznej klasy ze wszystkimi metodami dostępu do danych dla wszystkich rodzajów obiektów, w tym przypadku biletów i kamieni milowych. Innym możliwym rozwiązaniem jest napisanie kilku klas (np. `TicketProvider` i `MilestoneProvider`), po jednej dla każdego rodzaju obiektu, które zapewniają metody dostępu do danych, takie jak `Find`, `Save` i `Destroy`. To ostatnie przemawia do mnie bardziej, ponieważ nie lubię potwornych klas, ale jest jedno zastrzeżenie: metoda usuwająca kamienie milowe musi zresetować `MilestoneId` wszystkich powiązanych biletów na `null`. Oznacza to, że `MilestoneProvider`, który jest odpowiedzialny za manipulowanie kamieniami milowymi, nagle zajmuje się biletami! W jaki sposób relacje są powszechnie obsługiwane w warstwach dostępu do danych i jak mogę zapobiec naruszeniu SRP? Czy powinienem umieścić cały DAL w jednej klasie, czy powinienem go oddzielić, a jeśli tak, jak najlepiej to zrobić?


title: Czy zapytania do bazy danych powinny być wyabstrahowane z samej strony?

text: Pisząc generowanie stron w PHP często łapię się na pisaniu zestawu plików zaśmieconych zapytaniami do bazy danych. Na przykład mogę mieć zapytanie, aby pobrać dane o poście bezpośrednio z bazy danych i wyświetlić je na stronie, takie jak: $statement = $db->prepare('SELECT * FROM posts WHERE id=:id'); $statement->bindValue(':id', $id, PDO::PARAM_INT); $instrukcja->wykonaj(); $post = $statement->fetch(PDO::FETCH_ASSOC); $content = $post['content'] // zrób coś z zawartością Te szybkie, jednorazowe zapytania są zwykle małe, ale czasami kończę z dużymi fragmentami kodu interakcji z bazą danych, który zaczyna wyglądać dość niechlujnie. W niektórych przypadkach rozwiązałem ten problem, tworząc prostą bibliotekę funkcji do obsługi moich zapytań db związanych z postem, skracając ten blok kodu do prostego: $content = post_get_content($id); I to świetnie. A przynajmniej dopóki nie będę musiał zrobić czegoś innego. Może muszę wyświetlić pięć najnowszych postów na liście. Cóż, zawsze mógłbym dodać inną funkcję: $recent_posts = post_get_recent(5); foreach ($recent_posts as $post) { ... } Ale kończy się to przy użyciu zapytania `SELECT *`, którego zwykle i tak naprawdę nie potrzebuję, ale często jest zbyt skomplikowane, aby było w miarę abstrakcyjne. Ostatecznie dostaję albo ogromną bibliotekę funkcji interakcji z bazą danych dla każdego przypadku użycia, albo serię niechlujnych zapytań w kodzie każdej strony. I nawet po zbudowaniu tych bibliotek muszę wykonać jedno małe sprzężenie, którego wcześniej nie używałem, i nagle muszę napisać kolejną wysoce wyspecjalizowaną funkcję do wykonania tej pracy. Jasne, mógłbym używać funkcji do ogólnych przypadków użycia i zapytań dla określonych interakcji, ale gdy tylko zacznę pisać surowe zapytania, zaczynam wracać do bezpośredniego dostępu do wszystkiego. Albo się rozleniwię i zacznę robić rzeczy w pętlach PHP, które i tak powinny być zrobione bezpośrednio w zapytaniach MySQL. Chciałbym zapytać tych bardziej doświadczonych w pisaniu aplikacji internetowych: czy zwiększenie łatwości utrzymania jest warte dodatkowych linijek kodu i ewentualnych nieefektywności, które abstrakcje mogą wprowadzić? A może po prostu używanie bezpośrednich ciągów zapytań jest akceptowalną metodą obsługi interakcji z bazą danych?


title: Jaka jest różnica między inżynierem a menedżerem produktu?

text: Wydaje się, że obecnie wszystkie zespoły programistyczne mają zarówno inżynierów oprogramowania, jak i menedżera produktu. Jestem nowicjuszem w branży oprogramowania i zastanawiam się, jaka jest różnica? 1. Czy Product Manager musi mieć wykształcenie programistyczne? 2. Jak podzielić pracę pomiędzy Inżynierów a Product Managera?


title: Czy kontrola jakości powinna znaleźć powtarzalne scenariusze?

text: Czasami mój zespół QA zgłasza błędy, ale ani ja, ani oni nie mamy pojęcia, jak je odtworzyć. Prowadzi to do bardzo długich i frustrujących sesji debugowania, które czasami nie dają nawet wyników. Moje oprogramowanie jest mocno powiązane z zastrzeżonym sprzętem, więc błędy mogą pochodzić z wielu kierunków jednocześnie. Czy powinienem oczekiwać od nich czegoś więcej niż „awarii oprogramowania po naciśnięciu przycisku”, czy też powinienem sobie wyobrazić, co się stało? EDYCJA: Jeden z moich współpracowników wskazał, że prawdopodobnie wszyscy jesteśmy tutaj programistami, więc wyniki mogą być nieco stronnicze


title: Gdzie mogę bezpiecznie dowiedzieć się o bezpieczeństwie komputerowym?

text: Naprawdę trudno mi znaleźć zasoby dotyczące bezpieczeństwa komputerowego. Zadawałem pytania na forach dyskusyjnych o keyloggery i wirusy i dostałem negatywne założenia od ludzi, którzy zakładali, że jest gorzej. Nie sądzę też, że mogę ufać przypadkowym forom dyskusyjnym. Wiem, że jest to obszerny temat, ale czy są jakieś dobre strony internetowe, które mogę śledzić i uczyć się z nich, które są skierowane do początkujących z kilkoma przykładami? Jestem programistą (a przynajmniej chcę nim być) i mam dyplom CS, jeśli to pomaga.


title: Jaki jest powód używania małych liter w pierwszym słowie w zmiennej lokalnej (np. workerCount, firstName)

text: Przyjmuję wiele krytyki ze strony innych programistów z powodu używania przeze mnie pełnej poprawnej wielkości liter dla wszystkich moich zmiennych. Na przykład typowy programista użyje `employeeCount` jako nazwy zmiennej, ale ja używam `EmployeeCount`. Używam pełnej poprawnej wielkości liter dla _wszystko_ , czy to metoda void, metoda powrotu, zmienna, właściwość czy stała. Stosuję się nawet do tej konwencji w JavaScript. Ten ostatni naprawdę szeleści w ludziach. Typowym powodem, dla którego nie powinienem podążać za tą „niestandardową” konwencją opisywania, jest to, że pełna poprawna wielkość liter powinna być zarezerwowana dla właściwości i metod void. Zmienna lokalna i metody zwracające wartość powinny mieć pierwsze słowo pisane małymi literami, np. „int workerCount = getEmployeeCount()”. Jednak nie rozumiem dlaczego. Kiedy kwestionuję to, wydaje mi się, że po prostu otrzymuję arbitralną odpowiedź _to jest standard_. Jakakolwiek jest odpowiedź, zwykle zawsze sprowadza się ona do _Tak po prostu jest i nie kwestionuję tego. Po prostu podążam za tym._. Dowolne odpowiedzi nigdy nie są dla mnie wystarczająco dobre. Od pierwszych dni programowania makr programu Excel 97 w środowisku Office IDE nigdy nie potrzebowałem konwencji wielkości liter, która mówiłaby mi, czy coś jest zmienną lokalną lub właściwością. To dlatego, że zawsze stosowałem bardzo intuicyjną konwencję nazewnictwa. Na przykład, `GetNuggetCount()` wyraźnie sugeruje metodę, która gdzieś idzie i pobiera liczbę wszystkich bryłek. `SetNuggetCount(x)` sugeruje, że przypisujesz nową wartość do liczby modeli użytkowych. „NuggetCount” sam w sobie sugeruje właściwość lub zmienną lokalną, która po prostu przechowuje wartość. Do tego ostatniego można pokusić się o stwierdzenie: „Ach ha! Oto jest pytanie. Własność czy zmienna? CO TO JEST?” Na to odpowiedziałbym: „Czy to naprawdę ma znaczenie?” Oto tl;dr;: Jakie są obiektywne, logiczne, niearbitralne powody, aby używać małych liter w pierwszym słowie w zmiennej lub metodzie zwracanej? **Edit:** For MainMa Zastąp _this_ kodem pierwszą próbką kodu w swojej odpowiedzi i zobacz, jak dobrze Twój argument się trzyma: public void ComputeMetrics() { const int MaxSnapshots = 20; var Snapshots = this.LiveMeasurements.IsEnabled ? this.GrabSnapshots(MaxSnapshots, this.cache) : this.LoadFromMemoryStorage(); if (!Snapshots.Any()) { this.Report(LogMessage.SnapshotsAreEmpty); zwrócić; } var LiczbaPomiarów = LiczbaPomiarów(); this.Chart.Initialize((liczba + 1) * 2); foreach (var s w migawkach) { this.Chart.AppendSnapshot(s); } }


title: Jak powinno zachowywać się „Cofanie pisania”?

text: Implementuję aplikację Java, która zawiera stos Cofnij/Ponów. Zauważyłem, że niektóre aplikacje (takie jak TextEdit w systemie Mac OS X) pozwalają wybrać opcję „Cofnij pisanie” z menu Edycja po wpisaniu tekstu. Chciałbym zaimplementować tego rodzaju rzeczy również w mojej aplikacji, ale naprawdę trudno mi znaleźć wskazówki dotyczące tego, jak powinna się zachowywać. Z kilkoma próbami i błędami, moje najlepsze przypuszczenie, jak zachowuje się funkcja Cofnij pisanie w TextEdit, to: * Kiedy użytkownik wpisze nowy znak (lub wciśnie klawisz usuwania), scal go z poprzednim elementem Cofnij pisanie, jeśli znajduje się on na górze polecenia Cofnij pisanie stosu, chyba że wystąpi jedna z następujących sytuacji * Zawsze twórz nowy element Cofnij pisanie po tym, jak użytkownik kontynuuje pisanie po co najmniej 15 sekundach braku aktywności * Zawsze twórz nowy element Cofnij pisanie po tym, jak użytkownik pisał przez dłuższy czas i jakiś warunek jest spełniony (nie można ustalić, czy był to czas, czy liczba znaków). * Zawsze twórz nowy element Cofnij pisanie, gdy dowolny tekst jest zaznaczony, a następnie usunięty lub nadpisany (zaznaczenie tekstu, nie dokonywanie zmian, a następnie powrót do oryginalnego punktu wstawiania i kontynuowanie pisania nie powoduje tego) W praktyce wydaje się, że strategia firmy Apple praca (przynajmniej działa dla mnie, kiedy piszę), ale jak zauważyłem w ostatnim punkcie, tak naprawdę nie byłem w stanie rozgryźć zasad. Wydaje się również, że inne programy, takie jak Microsoft Word, stosują się do innych reguł. Google nie podało zdefiniowanej listy reguł dla jakiejkolwiek implementacji Cofnij pisanie i nie natknąłem się na żadne najlepsze praktyki dotyczące tego, jak powinno się zachowywać. Jak więc powinien się zachowywać? Czy to tylko kaprysy programisty? EDIT: Żeby wyjaśnić, nie interesują mnie teraz szczegóły implementacji. Szczególnie ciekawi mnie, czy istnieje wiarygodne odniesienie (np. najlepsze praktyki lub dokument interfejsu użytkownika) opisujące to lub opis sposobu implementacji w wielu produktach.


title: Czy bash jest „skończony”?

text: Czy należy oczekiwać, że bash zmieni się w sposób, który złamie nietrywialne ilości istniejących skryptów w pewnym momencie (blisko/<5 lat) przyszłości? Ile zmian zaszło w ciągu ostatnich dziesięciu lat w porównaniu, powiedzmy, do Pythona czy Perla?


title: Czy luki w zabezpieczeniach SQL Injection w aplikacji PHP są dopuszczalne, jeśli mod_security jest włączony?

text: Zostałem poproszony o audyt aplikacji PHP. Bez ramy, bez routera, bez modelu. Czysty PHP. Niewiele wspólnych funkcji. HTML, CSS i JS zmieszane razem. Odkryłem wiele miejsc, w których wstrzyknięcie SQL byłoby łatwo możliwe. Istnieją inne problemy z aplikacją (podatności XSS, nieokiełznany CSS, wszędzie kod kopiuj-wklej), ale ten jest największy. Czasami unikają wprowadzania danych, nie używając przygotowanego zapytania ani nawet mysql_real_escape_string(), ale używając addslashes(). Często jednak ich zapytania wyglądają dokładnie tak (wklejone z ich kodu, ale ze zmienionymi nazwami kolumn i zmiennych): $user = mysql_query("select * from profile gdzie profile_id='".$_REQUEST["profile_id"]."' ”); Deweloperzy, o których mowa, twierdzili, że nie byli w stanie zhakować swojej aplikacji. Próbowałem i odkryłem, że mod_security jest włączony, co skutkuje HTTP 406 dla niektórych oczywistych ataków wstrzykiwania SQL. Wierzę, że istnieją wyrafinowane obejścia dla mod_security, ale nie mam czasu ich ścigać. Twierdzą, że jest to kwestia „koncepcyjna”, a nie „praktyczna”, ponieważ aplikacja nie może być łatwo zhakowana. Ich audytor wewnętrzny zgodził się, że wystąpiły problemy, ale podkreślił koncepcyjny charakter problemów. Używają również tego koncepcyjnego/praktycznego argumentu, aby bronić się przed wbudowanym CSS i JS, brakiem organizacji kodu, lukami XSS i ogromną ilością powtórzeń. Mój klient (być może słusznie) chce, aby to zniknęło, aby mógł wprowadzić swój produkt. Strona działa. Możesz się zalogować, robić to, co musisz, a wszystko działa wyraźnie, jeśli działa wolno. SQL Injection byłoby rzeczywiście trudne do wykonania, biorąc pod uwagę mod_security. Co więcej, ich rozmowa o „koncepcji kontra praktycznej” jest retorycznie genialna, biorąc pod uwagę, że mój klient nie rozumie bezpieczeństwa aplikacji internetowych. Martwię się, że udało im się sprawić, że brzmię jak wściekły purytanin. Pod wieloma względami jest to problem polityki, a nie technologii, ale jestem na zagubieniu. Jako programista chcę im powiedzieć, aby rzucili cały projekt i zaczęli od nowa z nowym zespołem, ale mam do czynienia z silną obroną ze strony zespołu, który go zbudował, i klienta, który naprawdę musi wysłać swój produkt. Czy moja pozycja tutaj jest zbyt surowa? Nawet jeśli naprawią problemy związane z wstrzykiwaniem SQL i XSS, czy mogę kiedykolwiek poprzeć wydanie niemożliwego do utrzymania plątaniny kodu spaghetti? **EDYTUJ:** Jeśli chodzi o moją rolę w tym projekcie, nie jestem ekspertem ds. bezpieczeństwa, jestem generalistą web developerem. klient początkowo poprosił mnie o przetestowanie ładowania aplikacji i przedstawienie zaleceń dotyczących skalowalności. Nie zaszedłem jeszcze tak daleko, ponieważ kiedy pierwszy raz przeczytałem dane wyjściowe strony głównej, zobaczyłem wbudowany CSS, układy oparte na tabelach i wszelkiego rodzaju szalone JS, więc poprosiłem o kopię kodu, w którym znalazłem bezbożny bałagan opisany powyżej. Nie abstrahują nawet nagłówka i stopki HTML. Każdy plik PHP ma nieco inną wklejoną wersję. A jeśli chodzi o samą aplikację, przechowuje ona dane osobowe i przetwarza (ale nie przechowuje) dane karty kredytowej.


title: Jak wdrożyć system uwierzytelniania bez logowania?

text: Chcę zbudować bardzo luźny system uwierzytelniania, który może śledzić użytkownika i łączyć przesłane dane/komentarze z konkretnym użytkownikiem. Zgłoszenia są zasadniczo anonimowe, ale użytkownik może chcieć edytować swoje zgłoszenie/komentarz w późniejszym terminie. Chcę, aby doświadczenie było jak najbardziej płynne, więc nie chcę prosić użytkowników o założenie konta, a następnie zalogowanie się za każdym razem. Nie ma sensu, ponieważ ich zgłoszenia nie są w ich imieniu i do innego użytkownika przeglądającego witrynę, nie ma możliwości powiązania zgłoszenia z konkretnym użytkownikiem (pomyśl o anonimowych komentarzach na blogu lub wklejce). Użytkownik powinien jednak mieć możliwość edycji (przynajmniej krótkoterminowej) zamieszczonych przez siebie treści. Wyobrażam sobie, że robię to, umieszczając unikalny identyfikator w pliku cookie na komputerze użytkownika. Umożliwiłoby mi to powiązanie zgłoszenia z użytkownikiem, a gdy ten plik cookie pozostałby na komputerze użytkownika, pozwoliłbym mu na edycję ich treści. Oczywiście, jeśli plik cookie zostanie utracony lub użytkownik uzyska dostęp do witryny z innej przeglądarki, nie będzie mógł edytować swojej zawartości, ale tak naprawdę nie stanowi to problemu, zawsze może ponownie przesłać nową treść. Czy istnieje lepszy sposób na zrobienie tego? Jak mogę to zaimplementować, aby użytkownik mógł edytować swoje dane przez jak najdłuższy czas.


title: SharePoint kontra WordPress do tworzenia witryn biznesowych

text: Korzystaliśmy z serwera SharePoint 2013 do tworzenia intranetowych aplikacji internetowych, w tym forum dyskusyjnego, biblioteki wiki, kalendarzy, ogłoszeń itp. Teraz od kierownictwa podniesiono nowy wymóg, że chcemy zbudować nową zewnętrzną stronę internetową dla naszej firmy, zawierającą następujące główne sekcje; skontaktuj się z nami, o nas, usługach, członku naszego zespołu, naszych klientach itp. Na tym etapie staram się znaleźć najlepsze narzędzie, które możemy wykorzystać do zbudowania naszej strony internetowej. Za pomocą SharePoint 2013 lub WordPress. Czy ktoś może więc doradzić, jakie są zalety i wady każdego narzędzia? Pozdrowienia


title: Dlaczego urządzenia programistyczne zapewniają więcej zasobów niż typowe urządzenie?

text: Stworzyłem aplikację, która działa na moim iPodzie Touch czwartej generacji i iPodzie touch piątej generacji mojej firmy. Już mieliśmy wydać, gdy znaleźliśmy awarię, która występuje po uruchomieniu aplikacji na dowolnym urządzeniu niebędącym deweloperem*. Pojawił się pogląd, że urządzenie zarejestrowane jako „urządzenie programistyczne” zapewnia Twojej aplikacji więcej zasobów do wykorzystania. To nie wydaje mi się właściwe, ponieważ nie mogłem wymyślić żadnego powodu, który by istniał – wydaje mi się, że jest to bardziej prawdopodobny problem z profilowaniem budynków lub zasobów. To jednak wywołało dyskusję. Dlaczego w ogóle istnieją urządzenia takie jak zestawy deweloperskie do konsoli do gier, urządzenia, które mają większe możliwości niż platforma docelowa? Oczywiście fajnie jest przeprowadzić test warunków skrajnych, ale czy dokładniejsza reprezentacja platformy docelowej nie miałaby większego sensu? TL;DR - Dlaczego zestawy deweloperskie mają więcej zasobów niż platformy docelowe? *Z urządzeniem niebędącym deweloperem, które jest urządzeniem > 3. generacji. Urządzenie iOS, które pobiera aplikację z naszego serwera, a nie bezpośrednio z komputera z zainstalowaną aplikacją i xcode. Zauważ, że jest inne pytanie, które brzmi podobnie, ale w rzeczywistości jest inne, ponieważ to drugie pytanie dotyczy symulatora i rozumiem, że istnieją ogromne różnice między używaniem symulatora a rzeczywistym urządzeniem.


title: Nie poszło zbyt dobrze na teście Java IKM, porady?

text: Niedawno zrobiłem test IKM Java i uzyskałem dość niski wynik. Ukończyłem studia dopiero rok temu i nie mam doświadczenia komercyjnego w Javie (w obecnej pracy zajmuję się tworzeniem stron internetowych). Myślałem, że dużo czytania na Javie pomoże mi się przygotować, ale kiedy przeszedłem test IKM, zostałem rozerwany na kawałki. Nie wiedziałem zbyt wiele o tym, jak faktycznie działa garbage collection, nazwach innych kompilatorów java (wiem o javac?), używaniu .dll z Javą itp. Znam szeroki zakres podstaw, ale w stopniu, w jakim ' int(5L)' daje liczbę całkowitą lub nie, naprawdę nie wiedziałem. Moje pytanie jest takie, że wiele pytań dotyczących IKM, z którymi nigdy się nie spotkałem, przeczytałem jednak wiele szerzej znanych książek o programowaniu w Javie (Deitel, O'Reilly itp.). Czy czytam złe książki??? Czy ktoś mógłby polecić dobry plan działania, który pozwoli mi odejść i samodzielnie się uczyć i poznać te naprawdę trudne pytania dotyczące javy?


title: Jak przeprowadzić test jednostkowy pliku jsp?

text: Tworzę aplikację Java 6 EE i testuję mój kod jsp z innym z testową wersją wywołań funkcji i kodu użytego w oryginalnym, ale wydaje się luźny i niepraktyczny. Czy istnieje dobry sposób na przeprowadzenie tego rodzaju testów?


title: Czy wartości logiczne/bity są szybsze niż liczby całkowite?

text: Jak sugeruje tytuł, zastanawiam się, czy boole czy bity są szybsze niż używanie liczb całkowitych (1 i 0)? Konkretnie myślę o ich szybkości w instrukcjach CASE, a konkretniej w T-SQL (chociaż byłoby ciekawie posłuchać o doświadczeniach z innych języków). W pewnym kontekście mam dość dużą instrukcję SELECT nad dużą tabelą, która musi przekształcić wiele danych w oparciu o liczbę całkowitą wynoszącą 1 lub 0, i rozważałem konwersję liczb całkowitych na bity, aby zwiększyć wydajność. EDYCJA: Dziękuję wszystkim za odpowiedzi. Wyglądało na to, że wszyscy daliście mi prawie te same rady, sformułowane nieco inaczej lub z różnym poziomem szczegółowości.


title: Platformy indeksowania danych pasujące do dużych aplikacji e-commerce

text: napisaliśmy i nadal utrzymujemy dużą aplikację e-commerce. Nasza lista funkcji przypomina to, czego można oczekiwać od większości sklepów. Chcielibyśmy ulepszyć niektóre z naszych funkcji, a teraz naszą uwagę przyciągnęła funkcjonalność listy wyszukiwania/sugestii (wprowadź kilka liter, pojawi się lista sugestii w języku JScript). Obecnie korzystamy z http://xapian.org/. Ma pewne wady. Po pierwsze, nie jest to właściwie właściwe rozwiązanie. Został stworzony, aby indeksować dokumenty, a nie zawsze zmieniając dane w granulacji, której potrzebowałaby aplikacja e-commerce. Po drugie, obciążenie bazy danych jest znaczne, gdy co noc ponownie indeksujemy wszystkie dane. Chcielibyśmy framework, który został zaprojektowany do indeksowania danych bazy danych, który może łatwo i bez większego obciążenia dodawać do indeksu, który może szybko dostarczać zmiany danych w backoffice do frontendu bez dużego obciążenia i opóźnień. Zdaję sobie sprawę z tego, że Xapian jest oprogramowaniem typu Open Source, a nawet wolnym oprogramowaniem, więc moglibyśmy dostosować go do naszych potrzeb, gdybyśmy zdecydowali się zainwestować czas i siłę roboczą. Ale szybkie rozejrzenie się za bardziej odpowiednim rozwiązaniem wydaje się sprawiedliwe, prawda? Aha, aplikacje komercyjne też są w porządku. FOSS nie jest wymagany.


title: Czy powinienem komuś powiedzieć, że jego zatwierdzenie spowodowało regresję?

text: Kiedy wyśledzisz i naprawisz regresję — tj. błąd, który spowodował, że wcześniej działający kod przestał działać — kontrola wersji umożliwia całkowicie sprawdzenie, kto zatwierdził zmianę, która ją zepsuła. Czy warto to robić? Czy wskazanie tego osobie, która dokonała zobowiązania, jest konstruktywne? Czy charakter błędu (w skali zwykłej nieuwagi na fundamentalne niezrozumienie kodu, który zmienili) zmienia się, czy to dobry pomysł, czy nie? Jeśli dobrym pomysłem jest powiedzenie im, jakie są dobre sposoby na zrobienie tego bez powodowania urazy lub zmuszania ich do defensywy? Załóżmy, ze względu na argument, że błąd jest na tyle subtelny, że automatyczne testy serwera CI nie mogą go wykryć.


title: Elementy dynamiczne w interfejsie JavaFX

text: Chcę zbudować aplikację podobną do Blocky. Do tego będę używał JavaFX. Pracuję nad prototypami atm. Wygląda na to, że interfejsy użytkownika JavaFX są zazwyczaj tworzone przy użyciu programu Scene Builders. Nadal nie jestem pewien, jak dużą elastyczność mi to zapewni, kiedy będę chciał dynamicznie zmieniać kształty (zwiększać je itp.) w czasie wykonywania, wykrywać kolizje w celu łączenia kształtów itp. Czy ktoś bardziej doświadczony w korzystaniu z tej technologii może mi powiedzieć, jak czy taka aplikacja używa JavaFX? Czy byłoby łatwiej/tak samo zrobić to w Javie? Dziękuję.


title: Jakie stresory napotykają programiści w pracy i jak sobie z nimi radzisz?

text: Nauka radzenia sobie ze stresem jest niezbędna do zachowania zdrowia podczas pracy w każdej pracy. Niezbędnym podzadaniem jest nauka rozpoznawania i ograniczania źródeł stresu. Ale pośród codziennego harówki rozpoznanie źródeł stresu może być trudne (zwłaszcza w przypadku intensywnej, skoncentrowanej osoby, takiej jak programista). Na jakie typy stresorów powinni zwracać uwagę programiści i jak sobie z nimi radzić?


title: Dlaczego w formularzach HTML nie ma metod PUT i DELETE?

text: HTML4 / XHTML1 umożliwia tylko GET i POST w formularzach, teraz wygląda na to, że HTML5 zrobi to samo. Jest propozycja dodania tych dwóch, ale wydaje się, że nie zyskuje na popularności. Jakie były techniczne lub polityczne powody nieuwzględnienia PUT i DELETE w szkicu specyfikacji HTML5?


title: Czy analiza powinna być niezależna od technologii?

text: Wczoraj pokłóciłem się z jednym z moich kolegów. On (analityk biznesowy, wcześniej programista) uważa, że powinien być świadomy technologii zastosowanej do wdrożenia systemu, aby móc podejmować lepsze decyzje projektowe. Moim zdaniem (jestem programistą) analiza nie powinna być w żaden sposób powiązana z technologią i uważam, że dobry analityk może zrobić świetny projekt bez martwienia się o szczegóły implementacji. Czy mam rację, myśląc w ten sposób? Czy są jakieś powody, dla których analityk biznesowy musiałby znać technologię wykorzystaną do wdrożenia systemu? EDIT: Uważam, że użyłem niewłaściwego terminu, mówiąc „analityk biznesowy”. Może chodziło mi o architekta lub analityka systemowego. Nie jestem przyzwyczajony do tych terminów. Miałem na myśli architekta lub analityka systemowego, jeśli wolisz. Dziękuję wszystkim za niesamowite odpowiedzi! Nie jestem jeszcze zbyt doświadczony i cieszę się, że otworzyłeś mi na to oczy.


title: Witryny do współfinansowania projektów open source

text: Myślę o pomocy w sfinansowaniu adaptacji Postgresa do wykorzystania GPU do skanowania sekwencyjnego. Aby zmniejszyć moje koszty, chciałbym poprosić innych zainteresowanych tą samą funkcją o współfinansowanie jej ze mną. Natknąłem się na kilka stron ułatwiających takie finansowanie, ale ponieważ żadna z przeglądanych przeze mnie nie umożliwiała finansowania więcej niż kilku projektów, nie dodałem nawet do zakładek ich adresów URL. **Moje pytanie** Jakie witryny najlepiej to zrobić? Witryny muszą być aktywne. **EDYTUJ:** Najlepiej byłoby, gdyby programiści mogli również zaangażować się w tworzenie, testowanie, dokumentowanie lub wykonywanie innych prac.


title: Sposoby integracji starszych aplikacji

text: Moja firma to firma, która w ostatnich latach szybko się rozwinęła na wielu terytoriach. Nie jesteśmy firmą programistyczną per se, ale firmą techniczną, która opracowała różne aplikacje na zamówienie we własnym zakresie. Niektóre z nich są teraz sprzedawane jako SAAS. Jestem osobiście odpowiedzialny za 3 z tych aplikacji: wszystkie wewnętrzne aplikacje webowe, jedną napisaną w MySQL/Python/Django, jedną napisaną w SQL Server/Python/Django i jedną w MySQL/PHP/Symfony. Moje zasoby dla programistów obejmują specjalistyczną wiedzę w tych wszystkich, a także niektóre Java i Adobe Flex. Nikt z nas nie ma większego doświadczenia w technologiach Microsoft poza SQL Server. Jednak wszystkie inne działy w mojej firmie, w których pracują programiści, pracują przy użyciu stosu Microsoft - wszystkie nasze inne aplikacje internetowe to C#/asp.NET itp. itd. Zostałem poproszony o ocenę integracji produktów naszych działów z innymi w firmie na stronie poziom udostępniania danych i prezentacji. Widzę 3 możliwe drogi: 1. Zgryzamy kulę i przechodzimy do stosu programistycznego Microsoft, a to staje się polityką całej firmy. Plusy: standaryzacja, możliwość łączenia zasobów, integracja może być wykonana na dowolnym poziomie. Minusy: ogromne koszty licencjonowania, na które tak naprawdę nie możemy sobie teraz pozwolić, wymagane całkowite przeszkolenie wszystkich programistów, konieczność używania IIS zamiast ładnych serwerów Ubuntu/Apache i ogólny sprzeciw filozoficzny (w moim dziale jesteśmy głównie ewangelistami open-source) . 2. Oprogramowanie pośredniczące. Przyglądaliśmy się Adobe Flex, aby obsługiwać subskrypcje danych między usługami. Plusy: stosunkowo tanie rozwiązanie, istniejące doświadczenie wewnętrzne, może korzystać z dowolnej podstawowej technologii, którą wybierzemy. Minusy: uzyskanie wyceny usług danych Adobe zajęło mi wieki, nie jest dla mnie jasne, na ile ta trasa jest przyszłościowa – czy potencjalnie kupujemy technologię, która wyginie? 3. Zrób to sam. Cały czas trzymamy się otwartego kodu źródłowego i niestandardowych interfejsów API usług internetowych między wszystkimi aplikacjami. Plusy: tanie na licencji, open-source. Minusy: wymagany dodatkowy czas, więcej testów, nie rozwiązano podstawowej kwestii proliferacji technologii. Chciałbym wiedzieć, jakie inne podejścia mogą tutaj być. Czy istnieją inne sposoby rozwiązania tego problemu przez oprogramowanie pośredniczące? Czy moje poglądy są beznadziejnie nieaktualne? Jaki jest bezpieczny zakład na przyszłość? Dziękuję


title: Sprawdzone metody kontroli wersji biblioteki

text: Mogę naruszać niektóre warunki StackOverflow, zadając pytanie, które jest bardziej prawdopodobne, aby wywołać dyskusję niż czystą odpowiedź. Tutaj jednak idzie. Stworzyłem oprogramowanie dla małej firmy, która nie jest software housem (więc nie mamy jeszcze wielu procesów). Jest w Turbo Pascal (Delphi 2009), a moje źródło jest kontrolowane przez wersję (CVS). Używam kilku komponentów innych firm (wykresów, komunikacji TCP, itp.) W Delphi, domyślnym zachowaniem jest przechowywanie ich źródeł w folderze include w folderze plików programu Delphi IDE. Nadszedł czas, aby przekazać ten projekt innemu programiście. Teraz będzie musiał zainstalować komponenty IDE +, aby wyświetlały się poprawnie podczas edycji formularzy w tej aplikacji. Ale chciałbym, aby nasz proces kompilacji produkcyjnej był zautomatyzowany i chciałbym, aby serwer kompilacji był w stanie wykonać pobranie kodu i kompilację. Oznacza to, że myślę, że naprawdę muszę umieścić cały kod źródłowy (lub przynajmniej DCU, gdzie nie mam plików źródłowych) dla tych dodatków innych firm w kontroli źródła. Myślę, że powinny one być częścią modułu CVS dla opracowywanego projektu oprogramowania (tj. Nie są to ich własny moduł kontrolowany przez źródło). Myślę, że musimy być w stanie (jako mała firma) wskazać przyszłego programistę w repozytorium i powiedzieć „Sprawdź ten moduł”, a on będzie miał wszystko, czego potrzebuje, aby móc skompilować z wiersza poleceń bez robienia czegokolwiek w przeciwnym razie. (tj. przenośność do nowych środowisk deweloperskich jest ważna) Czy jest to rozsądne, czy byłoby bardziej skalowalne, abyśmy utrzymywali każdą bibliotekę we własnym stanie kontroli wersji, a następnie w skrypcie kompilacji, ściągnij kod źródłowy dla tego projektu i poprawny wersja kodu źródłowego dla każdej biblioteki? Z góry dziękuję i przepraszam za chaotyczny charakter pytania. Duncan


title: Czy znasz jakieś badania dotyczące odsetka kodu wzorcowego?

text: Cześć ludzie. Czy znasz badania dotyczące ilości kodu tabliczki kotłowej w różnych typach projektów? Wydaje mi się, że nie znajduję żadnych rzeczywistych liczb. Wiem, że jest to subiektywne i związane z używanym językiem, typem projektu i ramami, ale gdzieś musi istnieć rzeczywiste badanie obejmujące przynajmniej niszę. Dziękuję!


title: Architektura JavaScript, narzędzia, kompatybilność i pułapki

text: Zastanawiam się, w jaki sposób wykorzystam JavaScript do projektu, który jest dopiero na początku kodowania. Nie jestem ekspertem od JavaScriptu, ale uznaję go za bardzo ważną część strony, więc mam kilka pytań: 1. Często widzę, że projekty mają 1 ogromny plik javascript, który obsługuje wszystko. Czy to po to, by wszystko przyspieszyć? 2. Czy można zakodować funkcje javascript wewnątrz stron html? A może uważa się to za zły projekt? 3. Czy większość ludzi nadal używa jQuery? Widziałem rozprzestrzenianie się innych frameworków .js. Wiem, że Yahoo zrobiło jedną i jest wiele innych. Czy jQuery nadal jest de facto standardem dla większości potrzeb frameworków js? (przepraszam to pytanie jest subiektywne). 4. Jak podejść/przetestować różne kompatybilności przeglądarek? Czy powinienem się tym bardzo martwić?


title: Przekonujące wyższe kierownictwo o potrzebie większych monitorów dla programistów

text: Firma, w której pracuję, zatrudniła ostatnio kilku programistów, a liczba monitorów jest ograniczona. W biurze są dwa typy - standardowy 15-calowy (na szczęście płaski) i panoramiczny 23-calowy. Żaden programista nie ma maszyny zdolnej do konfiguracji dwóch monitorów, a największe monitory trafiły do osób, które przyjechały tu pierwsze. Trzech lub czterech nowych programistów wyższego szczebla może pracować tylko na 15-calowym monitorze. Co gorsza, w firmie jest być może w sumie 25-30 administratorów baz danych/testerów/administratorów, którzy wszyscy mają konfiguracje 23-calowe z dwoma ekranami. Przedstawiliśmy tę kwestię kierownictwu, a oni odmawiają zabierania dużych monitorów ludziom, którzy są tu od lat, ze względu na nowych pracowników, nawet jeśli są na wyższym szczeblu. Wpadliśmy na pomysł, aby testerzy poświęcili duży monitor na rzecz jednego z naszych małych, ale na to też nie pójdą. Co mogę powiedzieć kierownictwu, aby zilustrować potrzebę monitorów dla programistów?


title: Jakie korzyści mogę uzyskać uaktualnienie struktury ASP.NET (Webform) + DAL(EF) + Repozytorium + BLL do MVC?

text: Jestem w trakcie definiowania podejścia, które najlepiej pasuje do naszych potrzeb w zakresie tworzenia dużych aplikacji internetowych. Na razie myślę o korzystaniu z architektury ASP.NET z DAL przy użyciu Entity Framework, koncepcji repozytorium, aby nie uzyskiwać dostępu do DAL bezpośrednio z LOGIKI biznesowej i LOGIKI LOGICZNEJ, które wywołują repozytorium i wykonują wszelkie manipulacje niezbędne do przygotowania danych do wypychania w warstwa prezentacji (pliki .aspx). Nie planuję używać kontrolek ASP.Net i wolę zachować prostotę i lekkość przy użyciu zwykłego html, kontrolek jQuery UI i wykonywać większość wywołań serwera za pomocą jQuery Ajax. Czasami, w razie potrzeby, planuję użyć programów obsługi (.ashx) do wywołania metod BLL, które zwrócą JSON lub HTML do klienta w celu uzyskania dynamicznych rzeczy. Moje rozwiązanie ma również projekt testowy, który Mock Repozytorium z danymi w pamięci, aby nie znajdowały się w bazie danych do testowania metod BLL... Przydatne może być dodanie, że zbudujemy dużą aplikację na tej architekturze z setkami tabel i sklepem procedury z dużą ilością odczytu i zapisu do bazy danych. Moje pytanie brzmi, mając na uwadze tę architekturę, czy są jakieś oczywiste korzyści, które mogę uzyskać, używając projektu MVC3 zamiast opisanej bazy architektury na Webform? Czy widzisz w tej architekturze jakiś problem, który może sprawić nam problem na kolejnych etapach rozwoju? Znam wzorzec MVC do wykorzystania w innych projektach z Django… ale implementacja Microsoft MVC wygląda o wiele bardziej złożona i gadatliwa niż Django MVC i dlatego właśnie teraz się waham (lub czekam na mały nacisk?) wskoczyć w to... Jesteśmy w prawdziwym projekcie z terminami i nie chcemy spowalniać procesu rozwoju bez żadnych realnych korzyści.


title: Najlepsza praktyka refaktoryzacji n-warstw na architekturę wycinków pionowych

text: Jaka ścieżka robocza istnieje, aby zidentyfikować rozsądne pionowe wycinki klasycznej bazy kodu platformy n-warstwowej i infrastruktury (rozmiar przedsiębiorstwa)? Niezależnie od refaktora lub nowego rozwiązania myślę, że będzie to samo podejście (mniej więcej?) Więc jestem przede wszystkim zainteresowany krokami i definicją modułów, funkcji, a następnie "przetestuj" je w jednostce funkcji lub jeśli jest to zatwierdzone jako pion. Rozszerzając moje przemyślenia... Rozumiem, że pion powinien być aktorem, rodzajem wartości biznesowej. Ale czy system komunikacji jest aktorem, czy jednostką funkcjonalną w pionowym przekroju? Pewnie tak I nie (zależy od przedsiębiorstwa), ale jak się zdecydować? Czy wysyłka jest częścią Zamówienia, czy też Zamówienie i Wysyłka są różnymi branżami? Z czego powinien składać się pionowy plasterek, aby był prawdziwym pionem? Jeśli chodzi o poziomy funkcji, takie jak „własny magazyn danych, własne narzędzie do konfiguracji klienta, własne obliczenia analizy biznesowej” i tak dalej. Btw: Wymagane jest, aby piony były wdrażane i obsługiwane niezależnie od siebie. Może istnieje rodzaj schematu „tak/nie” do wykorzystania? „Czy to X jest używane do Y?” Tak - to jest pion. „Czy ten X jest używany z Z?” - Tak, to jest anty-wzór dla pionu. „Czy X zależy od funkcji YY?” Jeśli tak, to... I tak dalej. Interesujące są również linki do historii sukcesu podczas definiowania branż.


title: Pytanie o programowanie w Linuksie

text: W następnym miesiącu muszę przejść do pracy nad systemem ubuntu i pisania programów w c/c++. Przez kilka lat programowałem w windows visual studio. Co powinienem zrobić, aby nagle przygotować zmianę? A jak debugować w tym systemie?


title: Interaktywny kurs C# .NET 4.0?

text: Chciałbym nauczyć się programowania w C#. Studiowałem go już przez kilka tygodni i napisałem kilka pomniejszych programów z VS2010, i nie jestem całkowicie nowicjuszem w programowaniu, ponieważ pracowałem nad STALKER - Shadow of Chernobyl jako skrypter, ale to był LUA. Chcę zostać prawdziwym programistą. Myślę, że C# to przyzwoity sposób na rozpoczęcie. Dowiedziałem się już o najczęściej używanych witrynach z zasobami i dostałem też kilka fajnych e-booków, ale niestety nie mam czasu, aby cały czas siedzieć przed komputerem, więc moje postępy są dość powolne. Chciałbym zapytać, czy ktoś może mi polecić jakieś porządne interaktywne kursy online, które przyśpieszą moje postępy w nauce. Wiem o kursie „joe grip”, ale nie wiem, czy jest wart 39 dolarów, także to tylko dla .NET 1.x i 2.0, a chciałbym się nauczyć 4.0, więc nie mam pojęcia, co powinienem zrobić. **AKTUALIZACJA** Dzięki za porady. Nie jestem pewien, czy w przyszłości będę tworzyć aplikacje webowe czy desktopowe, czas pokaże. Najpierw muszę zrozumieć podstawy C# i .NET i zdobyć trochę doświadczenia. Dzięki za eBooki, pobrałem je, ale i tak mam już kilka eBooków, na przykład Programming C# 4.0 6th Edition, czyli ok. 900 stron. Wolałbym raczej samouczki wideo, ponieważ w dzisiejszych czasach nie mam czasu na przeczytanie dziesięciu tysięcy stron i to też nie jest takie ekscytujące. Teraz w końcu znalazłem kilka fajnych samouczków wideo, w których doświadczeni ludzie wyjaśniają, co robią. W porządku. Nie wiedziałem o wirtualnych laboratoriach MSDN, za to też dziękuję.


title: Wygeneruj komercyjny klucz licencyjny dla usługi internetowej

text: # Kontekst Mam pytanie biznesowe dotyczące licencjonowania oprogramowania internetowego. Wiele witryn internetowych oferuje oprogramowanie jako usługę dla różnych interfejsów API. Dobrym przykładem jest interfejs API wyszukiwarki niestandardowej Google. Proces korzystania z usług internetowych zazwyczaj przypomina: 1. **Konto.** Użytkownik tworzy konto. 2. **Serwer.** Użytkownik definiuje adres(y) IP serwera(ów), które będą wysyłać żądania API. 3. **Klucz.** Użytkownik otrzymuje publiczny klucz API dla żądanych API. 4. **Przewodnik.** Użytkownik otrzymuje dokumentację, która pokazuje, jak użyć klucza API do złożenia żądania. 5. **Test.** Użytkownik może zgłaszać żądania testowe w celu weryfikacji funkcjonalności integracji. 6. **Billing.** Użytkownik płaci za aktywację konta. 7. **Produkcja.** Użytkownik integruje serwis WWW ze swoimi aplikacjami. 8. **Dezaktywacja.** System dezaktywuje konta po wygaśnięciu, przekroczeniu limitu żądań itp. Te wymagania stanowią dodatek do integracji z licencjonowaną usługą. # Problem To dużo pracy dla małej firmy. # Pytania Jakie gotowe projekty open source rozwiązują ten problem? Jeśli nie ma takich projektów, co byś zrobił, aby zaprojektować opłacalne, tanie rozwiązanie (najlepiej procent każdej licencji)? To znaczy, jakiego oprogramowania lub istniejących usług komercyjnych użyłbyś dla małej firmy (mającej niewielkie dochody lub zerowej), która chce licencjonować usługi internetowe? Dziękuję Ci! # Linki pokrewne * Rozwiązanie klucza licencyjnego w aplikacji internetowej, jakie jest najlepsze podejście? * System zarządzania API


title: Jaka jest różnica między „rekurencją” a „samoodniesieniem”?

text: Artykuły w Wikipedii są zbyt zaawansowane, abym mógł je zrozumieć, czy ktoś mógłby mi podać proste wyjaśnienie?


title: Co robisz, aby klient zrozumiał, że wymagania nie wymienione w umowie należy rozliczać osobno?

text: Zrobiłem bardzo mały projekt za określoną kwotę płatności. Projekt był jakimś kodem weryfikacyjnym po stronie klienta. Jednak teraz klient prosi o poprawę kodu (ogólne ulepszanie kodu, w tym po stronie serwera, a nie mojego, które było czysto jQuery i po stronie klienta) i mówi, że te wymagania są oczywistym obowiązkiem programistów. Co powinienem zrobić? Nie płaci, dopóki nie zrobię czegoś za dostrajanie wydajności, podczas gdy uzgodniliśmy tylko walidację po stronie klienta. Czy powinienem zapomnieć o moich pieniądzach? A może powinienem spełnić drugie wymaganie, nie oczekując zwrotu?


title: Jak uzyskać odniesienie do centralnego modułu AssetLoader w każdym widżecie?

text: Pracuję nad prostym systemem UI do gry. Bloki konstrukcyjne to obiekty `Widget`, które mogą zawierać się nawzajem. Istnieje kilka podklas `Widget`, np. „LabelWidget”, „ImageWidget” i „ButtonWidget”. Ponieważ możliwe jest zagnieżdżanie, `ButtonWidget` to tak naprawdę nic innego jak kontener dla `LabelWidget` i `ImageWidget`. Jestem z tego całkiem zadowolony. Problem polega na tym, że teraz muszę użyć programu AssetLoader do ładowania obrazów, nie mogę ich pobrać bezpośrednio z dysku. Istnieje wiele implementacji AssetLoader, po jednej dla każdej platformy, na której działa gra, i tylko jedna instancja jest tworzona na wczesnym etapie. I ma stan. Więc teraz muszę przekazać obiekt `AssetLoader` do `ImageWidget`. Oraz do `ButtonWidget`, ponieważ zawiera `ImageWidget`. I tak dalej. Zaktualizowałem kod i teraz muszę przekazać moduł ładujący zasoby do prawie każdego widżetu, a naprawdę nie podoba mi się to, co widzę. Zbadałem kilka baz kodu frameworków UI, które mi się podobają i zauważyłem, że Android ma coś podobnego: istnieje obiekt `Context`, który jest przekazywany do każdego widoku, który może być użyty do ładowania zasobów. Ale ponieważ widoki są zwykle tworzone magicznie z XML, nie jest tak denerwujące, jak to, co mam. Mogę wymyślić tylko jedno wyjście: stworzyć singletona, który nie robi nic poza oferowaniem odniesienia do modułu ładującego zasoby, np. „Posiadacz modułu ładującego zasoby”. Ale nie jestem przekonany, że to wcale nie jest gorsze niż to, co mam. Czy możesz pomyśleć o jakimś zdalnie eleganckim rozwiązaniu? Zauważ, że korzystanie z frameworka wstrzykiwania zależności nie jest dla mnie opcją.


title: Projektowanie moich klas(y) haseł. Jak to podzielić?

text: Odziedziczyłem niestandardowy system uwierzytelniania, który wymaga refaktoryzacji. Nie jestem do końca pewien, jak najlepiej podzielić sekcję hasła i przydałaby się pomoc. **Klasa(e) haseł wymaga następujących funkcji:** * **Sprawdź, czy hasło jest zgodne z ograniczeniami.** Musi być w stanie przekazać opinię, dlaczego jest niepoprawne. * **Generuj trzy rodzaje skrótów.** Mamy kilka systemów plików z niekompatybilnymi skrótami, więc niestety muszę utrzymywać trzy skróty. * **Podaj inny skrót dla określonego typu użytkownika.** Jeśli użytkownik korzysta tylko z internetu, nie przechowujemy dla niego hasła, ponieważ nie może korzystać z systemu. Ich hasła to zawsze `*`. * **Być w stanie zweryfikować hasło dla danego użytkownika.** Na szczęście muszę uwierzytelnić się tylko za pomocą jednego z trzech hashów, które muszę utrzymywać. * **Możliwość wygenerowania losowego hasła, niezaszyfrowanego.** * **Prześlij nowe hasło do bazy danych.** * * * Zastanawiam się nad użyciem czterech klas, `Validator`, `Hasher`, `Generator` i `Zmieniacz`. * Walidator * `isCurrentPassword(identyfikator użytkownika, hasło ciągu): bool` * `getViolations(hasło ciągu znaków): tablica` * Generator * `generate(długość ciągu):ciąg` Tworzy hasło. * Hasher * `hash_*(łańcuch hasła): łańcuch` gdzie `*` jest typem skrótu. Będę miał cztery funkcje mieszające. * Changer * `change(int userid, string password):void; zgłasza wyjątki bazy danych` * * * **Co byś polecił i dlaczego?**


title: Mam stacktrace i limit 250 znaków na zgłoszenie błędu

text: Pracuję nad grą niezależną na konsolę xbox i w ostateczności mam 'try...catch', który obejmuje wszystko. W tym momencie, jeśli zostanie zgłoszony wyjątek, mogę skłonić użytkownika do wysłania mi wiadomości za pośrednictwem konsoli xbox, jednak limit wynosi 250 znaków. **Jak mogę uzyskać największą wartość z moich 250 znaków?** Nie chcę wykonywać żadnego kodowania/kompresji, przynajmniej na początku. Każde rozwiązanie tego problemu może być skompresowane w razie potrzeby jako drugi krok. Zastanawiam się nad zrobieniem takich rzeczy, jak obrócenie tego: > w EasyStorage.SaveDevice.VerifyIsReady() > w EasyStorage.SaveDevice.Save(String containerName, String fileName) w to (upuść powtarzające się nazwy przestrzeni nazw/klasy i parametrów metody): > at EasyStorage.SaveDevice.VerifyIsReady() > at ..Save(String, String) A może nawet włączenie najbardziej wewnętrznej metody, a następnie tylko numery linii w górę stosu itp. * * * **TL;DR: Biorąc pod uwagę wyjątek za pomocą stacktrace, w jaki sposób uzyskasz najbardziej przydatne informacje dotyczące debugowania z 250 znaków?** (Będzie to wyjątek/stacktrace .net)


title: Jak wykorzystać umiejętności projektowe jako zaletę przy poszukiwaniu pracy programisty?

text: Większość programistów nie jest projektantami; przynajmniej tak często słyszę. Uważam, że moje umiejętności projektowe są na równi z umiejętnościami programistycznymi, chociaż wolę programować, jeśli musiałem wybrać jedno. Czuję, że to może być wielką zaletą, ale nie wiem, jak to wykorzystać podczas szukania pracy. Wygląda na to, że ludzie szukają projektanta lub programisty. Trudno znaleźć kogoś, kto szuka kogoś, kto jest _obojem_. Może to być spowodowane tym, że ktoś, kto jest oboje, jest albo zbyt rzadki, albo w rzeczywistości nie jest pożądany. Jeśli rzeczywiście jest to pożądana kombinacja, to w jaki sposób mogę ją wykorzystać do sprzedaży?


title: Jak daleko mogę popchnąć refaktoryzację bez zmiany zachowania zewnętrznego?

text: Według Martina Fowlera refaktoryzacja kodu to (podkreślenie moje): > Refaktoryzacja to zdyscyplinowana technika restrukturyzacji istniejącego > kodu, zmieniająca jego wewnętrzną strukturę **bez zmiany jego zewnętrznego > zachowania**. Jej sercem jest seria drobnych przemian > zachowania zachowania. Każda transformacja (nazywana „refaktoryzacją”) niewiele >, ale sekwencja transformacji może spowodować znaczącą restrukturyzację. > Ponieważ każda refaktoryzacja jest niewielka, jest mniej prawdopodobne, że się nie powiedzie. System jest > również w pełni sprawny po każdej małej refaktoryzacji, co zmniejsza ryzyko > poważnego zepsucia systemu podczas restrukturyzacji. Czym w tym kontekście jest „zachowanie zewnętrzne”? Na przykład, jeśli zastosuję refaktoryzację metody move i przeniosę jakąś metodę do innej klasy, wygląda na to, że zmienię zachowanie zewnętrzne, prawda? Tak więc jestem zainteresowany ustaleniem, w którym momencie zmiana przestaje być refaktorem, a staje się czymś więcej. Termin „refaktoryzacja” może być nadużywany do większych zmian: czy jest na to inne słowo? **Aktualizacja.** Dużo ciekawych odpowiedzi na temat interfejsu, ale czy przeniesienie metody refaktoryzacji nie zmieni interfejsu?


title: Najlepszy sposób, aby programiści poprosili o pomoc, gdy utkną

text: Jaki jest najlepszy sposób, aby zapewnić, że programiści poproszą o pomoc, gdy utkną w problemie, zamiast spędzać zbyt dużo czasu na próbowaniu czegoś, gdy uderzą w ścianę? Szczególnie interesuje mnie, jak zoptymalizować to w rozproszonym zespole. Kilka pomysłów, które przychodzą mi do głowy: * programowanie w parach * wspólne umiejscowienie zespołu * timeboxy (po wygaśnięciu należy poprosić o pomoc) Rzeczy (cele) do przemyślenia: * unikanie uzależnienia od innych * maksymalizacja uczenia się i transferu wiedzy * koszt Czas programisty A na pomoc vs. czas programisty B na samodzielne rozwiązanie problemu Istnieje również obawa, że nawet jeśli programista wpadnie na rozwiązanie, może ono być gorszej jakości, niż gdyby poprosił o pomoc. Uważam, że przeglądy kodu są dobrym sposobem na rozwiązanie tego problemu. To pytanie: Kiedy nie pomagasz mniej doświadczonym programistom? jest dobrą lekturą w tle.


title: Jak dołączyć do Świata Programowania?

text: Nazywam się Vlad i jestem obecnie na trzecim roku Community College, studiując informatykę z naciskiem na programowanie w C++ i sieci. Ukończyłem kilka kursów programowania z ogólną łatwością, ale nie zdobyłem zaawansowanej wiedzy na temat programowania w szkole. Żaden z moich znajomych nie jest poważnym programistą pracującym w branży. Będąc aktywnym lurkerem na wielu stronach programistycznych i ogólnie stronach zorientowanych na technologię, zauważyłem, jak mało wiem o branży, żargonie i terminologii. (Nie mam pojęcia, jak działa Git Hub, ale ogólnie rozumiem, do czego służy). Szukam więc pomocy, gdzie powinienem szukać informacji o świecie programowania i branży, która mnie bardzo interesuje. Mam tu na myśli, jakie strony powinienem wykorzystać, aby uzyskać informacje na temat praktyk programistycznych, wprowadzenia do zaawansowanego C++ i zasobów, które po prostu wprowadzają 20-to programistyczne noob. Lubię programować, ale jeszcze się w to nie zagłębiłem, chcę zacząć to robić przed przeniesieniem się na uniwersytet. Podsumowując, gdzie znajdę informacje o tym, jak zostać prawdziwym programistą (informacje, które wyznaczają ścieżkę).


title: Jak powinien wyglądać mój „próbka kodu”?

text: Właśnie odbyłem całkiem niezły wywiad telefoniczny (jak na stanowisko związane z CakePHP, nie żeby było to szczególnie ważne w pytaniu). Prowadzący wywiad wydawał się być pod wrażeniem mojego życiorysu i osobowości. Na koniec jednak poprosił mnie o przesłanie mu próbki kodu z mojego istniejącego projektu pracy, „aby sprawdzić, czy nie jesteś potajemnie kiepskim programistą, ha ha!” Nie martwię się _zbyt_, że mój kod nie może stanąć na własnych nogach, ale jestem raczej średniozaawansowanym programistą niż ekspertem. Jakie oczywiste pułapki powinienem upewnić się, że mój kod **nie** wpada, na wypadek gdyby mnie wykluczyli na miejscu? Po drugie, i jest to prawdopodobnie trudniejsza część pytania, jakie funkcje w próbce kodu byłyby tak imponujące, że natychmiast sprawiłyby, że **znacznie bardziej przychylnie nakłonilibyście się** do programisty? Wszystkie pomysły i sugestie mile widziane!


title: Czy starszy programista powinien odmówić zdawania egzaminów papierowych podczas rozmowy kwalifikacyjnej?

text: Zauważyłem, że wielu starszych programistów odmawia zdawania egzaminów papierowych podczas rozmów kwalifikacyjnych. Uważają egzamin za swego rodzaju upokorzenie, ponieważ uważają, że „Nie ufają moim umiejętnościom programowania, nawet jeśli mam pięcioletnie doświadczenie w pracy… tylko młodsi pracownicy muszą zdać egzamin papierowy…”. Jednak Joel nalega: > **11\. Czy nowi kandydaci piszą kod podczas rozmowy kwalifikacyjnej?** > > Czy zatrudniłbyś magika, nie prosząc go o pokazanie ci magicznych sztuczek? > Oczywiście, że nie. Czy to uzasadnione, że starszy programista odmawia zdawania egzaminu papierowego podczas rozmowy kwalifikacyjnej?


title: Kontroler MVC - utrzymywanie małych metod

text: Czytam Clean Code wujka Boba i całkowicie rewolucjonizuje mój styl programowania. W tej książce autor twierdzi, że najlepsze metody to małe metody. A co z metodami akcji kontrolera w nowoczesnych frameworkach? Czy starasz się przestrzegać zasady „20 wierszy na metodę”, czy delegujesz niektóre zadania do metod prywatnych? Nie pytam o rzeczy, które można przenieść do usług i klas zewnętrznych, czasami zdarzają się sytuacje, że nie da się uniknąć większego kodu w działaniu. Kolejne pytanie i inne spojrzenie na ten problem - czy traktujesz klasę kontrolera jako (jakąś) specjalną klasę tylko z metodami akcji, czy po prostu inną zwykłą klasę z prywatnymi metodami i własnymi polami wraz z metodami akcji?


title: Co jest lepsze zaprojektowanie: określenie, czy funkcja powinna być wykonywana z zewnątrz, czy z jej wnętrza?

text: Często mam do czynienia z tymi dwiema opcjami. Z projektowego punktu widzenia, który z nich jest subiektywnie lepszy i dlaczego? Opcja A class foo { private boolean bar() { //rzeczy } private void A() { if(bar()) B(); } private void B() { // więcej rzeczy } } Opcja B class foo { private boolean bar() { //rzeczy } private void A() { B(); } private void B() { if(!bar()) return; // więcej rzeczy } } Załóżmy, że duplikacja kodu nie jest tutaj problemem, a podział polega tylko na logicznym oddzieleniu kodu dla lepszej czytelności/zrozumienia (A, B i bar mają w kontekście znaczące nazwy). Czy bardziej czytelne jest uświadomienie czytelnikowi, że B może nic nie zrobić, patrząc tylko na A? A może lepiej umieścić hermetyzację stanu w B? Oczywiście można to zrefaktoryzować, aby oddzielić B i bar() do całkowicie oddzielnej klasy, co oddziela problemy jeszcze bardziej, ale zakładając głównie stan współdzielony, co jest lepsze?


title: Dlaczego silniki reguł nie są pisane w Prologu?

text: Z tego, co widziałem w Prologu, wydaje się, że byłby idealny do stworzenia silnika reguł dla aplikacji. Jednak nie wierzę, że kiedykolwiek widziałem silnik reguł napisany w Prologu. Czy są jakieś nieodłączne ograniczenia w Prologu (np. słaby algorytm odśmiecania pamięci), które uniemożliwiałyby użycie go do zbudowania silnika reguł?


title: Wzorzec/algorytm projektowy JS do unikania duplikatów przerysowań w dość sprzężonym systemie

text: Biorąc pod uwagę: * pewien rodzaj aplikacji internetowej opartej na widżetach * dużo funkcjonalności JS * wysokie sprzężenie (komunikacja/oddzwanianie między widżetami) * widżety same się rysują * niektóre widżety muszą wykonywać pełne i dość kosztowne przerysowywanie za każdym razem, gdy zmienia się jedna z ich zależności. Problem: mogą istnieć skomplikowane łańcuchy zależności i trudno jest upewnić się, że ponowne rysowanie nastąpi tylko raz na akcję użytkownika. Na przykład: * `A` musi zostać przerysowane, jeśli zmieni się `B` lub `C` * `B` zależy od stanu `C` * Więc jeśli `C` się zmieni, `B` i _oba_ mogą się kończyć powodując przerysowanie „A”. Jeśli zdarzy się to tylko kilka razy, łatwo to rozwiązać. Ale kiedy to wszystko się dzieje, inżynieria staje się koszmarem i sprawia, że konserwacja jest jeszcze gorsza. Zakładam, że jest to dość powszechny problem, więc musi istnieć jakaś metoda radzenia sobie. Że lub moje projekty są w jakiś sposób wadliwe. Jakieś sugestie? Albo jakiś wzorzec projektowy, albo algorytm do radzenia sobie z ograniczaniem przerysowań byłby bardzo mile widziany. **Edytuj** W porządku, na podstawie sugestii Randalla, oto co myślę: * Semafor jak zmienna globalna, ale bez wielowątkowych rzeczy, więc w zasadzie tylko globalna liczba. Nazwijmy to „S”. Miałbym jeden na widżet, który wymaga drogich przerysowań. * `S` ma sygnał i funkcję oczekiwania. Sygnał inkrementuje `S` i czeka go zmniejsza. * `S` jest inicjowany funkcją zwrotną do rysowania widżetu. * Za każdym razem, gdy coś jest wyzwalane (zdarzenie użytkownika, powrót ajax, itp.) wywoływane jest `S.signal()`. * Po zakończeniu zdarzenia zmiana elementów w obiekcie (po wykonaniu wywołań zwrotnych), wywoływana jest funkcja `S.wait()`. * `S.wait()`, po zmniejszeniu `S` sprawdź, czy count wynosi 0. Jeśli tak, rysuje ponownie. Więc jeśli zmieni się `C`: * `C` uruchamia `S.signal()` (`S==1`) * `C` wprowadza zmiany, wywołanie zwrotne do `B` * `B` uruchamia `S.signal( )` (`S==2`) * `B` wprowadza zmiany * `B` uruchamia `S.wait()` (`S==1`, bez przerysowywania) * `B` kończy się, C zaczyna od nowa. * `C` uruchamia `S.wait()` (`S==0`, przerysuj) Jak flaga dirty, ale bardziej brudny licznik i myślę, że jest to łatwiejsze do zaimplementowania. Można go dość łatwo rozszerzyć o dodatkowe funkcje. Jeśli z jakiegoś powodu chcę go zoptymalizować, aby w niektórych przypadkach nie wszystko było przerysowywane, mogę dodać kilka flag, które reprezentują rzeczy do przerysowania i resetować je przy każdym losowaniu. Można go również zastąpić stosem i robić w zasadzie to samo, ale z pewnymi lepszymi możliwościami rozbudowy. **Edit 2** Rozwiązanie Izkaty okazało się banalne w implementacji i tylko nieco mniej elastyczne. Potrzebne są tylko 2 zmiany: * Dodaj właściwość timerID do widżetu, który wymaga przerysowania. * Zawijaj funkcję przerysowania w zegarze: Kod JS: A.draw = function(){ var that = this; clearTimeout(this.drawTimer); this.drawTimer = setTimeout(function(){that._draw();},0); } A._draw = function(){ //stary kod rysowania trafia tutaj //może być „prywatny” lub zagnieżdżony w A.draw } * Żadne inne zmiany nie są potrzebne, więc interfejs pozostaje taki sam i działa, chyba że tego potrzebujesz do pracy z kodem asynchronicznym, takim jak wywołania ajax.


title: Pokazanie gramatyki jest niejednoznaczne

text: Mam następujące pytanie zaczerpnięte z egzaminu z kursu kompilatora: Pokaż, że poniższa gramatyka jest niejednoznaczna. S = XcY X = a Y = b | Z Z = bW W = d | ϵ Narysowałem następujące drzewo: ![diagram gramatyczny](http://i.stack.imgur.com/17J52.png) Czy mam rację sądząc, że jest niejednoznaczne, ponieważ **acY** może skończyć się na **acb ** (z których po jednym następuje epslion) podążając różnymi ścieżkami?


title: Jak przekonać zespoły programistów do przejścia na nową wersję oprogramowania pośredniczącego?

text: Pracuję nad projektem aktualizacji naszego (nieobsługiwanego) stosu oprogramowania pośredniego do stabilnej, ale obsługiwanej wersji. Istnieje kilka zespołów z aplikacjami działającymi w wersji, którą obecnie mamy w produkcji i, co zrozumiałe, nikt nie chce ponosić ryzyka uruchomienia się na nowszej wersji jako pierwszy. Jakie strategie stosowałeś lub uważałeś za najbardziej przekonujące do przejścia na takie nowe wydawnictwo w przeszłości? Nowsza wersja oferuje pewne korzyści związane z wydajnością i funkcjonalnością, ale tak naprawdę nie ma żadnej technicznej zachęty dla zespołów do przejścia, która jest teraz obowiązkowa. Wynika to głównie z kosztu rozszerzonego wsparcia dla starej wersji, a także chęci zespołów ds. infrastruktury, aby korzystać z obsługiwanej wersji z ulepszonym zarządzaniem oferowanym przez nowszą wersję. To bardziej pytanie o ludzi niż o technologię.


title: Co programiści Java sądzą o Scali?

text: Zauważyłem, że obsługa IDE nie jest tak dobra, ale sam język obsługuje idiomy programowania funkcjonalnego znacznie czyściej.


title: Czy kontroler powinien wiedzieć o widoku i modelu? lub odwrotnie?

text: Koncepcyjnie próbuję zrozumieć, czy powinienem to robić: element = Model() ekran = View() mózg = Kontroler(element, ekran) czy to.. mózg = Kontroler() element = Model(mózg) ekran = Widok (mózg) lub this.. class Controller(): def __init__(self): item = Model(self) screen = View(self) czy coś zupełnie innego?


title: Czy powinienem tworzyć interfejsy dla obiektów transferu danych?

text: Czy tworzenie interfejsu dla obiektów transferu danych to dobry czy zły pomysł? Zakładając, że obiekt jest zwykle zmienny. Chociaż mój przykład jest w Javie, powinien mieć zastosowanie do każdego innego języka, który ma podobne koncepcje. interfejs DataTransferObject { String getName(); void setName(Nazwa ciągu); } klasa RealDataTransferObject implementuje DataTransferObject { String name; String getName() { zwraca nazwę; } void setName(String name) { this.name = nazwa; } } Oczywiście jest to uproszczony przykład, w rzeczywistości może być więcej pól.


title: Czy aplikacje desktopowe można pisać przy użyciu javascript?

text: Czy obecnie możliwe jest pisanie aplikacji desktopowych przy użyciu javascript, html, css? Możliwe rozwiązania: Użyj środowiska wykonawczego i programu Adobe AIR w js. Ale nie, jeśli używam AIR, AS3 najbardziej do tego pasuje. Więc nie jest to dobra opcja. GWT: Nie, ponieważ używa Javy, a następnie konwertuje ją na js lub cokolwiek innego. Piżama: Ciekawe. Ale obecnie skupiam się na JavaScript. Więc nie chcę używać Pythona i kompilacji krzyżowej do js. Uruchom serwer lokalny i korzystaj z przeglądarki w trybie pełnoekranowym. Trochę w porządku, ale nadal jest to ta sama przeglądarka. I trudne do dystrybucji. Więc jaka jest najlepsza opcja? Jestem podekscytowany node.js, który jest głównym powodem szukania JavaScriptu. W przeciwnym razie wybrałbym Pythona.


title: Porady dotyczące usług w chmurze i protokołu IM dla aplikacji mobilnej zaplecza do czatu grupowego

text: **Przegląd** Zamierzam stworzyć aplikację na Androida i iOS. Umożliwi użytkownikom tworzenie grupowych „pokojów czatu” i rozmawianie w pokojach czatów utworzonych przez innych użytkowników. Usługa musi być wysoce skalowalna, aby z dnia na dzień mogła pomieścić ogromny wzrost użytkowników (możemy tylko pomarzyć). **Informacje w tle** Wcześniej używałem głównie Javy i Pythona, ale należy użyć najbardziej odpowiednich języków do tego zadania. Nie mam nic przeciwko uczeniu się wielu nowych umiejętności. **Wymagania dotyczące czatu** Protokół czatu powinien być elastyczny: powinien umożliwiać określenie, kto może wyświetlać/publikować w „pokojach czatu” na podstawie czynników określonych przez pierwszego nadawcę/twórcę danego „pokoju czatu”. Powinno to również umożliwić użytkownikom po prostu zainstalowanie aplikacji i rozpoczęcie korzystania z usługi po podaniu prostego pseudonimu (który można później zmienić). **Plany protokołu czatu** Po rozejrzeniu się myślę, że protokół XMPP jest najlepszym kandydatem. W szczególności rozszerzenie czatu dla wielu użytkowników wygląda na to, czego potrzebuję. Czy to najbardziej odpowiadałoby moim wymaganiom, czy znasz inne potencjalne rozwiązanie? _Aktualizacja:_ Od tego czasu badam Protokół SYNCHRONICZNEJ Konferencji i wydaje się, że idealnie pasuje do moich potrzeb. Nie jestem jednak pewien, jak dobrze jest to udokumentowane i jak faktycznie bym go zaimplementował. **Usługa w chmurze** Zdecydowałem się na Amazon Web Services, Google App Engine i Windows Azure. Dochodzę do wniosku, że najlepsza będzie Azure, bo łatwiejsza w zarządzaniu niż AWS (łatwość skalowalności będzie kluczowym czynnikiem w projekcie), myślę, że może być mniej restrykcyjna niż GAE, a Azure wkrótce będzie miała zestawy narzędzi umożliwiające łatwe połączenie z telefonami z systemem Android i iOS. _Aktualizacja:_ Przyglądając się temu dalej, wydaje się, że AWS byłby tańszy i że mają przepisy, takie jak elastyczne równoważenie obciążenia i automatyczne skalowanie, które sprawiają, że dodatkowa praca potrzebna do utrzymania skalowalności jest dość znikoma. Czy to byłaby decyzja, którą byś podjął, czy też poleciłbyś/zajrzałbyś do innych usług w chmurze? **Wymagania ogólne** Wszelkie komponenty powinny być dobrze udokumentowane, sprawdzone i najlepiej, jeśli to możliwe, wysokiego poziomu. Na przykład wolałbym używać wtyczki do implementacji protokołu czatu, niż pisać go sam - pozostawiając to bardziej doświadczonym osobom. **Dziękuję** Dziękuję za przeczytanie, a wszelkie porady dotyczące dowolnego aspektu byłyby bardzo mile widziane :-)


title: jakich informacji potrzebują programiści wcf/.net przy dołączaniu do nowego projektu?

text: Jestem pisarzem technicznym, którego zadaniem jest udokumentowanie dość złożonej aplikacji .net WPF/WCF dla agencji rządowej. Nie jestem pewien, od czego zacząć i chciałbym otrzymać sugestie od programistów .net, jakie informacje powinienem przechwycić. Jeśli byłeś programistą .net/WCF i zostałeś wprowadzony do ogromnej niestandardowej aplikacji .net przy użyciu WCF, jakich informacji potrzebujesz, aby móc dowiedzieć się, jak używać i dostosowywać lub rozszerzać system? Po zakończeniu aplikacja będzie się składać z: * aplikacji klienckiej, która jest dostępna na każdym komputerze użytkownika uwierzytelnionego przez AD * różnych usług sieciowych uruchamianych na maszynie IIS * jednej dużej bazy danych SQL zawierającej dane do rekordów utworzone przez system * wywołania do aplikacji innych firm dostępnych gdzie indziej, które będą wywoływane przez aplikację główną. Jest to niestandardowa aplikacja o wartości wielu milionów dolarów, z wieloma rękami dotykającymi jej i wieloma godzinami pracy programistów. Obejmuje również wielu interesariuszy i transakcji finansowych. Celem mojej dokumentacji jest udokumentowanie systemu aplikacji dla przyszłych programistów, którzy są nowicjuszami w projekcie lub personelu pomocniczego, który musi dowiedzieć się, co nie działa. Mamy już pisarza technicznego, który dokumentuje zachowanie użytkownika i typowe zachowanie użytkownika, więc nie muszę tego omawiać. Główny programista wyjaśnił trochę o samym systemie i o tym, jak komunikują się ze sobą biblioteki dll w aplikacji klienckiej i serwerowej. Powiedział również, że same biblioteki dll są skompilowanym kodem, który sam w sobie nie jest interesujący. Wyjaśnił również, że istnieje warstwa abstrakcji danych (zwana "frameworkiem encji"?), do której programiści będą się odwoływać w Visual Studio (zamiast włączać zapytania SQL do swojego kodu). Z powodu tej warstwy abstrakcji danych główny programista wydaje się uważać, że dokumentowanie tabel DB nie jest przydatne (co ma sens). Zamiast tego muszę udokumentować komponenty usługi na dość wysokim poziomie. Teraz moje pytanie: jaki rodzaj informacji powinienem przechwycić? Jakie informacje pomogłyby doświadczonym programistom .net nauczyć się, jak tworzyć nową aplikację? Jakie pytania powinienem zadać programistom, aby uzyskać te informacje? Nie jestem programistą (i na pewno nie programistą .net), ale pracowałem z kilkoma językami programowania i udokumentowałem kilka aplikacji Windows. Menedżer, który zlecił mi to zadanie, musi czuć, że aplikacja nie jest dobrze udokumentowana (mimo że znalazłem wiele diagramów i diagramów UML opracowanych przez analityków biznesowych, które dokumentują procesy biznesowe. Moimi głównymi odbiorcami tego, co wytworzę, NIE będą administratorzy systemu lub użytkownicy, ale inni programiści.Więc masz dla mnie jakieś pomysły lub wskazówki?Dzięki.


title: Jaka jest najlepsza książka do opanowania języka OO, powiedzmy C#?

text: Mam spore doświadczenie w tworzeniu oprogramowania. Na początkowych etapach pracowałem nad naprawdę dużym projektem, z dziesiątkami projektów zaangażowanych w niego, setkami dużych plików każdy z dziesiątkami tysięcy linii, który był rozwijany od 2 dekad. To było tak skomplikowane, że zamiast rozumieć całą architekturę, implementację OO, po prostu wykonywałem polecenia moich kierowników liniowych. (Mój pierwszy duży błąd) A potem rok temu dołączyłem do raczej małej firmy, w której mam dużą część odpowiedzialności za rozwój, gdzie muszę zajmować się projektowaniem i rozwojem. Dzięki mojemu doświadczeniu jestem w stanie napisać kod, aby zrealizować dowolną logikę biznesową. Ale nie mogę wykorzystać wszystkich zalet orientacji obiektowej. Czy jest jakaś praktyczna książka z przykładami ze świata rzeczywistego, która pomoże mi zrozumieć, dlaczego i gdzie używać interfejsów, polimorfizmu, dziedziczenia lub taka, która podaje dobre przykłady na temat SOLID? A może, skoro wiem, jak wycinać kod, czy powinienem szukać wzorców projektowych?


title: Wiadomość tekstowa (SMS) opłacona przez odbiorcę

text: Buduję system, w którym pracownicy muszą wysyłać SMS-y z potwierdzeniem na nasz telefon komórkowy. Czy jest łatwy sposób, aby nasza firma od razu zapłaciła za sms? Rodzaj zbierania-sms zamiast zbierania-call.


title: Dlaczego nie może istnieć „uniwersalny” język programowania, który służy wszystkim celom?

text: dlaczego nie połączyć najlepszych cech wszystkich istniejących języków programowania i dopasować je do uniwersalnego języka programowania?


title: Samokształcenie przyrostowe

text: Jaki jest najlepszy sposób na **przyrostowe kształcenie siebie**? Mam na myśli zespół, pracujemy w scrumie z 14-dniowym sprintem i chciałbym zarezerwować sobie czas na samokształcenie, w tym teorię/praktykę razem (cały zespół będzie studiował ten sam obszar, na przykład 4 godziny każdy). Na przykład, aby nauczyć się wzorców projektowych, czy jest jakaś strona (płatna lub nie, nie ma znaczenia), która zapewnia samokształcenie w następującej formie: * jasne wyjaśnienie jednego tematu (który można studiować w ciągu kilku godzin) * zapewnia trochę prymitywnego test samooceny, który sprawdza, czy zrozumiał (może to być wdrożenie jednego przykładu, w którym podano również poprawny wynik) Myślę, że ten "styl szkolny" byłby bardzo skuteczny i byłaby to kształcenie przyrostowe i ciągłe. Książki zazwyczaj nie zawierają części samotestowania (są w większości teoretyczne), a 1-tygodniowe szkolenia to inny temat (są drogie i zazwyczaj w 50% zapomniane przez praktykanta) Bardzo lubię też format prezentacji **"Pecha Kucha"** , ale nie wnosi do zespołu nowego „know how”. Byłbym wdzięczny za wszelkie strony lub książki zapewniające samokształcenie w tym formacie


title: Jakie są możliwe interakcje między wieloma błędami?

text: Myślałem o tym, jak dwa robaki mogą ze sobą współdziałać. Jedyny związek, o którym mogę pomyśleć, to jeden błąd będący przyczyną drugiego. Jakie inne interakcje między wieloma defektami są powszechne w codziennym kodowaniu? Jakie rodzaje zachowań mogą skutkować?


title: Jak sprzedawać/dystrybuować moje oprogramowanie?

text: Pracuję nad osobistym projektem (aplikacja desktopowa Windows) i zacząłem myśleć o próbie zarobienia pieniędzy na aplikacji (nie na źródle). Nie spodziewam się zarobić miliarda dolarów, ale kto wie, prawda? Najprostszy sposób, jaki widzę, to rozdawanie go za darmo i pozwalanie ludziom na przekazywanie darowizn, ale nie jestem pewien, jak dobrze to działa lub jaki system płatności jest najłatwiejszy/najlepszy (Paypal)? Jeśli miałbym to sprzedać, jak by się do tego zabrało? Dystrybucja stron trzecich? Sprzedać z własnej strony internetowej za pomocą Paypal i weryfikować wpływy? Zbudować własny „sklep” dla aplikacji? Zasadniczo: Jakiej metody użyłeś, aby zarobić pieniądze na osobistym projekcie (darowizny, sprzedaż, inne?) i jak się do tego zabrałeś? Porady? Dzięki za twoją odpowiedź.


title: jak nazywa się stanowisko w jednoosobowym projekcie (zrób wszystko od rozmowy z klientem po pisanie kodu)

text: Pracowałem nad projektem, w którym robiłem wszystko od * rozmowy o tym, jak oprogramowanie powinno być i jak robią to w tej chwili z klientem (użytkownikami końcowymi) ... * wybór technologii do użycia * wpisanie kodu * instalacja aplikacja na serwerze WWW wcześniej pisałem w CV, że pracowałem jako **programista** co mam teraz napisać ? * * * to 16-osobowa organizacja non-profit sponsorowana przez USAID, zrobiłem ogólnokrajowy system zarządzania i wypłacania dotacji rolnikom


title: Czy akceptowalną praktyką jest pobieranie właściwości, która obejmuje analizowanie pliku binarnego, który może zgłosić wyjątek?

text: Mam właściwość, która ładuje się leniwie, za każdym razem po wywołaniu aktora. Możliwe, że plik binarny, na którym opiera się moja właściwość, jest nieprawidłowy. Jeśli jest nieprawidłowy, być może będę musiał zgłosić wyjątek. Czy powinienem 1. Uczynić właściwość metodą i z tym skończyć. 2. Pozostaw rzeczy bez zmian. 3. Pozostaw właściwość bez zmian, ale dodaj metodę sprawdzania poprawności obiektu, która wywoła leniwą analizę, która może zgłosić wyjątek.


title: Jak śledzić linki kierujące do istniejących aplikacji internetowych w intranecie?

text: W moim nowym miejscu pracy mamy rozwiązanie intranetowe zawierające wiele aplikacji internetowych hostowanych w IIS. Poza działem rozwoju inne działy pozyskują lub tworzą inne aplikacje/raporty, które głęboko łączą się z tymi aplikacjami internetowymi. Niestety nie mam bezpośredniej kontroli nad tymi potencjalnymi aplikacjami, a niektóre powstają bez naszej wiedzy. Stwarza to problem, jeśli musimy przeprowadzić restrukturyzację lub refaktoryzację. Zastanawiałem się, czy ktoś miał podejście, w którym wszystkie linki przychodzące bez względu na pochodzenie musiałyby być rejestrowane - na przykład rejestr linków lub inne podejście, jak sobie z tym poradzić. Można to następnie wykorzystać, aby zrozumieć wpływ jakiejkolwiek reorganizacji struktury aplikacji internetowej. Każda pomoc jest bardzo ceniona


title: Równomierna dystrybucja poprzez łańcuch zasobów

text: Pracuję nad algorytmem, który kieruje zadania przez łańcuch rozproszonych zasobów w oparciu o hash (lub losową liczbę). Załóżmy na przykład, że masz 10 bramek do usługi, która rozdziela zadania do 1000 operatorów przez 100 kolejek. Oczekuje się, że 10 000 podłączonych klientów będzie podłączonych do bram w dowolnym momencie (liczby są bardzo ogólne, aby było to proste). To jest * 10 000 klientów * 10 bramek (producentów) * 100 kolejek * 1000 pracowników/obsługujących (konsumentów) Przepływ każdego zadania to client->gateway->queue->worker Każdy klient będzie miał swój własny hash/numer, który służy do kieruj każde zadanie od klienta do tego samego pracownika za każdym razem, przy czym każde zadanie przechodzi za każdym razem przez tę samą bramę i kolejkę. Jednak algorytm obsługuje dystrybucję równomiernie, co oznacza, że każda brama, kolejka i pracownik będą miały równomierne obciążenie. Moje pytanie brzmi, jak by to się nazywało? Czy coś takiego już istnieje? Zaczęło się jako DHT, ale zdałem sobie sprawę, że DHT nie może zrobić dokładnie tego, czego potrzebuję, więc zacząłem od zera.


title: Wdrażanie modelu zabezpieczeń opartego na oświadczeniach w celu zabezpieczenia usługi WCF

text: Obecnie wszystkie nasze aplikacje internetowe (i usługi WCF, z którymi wchodzą w interakcje) są uruchamiane wewnętrznie. Nic nie jest widoczne w sieci. Chcemy otworzyć nasze aplikacje internetowe na Internet i będziemy musieli zabezpieczyć dostęp do usług. Mamy kilka istniejących usług WCF „RESTful”. Chcemy zabezpieczyć te usługi za pomocą usługi Windows Azure Access Control Service (ACS) i kilku możliwych dostawców tożsamości (Google i co najmniej jednej Active Directory Federation Services). Chcę użyć tokena JWT jako formatu tokena (wiem, że jest w wersji beta na platformie Azure). Mam nadzieję, że ktoś może udzielić porady lub wskazać mi dobre tutoriale... wszystko, co czytam, korzysta z ASP.NET WebAPI... i nie chcemy tego używać. Chcemy być w stanie obsługiwać każdego klienta, który potrafi analizować JSON. Obecnie nasze aplikacje internetowe to tylko HTML/jquery. Niektóre wskazówki byłyby świetne. Dziękuję!


title: Znalezienie minimalnej ścieżki ze zwrotem?

text: Mam problem ze zrozumieniem pytania z poprzedniego quizu: Bobby pracuje w Starbucks w San Mateo (V). Przeprowadza testy kontroli jakości i musi odwiedzić sklepy w Palo Alto (B), Tenderloin (C) i San Jose (S), a następnie wrócić do San Mateo na spotkanie. Odległości między sklepami wynoszą: V→B = 2 V→C = 3 V→S = 6 B→C = 1 B→S = 5 C→S = 4 Który sklep jest pierwszym odwiedzanym przez niego w optymalnym rozwiązaniu tego problem? Jak podszedłbyś do rozwiązania tego problemu? Przypomina mi trochę algorytm Djistry, ale podejrzewam, że istnieje prostszy sposób niż próbowanie każdej kombinacji, ponieważ limit czasu jest krótki. Moja interpretacja: B__1__C | | 2 | | 4 |__6__| V S Aby Bobby odwiedził wszystkie 4 sklepy i wrócił do V, po prostu zaczyna od V i przemieszcza się po krawędziach powyższego pudełka. Ale pytanie brzmi, który jest pierwszy sklep? Każdy kierunek da w sumie 13, więc jaka jest prawidłowa odpowiedź?


title: Potrzebujesz algorytmu optymalizacji

text: Potrzebuję tego algorytmu do jednego z moich projektów. Sparafrazuję problem. Są liny, które mają różnokolorowe pierścienie. (Kolory mogą się powtarzać na tej samej linie lub na różnych linach). Moim zadaniem jest wybrać kilka z tych lin i połączyć je tak, aby wszystkie kolory z n lin były zawarte w tej połączonej linie. Powinienem dostać możliwie najmniejszy rozmiar liny. Mogę przeciąć każdą linę raz i w razie potrzeby wyrzucić część końcową. Dla każdej liny istnieje jeden wstępnie zdefiniowany koniec, który powinien być użyty jako punkt wyjścia w przypadku, gdy lina jest uwzględniona w rozwiązaniu. Miło będzie mieć dokładne rozwiązanie tego problemu. (To daje nam coś w rodzaju celu, który ma osiągnąć nasz projekt). Czy ktoś może mi powiedzieć, jak mogę do tego podejść? Dla mojej pracy n wynosi około 10^5. Łączna liczba kolorów również jest rzędu 10^5. Liczba pierścieni o różnych kolorach na każdej linie waha się od 0 do około 10^3 co najwyżej.


title: Przekonwertować interpreter na kompilator?

text: Po pierwsze, wiem, że jest to pytanie zadawane przez WIELU programistów przede mną. Ale nie mogłem znaleźć żadnego użytecznego zasobu, który mógłby mi pomóc. Cóż, tworzę język programowania o nazwie „Light”, którego składnia jest porównywalna do Pythona, ale ma ścisłą koncepcję zorientowaną obiektowo. Zrobiłem interpreter (w C++) dla tego języka, mój problem polega na tym, jak przekształcić to w wykonalny. (Lub po prostu: jak zrobić kompilator?) Dzięki za uwagę PS: Znalazłem kilka linków do bardzo starego samouczka, ale jest on w Pascalu... EDIT: No dobrze. Teraz znalazłem odpowiedni tutorial dla C++. O projekcie: Nastąpiły pewne zmiany. Teraz język nazywa się „Q”. (kju kropka).


title: Jak zmierzyć, czy zespół wykonuje Test Driven Development

text: Mój zespół rozważa cel wydziału, jakim jest realizacja Test Driven Development w przyszłym (podatkowym) roku. TDD brzmi nieźle, a mój menedżer jest na pokładzie. Jedynym problemem jest pomiar. Zasady naszej firmy wymagają, aby cele działu były mierzalne. Czy jest jakiś (rozsądny) sposób mierzenia, czy zespół wykonuje TDD? **Uwaga:** Mieliśmy już za cel pisanie testów jednostkowych, **więc cel pokrycia kodu nie zadziała.** Testy jednostkowe piszemy, ale robimy to po fakcie, a nie wcześniej. Czy istnieje sposób na zmierzenie, że TDD jest wykonywane? (UWAGA: Używamy Visual Studio 2013 i TFS, jeśli ma to znaczenie)


title: Jak nakłonić właściciela projektu do udziału w testach akceptacyjnych?

text: Zacząłem używać trackera Pivotal w projekcie, nad którym pracuję. Koncepcyjnie wydaje się to naprawdę fajne i jestem zainteresowany wykorzystaniem modelu zwinny. Mam jednak jeden problem ze wszystkim, o czym mowa w filmie. O 4:19 w dołączonym filmie opowiadają o akceptacji historii i o tym, jak powinien to zrobić właściciel projektu. Ta koncepcja brzmi świetnie na papierze, ale nie jestem pewien, czy rzeczywiście uda mi się skłonić właściciela projektu, aby usiadł i wypróbował choć połowę nowych funkcji, które tworzę, nie mówiąc już o nich wszystkich. Moje pytanie brzmi: jak podchodzisz do właściciela produktu w sprawie pracy, której wymaga od niego ten smak Modelu Agile? Co zrobisz, jeśli odmówią udziału w testach akceptacyjnych?


title: Czy scrum ma jakąś wartość w kontraktowaniu na obronność?

text: Podsłuchane wczoraj w dystrybutorze wody: „Scrum nie ma miejsca na kontrakty obronne”. Zwykle nie zgadzam się z tym w tym sensie, że wierzę, że Scrum może być dostosowany do pracy w wielu scenariuszach i widzę, że obrona jest jednym z nich. Wywołało to ogromną debatę wśród moich kolegów (wielu z nas pracuje w kontraktach obronnych) z dość równym podziałem za/przeciw. Aby to było właściwe pytanie: Czy ktoś z powodzeniem zastosował (lub ma doświadczenie w pracy z) scrum w sytuacji kontraktowania obrony? Co działało dobrze, co nie działało dobrze i jakie (jeśli w ogóle) modyfikacje waniliowego scrum zrobiłeś?


title: Czy istnieje termin używany, gdy zmienne wewnętrzne są deklarowane jako publiczne i dostępne?

text: Jeśli ktoś pisze kod w taki sposób, że zmienna wewnętrzna $_fields jest dostępna bez użycia metod pobierających/ustawiających, to czy istnieje odpowiedni termin, aby to opisać? Coś na tyle uprzejmego do wykorzystania z kierownictwem :)


title: Idealny programista do tworzenia gier HTML5 po stronie klienta

text: Nasza następna gra będzie oparta na JavaScript/HTML5 Canvas, a nie na ActionScript/Flash. Oczywiście na rynku nie ma wystarczająco dużo doświadczonych programistów HTML5, więc musimy być kreatywni w naszych wysiłkach rekrutacyjnych. Pytanie brzmi więc, jak wygląda profil tego programisty, który może nauczyć się niezbędnych umiejętności w pracy tak efektywnie, jak to możliwe. Oto opcje, które rozważaliśmy – tak naprawdę tylko dwa oczywiste i przeciwstawne modele. **1\. Zatrudnij programistów Flash** * _Wada:_ będą musieli nauczyć się nie tylko nowego języka, ale także nowego środowiska programistycznego, ponieważ ze względu na specyficzną naturę Flash Builder każdy składnik środowiska deweloperskiego HTML 5 może wydawać się nowy i nieznany * _zaleta_ : już biegle w rozwoju po stronie klienta - zadania pozostają takie same, zmienił się tylko język. **2\. Zatrudnij najbardziej utalentowanych programistów dostępnych** * _niekorzyść_ : opóźnienie – większość lub cały czas (8-12?) tygodni należy spędzić w trybie czystej nauki, bez żadnych innych wymagań dotyczących ich czasu. * _zaleta_ : szybko się uczą i będą się uczyć dalej; wybitni programiści staną się wybitnymi programistami Javascript; zajmie to tylko trochę czasu. Najlepszą odpowiedzią na to pytanie może być trzeci model rekrutacji lub bardziej wyrafinowana analiza dwóch przedstawionych poniżej. Innymi słowy, nie miałem zamiaru, aby wcześniejsza dyskusja w jakikolwiek sposób ograniczała odpowiedzi.


title: idquantique .vs. rdrand

text: Obecnie przyglądamy się wykorzystaniu generatora liczb losowych idquantique do dostarczania liczb losowych. Jest jednak kilka problemów. Używalibyśmy tylko jednego urządzenia i mamy co najmniej 5 serwerów, które musiałyby z niego korzystać, a liczba ta prawdopodobnie wzrośnie w przyszłości. Oznacza to, że bloki liczb losowych musiałyby w jakiś sposób zostać wysłane na serwery. Wszystkie serwery działają pod kontrolą Linuksa. Wszystkie nasze serwery są oparte na technologii Intel i mają dostępną instrukcję liczb losowych RDRi. Łatwiej byłoby korzystać z RDRand, ponieważ nie trzeba by wykonywać połączeń sieciowych, a RDRand wydaje się być znacznie szybszy. Ale pytanie, na które chciałbym odpowiedzieć, brzmi - czy jest różnica między jakością liczb losowych generowanych przez RDRand a tymi generowanymi przez idquantique? Czy ktoś kiedykolwiek zmierzył lub próbował zmierzyć, jak dobrze te dwa urządzenia liczb losowych radzą sobie ze sobą?


title: Usługi domenowe jako fasady

text: Przeczytałem .NET Domain-Driven Design z C#: Problem - Design - Solution i zauważyłem, że autor stworzył usługę domeny dla każdego zagregowanego roota. Jednak usługi domenowe były tylko fasadą odpowiedniego repozytorium. Na przykład jest to przykładowy kod aplikacji z jego książki public static class CompanyService { private static repozytorium ICompanyRepository; prywatny statyczny IUnitOfWork unitOfWork; static CompanyService() { CompanyService.unitOfWork = new UnitOfWork(); CompanyService.repository = RepositoryFactory.GetRepository<ICompanyRepository, Company>(CompanyService.unitOfWork); } public static IList<Firma> GetOwners() { return CompanyService.GetAllCompanies(); } public static IList<Firma> GetAllCompanies() { return CompanyService.repository.FindAll(); } public static void ZapiszFirma(Firma firmy) { FirmaService.repository[firma.Key] = firma; CompanyService.unitOfWork.Commit(); } public statyczna Firma GetCompany(obiekt companyKey) { return CompanyService.repository.FindBy(companyKey); } } Jak widzisz, prawie wszystkie wywołania usług są nakładkami na wywołania z repozytorium. Czy to dobry wzorzec przy tworzeniu usług domenowych? Czy powinniśmy zawsze pakować nasze repozytoria w usługi domenowe? Czy istnieje lepsze podejście?


Jaka jest rola Project Managera w Scrum? Słyszałem, że nie jest wskazane, aby PM był SCRUM Masterem, co uważam za sensowne, ponieważ PM nadzoruje projekt, podczas gdy SCRUM Master jest bardziej zainteresowany zarządzaniem pakietami roboczymi. Moim zdaniem wydaje się, że posiadanie PM jako SCRUM Mastera jest sprzeczne z managiną, jedną z zasad PRINCE2. Kierownik projektu powinien bardziej zajmować się: * ustaleniem zakresu projektu, zapewnieniem ważności uzasadnienia biznesowego projektu * planowaniem liczby iteracji * utrzymaniem ogólnego planu projektu, w tym dat wydania oprogramowania * pozyskiwaniem zewnętrznych zasobów potrzebnych zespołowi Scrum np. użytkownicy do testów akceptacji użytkowników * zarządzanie ryzykiem i problemami eskalowanymi przez zespół Scrum * komunikacja z kadrą zarządzającą, w tym raportowanie postępów. można/należy połączyć?


title: Jak zapobiec zakodowaniu adresów na sztywno w projekcie internetowym?

text: W dość skomplikowanej aplikacji internetowej są prawie setki przekierowań do innej strony, linków do innej strony itp. Wyobraź sobie, że masz stronę o nazwie `/services/users/register-new-user` i w wielu miejscach aby przekierować użytkowników na tę stronę lub chcesz podać linki do tej strony. Jednakże, jeśli z jakiegoś powodu w przyszłości zmienisz ten adres na coś takiego jak `/users/register`, powinieneś zaktualizować wszystkie linki, w przeciwnym razie nie zostaną rozwiązane. Zawsze napotykam ten problem, ponieważ gdziekolwiek chcę przekierować lub połączyć się z `/services/users/register-new-user` koduję na stałe cały adres względny. Jak mogę poprawić ten wzór?


title: Freelancerzy: jak sobie radzisz ze zbieraniem wymagań?

text: Jako niezależny programista: 1. Jak wygląda Twój proces zbierania wymagań od klienta? 2. Ile czasu zajmuje Ci proces zbierania wymagań? Wiem, że to nie jest naprawione i istnieją zmienne, takie jak szybkość odpowiedzi klienta i tak dalej. Ogólnie biorąc, biorąc pod uwagę opóźnienia w odpowiedziach i tym podobne, ile czasu zajmuje osiągnięcie ostatecznego wymagania? 3. Z jakiego kanału komunikacji (e-mail, telefon, komunikator internetowy, inny) korzystasz, aby zebrać te wymagania? 4. Czy pobierasz opłaty za czas spędzony na zbieraniu wymagań? 5. Czy w twoim procesie zbierania wymagań są jakieś rezultaty? Jeśli tak, jakie one są?


title: O jakich problemach powinienem pamiętać podczas franczyzy mojego kodu?

text: Prowadzę serwis internetowy za pomocą strony internetowej, a ostatnio dostałem propozycję franchisingu tej usługi innej firmie. Problemy pojawiają się, gdy chcą, aby cały mój kod działał na ich serwerach. Rozumiem ich powody, ale chcę podjąć kroki, aby rdzeń mojego kodu PHP pozostał ukryty i niezmieniony. Chcę podjąć środki, aby nie odsprzedawać mojego kodu innemu licytantowi ani nie używać mojego adresu IP. Po kilku badaniach wymyśliłem kilka rozwiązań, takich jak szyfrowanie PHP, zaciemnianie czy odciski palców danych. To, o co proszę, jest męskie: * O czym powinienem wiedzieć, podając swój kod? * Co mogę zrobić, aby uniemożliwić im zrozumienie i sprzedaż mojego kodu innej osobie?


title: Miałem 7 prac w ciągu 16 lat. Czy to w porządku?

text: Miałem 7 prac w ciągu 16 lat. Oto, co dzieje się w każdej pracy: * Rok 1: Nowi ludzie! Nowe miejsce! Nowa technologia! * Rok 2: Produktywny. * Rok 3: Bezinteresowny. Czy mogę dostać inną pracę, robiąc to samo, ale zarabiać więcej pieniędzy? Teraz jestem na 5 roku mojej obecnej pracy i nadal nie jestem zainteresowany. Ale ja zarabiam 99k jako "konsultant" i nie będę w stanie zarobić więcej pieniędzy nigdzie indziej za samo programowanie. Poza tym nigdy nie nawiązuję przyjaźni w pracy. W wolnym czasie nie piszę kodu. Wybrałem MIS, ponieważ wiedziałem, że zapewni mi dobrą płatną pracę i nie będę musiał polegać na nikim innym w kwestii pieniędzy. Otaczają mnie ludzie, którzy mają pasję do rozwoju, co jeszcze gorzej. Muszę brać antydepresanty i mam karteczkę z napisem „Wdzięczność”, na którą muszę codziennie patrzeć, aby przypomnieć sobie, że mam ją świetnie. Czy ktoś jeszcze przez to przechodzi? Czy to normalne dla programistów?


title: Co robisz z treścią, gdy ktoś prosi Cię o zbudowanie strony internetowej?

text: Jestem doświadczonym programistą asp.net i asp.net mvc i mam własny CMS, który napisałem, ale zaczynam myśleć, że powinno być inne podejście. Kiedy ktoś prosi Cię o stworzenie strony internetowej, w jaki sposób ją rozwijasz, aby mogli dodawać zdjęcia, pokazy slajdów, treści, wiadomości, wydarzenia z dziennika. Na marginesie, czy dajesz im projekt strony głównej i wewnętrznej strony i to wszystko. Po prostu myślę, że jeśli odwrócą się i powiedzą 6 miesięcy później, chcę pokaz slajdów jquery po prawej stronie tej strony, jak sobie z tym poradzicie lub CMS?


title: Jak pisać historie do projektów wewnętrznych

text: Pracuję nad projektem, który przebiega regularnie jako proces. Wyniki prowadzonych na co dzień projektów są wykorzystywane przez inne projekty. To skłania mnie do pytania, w jaki sposób nasz zespół pisze historie. Normalny format: „Jako [rola] chcę [cel/pragnienie], aby [powód”] nie miał zastosowania, ale jednocześnie w to wątpię. Oto, co robimy teraz: _System zostanie wykonany po pomyślnym zakończeniu procesu ABC._ Czy powinniśmy używać innych projektów (które wykorzystują dane z naszego procesu) jako części _roli_ narracji? To, co teraz robimy, wydaje się za bardzo przypominać wymagania..


title: chciałbyś pomóc w zrozumieniu funkcji przepustnicy javascript

text: Użytkownik Stack Overflow wysłał pytanie dotyczące nadpisania natywnej funkcji JS. Pytanie jest tutaj i to jest kod: function throttle(fn, time) { var handle; var execute = function() { uchwyt = null; fn.apply(to, argumenty); }; var throttled = function() { if(!handle) { handle = setTimeout(execute.bind(this), czas); } }; ograniczono.toString = function() { return fn.toString() + "\n// ograniczono do " + czas + "ms"; }; powrót dławiony; } var makeAjax = throttle(function(callback) { $.getJSON("/path", callback); }, 500); Mam całkiem niezłą obsługę (chyba) w JavaScript, ale są pewne obszary, które są dla mnie bardzo szare. Chciałbym wiedzieć, co się dzieje w tym kodzie? Naprawdę nie rozumiem, co robią `bind` i `apply`, ani jaki byłby efekt końcowy tego wszystkiego. Sprawdziłem `bind` and `apply` w dokumentacji JS Mozilli, ale „oficjalna” definicja niewiele pomogła mi zrozumieć, co robią w tym kontekście. Doceniam twoją pomoc!


title: układ projektu za pomocą webapi

text: Mam następującą strukturę projektu, który chciałbym zrealizować. Chciałbym wiedzieć, czy są jakieś pułapki związane z taką strukturą mojego kodu. Będzie korzystał z Microsoft WebAPI, projektu MVC 4 i Plain Old C# Objects (POCO). Wyjaśnienie następuje. Najpierw będzie projekt biblioteki klas, który będzie zawierał tylko interfejsy i obiekty takie jak: public interface IBookService { IEnumerable<Book> GetBooks(); } public class Book { public int Id { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } } Ten interfejs i klasa będą współdzielone przez inne projekty. Pierwszym jest projekt implementacji, który zawiera: public class BookService : IBookService { // implementacja pobierająca skądś książki } Trzeci projekt będzie projektem WebAPI, który udostępnia `IBookService` jako uri, taki jak _http://mysite /książki_. **AKTUALIZACJA:** Ta witryna WebAPI będzie znajdować się na innym komputerze niż witryna MVC. Teraz jestem zaniepokojony wyborem implementacji. Czwarty i ostatni projekt to aplikacja MVC 4. Odwołuje się tylko do interfejsów i internetowego interfejsu API (za pośrednictwem `HttpContent` i znajomych). W tym projekcie chciałbym również zaimplementować interfejs `IBookService`. Z wyjątkiem tej implementacji nazwałby WebAPI w ten sposób. klasa publiczna MvcBookService : IBookService { public IEnumerable<książka> GetBooks() { klient var = new HttpClient(); client.BaseAddress = new Uri("http://mySite"); // zostanie pobrany z konfiguracji client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("aplikacja/json")); Odpowiedź HttpResponseMessage = client.GetAsync("książki").Result; // blokowanie wywołania if (response.IsSuccessStatusCode) { // blokowanie wywołania return response.Content.ReadAsAsync<IEnumerable<Book>>().Result; } else { // obsługa kodu odpowiedzi return null; } } } Planuję egzekwowanie tej struktury projektu dla wszystkich interakcji WebAPI w firmie. Nie widzę żadnych problemów z utrzymaniem tego układu projektu. Jednak wiele oczu zawsze pomaga.


title: Projekt wieloplatformowy z Delphi, Java, MySQL i CouchDB

text: Jakie są najbardziej oczywiste wady tego pomysłu na model korporacyjny wykorzystujący następujące technologie. 1. Oparty na przeglądarce i natywnie opracowany GUI wykorzystujący Delphi do łączenia się z 2. Serwer Datasnap (oczywiście Delphi) przez Rest, który przechowuje dokumenty w 1. Serwerze CouchDB Ale pobiera strukturę dla tych dokumentów ze scentralizowanego drzewa 3. Łączących się serwerów JBoss do 1. Bazy danych MySQL, które zawierają informacje o wszelkiego rodzaju rzeczach specyficznych dla domeny 4. Które łączą się z innym serwerem JBoss, aż do scentralizowanego repozytorium hostowanego w celu utrzymania pewnego rodzaju kontroli nad licencjonowaniem i strukturą programu. Wiem, że to trochę niejasne, ale wytrzymaj ze mną. Naprawdę pytam: 1. Czy rozsądne jest używanie kombinacji NoSQL i SQL DB i 2. Czy łatwiej jest je mieszać, jeśli nie są połączone z tą samą usługą backendu. 3. Jeśli to po prostu szaleństwo. Myślałem o tym w drodze do pracy i wydaje się, że rozwiązuje wszystkie nasze problemy. Nie jestem pewien, czy datasnap jest wystarczająco solidny, ale zamiast tego moglibyśmy użyć node.js lub innego serwera jboss. Chciałem po prostu iść z Delphi, ponieważ mamy to i wiemy o tym. Myślę, że jest to dość normalny model, a różnica polega na tym, że serwer WWW (lub serwer datasnap) jest tym, do którego dołączona jest baza danych, a także serwer danych. Myślę, że tak jest lepiej i prawdopodobnie miałoby sens, gdybym powiedział, że dotyczy to przede wszystkim dokumentacji medycznej i lepiej, aby dokumenty były oddzielone od rzeczy, które wymagają aktualizacji, ale jest to rozwiązanie ogólnego przeznaczenia do przechowywania informacji w zorganizowany sposób.


title: niejawne vs jawne interfejsy

text: Myślę, że rozumiem faktyczne ograniczenia polimorfizmu w czasie kompilacji i polimorfizmu w czasie wykonywania. Ale **jakie są koncepcyjne różnice między interfejsami jawnymi (polimorfizm w czasie wykonywania, tj. funkcje wirtualne i wskaźniki/odniesienia) a interfejsami niejawnymi (polimorfizm w czasie kompilacji, tj. szablony).** Moje myśli są takie, że dwa obiekty, które oferują ten sam jawny interfejs musi być obiektem tego samego typu (lub mieć wspólnego przodka), podczas gdy dwa obiekty, które oferują ten sam niejawny interfejs, nie muszą być tym samym typem obiektu i, wyłączając niejawny interfejs, który oba oferują, mogą mieć całkiem inna funkcjonalność. Jakieś przemyślenia na ten temat? A jeśli dwa obiekty oferują ten sam niejawny interfejs, jakie są powody (oprócz technicznej korzyści wynikającej z braku potrzeby dynamicznej wysyłki z tablicą wyszukiwania funkcji wirtualnych itp.) dla tego, że te obiekty nie dziedziczą z obiektu bazowego, który deklaruje ten interfejs, a zatem czyniąc go _jasnym_ interfejsem? Inny sposób wyrażenia tego: czy możesz podać przypadek, w którym dwa obiekty, które oferują ten sam niejawny interfejs (i dlatego mogą być używane jako typy w przykładowej klasie szablonu), nie powinny dziedziczyć z klasy bazowej, która czyni ten interfejs jawnym? Kilka powiązanych postów: http://stackoverflow.com/a/7264550/635125 http://stackoverflow.com/a/7264689/635125 http://stackoverflow.com/a/8009872/635125 * * * Oto przykład skonkretyzuj to pytanie: Niejawny interfejs: class Class1 { public: void interfaceFunc(); nieważna innaFunkcja1(); }; class Class2 { public: void interfaceFunc(); nieważna innaFunkcja2(); }; klasa szablonu UseClass { public: void run(T & obj) { obj.interfaceFunc(); } } Jawny interfejs: ` class InterfaceClass { public: virtual void interfaceFunc() = 0; }; } class Class1 : public InterfaceClass { public: virtual void interfaceFunc(); nieważna innaFunkcja1(); }; class Class2 : public InterfaceClass { public: virtual void interfaceFunc(); nieważna innaFunkcja2(); }; class UseClass { public: void run(InterfaceClass & obj) { obj.interfaceFunc(); } } * * * Jeszcze bardziej szczegółowy, konkretny przykład: Niektóre problemy C++ można rozwiązać za pomocą: 1. klasy opartej na szablonie, której typ szablonu zapewnia niejawny interfejs 2. klasy nie będącej szablonem, która przyjmuje wskaźnik do klasy bazowej który zapewnia jawny kod interfejsu, który się nie zmienia: class CoolClass { public: virtual void doSomethingCool() = 0; wirtualna pustka bezwartościowa() = 0; }; class CoolA : public CoolClass { public: virtual void doCosCool() { /* Rób fajne rzeczy, które zrobiłby A */ } virtual void valueless() { /*Worthless, ale musi być zaimplementowany */ } }; class CoolB : public CoolClass { public: virtual void doCosCool() { /* Rób fajne rzeczy, które zrobiłby B */ } virtual void valueless() { /*Worthless, ale musi być zaimplementowany */ } }; Przypadek 1: Klasa nieszablonowa, która przyjmuje wskaźnik klasy bazowej, który zapewnia jawny interfejs: class CoolClassUser { public: void useCoolClass(CoolClass * coolClass) { coolClass.doSomethingCool(); } }; int main() { CoolA * c1 = nowa CoolClass; CoolB * c2 = nowa CoolClass; </br> CoolClassUser użytkownik; użytkownik.useCoolClass(c1); użytkownik.useCoolClass(c2); </br> zwróć 0; } Przypadek 2: Klasa szablonowa, której typ szablonu zapewnia niejawny interfejs: szablon <nazwatypu T> class CoolClassUser { public: void useCoolClass(T * coolClass) { coolClass->doSomethingCool(); } }; int main() { CoolA * c1 = nowa CoolClass; CoolB * c2 = nowa CoolClass; </br> CoolClassUser<CoolClass> użytkownik; użytkownik.useCoolClass(c1); użytkownik.useCoolClass(c2); </br> zwróć 0; } Przypadek 3: Klasa szablonowa, której typ szablonu zapewnia ukryty interfejs (tym razem nie wywodzący się z _CoolClass_ : class RandomClass { public: void doSomethingCool() { /* Rób fajne rzeczy, które zrobiłaby RandomClass */ } // Nie ' nie trzeba implementować valueless()! * c1 = nowa RandomClass; RandomClass * c2 = nowa RandomClass; </br> CoolClassUser<RandomClass> użytkownik; user.useCoolClass(c1); user.useCoolClass(c2); </br> return 0; } Przypadek 1 wymaga, aby obiekt przekazywany do _useCoolClass()_ być dzieckiem CoolClass (i zaimplementować _worthless()_ ). Z drugiej strony przypadki 2 i 3 przyjmą klasę _any_, która ma funkcję _doSomethingCool()_. Jeśli użytkownicy kod zawsze był dobrze podklasą _CoolClass_ , wtedy przypadek 1 ma intuicyjny sens, ponieważ _CoolClassUser_ zawsze oczekiwałby implementacji _CoolClass_. Ale załóżmy, że ten kod będzie częścią frameworka API, więc nie mogę przewidzieć, czy użytkownicy będą chcieli podklasy _CoolClass_ lub rzucić własną klasę, która ma funkcję _doSomethingCool()_.


title: Opinie na temat tego stosu zaplecza

text: Planuję skonfigurować skalowalną architekturę zdolną do dostarczania usług internetowych na interfejsie REST, w którym zostanie wysłany JSON. Usługi sieciowe będą dość proste dla aplikacji CRUD web 2.0. ![Architektura](http://i.stack.imgur.com/Omfqb.png) Myślę, że javascript (nodejs + mongodb) jest dobrym wyborem z następujących powodów: * Łatwo znaleźć programistów javascript * Dobra wydajność * Łatwość scale * Wspólna logika/język lub możliwe ponowne użycie kodu między językiem zapytań bazy danych, zapleczem i klientem internetowym. * Istnieją frameworki testujące i rejestrujące dla węzła * Na przykładach, które widziałem, node wydaje się lekki, jeśli chodzi o linie kodu potrzebne do implementacji usług internetowych. **Pytania:** 1. Myślę o skalowaniu aplikacji węzła, która dostarcza usługę sieciową, jako posiadającej węzeł centralny, który będzie pobierał opłaty za routing/równoważenie do każdej instancji węzła. Co również pomoże w wykonywaniu bezproblemowych aktualizacji, czy jest już zaimplementowane oprogramowanie, które może sprostać temu zadaniu? 2. Proszę wskazać wszystkie wady lub inne zalety, które można znaleźć w tym stosie zaplecza 3. Jakieś inne dobre opcje trwałości inne niż MongoDB? Głównie ten wybór pochodzi z języka zapytań javascript i schematów JSON.