title: Jak najlepiej pokazać część mojego kodu podczas rozmowy kwalifikacyjnej?

text: Zdaję sobie sprawę, że jest już kilka pytań na ten temat, ale najczęściej dotyczą one _jeśli_ należy przynieść kod na rozmowę kwalifikacyjną, co nie ma miejsca w tym przypadku. Mam rozmowę o pracę (w startupie) w przyszłym tygodniu i _poprosili_ o przyniesienie kodu na rozmowę. Mam dwa mniejsze projekty open-source i aplikację na Androida o zamkniętym kodzie źródłowym, o której wspomniałem (i połączyłem) w moim arkuszu umiejętności, który wysłałem, więc chciałem pokazać im trochę kodu tych projektów. To moja pierwsza praca po ukończeniu studiów, więc nie mam żadnych źródeł z poprzednich miejsc pracy i nie będzie żadnych problemów związanych ze „szpiegiem”, kwestiami licencyjnymi, poufnym kodem itp. Cały kod jest całkowicie mój i napisany przeze mnie. Myślę, że mam prawie trzy opcje: wydrukować kilka interesujących części kodu na papierze lub pokazać wszystko na tablecie lub laptopie. Te dwie ostatnie mają tę zaletę, że mogę przynieść wszystkie moje projekty i w zasadzie pokazać im wszystko, co chcą zobaczyć. Jednak nie możesz bezpośrednio robić notatek/podkreślać rzeczy itp., jakbym to wydrukował i jest to mniej wygodne niż rozdawanie papieru. Jaki jest najlepszy sposób, aby zająć się tym profesjonalnie i zrobić to tak bezproblemowo, jak to możliwe? Obecnie mam tendencję do drukowania niektórych części, które moim zdaniem są zarówno interesujące, jak i dobrze napisane, ale mam wszystko na swoim tablecie na wypadek, gdyby chcieli zobaczyć więcej.


title: Jak te technologie idą w parze?

text: * Ruby on Rails * Twitter Bootstrap * Html5Boilerplate * Backbone.JS lub Knockout.JS W pewnym sensie rozumiem, czym jest każdy z nich z osobna, ale moje zrozumienie nie jest wystarczająco silne, aby zrozumieć, czy niektóre z nich pokrywają się w funkcjonalności i czy jest jakiś podzbiór z tej listy zawiera przedmioty, których nie użyłbyś razem, ponieważ pełnią podobne role. Jestem dość jasny w kwestii RoR-- to głównie ostatnie trzy, nie jestem pewien, jak grają razem.


title: Jak planować/zarządzać produktami wieloplatformowymi (mobilnymi)?

text: Powiedzmy, że muszę stworzyć aplikację działającą na iOS, Android i Windows 8 Mobile. Teraz wszystkie trzy platformy są technicznie w różnych językach programowania. Jedyne „ponowne użycie”, jakie widzę, to wykresy z pudłami i liniami (UML :) i nic więcej. Jak więc firmy/programiści zarządzają zmiennością tego samego produktu na różnych platformach, zwłaszcza że języki wdrażania różnią się? Jest to „łatwiejsze” w świecie komputerów stacjonarnych IMO, biorąc pod uwagę mnóstwo języków i wieloplatformowych bibliotek, które ułatwiają życie. Nie tak w świecie mobilnym. Co więcej, zasady zarządzania linią produktową nie wydają się być aż tak istotne - to, co jest takie samo i wariant, tak naprawdę nie ma znaczenia - aplikacja jest taka sama (koncepcyjnie), a wdrożenie jest wariantowe. Niektóre trudności, które przychodzą mi do głowy: * **Naprawianie błędów** : Aplikacje mogą być zaprojektowane w podobny sposób, ale identyfikacja i naprawianie błędów byłoby radykalnie inne. Błąd w systemie iOS może/nie może istnieć w systemie Android. Lub podejście do naprawy błędów na jednej platformie może nie być takie samo na innej (chyba że jest to błąd semantyczny, taki jak `a!=b` zamiast `a==b`, który w istocie wymagałby takiego samego 'podejścia' do naprawy * * *Ulepszenia** : Dokonanie zmiany na jednej platformie byłoby radykalnie inne niż na innej * **Rozbieżności w projektowaniu kodu** : Sposób, w jaki kod jest napisany/zorganizowany, struktury klas itp. mogą być bardzo różne, biorąc pod uwagę różne środowiska wdrożeniowe - prowadzące do dalszego ponownego wykorzystania (powyżej) modeli UML.Oczywiście jest wiele innych - po prostu utrzymywanie synchronizacji rozwoju i upewnianie się, że wszystkie aplikacje są w tej samej wersji z tym samym zestawem funkcji itp. Wydaje się, że jest to wysiłek jest 3x większa niż w przypadku pojedynczej aplikacji.Więc jak dokładnie można poradzić sobie z tą koszmarną sytuacją?Kilka przemyśleń: * Podziel aplikację na klienta/serwer, aby zminimalizować efekt tylko po stronie klienta (nie zawsze jest to możliwe) * Użyj frameworków takich jak Unity-3D, które mogą zająć się problemem międzyplatformowym (głównie ma zastosowanie do gier, a prawdopodobnie nie do innych aplikacji itp.) Jakieś inne sposoby zarządzania linią platformy? Jakie są sprawdzone podejścia do zarządzania/okiełznania skutków?


title: Architektura logiczna Carpool

text: Projektuję system carpool (kierowcy mogą publikować swoje trasy, a pasażerowie mogą je subskrybować) z klientami WebServices (axis2) i Android (ksoap2). Miałem problemy z logiczną architekturą systemu i zastanawiałem się, czy ta architektura jest w porządku. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/mmyUf.png) I jeszcze jedno pytanie: dla tej architektury (jeśli jest ok), jak wyglądałaby struktura pakietów? Przypuszczam, że coś takiego: (W Androidzie) `package org.carpool.presentation` *Wszystkie działania tutaj (i może wzorzec mvc) (Na serwerze) `package org.carpool.services` *Interfejsy publiczne (na przykład: register (Użytkownik), publishRoute(Route route) ) `package org.carpool.domain` *Pojos (na przykład: User.java, Route.java, itp.) `package org.carpool.persistence` *Dao Interfejs i implementacja (jdbc lub hibernacji)


title: Czy istnieje najskuteczniejszy sposób sprawdzenia, czy kolekcja zawiera dokładnie 1 element?

text: Wymyśliłem to rozwiązanie: jeśli (Take(2).Count() == 1) czy jest jakieś rozwiązanie wydajnościowe (lub lepszy cukier składniowy), aby wykonać tę kontrolę? Chcę uzyskać sposób na wydajność, ponieważ będzie to rozszerzenie używane w Linq To Entites i Linq to Objects. Nie używam „SingleOrDefault”, ponieważ spowoduje to zgłoszenie i wyjątek, jeśli ma więcej niż 1 element. Na podstawie odpowiedzi @Telastyn wymyśliłem: public static bool HasOne<T>(this IEnumerable<T> enumerable) { var enumerator = enumerable.GetEnumerator(); return enumerator.MoveNext() && !enumerator.MoveNext(); } inna implementacja (nieco wolniejsza, ale 100% na pewno będzie działać skutecznie w Linq to Entities) to : public static bool HasOne<T>(this IEnumerable<T> enumerable) { return !enumerable.FirstOrDefault().Equals(default(T) )) && !enumerable.Skip(1).Any(); } Nie jestem pewien, czy ruch `MoveNext` działa z IQueryable w Linq to Entites. (jacyś chętni? Nie wiem jak to przetestować) Po pewnym teście `Take(2).Count() == 1`; jest najszybszy. :S


title: Jak tworzyć złożone aplikacje

text: Chcę poznać podejście do tworzenia dużych złożonych aplikacji niezależnie od tego, jakiego języka programowania użyć. Chcę wiedzieć, jak programiści tworzą tak duże aplikacje, takie jak bankowość internetowa, API i duże aplikacje do zarządzania bazami danych. Jak należy podejść do składania takich wniosków. Mam do tej pory tylko roczne doświadczenie w programowaniu i pracuję jako freelancer, więc kiedy zobaczyłem takie aplikacje, przyszło mi do głowy wiele pytań. Jak rozumieć podstawową potrzebę technologii informacyjnej. Co to właściwie jest? Jak może się przydać zwykłym mieszkańcom małych miasteczek. Chcę, aby wszyscy korzystali z technologii, bez względu na to, czy są wykształceni, czy nie, bogaci czy nie. Proszę o kilka sugestii.


title: Czy dobrą praktyką jest zwracanie tablicy obiektów?

text: Jeśli mam klasę ItemContainer, która zawiera na przykład elementy w zamówieniu, gdzie każdy element jest obiektem Item; czy najlepiej jest mieć metodę taką jak: ItemContainer->getItems(), która zwraca tablicę zawierającą obiekty Item, czy lepiej jest zrobić coś takiego: ItemContainer->getItem($itemNo), która zwraca pojedynczy obiekt item dla tego elementu numer i rezygnuje z tablicy. Zdaję sobie sprawę, że może to być trywialne pytanie lub po prostu jedno z preferencji, ale chciałbym, aby moja aplikacja od początku korzystała z najlepszych praktyk i nie jestem pewien, w jaki sposób postępować. Piszę w PHP, ale doszedłem do wniosku, że dotyczy to praktycznie każdego języka OOP.


title: Co zabrać na rozmowę programistyczną?

text: Właśnie ukończyłem studia magisterskie z informatyki i odbyłem pierwszą rozmowę o pracę jako programista. Nie mam dużego doświadczenia w projektach rozwojowych na dużą skalę, ale mam nadzieję, że moje wykształcenie na uczelni coś się liczy. Zastanawiam się, jakie materiały przywieźć, żeby zrobiły wrażenie na moich ankieterach? Czego większość ankieterów oczekuje, zwłaszcza od nowego absolwenta? **Edytuj: Rozmowa kwalifikacyjna przebiegła dobrze, z wyjątkiem tego, że zapomniałem spodni. Dzięki za wszystkie świetne rady!


title: Jakie są względne zalety zaimplementowania wzorca „Kontynuacja” w stylu Erlanga w C#

text: Jakie są względne zalety ( _lub wady_ ) implementacji wzorca „Kontynuacja” w stylu Erlanga w języku C#. Pracuję nad projektem, który ma dużą liczbę wątków o najniższym priorytecie i zastanawiam się, czy moje podejście może być złe. Wydawałoby się, że istnieje rozsądny górny limit liczby długo działających wątków, które każdy Proces „powinien” odrodzić. Powiedziawszy to, nie jestem pewien, co sygnalizowałoby punkt krytyczny dla zbyt wielu wątków lub kiedy bardziej odpowiednie byłyby alternatywne wzory, takie jak „Kontynuacja”. W takim przypadku wiele wątków wykonuje niewielką ilość pracy, a następnie śpi, dopóki nie zostanie wybudzony, aby przejść ponownie ( _np. Puls, czyszczenie pamięci podręcznej itp. _ ). Trwa to przez całe życie Procesu.


title: Jakie są najlepsze praktyki uwierzytelniania internetowego w oparciu o pliki cookie?

text: Pracuję nad małym projektem pobocznym przy użyciu CGI i Pythona (skalowalność nie jest problemem i musi to być BARDZO prosty system). Myślałem o implementacji uwierzytelniania za pomocą plików cookie i zastanawiałem się, czy istnieją jakieś ustalone najlepsze praktyki. Po pomyślnym uwierzytelnieniu użytkownika chcę użyć plików cookie, aby dowiedzieć się, kto jest zalogowany. Co zgodnie z najlepszymi praktykami powinno być przechowywane w takim pliku cookie?


title: Kiedy musimy zastosować metodologię tworzenia oprogramowania?

text: Metodologii tworzenia oprogramowania jest wiele - SCRUM, agile, XP itd. - i wszystkie mają swoje zalety i wady, jak sądzę. Ale kiedy naprawdę musimy je zastosować? Z pewnością nie są one konieczne w przypadku małych jednoosobowych projektów, ale w przypadku dużych zespołów 50+ z pewnością nie można zajmować się tym ad hoc. Więc jaka jest linia, kiedy stosować, a kiedy nie stosować takiej metodologii, jeśli rzeczywiście istnieje?


title: Pozostanie OO i testowalność podczas pracy z bazą danych

text: Jakie są strategie OOP dotyczące pracy z bazą danych, ale z zachowaniem możliwości testowania jednostkowego? Powiedzmy, że mam klasę User, a moje środowisko produkcyjne działa przeciwko MySQL. Widzę kilka możliwych podejść, pokazanych tutaj przy użyciu PHP: 1. Przekaż $data_source z interfejsami dla `load()` i `save()`, aby wyabstrahować wewnętrzne źródło danych. Podczas testowania przekaż inny magazyn danych. $użytkownik = nowy użytkownik( $mysql_data_source ); $user->load( 'bob' ); $user->setNickname( 'Robby' ); $użytkownik->zapisz(); 2. Użyj fabryki, która uzyskuje dostęp do bazy danych i przekazuje wiersz wyników do konstruktora użytkownika. Podczas testowania ręcznie wygeneruj parametr $row lub zakpij obiekt w UserFactory::$data_source. (Jak mogę zapisać zmiany w rekordzie?) class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $użytkownik = nowy użytkownik( $wiersz ); zwróć $użytkownika; } } Mam obok siebie _Wzorce projektowe_ i _Czysty kod_, ale nie mogę znaleźć odpowiednich koncepcji.


title: Napisz test jednostkowy dla aplikacji mocno bazodanowej?

text: Obecnie pracuję nad aplikacją webową opartą na Springu, w której prawie każda operacja tworzy/aktualizuje/usuwa coś w bazie danych. Logika dotyczy głównie sprawdzania stanu, czy mamy tworzyć/aktualizować rekordy w bazie danych czy nie. Powodem, dla którego chcę wypróbować test jednostkowy, jest to, że często napotykamy błędy regresji, gdy żądamy zmian lub refaktoryzacji. Większość błędów pochodzi ze zmian w bazie danych, gdy nie odzwierciedlam w pełni tych zmian w kodzie. Mam teraz pewne doświadczenie w tworzeniu stron internetowych, ale wydaje mi się, że to nie wystarczy, aby powstrzymać ich pojawianie się. Mój kontroler/usługa nie jest w rzeczywistości zbyt złożona. Po prostu biorę obiekt wiążący przesłany z HttpRequest, **sprawdź warunek** i zapisz w DB. Czasami system musi odczytywać bazę danych, usuwać niektóre rekordy i manipulować nimi, a następnie aktualizować inne rekordy. Wiele wysiłku związanego z kodowaniem leży również w interfejsie (HTML/CSS/Javascript). Badam test jednostkowy i słyszałem, że jeśli chodzi o działanie bazy danych, nie jest to już test jednostkowy, ponieważ test będzie powolny. Czy to prawda? Więc jeśli mój projekt jest mocno związany z bazą danych, nie powinienem używać testu jednostkowego? Słyszałem też o DUnit i jakiejś bazie danych w pamięci, która może przyspieszyć test. Czy powinienem ich używać? A jak mogę napisać dobry test jednostkowy do działania bazy danych?


title: Jakiego wzorca użyć dla tego „konstruktora”? Dekorator kontra Fabryka?

text: Rozwijam program do generowania znaków LARP w javie i trafiłem na szkopuł. Początkowo planowałem użyć dekoratora do iteracji przez potencjalne „role” (efektywnie klasy), a następnie obliczyć koszty każdej umiejętności w zależności od kombinacji ról i przechowywać je w postaci. Np. możesz być koderem Java/nerdfighterem, jeśli to są twoje dwie role, lub możesz po prostu mieć rolę SysAdmin itp. Następnie opracowałem prototyp sposobu na zakup umiejętności, która wymagała wyszukiwania umiejętności w bazie danych, która zawierała ich nazwę i koszt. Oto szkopuł: Jeśli wstępnie obrobiłem koszty, nie muszę nigdy wyszukiwać bazy danych, więc żadne zmiany w bazie danych nie są wprowadzane (jeśli koszty umiejętności na SysAdminie spadną, chciałbym wiedzieć). Poza tym mogę kupić tylko ułamek dostępnych umiejętności, więc będę przechowywać niepotrzebne dane o kosztach umiejętności, a poza tym postać powinna wiedzieć tylko o swoich umiejętnościach, a nie o wszystkich umiejętnościach. Co więcej, dekorator ozdobiłby tylko koszty umiejętności, nic więcej. Zamiast tego czuję, że potrzebuję fabryki, która ma dwie opcje do konstruowania postaci, coś takiego: public static CharacterFactory multiRolePlayerCharacter(Role firstRole, Role secondRole) { /*Tu jest jakiś kod*/ } public static CharacterFactory singleRolePlayerCharacter(Role role) { / *Tu znajduje się trochę więcej kodu*/ } Ale wydaje się to znacznie mniej rozszerzalne w porównaniu z dekoratorem. Jeśli gra kiedykolwiek się zmieni, tak że możesz pełnić wiele ról więcej niż dwa razy (a Java Coder/Nerdfighter/SysAdmin jest dozwoloną rolą), to muszę przerobić od góry, aby dodać nową fabrykę. Nie wiem też, jak każda fabryka różni się poza być może flagą, która mówi, czy jest wielozadaniowy, czy nie, i inną zmienną, która przechowuje drugą rolę. Co nie wydaje się dużo. Wydaje się więc, że tak czy inaczej przegrywam: Decorator dodaje rozszerzalności na dłuższą metę, jednocześnie grzęznąc w moich klasach/obiektach, a Factory będzie działać na początku, ale będzie opierać się zmianom. Więc skąd mam wiedzieć, który wybrać? Czy jest jakiś sposób na połączenie tych dwóch? **Edytuj** : naprawdę interesuje mnie _dlaczego_ i _jak_ to zrobić, więc następnym razem wiem, którą opcję wybrać.


title: aplikacja na iPhone'a zrezygnuje z praw

text: Czy można zrezygnować z praw do aplikacji na iPhone innej osobie lub firmie? Mam na myśli to, że tworzysz aplikację, sprzedajesz ją przez chwilę, a potem już jej nie potrzebujesz i oddajesz lub sprzedajesz innej osobie lub firmie, aby ją dalej rozwijać. A w takim razie, w jaki sposób osoby, które już kupiły jego kopię, mogą nadal otrzymywać kolejne aktualizacje? Mam nadzieję, że wszystko jasne.


title: Czy należy umieścić metody rozszerzające interfejsu w pliku interface.cs?

text: Wyobraź sobie taką konfigurację: public interface IMass{ double Mass {get;} } public static class IMassExtension { public static double ToKg(this IMass massObject) { return massObject.Mass/1000.0; } public static double CalculateInteractiveGravity(this IMass massObject, IMass otherMassObject) { return blah; } } Czy można umieścić klasę rozszerzenia w tym samym pliku co interfejs (np. IMass.cs) czy też powinna być w osobnym pliku (IMassExtension.cs)? * * * Klasa bazowa nie jest tutaj możliwa. Wyobraź sobie klasę publiczną Osoba : Zwierzę, IMass {} i klasę publiczną Dom : Budynek, IMass {}


title: nie melduje się z katalogu głównego projektu

text: Za każdym razem, gdy wykonuję zaewidencjonowanie, zawsze zaewidencjonuję się z **głównego** projektu... tj. zaewidencjonuję **wszystkie** pliki w mojej kopii roboczej, więc po zaewidencjonowaniu repozytorium kontroli źródła zawiera dokładnie ten sam zestaw plików, który właśnie skończyłem testować w mojej lokalnej kopii. Upewniam się również, że moja kontrola źródła jest ustawiona na flagowanie plików lokalnych, które nie są ** pod kontrolą źródła. Ogólnie rzecz biorąc, nie ma **żadnego** z tych plików... jeśli są, dodaję je do kontroli źródła lub oznaczam je jako „ignorowane”. Sprawdzam również wszystkie moje zmiany razem podczas jednej odprawy. Wielu kolegów melduje się zupełnie inaczej. Starannie wybierają każdy plik do ewidencjonowania, jakby był mistrzem jubilerskim wybierającym tylko najlepsze kamienie szlachetne do osadzenia w królewskiej koronie, i odprawiają każdy z nich jako osobny check-in. Polegają tylko na swojej pamięci, aby dowiedzieć się, które pliki należy zaewidencjonować, a zwłaszcza **dodać** do kontroli źródła. Rezultaty są dość przewidywalne... częste nieudane kompilacje, ponieważ zapominają dodać nowe pliki do kontroli źródła lub zapominają zaewidencjonować zmieniony plik (zwłaszcza zmienione pliki projektu). Wspomniałem im o tym i wydaje się, że nigdy się nie zmieniają. Kiedy wspomniałem o tym kierownikowi zespołu, powiedział: „to jest po prostu inny sposób pracy”. Na co mogę odpowiedzieć: A jeśli chcę prowadzić samochód z zamkniętymi oczami? Czy to tylko „inny sposób jazdy”? Czy mam rację, że przeszkadza mi ta praktyka?


title: Jaka może być przyczyna pojawiania się nowych błędów w innym miejscu po rozwiązaniu znanego błędu?

text: Podczas dyskusji jeden z moich kolegów powiedział, że ma pewne trudności ze swoim obecnym projektem, próbując rozwiązać błędy. „Kiedy rozwiążę jeden błąd, coś innego przestaje działać w innym miejscu”, powiedział. Zacząłem myśleć, jak to się może stać, ale nie mogę tego rozgryźć. * Czasami mam podobne problemy **kiedy jestem zbyt zmęczony/śpiący, aby poprawnie wykonać pracę** i mieć ogólny widok na część kodu, nad którą pracowałem. Tutaj problem wydaje się trwać kilka dni lub tygodni i nie jest związany z koncentracją mojego kolegi. * Wyobrażam sobie również ten problem pojawiający się w **bardzo dużym projekcie, bardzo źle zarządzanym** , gdzie koledzy z zespołu nie mają pojęcia, kto co robi i jaki wpływ na pracę innych może mieć zmiana, którą robią. W tym przypadku też tak nie jest: jest to raczej mały projekt z tylko jednym deweloperem. * Może to być również problem ze **starą, źle utrzymywaną i nigdy nieudokumentowaną bazą kodu** , gdzie jedyni programiści, którzy naprawdę potrafią sobie wyobrazić konsekwencje zmiany, opuścili firmę wiele lat temu. Tutaj projekt dopiero się rozpoczął, a deweloper nie korzysta z niczyjej bazy kodu. Więc co może być przyczyną takiego problemu **na świeżym, małym kodzie napisanym przez jednego programistę, który koncentruje się na swojej pracy**? Co może pomóc? * Testy jednostkowe (brak)? * Właściwa architektura (jestem prawie pewien, że baza kodu w ogóle nie ma architektury i została napisana bez wstępnego przemyślenia), wymagająca całej refaktoryzacji? * Programowanie par? * Coś innego?


title: Jak ułatwić utrzymanie kodu sterowanego zdarzeniami?

text: Kiedy używam komponentu opartego na wydarzeniu, często odczuwam ból w fazie podtrzymującej. Ponieważ wykonywany kod jest cały podzielony wokół, może być dość trudno określić, jaka będzie cała część kodu, która będzie zaangażowana w czasie wykonywania. Może to prowadzić do subtelnych i trudnych do debugowania problemów, gdy ktoś doda nowe programy obsługi zdarzeń. Edytuj z komentarzy: Nawet przy pewnych dobrych praktykach, takich jak posiadanie magistrali zdarzeń obejmującej całą aplikację i programów obsługi delegujących biznes do innej części aplikacji, jest moment, w którym kod staje się trudny do odczytania, ponieważ jest wiele zarejestrowani opiekunowie z wielu różnych miejsc (szczególnie gdy jest autobus). Następnie diagram sekwencji zaczyna wyglądać na złożony, czas poświęcony na ustalenie, co się dzieje, rośnie, a sesja debugowania staje się bałaganiarska (punkt przerwania w menedżerze obsługi podczas iteracji obsługi, szczególnie przyjemny z obsługą asynchroniczną i dodatkowym filtrowaniem). ////////////// Przykład Mam usługę, która pobiera dane z serwera. Na kliencie mamy podstawowy komponent, który wywołuje tę usługę za pomocą wywołania zwrotnego. Aby zapewnić punkt rozszerzenia użytkownikom komponentu i uniknąć sprzężenia między różnymi komponentami, uruchamiamy kilka zdarzeń: jedno przed wysłaniem zapytania, jedno przy nadchodzącej odpowiedzi i drugie w przypadku awarii. Mamy podstawowy zestaw programów obsługi, które są wstępnie zarejestrowane, które zapewniają domyślne zachowanie komponentu. Teraz użytkownicy komponentu (a my też jesteśmy użytkownikami komponentu) mogą dodać kilka programów obsługi, aby dokonać pewnych zmian w zachowaniu (zmodyfikować zapytanie, logi, analizę danych, filtrowanie danych, masowanie danych, fantazyjne animacje interfejsu użytkownika, łączenie wielu zapytań sekwencyjnych , cokolwiek). Tak więc niektóre programy obsługi muszą być wykonywane przed/po innych i są rejestrowane z wielu różnych punktów wejścia w aplikacji. Po pewnym czasie może się zdarzyć, że zarejestrowanych jest kilkunastu lub więcej handlerów, a praca z nimi może być żmudna i niebezpieczna. Ten projekt pojawił się, ponieważ korzystanie z dziedziczenia zaczynało być kompletnym bałaganem. System zdarzeń jest używany przy takiej kompozycji, w której nie wiesz jeszcze, jakie będą Twoje kompozyty. Koniec przykładu ////////////// Zastanawiam się więc, jak inni radzą sobie z tego rodzaju kodem. Zarówno podczas pisania, jak i czytania. Czy masz jakieś metody lub narzędzia, które pozwalają pisać i utrzymywać taki kod bez większego wysiłku?


title: Nazewnictwo: StartDate lub StartDateTime podczas pracy z DateTimes

text: W mojej aplikacji używam wielu DateTimes. Teraz zwykle nazywam to tak jak StartDateTime, EndDateTime itp., aby sugerować, że w grę wchodzi również czas. Trochę się tym męczę (czytanie jest męczące) i przez większość czasu jest całkiem logiczne, że i tak jest w tym przedział czasu. Teraz zastanawiam się nad porzuceniem `StartDateTime` na rzecz krótszej `StartDate`, pomimo tego, że zawiera również część dotyczącą czasu. **Pytanie** Co jest lepsze: czytelniejsze niż _w porównaniu z bardziej jednoznacznym stwierdzeniem, że jest uwzględniony czas? (ps: wydaje mi się, że ma to wiele wspólnego z tym, że C# nie ma oddzielnych obiektów dla `Date` i `DateTime`, więc stąd potrzeba języka węgierskiego)


title: Czy mogę wykonać scalanie git całkowicie zdalnie?

text: Mój zespół dzieli gałąź „praca” i gałąź „stabilną”. Za każdym razem, gdy konkretna gałąź pracy zostanie zatwierdzona do dalszego testowania/wydania/itp., łączymy ją w stabilną. Żaden kod nigdy nie jest sprawdzany bezpośrednio w stabilnej gałęzi. Z tego powodu konflikty scalania po prostu się nie zdarzają, a ściągnięcie gałęzi roboczej i stabilnej, scalanie ich, a następnie cofanie zmian wydaje się głupie. Czy istnieje polecenie git, aby poprosić zdalny serwer git o zatwierdzenie scalenia dwóch gałęzi, o których już wie?


title: Jak powinienem ustrukturyzować rozwiązanie dla długoterminowego projektu?

text: Zamierzam stworzyć pulpit nawigacyjny do wszystkiego dla mojego zespołu i wciąż zastanawiam się nad strukturą mojego projektu/rozwiązania. Ponieważ może to być długotrwały projekt, chcę stworzyć strukturę od samego początku. Oto co miałem na myśli: 1. Utworzyć rozwiązanie o nazwie „doEverythingDashboard” 2. Usunąć projekt o nazwie „doEverythingDashboard” pod rozwiązaniem „doEverythingDashboard” 3. Utworzyć projekt winform o nazwie „interface” 4. Utworzyć projekty aplikacji konsolowych dla każdej funkcjonalności z "doEverythingDashboard" 5. Odwołaj się do każdej aplikacji konsolowej w "interfejsie" Czy to ma sens? Czy bardziej sensowne byłoby posiadanie tylko jednego projektu i tworzenie klasy dla każdej funkcjonalności zamiast całego projektu?


title: Jak mogę wskazać, czy obiekt współpracuje z innym na diagramie klas UML?

text: Załóżmy, że chcę narysować diagram klas DAO i Entity. DAO służy do ładowania instancji Entity z bazy danych. Jak mogę przedstawić tę relację na moim diagramie klas? Czy to jest uważane za jedno? Myślę, że powinno to być jakoś pokazane na schemacie: ![tutaj wstaw opis obrazka](http://i.stack.imgur.com/HUL9D.jpg) **TL;DR** : czy powinienem coś między nimi narysować czy nie?


title: Czy aplikacja internetowa potrzebuje funkcji monitorowania połączenia?

text: Tworzę klienta za pomocą Flex i ActionScript, który jest uruchamiany w przeglądarce i komunikuje się z naszym backendem serwera. Pojawiły się obawy, że aplikacja „potrzebuje” wskaźnika graficznego, aby pokazać, czy klient ma połączenie z serwerem, czy nie. Częścią problemu tego wymagania jest to, że pochodzi z perspektywy wysokiego poziomu, ponieważ interfejs wygląda na „zepsuty” (tj. nie aktualizuje się prawidłowo). Mam pomysł, gdzie jest problem, ale to nie znaczy, że błąd tkwi w interfejsie. Uważam, że funkcja monitora połączenia jest niepotrzebna, ponieważ: 1. Użytkownicy nie będą mogli robić przysiadów. Nasza baza użytkowników jest w dużej mierze nietechniczna. 2. Flex generuje zdarzenia błędów HTTP, ale nie określa, co się stało. Nie mogę powiedzieć, jaki jest _prawdziwy_ problem, który może być: * Użytkownik faktycznie nie ma połączenia z siecią. * Kod serwera aplikacji jest w jakiś sposób uszkodzony. * Sam serwer jest zepsuty (tj. „Ups, zepsułem konfigurację Apache”). * Obciążenie serwera jest zbyt duże i przestaje odpowiadać. * Wystąpił inny problem (np. sieć lub sprzęt) poza moją kontrolą lub użytkownikami. Jak przekonać się, że ta funkcja nie jest wartościowa do rozwijania? Jeśli jest to coś, co warto zachować, jakie są alternatywy dla pokazywania „statusu sieci” lub problemu z połączeniem z serwerem w kliencie? Wolałbym poświęcić czas na dokopanie się do źródła problemu i _zapobieganie jego wystąpieniu, niż na tworzeniu dodatkowej „funkcji”, która niczego nie rozwiązuje.


title: Tworzenie wieloplatformowego proxy/bramy TCP, która obsługiwałaby jednocześnie maksymalną liczbę klientów na 1GB potoku ethernetowym?

text: Zastanawiam się więc nad czymś prostym - mając na uwadze następną architekturę: -> jednostka obliczeniowa "A" / brama --> jednostka obliczeniowa "B" taka sama jak A \ -> jednostka obliczeniowa "C" taka sama jak A Nie obchodzi nas to do której jednostki przekierować żądanie, więc powinniśmy je przekierować pojedynczo do A niż do B niż do C, a potem do A itd. Zastanawiam się w jakim języku, przy użyciu jakiego frameworka można stworzyć takie międzyplatformowe proxy/bramkę TCP ( nie zależne od karty Ethernet), które przekierowywałyby przychodzące żądania do wewnętrznych węzłów za pośrednictwem prostego rool i byłyby w stanie uzyskać jak najwięcej z możliwości wejścia / wyjścia kabla Ethernet - odbierać i wysyłać jak najwięcej? Zacząłem się zastanawiać po przeczytaniu tego miłego artykułu z 2003 roku...


title: Kim są „użytkownicy” podczas testów?

text: Posiadanie m.in. system do rezerwacji lotów, podczas UAT nie jest testowany przez prawdziwych użytkowników (klientów, którzy kupią bilety), a nie osoby po stronie klienta, które będą to tylko symulować. Czy są jakieś bardziej szczegółowe terminy do rozróżnienia między rzeczywistymi użytkownikami (np. użytkownikiem końcowym) a użytkownikami wykonującymi UAT?


title: Pisanie prostego walidatora kodu

text: Wiem, że w EBNF można zdefiniować języki programowania, które można przekonwertować na wyrażenia regularne. Obecnie pracuję nad bardzo prostym interpreterem BASIC dla projektu. Kod należy wprowadzić w interfejsie użytkownika, który powinien zweryfikować składnię, aby później przenieść kod do systemu wbudowanego, w którym jest wykonywany. Szukałem w Google artykułu lub samouczka na temat pisania walidatora do tej pracy, ale tak naprawdę nie mogłem znaleźć czegoś takiego. Czy to tylko definiowanie wyrażeń regularnych i próba ich dopasowania? Uwaga: część GUI jest napisana w Javie, podczas gdy kod osadzony jest napisany w C++.


title: Projekt głównej działalności jest zbyt zajęty

text: Mam główną działalność, która zawiera wiele przycisków. Nie chcę mieć takiej listy przycisków. Wiem, że to wygląda źle, tylko dlatego, że połączyłem to, aby pokazać ci, co mam. Jak widać, naprawdę nie starcza mi nawet miejsca. Nie chcę `scrollView` w mojej głównej aktywności. Czy ktoś ma sugestie dotyczące budowania mojej aktywności tak, aby wyglądała elegancko i prosto? ![tutaj podaj opis obrazu](http://i.stack.imgur.com/JrZbM.png)


title: Czy są jakieś realne korzyści z programów certyfikacji aplikacji firmy Microsoft?

text: Zajmuję się tworzeniem aplikacji serwerowej i przyglądam się certyfikacji **aplikacji** systemu Windows 2008 R2 znajdującej się tutaj. Czy certyfikacja aplikacji naprawdę ma znaczenie dla Twojej aplikacji? Czy w twoim doświadczeniu kiedykolwiek wyszło z tego coś namacalnego? Czy są jakieś inne certyfikaty, które powinienem wziąć pod uwagę?


title: Czego potrzebuję, aby stworzyć aplikację do przesyłania wiadomości?

text: Zastanawiałem się, jak zrobić aplikację do przesyłania wiadomości, taką jak whats app? Jakich zasobów potrzebuję? Co powinienem wiedzieć? Chcę zrobić to dla iPhone'ów. Znam trochę obj-c, ale to naprawdę to...


title: Dlaczego lokalna kopia jest domyślnie zapisywalna w SVN, ale tylko do odczytu w Perforce/TFS?

text: Mam pewne doświadczenie z Perforce, SVN i TFS. W przypadku SVN pliki źródłowe były domyślnie zapisywalne po synchronizacji. Jednak były one tylko do odczytu dla Perforce, a także TFS, jeśli pamięć mi służyła. Tymczasem „zamówienie” oznacza synchronizację źródła dla SVN, ale jego znaczenie jest zupełnie inne dla innych popularnych narzędzi. Zastanawiam się, które zachowanie jest bardziej „poprawne” i dlaczego te narzędzia zachowują się inaczej. Dziękuję.


title: Przycinanie rozmiaru skryptu za pomocą notacji tablicowej dla często używanych właściwości

text: Zauważyłem pewną nadmiarowość w skrypcie, który uruchomiłem przez Google Closure Compiler. (function(){funkcja g(a){var k;if(a){if(a.call)a.prototype=j,a.prototype[e]={}}else a= {};var c= a,b,c=(a=c.call?c:null)?new a(a):c;b=c[e]||{};var f=b.extend;b=b.a;var d =c.hasOwnProperty("konstruktor")?c.constructor:b?b:f?g.b(f):new Function;if (f)b=d.prototype,k=new h(h.prototype=f.prototype ),f=k,h.prototype={},d.prototype=f,i (d.prototype,b);i(d,a);i(d.prototype,c);powrót d.prototype.constructor =d}funkcja i(a,c) {for(var b in c)c.hasOwnProperty(b)&&"prototyp"!=b&&b!=e&&(a[b]=c[b])}var h=new Function, e="decl-data",j={extend:function(a){return(this[e].extend=a).prototype},a:function(a) {return(this[e].a =a).prototype}};g.c=function(a){e=a};return g})().b=function(g){return function(){g.apply(this,arguments)}}; Wygląda jak wielkie morze „prototypów” i „konstruktorów”, prawda? Udało mi się uzyskać około 6/7 rozmiaru oryginału, przechowując ciągi „konstruktor” i „prototyp” i używając wszędzie notacji tablicowej, aby uzyskać dostęp do prototypów i konstruktorów. Oszczędności rozmiaru powinny rosnąć wraz ze wzrostem rozmiaru skryptu. Oto jak to wygląda po zmianie: (function(b,h){function i(a){a?a.call&&(a[b]=l,a[b][f]={}):a= {};var d=a,c,d=(a=d.call? d:null)?new a(a):d;c=d[f]||{};var g=c.extend; c=c.a;var e=d.hasOwnProperty(h)?d[h]:c?c:g?i.b (g):nowa funkcja;if(g){c=e[b];var m=b, g=nowy j(j[b]=g[b]);j[b]={};e[m]=g;k(e[b],c)}k(e,a);k( e [b],d);return e[b][h]=e}funkcja k(a,d){for(var c in d)d.maWłasnąWłasność(c)&&c!=b&&c!=f&&(a [ c]=d[c])}var j=nowa funkcja,f="decl-data",l={extend:function(a){return(this[f].extend=a) [b]},a :function(a){return(this[f].a=a)[b]}};i.c=function(a){f=a};return i}) ("prototyp","konstruktor").b =funkcja(b){funkcja zwracana(){b.apply(to,argumenty)}}; Czy warto **uszkodzić czytelność, by zaoszczędzić kilka bajtów?** Trudno powiedzieć, kiedy przestać... `hasOwnProperty` pojawia się tylko dwa razy, mogę użyć go jeszcze raz. Czy zatem powinienem zastąpić `.hasOwnProperty` słowem `[_has]`? Czy powinienem się tu po prostu zatrzymać? A może powinienem umieścić go z powrotem tak, jak był i nie martwić się o kilka dodatkowych bajtów? Z drugiej strony, **może to w ogóle nie wpływa na czytelność** i może być postrzegane jako wygodne skróty. Inną alternatywą byłoby wyabstrahowanie zachowania **przy użyciu makr** ; napisz `.prototype` i przekonwertuj go na `[_p]` w czasie budowania, oczywiście deklarując gdzieś `_p`. Ale wydaje się to zbyt skomplikowane w przypadku stosunkowo niewielkiej optymalizacji rozmiaru. Skoro o tym mowa, zastanawiam się, dlaczego closure-compiler nie robi już czegoś takiego? Jestem ciekaw, co myśli o tym społeczność. * * * Dla odniesienia, niezminimalizowane źródło przed optymalizacją rozmiaru: var decl = (function(){ var Clone = new Function(), // fikcyjna funkcja do prototypowego klonowania /** dataKey Nazwa właściwości, w której deklaracja metadane obiektów będą przechowywane. Jeśli chcesz przekazać obiekty do decl zamiast funkcji, umieść metadane (nadrzędne, częściowe itp.) w tej właściwości. */ dataKey = 'decl-data', /** proto Ten obiekt jest używany jako prototyp dla obiektów deklaracji, więc wszystkie właściwości są dostępne jako właściwości `this` wewnątrz ciała każdej funkcji deklaracji. */ proto = { /** extend Wykonuj prototypowe dziedziczenie, wywołując `this.extend(ParentCtor)` w ramach funkcji dekalizacji. @param {Function} ctor do rozszerzenia. @retu rn {Obiekt} prototyp ctora rodzica. */ extend: function (ctor) { return (this[dataKey].extend=ctor).prototype; }, /** augment Zakończ deklarację częściową. DO ZROBIENIA: testowanie błędów, ewentualnie naprawienie klas potomnych z mocą wsteczną podczas rozszerzania rodzica. @param {Function} ctor do rozszerzenia. @return {Object} prototyp częściowego ctora. */ augment: function (ctor) { return (this[dataKey].augment=ctor).prototype; } }; /** decl Stwórz obiekt prototypowy i zwróć jego konstruktor. @param {Funkcja|Obiekt} deklaracja */ function decl (deklaracja) { if (!declaration) { deklaracja = {}; } else if (declaration.call) { Declaration.prototype=proto; deklaracja.prototype[klucz danych]={}; } return getCtor(deklaracja); } /** setDataKey Ustawia nazwę właściwości, w której będą przechowywane metadane obiektów deklaracji. Jeśli chcesz przekazać obiekty do decl zamiast funkcji, umieść metadane (nadrzędne, częściowe itp.) w tej właściwości. @param {Ciąg} Wartość ciągu znaków do użycia w kluczu danych */ decl.setDataKey = function (wartość) { dataKey=wartość; }; /** klon Tworzy kopię prostego obiektu. @param {Obiekt} obj @return {Obiekt} klon obiektu. */ function clone (object) { var r=new Clone(Clone.prototype=object); Clone.prototype={}; powrót r; }; /** Połącz właściwości obiektu src z obiektem docelowym. @param {Object} obiekt docelowy, z którym mają zostać scalone właściwości. @param {Object} obiekt src, z którego mają zostać scalone właściwości. @return {Object} cel do łączenia w łańcuch. */ function merge (target, src) { for (var k in src) { if (src.hasOwnProperty(k) && k!='prototype' && k!=dataKey) { target[k] = src[k]; } } cel powrotu; }; /** getCtor Przygotuj konstruktor, który ma zostać zwrócony przez decl. Deklaracja @param {Function|Object} @return {Function} konstruktor. */ function getCtor (declaration) { var oldProto, declFn = Declaration.call ? deklaracja: null, declObj = declFn ? nowy declFn(declFn) : deklaracja, dane = declObj[dataKey] || {}, parent = data.extend, parts = data.augment, ctor = // ctor zdefiniowany przez użytkownika declObj.hasOwnProperty('constructor') ? declObj.constructor : // ctor już zdefiniowany (częściowy) częściowy ? częściowe : // wygenerowane opakowanie dla rodzica rodzica ctor? decl.wrap(parent) : // wygenerowana pusta funkcja new Function(); // Jeśli istnieje konstruktor nadrzędny, użyj klona jego prototypu // i skopiuj właściwości z bieżącego prototypu. if (rodzic) { staryProto = ctor.prototype; ctor.prototype = klon (rodzic.prototyp); merge(ctor.prototype, oldProto); } // Scal właściwości funkcji deklaracji z konstruktorem. // Pozwala to na dodanie właściwości do `this.constructor` w funkcji deklaracji // bez definiowania konstruktora lub przed jego zdefiniowaniem. merge(ctor, declFn); // Scal właściwości obiektów deklaracji z prototypem. merge(ctor.prototype, declObj); // Niech konstruktor odwołuje się do samego siebie w swoim prototypie i zwraca go. return (ctor.prototype.constructor=ctor); }; deklaracja zwrotu; }()); // To jest poza głównym zamknięciem, więc funkcje opakowujące // będą miały jak najkrótszy łańcuch wyszukiwania. /** wrap Wygeneruj opakowanie dla konstruktora nadrzędnego. Konstruktor nadrzędny @param {Function} do zawijania. Konstruktor potomny @return {Function}. */ decl.wrap = function (parent) { return function(){ parent.apply(this, arguments); }; }; A po: var decl = (function(_p, _c){ var Clone = new Function(), // fikcyjna funkcja do prototypowego klonowania /** dataKey Nazwa właściwości, w której będą przechowywane metadane obiektów deklaracji. Jeśli chcesz aby przekazać obiekty do decl zamiast funkcji, umieść metadane (rodzic, częściowe, itp.) w tej właściwości */ dataKey = 'decl-data', /** proto Ten obiekt jest używany jako prototyp dla obiektów deklaracji, więc wszystkie właściwości są dostępne jako właściwości `this` wewnątrz ciała każdej funkcji deklarującej. */ proto = { /** extend Wykonuj dziedziczenie prototypowe, wywołując `this.extend(ParentCtor)` w ramach funkcji dekalacyjnej. @param {Function} ctor do rozszerzenia. @return {Object} prototyp ctora nadrzędnego. */ extend: function (ctor) { return (this[dataKey].extend=ctor)[_p]; }, /** augment Zakończ deklarację częściową. DO ZROBIENIA: testowanie błędów, ewentualnie naprawienie klas potomnych z mocą wsteczną podczas rozszerzania rodzica. @param {Function} ctor do rozszerzenia. @return {Object} prototyp częściowego ctora. */ augment: function (ctor) { return (this[dataKey].augment=ctor)[_p]; } }; /** decl Stwórz obiekt prototypowy i zwróć jego konstruktor. @param {Funkcja|Obiekt} deklaracja */ function decl (deklaracja) { if (!declaration) { deklaracja = {}; } else if (declaration.call) { deklaracja[_p]=proto; deklaracja[_p][klucz danych]={}; } return getCtor(deklaracja); } /** setDataKey Ustawia nazwę właściwości, w której będą przechowywane metadane obiektów deklaracji. Jeśli chcesz przekazać obiekty do decl zamiast funkcji, umieść metadane (nadrzędne, częściowe itp.) w tej właściwości. @param {Ciąg} Wartość ciągu znaków do użycia w kluczu danych */ decl.setDataKey = function (wartość) { dataKey=wartość; }; /** klon Tworzy kopię prostego obiektu. @param {Obiekt} obj @return {Obiekt} klon obiektu. */ function clone (object) { var r=new Clone(Clone[_p]=object); Klonuj[_p]={}; powrót r; }; /** Połącz właściwości obiektu src z obiektem docelowym. @param {Object} obiekt docelowy, z którym mają zostać scalone właściwości. @param {Object} obiekt src, z którego mają zostać scalone właściwości. @return {Object} cel do łączenia w łańcuch. */ function merge (target, src) { for (var k in src) { if (src.hasOwnProperty(k) && k!=_p && k!=dataKey) { target[k] = src[k]; } } cel powrotu; }; /** getCtor Przygotuj konstruktor, który ma zostać zwrócony przez decl. Deklaracja @param {Function|Object} @return {Function} konstruktor. */ function getCtor (declaration) { var oldProto, declFn = Declaration.call ? deklaracja: null, declObj = declFn ? nowy declFn(declFn) : deklaracja, dane = declObj[dataKey] || {}, parent = data.extend, parts = data.augment, ctor = // ctor zdefiniowany przez użytkownika declObj.hasOwnProperty(_c) ? declObj[_c] : // ctor już zdefiniowany (częściowy) częściowy ? częściowe : // wygenerowane opakowanie dla rodzica rodzica ctor? decl.wrap(parent) : // wygenerowana pusta funkcja new Function(); // Jeśli istnieje konstruktor nadrzędny, użyj klona jego prototypu // i skopiuj właściwości z bieżącego prototypu. if (rodzic) { staryProto = ctor[_p]; ctor[_p] = klon(rodzic[_p]); merge(ctor[_p], oldProto); } // Scal właściwości funkcji deklaracji z konstruktorem. // Pozwala to na dodanie właściwości do `this.constructor` w funkcji deklaracji // bez definiowania konstruktora lub przed jego zdefiniowaniem. merge(ctor, declFn); // Scal właściwości obiektów deklaracji z prototypem. scal(wektor[_p], declObj); // Niech konstruktor odwołuje się do samego siebie w swoim prototypie i zwraca go. return (ctor[_p][_c]=ctor); }; deklaracja zwrotu; }('prototyp', 'konstruktor')); // To jest poza głównym zamknięciem, więc funkcje opakowujące // będą miały jak najkrótszy łańcuch wyszukiwania. /** wrap Wygeneruj opakowanie dla konstruktora nadrzędnego. Konstruktor nadrzędny @param {Function} do zawijania. Konstruktor potomny @return {Function}. */ decl.wrap = function (parent) { return function(){ parent.apply(this, arguments); }; };


title: Agile dla programisty solo

text: Jak ktoś mógłby wdrożyć koncepcje procesów Agile jako solowy programista? Agile wydaje się przydatne do szybszego tworzenia aplikacji, ale wydaje się również bardzo zorientowany na zespół...


title: Korzystanie z rozwoju Agile w jednoosobowym zespole

text: > **Possible Duplicate:** > Agile dla Solo Developera Zamierzam wkrótce rozpocząć projekt i planuję użyć jak najwięcej metod zwinnych (CI, TDD itp.). Jakie były doświadczenia ludzi w zakresie zwinnego rozwoju podczas pracy w pojedynkę? Chcę teraz wprowadzić dobre praktyki, gdy jest to jednoosobowy zespół, więc kiedy skaluję się do kilku osób, podstawy są na miejscu.


title: Metodyka Agile dla jednego programisty pracującego nad prototypem

text: > **Możliwy duplikat:** > Agile dla Solo Developera W ramach mojej pracy magisterskiej będę pracował nad prototypem interfejsu użytkownika przez okres 6 miesięcy. Jestem zobowiązany do wybrania strategii i precyzyjnego planowania. Czytając różne opisy zwinnych metodologii czułem się jak w niebie modnych słów. Zamiast po prostu wybrać jeden, ponieważ jest sławny, miałem nadzieję, że ktoś może dać wgląd w to, które z nich mogą być przydatne. Czy istnieją metodyki zwinne, które są szczególnie odpowiednie (lub skalowalne) dla pojedynczych programistów?


title: Jak pojedynczy programista może wykorzystać Agile Methods?

text: Jestem freelancerem i pracuję jako samodzielny programista. We wszystkich przypadkach jestem osobą noszącą różne kapelusze. Jestem Scrum Masterem i jestem jedyną osobą w rozwoju. Czym nie jestem, jest Właścicielem Produktu? Czy istnieją metody Agile i darmowe narzędzia, z których może skorzystać freelancer?


title: Jak jedna osoba może zastosować metodę zwinną? do aplikacji oprogramowania

text: Zamierzam zrobić osobisty projekt w aplikacji internetowej. w sekcji moich metod trudno mi wybrać tylko jedną metodę Agile, więc oto lista, na której próbuję połączyć te lub tylko kilka z nich w jedną metodę, która najlepiej dla mnie działa. * Scrum (zauważyłem, że w tym przypadku wymaga zespołu co najmniej siedmiu) * XP (programowanie ekstremalne) * Crystal * FDD (programowanie funkcji nurkowania n) * DSDM (metoda dynamicznego rozwoju systemu) * Adaptacyjne tworzenie oprogramowania * RUP (Rational Unified Proces) na przykład myślałem o czymś w rodzaju split from scrum simple design (KISS) z eXtreme Programming tylko 19 tygodni dla tego projektu, więc przypadki DSDM i TIMEBOXING USE itp.?


title: Jaki jest najlepszy sposób na zbudowanie witryny HTML/AJAX, która wymaga logowania?

text: Załóżmy, że hipotetycznie chciałeś zbudować witrynę, która dostarczałaby treści odwiedzającym wyłącznie przy użyciu HTML i JavaScript (AJAX do pobierania danych po stronie serwera). Witryna wymagałaby logowania do niektórych funkcji. Załóżmy również, że dla potrzeb dyskusji masz możliwość tworzenia niezbędnych metod usługi sieciowej, które byłyby wywoływane z AJAX (do uwierzytelniania użytkownika, pobierania danych z bazy danych itp.). Jaki byłby najlepszy sposób na zaimplementowanie tej witryny? Czy byłyby jakieś zalety / wady w porównaniu z budowaniem witryny przy użyciu języka po stronie serwera, takiego jak ASP.NET lub PHP? **EDYTUJ 1** Po pierwsze, dziękuję wszystkim, którzy do tej pory odpowiedzieli. Moje pytanie nie zostało poprawnie sformułowane, więc otrzymuję odpowiedzi, które nie odnoszą się do mojego pytania. Zbudowałem wiele stron używając tradycyjnych metod - backend bazy danych oraz frontend będący mieszanką języków po stronie serwera (.NET lub PHP) oraz skryptów JavaScript/jQuery po stronie klienta. Powiedzmy, że zamierzam zbudować środowisko, które ma serwer bazy danych, serwer usług sieciowych i serwer sieciowy. Mój serwer usług internetowych ma wszystkie metody potrzebne do interakcji z bazą danych (uwierzytelnianie, operacje CRUD, raportowanie itp.). Serwer WWW nie obsługuje żadnych języków po stronie serwera (takich jak PHP lub ASP.NET). Wiem, że dałoby się zbudować stronę w całości w HTML, CSS i JavaScript (jQuery). Użytkownik może zostać uwierzytelniony za pośrednictwem AJAX, token uwierzytelniania może być przechowywany w pliku cookie, a następnie token może być używany we wszystkich kolejnych żądaniach AJAX. Moje pytania to: 1. Jakie byłyby zalety/wady takiego podejścia? 2. Jakie wyzwania musiałyby stawić czoła uwierzytelnianiu i bezpieczeństwu? 3. Czy to rozwiąże którykolwiek z problemów, z jakimi zwykle spotykamy się podczas tworzenia strony internetowej? 4. Gdyby twój szef prosił cię o korzystanie z tego środowiska, czy sprzeciwiłbyś się temu? Dlaczego lub dlaczego nie?


title: Porady i wskazówki dotyczące projektowania stron internetowych w ASP.NET MVC (składnia Razor)

text: Jestem nowicjuszem w tworzeniu stron internetowych i zacząłem studiować ASP.NET MVC. Zauważyłem, że cshtml zastępuje aspx podczas używania składni Razor, a widok projektu nie jest obsługiwany. Teraz projektowanie stron internetowych ASP.NET MVC jest trudne bez widoku projektu. Jak radzisz sobie bez tego z fesignami stron internetowych w swoich projektach?


title: Odczytywanie plików CSV znajdujących się na serwerze Linux i aktualizowanie tabel w bazie danych SQL Server

text: Zastanawiałem się, jak możemy pobrać pliki CSV znajdujące się na serwerze Red Hat Linux do tabel bazy danych SQL Server. Wiem, że możemy napisać procedurę składowaną/wstawkę zbiorczą, aby odczytać pliki znajdujące się na tym samym serwerze Windows co SQL Server i zaktualizować bazę danych, ale nie jesteśmy pewni, jak to zrobić, gdy pliki znajdują się na serwerze Linux. Każda pomoc byłaby bardzo mile widziana.


title: Dobra konwencja nazewnictwa dla nazwanych oddziałów w {DVCS} do wyboru

text: Powoli integrujemy Mercurial z naszym biurem i tworząc web-develope zaczęliśmy używać nazwanych oddziałów. Nie do końca jednak znaleźliśmy dobrą konwencję, jeśli chodzi o nazywanie naszych oddziałów. Próbowaliśmy: * FeatureName (Widzi, że to powoduje problem w dalszej kolejności) * DEVInitial_FeatureName (Może być mylące, gdy programista przychodzi i znika) * {uniqueID (int)}_Feature Jak na razie wygrywa uniqueID_featureName, myślimy o utrzymaniu to w małym DB tylko w celach informacyjnych. Miałby on: branchID(int), featureName(varchar), featureDescription(varchar), date, who etc... To dałoby nam gałęzie takie jak: 1_NewWhizBangFeature, 2_NowWithMoreFoo, ... i mielibyśmy łatwe odniesienie do tego, co ta gałąź działa bez konieczności sprawdzania dziennika. Jest jakieś lepsze rozwiązanie?


title: Wolisz członków klasy lub przekazywanie argumentów między metodami wewnętrznymi?

text: Załóżmy, że w prywatnej części klasy znajduje się wartość, która jest wykorzystywana przez wiele prywatnych metod. Czy ludzie wolą mieć to zdefiniowane jako zmienną składową dla klasy, czy przekazywać ją jako argument do każdej z metod — i dlaczego? Z jednej strony widziałem argument, że redukcja stanu (tj. zmiennych składowych) w klasie jest ogólnie dobrą rzeczą, chociaż jeśli ta sama wartość jest wielokrotnie używana w metodach klasy, wydaje się, że byłoby to idealne kandydat do reprezentacji jako stan klasy, aby kod był widocznie czystszy, jeśli nic więcej. Edycja: Aby wyjaśnić niektóre z komentarzy/pytań, które zostały zgłoszone, nie mówię o stałych i nie odnosi się to do żadnego konkretnego przypadku, a raczej tylko hipotetyczny, o którym rozmawiałem z kilkoma innymi ludźmi. Ignorując na chwilę kąt OOP, konkretny przypadek użycia, który miałem na myśli, był następujący (załóżmy, że przejście przez referencję tylko po to, aby oczyścić pseudokod) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) Mam na myśli to, że istnieje jakaś zmienna, która jest wspólna dla wielu funkcji - w moim przypadku było to spowodowane łączeniem mniejszych funkcji. W systemie OOP, jeśli wszystkie byłyby metodami klasy (powiedzmy z powodu refaktoryzacji poprzez wyodrębnienie metod z dużej metody), ta zmienna mogłaby być przekazywana wokół nich wszystkich lub mogłaby być elementem klasy.


title: Jaka jest definicja wskaźnika?

text: Koncepcyjnie „wskaźnik” jest po prostu czymś, co „wskazuje” na coś innego; czy ta definicja jest wystarczająca, aby dokładnie powiedzieć, czym jest wskaźnik w językach programowania? Czy musi mieć jakieś inne funkcje? Programiści, którzy pochodzą z określonego języka, mogą mieć wstępnie wymyślone pomysły na temat tego, co stanowi „wskaźnik” na podstawie tego, jak jest on używany w języku. Powiedzmy, że jeśli pochodzi z języka **c/c++**, mówi, że wskaźniki obsługują arytmetykę wskaźników .Czy arytmetyka wskaźnika jest istotną cechą wskaźnika? **Go** ma wskaźniki i nie obsługuje arytmetyki wskaźników. Czy zdolność do „wyłuskania” wskaźnika jest istotna dla pojęcia wskaźnika? Jaka jest więc dokładna definicja wskaźnika, który mogę podać jako odpowiedź, niezależnie od konkretnego języka programowania?


title: Kiedy przejście na framework w trakcie realizacji ma sens?

text: Kilkoro moich znajomych i ja rozpoczęliśmy projekt PHP kilka tygodni temu. Na początku sugerowałem użycie frameworka PHP takiego jak CodeIgniter czy Zend. Ale moi przyjaciele chcieli zacząć czysto i bez narzutów i dodatkowej złożoności. Ale w miarę upływu czasu projekt stawał się coraz bardziej złożony. Najpierw napisaliśmy cały kod w plikach widoku, w blokach kodu przed wyjściem HTML. W końcu zmieniliśmy kierunek i zaczęliśmy używać kontrolerów, które wykonały większość pracy. Ale jak widać, jest tutaj różnica w kodowaniu. W tym momencie próbujemy określić, jak postępować, zanim projekt stanie się bardziej złożony. Kiedy warto zacząć od nowa i korzystać z frameworka? A może jest możliwe sformułowanie prostego sposobu na wprowadzenie wzorca MVC do naszego istniejącego kodu bez konieczności zaczynania od zera?


title: Co zrobić, gdy kierownik projektu nie dba o szczegóły wdrożenia?

text: Mój kierownik projektu, podając wymagania do konkretnych zadań, nie dba o szczegóły wdrożenia. Chociaż ma doświadczenie w programowaniu i ma pewną wiedzę na temat frameworka MVC, nie bierze pod uwagę perspektywy dewelopera. Na przykład dostałem zadanie stworzenia prostego formularza w ASP.NET MVC. Formularz ten powinien być wtykowy – czyli klient powinien wybrać, które pola istnieją, a które nie, a które są wymagane. Gdyby to był prosty formularz z walidacją, bez problemu mógłbym go zaimplementować za pomocą walidacji ASP.NET. Problem nie jest jednak prosty i wymaga najpierw projektowania i architektury. Czas, który mam na wdrożenie rozwiązania, które nie jest dobrze rozumiane, jest bardzo ograniczony. Brak wystarczającej ilości czasu nie pozwoli mi wymyślić rozwiązania, które spełni wymagania, ale także przyniesie korzyści mnie i przyszłym programistom. Co powinienem zrobić w tej sytuacji? Czy uważasz, że podanych w przykładzie wymagań można oczekiwać od jednego dewelopera?


title: Czy nowicjusze powinni używać autouzupełniania IDE (Intellisense)?

text: Często spotykam się z tym, gdy pomagam komuś, kto jest nowy w programowaniu i uczy się go po raz pierwszy. Mówię o naprawdę nowych początkujących, wciąż uczących się OOness, konstruowania obiektów, wywołań metod i tego typu rzeczy. Zwykle mają klawiaturę, a ja tylko oferuję wskazówki. Z jednej strony funkcja autouzupełniania w środowiskach IDE pomaga przekazać im informację zwrotną, że robią to dobrze i szybko polubią ją i na niej polegają. Z drugiej strony obawiam się, że wczesne uzależnienie od autouzupełniania IDE sprawi, że nie będą oni tak naprawdę rozumieć koncepcji lub nie będą w stanie funkcjonować, jeśli pewnego dnia znajdą się tylko z prostym edytorem. Czy ktoś z większym doświadczeniem w tym zakresie może podzielić się swoją opinią? Co jest lepsze dla nowicjusza, autouzupełnianie czy ręczne pisanie? **Aktualizacja** Dziękujemy wszystkim za wkład! Wiele odpowiedzi wydaje się skupiać na głównym zastosowaniu autouzupełniania, takim jak uzupełnianie metod, wyszukiwanie metod i dokumentacja itp. Ale obecnie IDE robią o wiele więcej. * Podczas tworzenia obiektu typu List, IDE autouzupełnia się do nowej ArrayList po prawej stronie. Dla początkujących może nie być od razu jasne, dlaczego nie może to być nowa lista, ale hej, to działa, więc idą dalej. * Wypełnianie parametrów metody na podstawie zmiennych lokalnych w kontekście. * Wykonywanie rzutów obiektów * Automatyczne dodawanie instrukcji 'import' lub 'using' i wiele więcej. To są rzeczy, o których mówię. Pamiętaj, że mówię o ludziach, którzy robią Programowanie 101, tak naprawdę dopiero zaczynają. Obserwowałem, jak IDE robi te rzeczy, o których nie mają pojęcia, ale po prostu kontynuują. Można argumentować, że pomaga im to skupić się na przepływie programu i opanowaniu rzeczy, zanim zagłębią się i zrozumieją niuanse języka, ale nie jestem pewien.


title: Zapominasz o podstawowych funkcjach językowych z powodu używania IDE, nadmiernie polegasz?

text: > **Możliwy duplikat:** > Czy nowicjusze powinni używać autouzupełniania IDE (Intellisense)? > Czy używanie autouzupełniania jest złe lub złe? Używając IDE przez ostatnie 3-4 lata, pewnego dnia kilku moich współpracowników i doszliśmy do dość smutnego wniosku, że zapomnieliśmy o kilku podstawowych metodach/funkcjach Javy, ponieważ zawsze polegaliśmy na naszym IDE (Eclipse/STS/ IntelliJ), aby je dla nas wypełnić (np. jakie parametry przyjmuje funkcja), czy to znak, że nasze umiejętności się pogarszają, że nadmiernie polegamy na IDE? (Cała ta dyskusja miała miejsce, gdy rozmawialiśmy o zdaniu testu certyfikacyjnego Oracle Java 7 EE i przyjrzeliśmy się kilku praktycznym pytaniom, takim jak: jakie parametry przyjmuje funkcja X, itp.) Jeśli tak, to jak możecie walczyć z tego rodzaju rzecz? Po prostu ponownie przeczytaj książki i takie tam? Sam nie wyobrażam sobie, aby nie kodować w IDE, ponieważ szczerze mówiąc, sprawia to, że koduję dużo szybciej dzięki takim rzeczom, jak autouzupełnianie itp., Podczas gdy niektórzy moi współpracownicy sugerowali, abyśmy kodowali bez IDE przez kilka miesięcy. Zdaję sobie sprawę, że czasami nie trzeba wiedzieć wszystkiego o funkcji, ale pamiętam, jak profesor z college'u powiedział nam, że IDE są okropne, ponieważ gdy nadejdzie czas, że potrzebujesz jakiejś funkcji, będziesz musiał tracić czas sprawdzanie go zamiast po prostu wyrzucać kod z pamięci.


title: Czy istnieją dowody na to, że Intellisense zmniejsza produktywność?

text: > **Możliwy duplikat:** > Czy nowicjusze powinni używać autouzupełniania IDE (Intellisense)? Pewnego wieczoru rozmawiałem z innym deweloperem o zaletach i wadach Visual Studio. Był zdania, że Intellisense zmniejsza produktywność. Oczywiście myślałem, że to szaleństwo, ale mogę się mylić. Czy istnieją dowody na poparcie tezy, że Intellisense zmniejsza produktywność?


title: Czy poleganie na intellisense i dokumentacji podczas kodowania sprawia, że jesteś złym programistą?

text: Czy programista musi nauczyć się i zapamiętać całą składnię, czy może wystarczy mieć pod ręką trochę dokumentacji? Czy wpłynie to na sposób, w jaki menedżerowie patrzą na koderów? Jakie są minusy zależności od technologii intellisense i autouzupełniania oraz dokumentacji pdf?


title: Czy programiści (używający IDE) muszą znać przestrzenie nazw?

text: Wdałem się w dyskusję ze współpracownikiem na temat pytania zadanego potencjalnemu pracownikowi na rozmowie kwalifikacyjnej. "Nazwij niektóre przestrzenie nazw / co one robią / jaka przestrzeń nazw jest związana z x". Jestem zdania, że programiści nie muszą znać się na tego typu rzeczach, zwłaszcza z wykorzystaniem IDE i niezwykle przystępnej dokumentacji. Uważa, że doświadczony programista powinien umieć nazywać przestrzenie nazw. Przypuszczam, że jest to zasadne, zwłaszcza jeśli chcesz zatrudnić kogoś na bardziej doświadczonej pozycji. Nie muszą specjalnie zapamiętywać przestrzeni nazw, ale każdy, kto ma doświadczenie, powinien być w stanie wyjaśnić niektóre przestrzenie nazw i określić ich cel. Jakie są twoje przemyślenia na ten temat?


title: Czy generowanie kodu za pomocą IDE to dobry pomysł?

text: > **Możliwy duplikat:** > Czy nowicjusze powinni używać autouzupełniania IDE (Intellisense)? Odkąd przeszedłem do rzeczywistych środowisk IDE dla C++, Java i Python, zauważyłem, że automatycznie próbują uzupełnić mój kod. Na przykład, jeśli napiszę `System.out.pr[...]` automatycznie zostanie mi zaproponowana lista, z której mogę wybrać element, którego chcę użyć. Jako początkujący unikałem używania tej funkcji, ponieważ myślałem, że powinienem nauczyć się składni, pisząc. Czy miałem rację, myśląc o tym? Z punktu widzenia bardziej doświadczonego programisty nie widziałbym nic złego w korzystaniu z tej funkcji.


title: Czego powinienem się nauczyć w Java SE przed przejściem do Java EE?

text: Obecnie w Java SE nauczyłem się następujących rzeczy: * Operacje logiczne * Pętle * Dziedziczenie * Polimorfizm * Klasy abstrakcyjne * Interfejs Obecnie uczę się ciągów, znaków i wyrażeń regularnych. Czego powinienem się nauczyć przed przejściem do Java EE?


title: Akademickie języki programowania?

text: Kiedyś istniało wiele akademickich języków programowania (no dobrze, może nie _dużo_, ale wygląda na to, że było ich więcej niż dzisiaj). Wyraźnie pamiętam spędzanie czasu zarówno w szkole średniej, jak i na studiach, ucząc się języków takich jak Basic, Ada, Pascal, Prolog, Haskell, Scheme i Turing. Chociaż niesprawiedliwe jest nazywanie wszystkich tych języków wyłącznie akademickimi, niesprawiedliwe jest również twierdzenie, że są one przemysłowo odpowiednikiem języka korporacyjnego, takiego jak Java (lub nawet C lub Smalltalk w przeszłości). Moje pytanie brzmi, jakie języki akademickie są nadal w użyciu (i nadal nauczane dzisiaj)? Wygląda na to, że istnieje wiele szkół Java i rośnie liczba szkół Pythona, a nawet takie, które uczą języków takich jak C jako pierwszego języka programowania – ale jaki byłby współczesny odpowiednik czegoś takiego jak Pascal?


title: Co mogę zyskać, sprawdzając kod innych osób?

text: Niedawno pobrałem kilka dużych baz kodu i miałem przez nie lekkie odczyty, ale co mogę z tego zyskać? Skąd mogę mieć pewność, że to, co robi autor, jest właściwym sposobem postępowania? (Jedną z baz kodu był kod źródłowy trojana Zeus ;D)


title: Czego pracodawcy szukają u kandydatów na samouków?

text: Jestem programistą samoukiem, który ma wejść na rynek pracy. Chcę wiedzieć, jaki jest najlepszy sposób na pokazanie pracodawcom mojego doświadczenia? Co pracodawcy chcą wiedzieć o moim doświadczeniu w programowaniu? Czy pracodawcy chcą przyjrzeć się napisanemu przeze mnie kodowi, czy mogą chcieć zobaczyć oprogramowanie w akcji? A może obchodzi ich tylko to, jak bardzo moje oprogramowanie jest używane / ile wygenerowało przychody? Czy powinienem napisać o moim stylu projektowania i programowania? Moje wykształcenie: Niedawno ukończyłem uniwersytet, na którym studiowałem języki obce i właśnie w tym czasie dowiedziałem się, że programowanie jest tym, co naprawdę chcę robić. Obecnie jestem programistą warsztatowym, rozwijam oprogramowanie dla klienta do użytku komercyjnego, kontynuując samouczenie się, ale moim celem jest rozpoczęcie „właściwej” pracy i kariery. Dodatkowo mieszkam obecnie w Finlandii, ale szukam pracy w Chinach lub Japonii (oba języki nauczyłem się podczas studiów za granicą). Każda pomoc jest bardzo ceniona!


title: Rodzaj projektu do wywiadu dotyczącego programowania w parach

text: Jak omówiono w pytaniu SO Programowanie w parach na rozmowę kwalifikacyjną, istnieją mieszane uczucia co do użyteczności tego podejścia. Dla tych, którzy zastosowali to podejście, jakie projekty są przydatne? Z mojego ograniczonego doświadczenia jako rozmówcy wynika, że kluczem wydaje się być dobrze wybrane zadanie, które kandydat może szybko zrozumieć i w którym może wnieść swój wkład (a to ostatnie może w pewnym stopniu zależeć od pochodzenia kandydata). Przeszedłem przez kilka dni wywiadów dotyczących parowania i stwierdziłem, że niektóre okresy wydawały się zmarnowane kilka godzin: po pierwsze, ponieważ programista nie pracował nad czymś, co nadałoby się do parowania (bałaganiący kod, którego programista nie był zbyt dobrze zaznajomiony z kimś i już kontaktowałem się z kimś w tej sprawie) i zaangażowałem technologię, z którą nie byłem za bardzo zaznajomiony. Innym przypadkiem było to, że nieoczekiwany problem z kompilacją uniemożliwiał przez długi czas wiele użytecznej pracy. Jeden sklep, który próbował tego podejścia, nie był pewien, czy nad projektem klienta powinien pracować ktoś spoza firmy – masz jakieś przemyślenia na ten temat? Martwili się również, że wyjaśnienie domeny i systemu zajmie zbyt dużo czasu, choć bez tego kandydat może nie być w stanie wiele wnieść. Wybrali więc projekt open source, nad którym pracował pracownik, choć prawdopodobnie nie jest to opcja dla wszystkich. Ostatnio wiele osób pracowało nad _kodowaniem kata_ do różnych rzeczy. Zastanawiam się, czy byłoby to przydatne w użyciu. Niektóre witryny zawierają je nawet w wielu językach i na różnych poziomach umiejętności (np. http://codingkata.org), co może być przydatne dla kandydatów i/lub pracowników z różnych środowisk. [Myślę, że kodowania kata można by użyć nawet do ćwiczeń z kodowania w wywiadach bez par – zadam osobne pytanie na ten temat: Jakie kodowanie kata jest dobre do ćwiczeń z wywiadu]


title: Czytanie SICP z F#?

text: Od jakiegoś czasu miałem zamiar przeczytać książkę SICP i wreszcie mam zamiar się do tego zabrać (teraz, gdy mogę ją czytać na Kindle :) Chciałbym nauczyć się języka funkcjonalnego, a w pracy używam C# więc pomyślałem, że dobrym pomysłem może być przejrzenie książki z F# w mojej głowie, a nie ze Schematem. (To znaczy, wykonaj ćwiczenia w F#.) Zastanawiam się jednak, czy będzie dużo mentalnego rozdźwięku między Scheme a F#? Może lepiej przejść przez Scheme na pierwszym przejściu?


title: Czy programista .NET, JavaScript i SQL Web App powinien nauczyć się języka Perl?

text: Jestem web developerem front i backend .NET (większość rozwiązań korzysta z MS SQL Server) i przez jakiś czas nie będę używał rozwiązań innych niż MS. Czy Perl będzie przydatny w sytuacjach wymagających skryptów w środowisku produktów MS?


title: Mamy niestandardowy program, który generuje wszystkie przechowywane procedury i klasy dla warstwy danych. Gdzie umieszczę wygenerowane klasy?

text: To jest bardziej pytanie architektoniczne dotyczące MVC i dostępu do danych: mamy niestandardowy program, który generuje wszystkie przechowywane procedury i klasy dla warstwy danych z bazy danych MS SQL. Jest to całkiem miłe, ponieważ generuje klasę bazową z podstawowymi operacjami CRUD, która obejmuje odczyty kluczy obcych. Generuje również liczbę mnogą klasy, aby zwrócić kolekcje obiektów. W następnej fazie naszej aplikacji planujemy używać MVC, ale mieliśmy nadzieję, że będziemy nadal korzystać z tego wspaniałego narzędzia. Gdzie umieszczę wygenerowane klasy w mojej nowej aplikacji MVC? Widziałem ludzi tworzących folder Infrastructure dla swojej logiki dostępu do danych. Czy dobrym pomysłem jest dalsze korzystanie z tego narzędzia, czy też powinniśmy konwertować na Entity Framework? Również jeśli DAL zwraca moje obiekty i listy obiektów, co umieszczę w warstwie modelu?


title: Zasady rozszerzalnego proxy danych

text: Istnieje obecnie rozwijająca się branża, w której na rynku Backend-As-A-Service (BaaS) działa ponad 30 firm. Zasada jest prosta: daj firmom bezpieczny sposób publicznego ujawniania danych przechowywanych w pomieszczeniach i za zaporą ogniową. Może to obejmować dane z bazy danych, a także dane ze starszych komputerów PC za pośrednictwem ustanowionych złączy; SAP na przykład zapewnia łącznik do transakcji z ich starszymi systemami. Wczesne próby były stałymi dostawcami dla konkretnych systemów, takich jak SAP, IBM czy Oracle, ale nowy rodzaj jest rozszerzalny, umożliwiając partnerom handlowym i konsultantom tworzenie solidnych aplikacji integracyjnych, które mogą wykorzystywać dowolne źródła danych, które klient chce ujawnić. Właśnie zbliżam się do ukończenia platformy aplikacji HTML5 opartej na chmurze, która zapewnia solidne usługi integracyjne, i chciałbym rozpocząć prace nad rozszerzalnym serwerem proxy danych, aby ukończyć system. Z tego, co udało mi się zebrać, muszę zapewnić albo instalowalną usługę sieciową, albo usługę w chmurze, którą klient może skonfigurować z VPN do interakcji. Następnie mogę wbudować konektory, które można aktywować za pomocą konta usługi i udostępniać te transakcje za pośrednictwem pewnego rodzaju usług internetowych (JSON, SOAP itp.). Mogę również dostarczyć framework, który pozwala ludziom budować własne konektory i użyć pewnego rodzaju schematu do podpięcia tych konektorów do proxy. Efektem końcowym jest pewnego rodzaju publiczna usługa internetowa, która może być bezpiecznie wykorzystywana przez aplikacje do wyświetlania danych za pośrednictwem HTML5 na dowolnym urządzeniu. Mam przeczucie, że to nie jest takie trudne, jak się wydaje. Prawie wszystkie z ponad 30 firm (z większą liczbą pojawiających się prawie co tydzień) powstały w ciągu ostatnich 18 miesięcy, co mówi mi, że albo podstawowa technologia, albo umiejętności potrzebne do jej stworzenia są w tej chwili pod dostatkiem. Od czego mam zacząć? Czy są jakieś projekty open source, które mogę wykorzystać? Konkretną grupę programistów, których mogę zatrudnić? Jestem przekonany, że ktoś tutaj może skierować mnie na właściwą drogę i zaoszczędzić trochę czasu. Nie widzisz, że tak wiele firm rozwija się tak szybko, jeśli wszystkie zaczynają od zera z zastrzeżoną technologią. Rejestr: WTF to BaaS One Minute Video od Kony na ich BaaS


title: Jak testujesz ładowanie danych?

text: Pracuję nad projektem polegającym na załadowaniu partii ponad 3000 plików do kilkudziesięciu tabel. Nie ma interfejsu użytkownika, a tabele są po prostu dostępne do wykonywania zapytań. Jakie są najlepsze praktyki testowania tego typu procesu? * Ładowanie małego zestawu danych i sprawdzanie każdego członka? * Ładowanie wszystkich danych i walidacja podzbioru? * Wczytujesz wszystkie dane i weryfikujesz liczby, średnie i inne wskaźniki? Czy można wykonać inne rodzaje testów, czy też jakaś kombinacja jest najlepsza?


title: Diagram, który mógłby wyjaśnić kod automatu stanowego?

text: Mamy wiele koncepcji dotyczących tworzenia diagramów, takich jak UML i schematy blokowe lub po prostu wymyślanie dowolnej kombinacji pól i strzałek, która w danym momencie działa, ale chcę zrobić wizualny diagram na czymś, co jest rzeczywiście _naprawdę_ złożone. Maszyny stanowe, takie jak te, które analizują kod HTML lub wyrażenia regularne, są zwykle bardzo długimi i skomplikowanymi fragmentami kodu. Na przykład jest to stateLoop dla FireFox 9 beta. W rzeczywistości jest generowany przez inny plik, ale to jest kod, który działa. Jak mogę narysować coś ze złożonością tego w sposób, który wyjaśnia przepływ kodu bez przenoszenia go do poziomu, w którym rysuję każdy pojedynczy wiersz kodu w jego własnym polu na schemacie blokowym? Nie chcę rysować „Wywołaj pętlę, potem wróć”, ale nie chcę wyjaśniać każdego szczegółu. Jaki wykres jest do tego odpowiedni? Czy istnieje już coś podobnego do tego? Tylko przykład tego, jak to zrobić, nie przesadzając ze złożonością lub zbyt wysokim poziomem, jest naprawdę tym, czego chcę. * * * Jeśli nie masz ochoty patrzeć na kod, w zasadzie może wystąpić 70 różnych flag stanu, wewnątrz nieskończonej pętli, która istnieje dla etykiety w oparciu o pewne warunki, każda flaga ma swoją własną nieskończoną pętlę, która istnieje dla etykiety etykieta gdzieś, a każda z tych pętli sprawdza różne typy znaków, które następnie trafiają do różnych innych metod.


title: Algorytm redukujący wywołania API mapowania

text: Na mapie leży losowy rozkład punktów. Te dane znajdują się za interfejsem API i chcę pobrać pełny zestaw punktów w danym polu ograniczającym. Mogę wysłać zapytanie do API za pomocą obwiedni, a API zwróci zestaw punktów, które mieszczą się w tym polu. Problem polega na tym, że API ograniczy zestaw wyników do 10 pozycji, bez paginacji i bez wskazania, czy jest więcej punktów, które zostały pominięte. Stworzyłem więc algorytm rekurencyjny, który pobiera prostokąt ograniczający i żąda punktów, które w nim leżą. Jeśli zestaw wyników zawiera dokładnie 10 elementów, podzielę obwiednię na cztery ćwiartki i rekursywnie. Działa dobrze, ale moje pytanie brzmi: jeśli chcesz zminimalizować liczbę wywołań API, jaki jest optymalny sposób na podzielenie ramki ograniczającej? Podział na ćwiartki był tylko arbitralną decyzją. Kiedy na mapie jest dużo punktów, muszę przeanalizować wiele poziomów, zanim zacznę uzyskiwać znaczące wyniki. Więc wyobrażam sobie, że szybciej byłoby podzielić pudełko na, powiedzmy, 9, 16 lub więcej sekcji. Ale jeśli to zrobię, w końcu dojdę do punktu, w którym wiele żądań zwraca 0 wyników, co nie jest tak wydajne. Ponadto, czy wielkość limitu zestawu wyników ma wpływ na odpowiedź? (To wszystko przy założeniu, że nie mam wcześniejszej wiedzy na temat nominalnej gęstości punktów w polu ograniczającym)


title: Czy plik XmlDocument.xml powinien być uwzględniony w kontroli źródła?

text: W projekcie Web API 2 we właściwościach projektu włączyłem wyjście pliku dokumentacji XML. Domyślnie program Visual Studio 2013 chce to sprawdzić w programie TFS. Jestem prawie pewien, że to wykluczę, ale zastanawiałeś się, jaka jest ogólna opinia na ten temat?


title: Zdezorientowany modyfikacją backlogu sprintu podczas sprintu

text: Ostatnio dużo czytałem o scrumie i znalazłem to, co wydaje mi się sprzeczne z informacjami na temat tego, czy można zmienić backlog sprintu podczas sprintu. Artykuł Wikipedii na temat scrum mówi, że to nie jest w porządku, podobnie jak wiele innych artykułów. Również mój profesor rozwoju oprogramowania uczył tego samego podczas przeglądu scrum. Jednak czytam Scrum i XP z Trenches i to opisuje sekcję dla nieplanowanych elementów na tablicy zadań. Zajrzałem więc do Scrum Guide, gdzie jest napisane, że podczas sprintu „Nie wprowadza się żadnych zmian, które miałyby wpływ na Cel Sprintu”, a w dyskusji o Celu Sprintu „Jeśli praca okaże się inna niż oczekiwał Zespół Deweloperski, następnie współpracują z Właścicielem Produktu, aby negocjować zakres Backlogu Sprintu w ramach Sprintu.” W dyskusji na temat Backlogu Sprintu mówi się dalej: > Backlog Sprintu jest planem wystarczająco szczegółowym, aby zmiany w toku mogły > być zrozumiane w Codziennym Scrumie. Zespół Deweloperski modyfikuje Sprint > Backlog w trakcie Sprintu, a Backlog Sprintu pojawia się podczas Sprintu. To pojawienie się pojawia się, gdy Zespół Deweloperski pracuje nad planem > i dowiaduje się więcej o pracy potrzebnej do osiągnięcia Celu Sprintu. >> Gdy wymagana jest nowa praca, Zespół Deweloperski dodaje ją do Backlogu Sprintu. > Gdy praca jest wykonywana lub zakończona, szacowana pozostała praca jest aktualizowana. > Gdy elementy planu zostaną uznane za niepotrzebne, zostaną usunięte. Tylko Zespół > Deweloperski może zmienić swój Backlog Sprintu podczas Sprintu. Sprint > Backlog jest bardzo widocznym obrazem w czasie rzeczywistym pracy, którą > Zespół Deweloperski planuje wykonać podczas Sprintu i należy > wyłącznie do Zespołu Deweloperskiego. Więc w tym momencie jestem całkowicie zdezorientowany. Myśląc o tym, bardziej sensowne jest dla mnie drugie podejście. Poszczególne, konkretne pozycje w backlogu nie wydają mi się najważniejsze, ale raczej cel sprintu, więc nie zmiana celu sprintu, ale możliwość zmiany backlogu ma sens. Na przykład, jeśli zarówno właściciel produktu, jak i zespół myśleli, że są na tej samej stronie dotyczącej historii, ale w miarę postępu sprintu zorientowali się, że doszło do nieporozumienia, wydaje się, że warto odpowiednio zmienić zadania, które składają się na tę historię . Lub jeśli była jakaś historia lub zadanie, o którym zapomniano, ale jest wymagane do osiągnięcia celu sprintu, myślę, że najlepiej byłoby dodać historię lub zadanie do backloga podczas sprintu. Jednak jest wiele osób, które wydają się być nieugięte, że jakakolwiek zmiana w backlogu sprintu nie jest w porządku. Czy jakoś źle rozumiem to stanowisko? Czy ci ludzie definiują backlog sprintu jakoś inaczej? W moim rozumieniu backlog sprintu składa się zarówno z historii, jak i zadań, na które są podzielone. W każdym razie naprawdę byłbym wdzięczny za wkład w tę kwestię. Staram się dociec zarówno na czym polega idealistyczne podejście scrum do zmiany backlogu sprintu podczas sprintu, jak i czy ludzie, którzy z powodzeniem używają scrum do rozwoju, pozwalają na zmianę backlogu sprintu podczas sprintu.


title: Dlaczego nie możemy nic zrobić?

text: Pracuję w małym zespole, w średniej wielkości firmie, która w większości nie zajmuje się tworzeniem oprogramowania. Jestem najnowszym i najmniej doświadczonym programistą i przed rozpoczęciem pracy nie miałem żadnego zawodowego ani akademickiego wykształcenia w zakresie oprogramowania, ale jestem całkiem zadowolony z tego, jak szanowany jest mój wkład i jestem wdzięczny, że potraktowano mnie poważnie na tak wczesnym etapie mojej kariery. Mimo to czuję, że powinienem robić więcej z tą hojną ilością czasu antenowego. Jako zespół wydaje się, że mamy problemy z załatwieniem spraw. Chciałbym móc zasugerować coś, co poprawi sytuację i myślę, że zostałbym wysłuchany, gdyby to był dobry pomysł, ale nie wiem, co zasugerować. Rzeczy, które mogę zidentyfikować jako problemy, to: * Specyfikacja zadań jest rzadka. Dzieje się tak po części dlatego, że kierownictwo jest wąskim gardłem i nie mamy pieniędzy ani ludzi, aby zaangażować się w opracowanie szczegółowych wymagań tak bardzo, jak byśmy tego chcieli. Częściowo dzieje się tak również dlatego, że oprogramowanie, które tworzymy, jest dochodzeniowe, a dokładna metoda nie jest jasna, dopóki nie zostanie zademonstrowana i nie zostanie użyta do określenia jego skuteczności. * Główny programista bardzo lubi to, co nazywa „prototypowaniem” do tego stopnia, że ostatnio zaczął upierać się, że wszystko jest „prototypowane”, co dla reszty z nas wygląda jak pisanie złego kodu i dawanie go modelarzom do zabawy. W wielu przypadkach nie jest jasne, czego oczekuje od tego ćwiczenia. „Rzeczywiste” wdrożenie cierpi z powodu jego uporu, że dobre praktyki zabierają zbyt dużo czasu od prototypowania. Nawet nie zacząłem być w stanie rozwikłać tej pokręconej logiki i nie jestem pewien, czy chcę spróbować. * Oczekuje się, że modelarze powiedzą nam wszystko na temat pożądanej metodologii w szczegółach, i zakłada się absolutne zaufanie, że to, z czym wyjdą, jest teoretycznie bezbłędne. Prawie nigdy nie jest to prawdą, ale nie podejmuje się żadnych działań w celu naprawienia tej sytuacji. Nikt ze strony modelowania nie zgłasza żadnych obaw w ustrukturyzowany sposób, na który można by zareagować, ani nie szuka wskazówek dotyczących stosowania najlepszych praktyk. Nie robi się też nic z ich biernością. * Wcześniej próbowałem wcisnąć TDD w zespole, ale okazało się to trudne, ponieważ jest to dla mnie nowe i chociaż ci, którzy nadzorowali moją pracę byli gotowi to tolerować, nikt inny nie wyrażał entuzjazmu. Nie potrafię uzasadnić ilości czasu, który spędzam na tarzaniu się, a nie kończeniu funkcji, więc pomysł został - na razie - porzucony. Obawiam się, że nie zostanie ponownie odebrany, ponieważ nikt nie lubi, gdy ktoś mówi mu, jak ma wykonywać swoją pracę. * Mamy teraz serwer ciągłej integracji, ale jest on głównie używany tylko do uruchamiania wielogodzinnych testów regresji. Otwarto, że powinien również przeprowadzać pełne testy jednostkowe i integracyjne, ale w tej chwili nikt ich nie pisze. * Za każdym razem, gdy poruszam kwestię jakości z głównym deweloperem, otrzymuję odpowiedź na temat efektu „Testowanie funkcji A jest proste, funkcja B jest o wiele ważniejsza dla użytkownika, ale zbyt trudna do przetestowania, dlatego nie powinniśmy testować cecha A'. Po raz kolejny nie poczyniłem żadnych postępów w próbach rozwikłania tej logiki. ...uff. Kiedy tak to określam, wygląda to znacznie gorzej, niż myślałem. Przypuszczam, jak się okazuje, to wołanie o pomoc.


Jaką metodę wizualizacji poleciłbyś dla programów sterowanych zdarzeniami? Czy istnieją standardowe diagramy branżowe, takie jak schematy blokowe?


title: Jak poprawnie zrozumieć framework django?

text: Mam przyzwoitą znajomość php, tj. umiem wziąć framework, przeczytać jego kod i jeśli dokumentacja jest odpowiednia, zrozumieć, co robi. Głównym powodem jest to, że php jest w rzeczywistości bardzo łatwym językiem, który jest dosłownie stworzony dla web-dev. Od tygodnia próbuję nauczyć się django, mogę podbić z nim podstawową aplikację, ale jest po prostu zbyt wiele rzeczy, które przechodzą mi przez głowę, np. Wygląda jak magia, powód tego, myślę, że całość interakcja z serwerem jest częścią django, która jest obsługiwana przez twój serwer w php, chcę przeczytać więcej o tej części, tj. jakie wszystkie tematy powinienem omówić, aby to "zdobyć". proszę zasugerować też kilka książek


title: Identyfikacja języków używanych przez poszczególne branże

text: > **Możliwe powielenie:** > Jakie technologie są obecnie używane do tworzenia gier? Jestem nowy w programowaniu i nie znam różnic między głównymi językami. Desperacko chcę dostać się do branży gier, ponieważ mam tyle historii, które chcę opowiedzieć i tyle doświadczeń, które chcę stworzyć. Obecnie zajmuję się modelowaniem/animacją 3D, więc wszelkie podobieństwa będą pomocne. Jakie kroki powinienem podjąć, aby zbadać branżę (gry) i firmy z tej branży? Jak rozpoznać, jakich języków programowania używają, abym mógł się ich uczyć?


title: Początkujący programista chce awansować do tworzenia gier

text: Brałem udział w kursie informatyki, który obejmował podstawy języka Java i programowania, od warunków warunkowych i pętli po dziedziczenie i interfejsy. Dostałem też Head First Java od znajomego, który w nim nie pisał. Po skończeniu tej książki, co powinienem zrobić, zanim zabiorę się do tworzenia gier? Poza tym na razie tworzę gry z linii poleceń i programy matematyczne. Czy to dobra praktyka? Martwię się tylko, że będę powtarzał tylko rzeczy, które już znam i że nie będę się uczyć niczego nowego.


title: Jak ważny jest UTF-7, jeśli chodzi o parsowanie wiadomości e-mail?

text: Niedawno zaimplementowałem przychodzące e-maile do aplikacji i chłopcze, czy otworzyłem bramy piekła? Od tego czasu co drugi dzień przychodzi e-mail, który powoduje awarię aplikacji w inny sposób. Jedną z tych rzeczy są e-maile zakodowane jako UTF-7. Większość e-maili ma postać ASCII, niektóre z kodowań łacińskich lub, na szczęście, UTF-8. Komunikaty o błędach Hotmail (takie jak adres e-mail nie istnieje lub przekroczony limit) wydają się pojawiać jako UTF-7. Niestety, UTF-7 nie jest kodowaniem, które Ruby rozumie: > "hello world.encode("utf-8", "utf-7") Encoding::ConverterNotFoundError: nie znaleziono konwertera kodu (UTF-7 na UTF-8) > Encoding::UTF_7 => #<Encoding:UTF-7 (dummy)> Moja aplikacja się nie zawiesza, właściwie całkiem dobrze radzi sobie z e-mailem, ale wysyła mi powiadomienie o potencjalnym błędzie. Spędziłem trochę czasu na googlowaniu i nie mogę znaleźć nikogo, kto zaimplementował konwersję, przynajmniej nie jako Ruby 1.9.3 Encoding::Converter. Tak więc moje pytanie brzmi, ponieważ nigdy nie otrzymałem wiadomości e-mail z rzeczywistą treścią od rzeczywistej osoby w UTF-7, jak istotne jest to kodowanie? czy mogę to bezpiecznie zignorować?


title: Czy użycie większego bufora jest przydatne?

text: Używam bufora od dłuższego czasu, gdy potrzebuję skopiować strumień lub odczytać plik. I za każdym razem ustawiam rozmiar bufora na 2048 lub 1024, ale z mojego punktu widzenia bufor jest jak „wiadro”, które przenosi mój „piasek” (strumień) z jednej części mojej ziemi (pamięci) do innej. Czy więc zwiększenie pojemności łyżki teoretycznie pozwoli mi na mniej podróży? Czy to dobre rzeczy do zrobienia w programowaniu?


title: Czy wszystkie języki są w zasadzie takie same?

text: Ostatnio musiałem zrozumieć projekt małego programu napisanego w języku, o którym nie miałem pojęcia (ABAP, jeśli musisz wiedzieć). Mogłem to rozgryźć bez większych trudności. Zdaję sobie sprawę, że opanowanie nowego języka to zupełnie inna gra w piłkę, ale samo zrozumienie intencji kodu (zwłaszcza standardowego kodu produkcyjnego, który niekoniecznie jest skomplikowany) w dowolnym języku jest proste, jeśli znasz już kilka języków (najlepiej jeden proceduralny/OO i jeden funkcjonalny). Czy to ogólnie prawda? Czy wszystkie języki programowania składają się z podobnych konstrukcji, takich jak pętle, instrukcje warunkowe i przekazywanie komunikatów między funkcjami? Czy istnieją języki nieezoteryczne, których typowy programista Java/Ruby/Haskell nie byłby w stanie zrozumieć? Czy wszystkie języki mają wspólne pochodzenie?


title: Jak poprawnie napisać dokument instalacyjny lub instalacyjny

text: Właśnie dołączyłem do małego start-upu jako inżynier oprogramowania po ukończeniu studiów. Startup ma 4 lata i pracuję z CEO i COO, nawet jeśli są ludzie za granicą. W zasadzie oboje robili prawie wszystko. Obecnie jestem na jakiejś fazie treningowej. Mam do dyspozycji wewnętrzną dokumentację architektury, konfiguracji i instalacji. Dokumentacja architektury jest jak Biblia i powinna zawierać pełne informacje. Reszta służy do nadawania wskazówek w różnych procesach. Problem polega na tym, że te dokumenty są mniej lub bardziej przestarzałe, ponieważ po prostu nie mieli czasu na ich zmianę. Będę odpowiedzialny za szkolenie kolejnych pracowników, a aktualizacja tych dokumentów jest częścią mojego szkolenia. W niektórych jest wiele zakodowanych na stałe informacji, takich jak: Zainstaluj ten_moduł_który_nadal_istnieje cd ten_nazwa_katalogu_zmieniony cp ten_nazwa_pliku_zmieniony inny_katalog_nazwa_zmieniony ./config_script.sh ./execute_script.sh Problemy, z którymi się spotkałem: * Albo instalacja modułu jest zupełnie inna (na przykład teraz rpm lub inny system operacyjny) * Zmieniły się nazwy i muszę zmienić stare nazwy na nowe. * Brak opisu celu bieżącego kroku. * Brakuje informacji na cały temat Na szczęście ci faceci są w pobliżu i otrzymuję wszystkie potrzebne informacje i wszystkie wyjaśnienia, których potrzebuję. Chcę przenieść projekt do kolejnych dokumentów, aby w przyszłości ludzie nie mieli wrażenia, że całkowicie przepisują dokument za każdym razem, gdy go aktualizują. Masz sugestie? Jeśli istnieje lekka metodologia projektowania dostępna online, możesz wskazać mi, że też jest fajna. Jedno, co na pewno zrobię, to utworzenie repozytorium wersjonowania samych dokumentów. Jest już jeden dla kodu źródłowego, więc nie wiem, dlaczego dokumenty wewnętrzne zasługują na inne traktowanie.


title: Jaka jest różnica między: agentem, aktorem, programowaniem opartym na przepływie danych?

text: Jaka jest różnica między następującymi terminami? * programowanie agentowe * programowanie agentowe z mikroagentami * programowanie aktorami * programowanie aktorami z lekkimi aktorami * programowanie oparte na przepływie danych Trudno znaleźć porównywanie artykułów i są one bardzo podobne. Afaik mają różne ograniczenia i są zaimplementowane na innym poziomie abstrakcji, ale potrzebuję trochę otuchy...


title: PHP - Wzorzec macierzy repozytorium?

text: Bardzo się staram zrefaktoryzować część mojego starszego kodu w projekcie, korzystając z najlepszych praktyk i wzorców projektowych + DDD, więc chciałbym trochę opinii na temat problemu, który aktualnie mam. Załóżmy, że mam dwie klasy encji: class Dog { protected $name; function __construct($nazwa) { $this->nazwa = $nazwa; } /** * @return mixed */ public function getName() { return $this->name; } function bark() { echo 'Rawr'; } } class Husky extends Pies { /** * @var Sledge */ protected $sledge; function __construct($name, Sledge $slegde) { parent::__construct($name); $to->sanie = $sanie; } function pull() { echo $this->sledge->pull(); } } `Pies` to moja regularna jednostka i jego jedynym obowiązkiem jest mapowanie pól bazy danych. Z drugiej strony "Husky" ma takie same obowiązki jak pies, ale także deleguje ciągnięcie "Sledge". Normalnie obie jednostki miałyby różne repozytoria (powinny? Skoro jeden dziedziczy po sobie nawzajem), jednak wymaganie biznesowe sugeruje, że klient nie musi określać typu psa (więc może to być albo „podstawowy” „pies” lub specjalny `Husky`), po prostu jego nazwa `http://localhost/animal/fluffy`. Co więcej, obecnie oba znajdują się w tej samej tabeli bazy danych (rozpoznawane przez pole `type`) i obecnie nie ma technicznych planów, aby to zmienić (ze względu na wydajność i czas). Jak najlepiej to zrobić? * Czy powinienem utworzyć jakieś `AnimalRepository`, pobrać dane i potraktować je jako DTO, wykryć ich typ i stworzyć odpowiednią klasę? * Czy powinienem stworzyć coś w rodzaju mapera wyższego poziomu abstrakcji? Jak to powinno wyglądać?


title: Jakie są zalety i wady dzielenia zespołów według warstwy architektury, a nie produktu?

text: Jak mówi tytuł; jakie są zalety i wady dzielenia zespołów według warstwy architektury, a nie produktu? **_Na przykład:_** **Organizacja A** składa się z trzech zespołów: * Zespół Web i Front End * Zespoły API, usługi internetowe i elementy danych * Zespoły osadzone w zespole _Zespoły organizacji A_ z biegiem czasu stały się bardziej wyspecjalizowane w ich pracy, a nie bycia naprawdę pełnoprawnymi programistami. **Organizacja B** ma trzy zespoły: * Zespół Produkt Alfa * Zespół Produkt Beta * Zespół Produkt Charlie _Organizacja B_ stworzyła środowisko pełnych programistów, z których wszystkie są dość wymienne między sobą. Co **Organizacja A** będzie w stanie zrobić lepiej (i nie tak lepiej) niż **Organizacja B** i na odwrót? Niekoniecznie trzeba brać sobie do serca przykłady, ponieważ miały one na celu przekazanie sedna mojego pytania.


title: Co oznacza "ponieważ IL nie oferuje instrukcji do manipulowania rejestrami, ludzie mogą łatwo tworzyć nowe języki"?

text: Czytam CLR przez C# i natknąłem się na to zdanie w pierwszym rozdziale i nie rozumiałem, co to właściwie znaczy. Pełna linijka tutaj: > ponieważ IL nie oferuje instrukcji do manipulowania rejestrami, > ludzie mogą łatwo tworzyć nowe języki i kompilatory, które produkują kod > CLR. Co to znaczy? Zaryzykowałem zgadywanie, że oznacza to, że IL jest na nieco niskim poziomie, ale nie za niskim, aby łatwo było tworzyć języki na jego szczycie.


title: Tworzenie obcych symboli lub znaków, które wyglądają naturalnie

text: Czytałem kilka rzeczy z mitów Cthulhu i zacząłem myśleć o tych różnych znakach i symbolach, które są używane w tekstach. Oczywiście są one wykonane przez ludzi, ale chodzi o to, że wyglądają naturalnie dla ludzkich oczu. Jaki algorytm byłby więc potrzebny do stworzenia naturalnie wyglądających symboli i znaków? Jak można podejść do tego problemu? Myślę, że kluczową rolę odgrywają złote proporcje i liczby Fibonacciego.


title: Jakie jest najlepsze podejście do wdrażania aplikacji w firmach

text: Jakie jest najlepsze podejście do następującego scenariusza: 1) Publicznie dostępna aplikacja (dostępna w sklepach z aplikacjami), która jest używana przez użytkowników końcowych do korzystania z usług oferowanych przez wiele firm. 2) Firmy te utrzymują swoje usługi również za pomocą aplikacji mobilnej. Nie jestem pewien, jak rozwiązać drugą część. Posiadanie jednej aplikacji dla funkcji użytkownika końcowego i administratora, zabezpieczonej nazwą użytkownika/hasłem, nie wydaje się dobrym pomysłem. Pozostawiłoby to jedyną możliwość stworzenia oddzielnej aplikacji administratora dla firm. Jakie jest najlepsze podejście do wdrażania aplikacji „admin”, takich jak aplikacje mobilne, tylko w firmach, na Androida, iOS i Windows Phone? Kilka dodatkowych informacji: > Aplikacja publiczna ----> Serwery -----> Aplikacje dla wielu firm Aplikacja publiczna pokazuje wszystkie firmy oferujące swoje usługi. Użytkownik końcowy korzysta z aplikacji publicznej, aby zamówić coś w określonej firmie. Zamówienie jest wysyłane na nasze serwery. Nasze serwery wysyłają zamówienie do powiązanej firmy. To zamówienie jest wyświetlane w aplikacji administratora firmy i ma opcję zaakceptowania zamówienia.


title: Co myślisz o teście Joela?

text: Test Joela jest dobrze znanym testem pozwalającym określić, jak dobry jest Twój zespół. Co myślisz o punktach? Czy nie zgadzasz się z którymkolwiek z nich? Czy jest coś, co chciałbyś dodać?


title: Dobre podejście do pakowania aplikacji internetowych PHP dla Debiana

text: Wiele aplikacji internetowych PHP postępuje zgodnie z następującym modelem instalacji i aktualizacji: 1. Rozpakuj źródłowy plik tar. 2. Wskaż Apache źródło. 3. Przejdź w przeglądarce internetowej do strony głównej. 4. Przejdź przez kilka stron internetowych konfiguracji (np. sprawdza, czy istnieją biblioteki, pyta o informacje o połączeniu z bazą danych, tworzy lub aktualizuje schemat bazy danych itp.). 5. Użytkownik zmienia nazwę katalogu `install/` na inną, aby aplikacja wiedziała, że została zainstalowana. Nie widzę żadnego (prostego) sposobu na utworzenie pakietu Debiana z tego bez zmuszania użytkownika instalującego pakiet do przejścia przez wiele z powyższych czynności ręcznych. Pamiętaj, że nie jestem programistą aplikacji, więc nie jestem w stanie bezpośrednio zmienić sposobu działania instalacji aplikacji. Jakie jest typowe podejście do pakowania takiej aplikacji?


title: Deklaracja zmiennej a składnia przypisania

text: Praca nad statycznie typizowanym językiem z wnioskowaniem o typie i uproszczoną składnią oraz koniecznością podjęcia ostatecznej decyzji dotyczącej składni deklaracji zmiennej w porównaniu z przypisaniem. W szczególności próbuję wybrać między: // Opcja 1. Utwórz nową zmienną lokalną za pomocą :=, przypisz za pomocą = foo := 1 foo = 2 // Opcja 2. Utwórz nową zmienną lokalną za pomocą =, przypisz za pomocą := foo = 1 foo := 2 Tworzenie funkcji użyje `=` niezależnie od: // Wcięcia ograniczają bloki kwadrat x = x * x I przypisanie do obiektów złożonych będzie działać podobnie: sky.color = blue a[i] = 0 Która z opcji 1 lub 2 czy ludzie uznaliby to za najwygodniejsze/najmniej zaskakujące/w przeciwnym razie najlepsze?


title: Efektywne przydzielanie prac rozwojowych, aby umożliwić rozwój równoległy

text: Obecnie realizuję swój pierwszy projekt akademicki, w którym musimy pracować w 4-osobowych grupach nad stworzeniem aplikacji (java...). Zresztą, jak można przypisać pracę, aby było mniej zależności od siebie i można było pracować osobno zamiast czekać na siebie? Zaproponowałem 1 osobie opracowanie 1 warstwy: Model, Widok, Kontroler, Dostęp do Danych. Pracuję nad dostępem do danych, ale uważam, że potrzebuję klas modeli: Na przykład My `EventsDataAccess` ma `findEventByName(String name)`, które zwraca `Event`, który jest rozwijany przez inną osobę. jak powinienem postąpić? Tutaj `Event` jest bardzo małą klasą, więc nie powinno zająć dużo czasu, ale załóżmy, że jest duża, może to potrwać długo? Jak zwykle dzieli się pracę programistów w małym lub średnim zespole? O wiele łatwiej jest pracować w, powiedzmy, bardzo małym, znajomym zespole, z powiedzmy tylko 2 osobami


title: Wiele wykresów wypalania na stronie projektu TFS

text: pracujemy ze Scrumem w TFS2013, z jednym głównym projektem i wieloma zespołami. To, co chcę zrobić, to sprawić, by strona główna projektu wyświetlała wykres wypalania każdego zespołu, aby kierownictwo mogło łatwo zobaczyć postępy wszystkich zespołów. Obecnie łączy wszystkie wykresy spalania w jedno, a jeśli tworzę wykresy, mogę uzyskać tylko wykresy liniowe / słupkowe / kołowe, które są znacznie mniej skuteczne w wyświetlaniu tych samych informacji. Czy można przypiąć wykresy wypalania do stron głównych? Dziękuję.


title: Funkcjonalny dokument z kodu

text: Jestem Sr Java Developerem i niedawno dołączyłem do nowego zespołu. Tutaj zostałem poproszony o stworzenie funkcjonalnego dokumentu, patrzącego na kod starszej aplikacji. Ta aplikacja została napisana około 8-10 lat temu, która obecnie działa w środowisku live, ale z powodu braku dokumentacji jest trudna do skonfigurowania i uruchomienia na lokalnym polu programistycznym. Skonsultowałem się z kilkoma starymi członkami zespołu, którzy go wspierają, ale żaden nie był w stanie uruchomić go na swoich dev boxach. Teraz muszę stworzyć z niego funkcjonalny dokument (z uruchamianiem go tylko patrząc na kod), który będzie podstawą do przepisania tej aplikacji z nową technologią i kilkoma ulepszeniami. Uprzejmie zasugeruj, jaki byłby najlepszy sposób, aby iść naprzód? Próbowałem dowiedzieć się od testerów i stwierdziłem, że obecnie nie ma testera przydzielonego do tej aplikacji, ponieważ jest to stara działająca aplikacja na żywo. Nie ma zbyt wielu ulepszeń ani błędów. Ponieważ ten projekt ponownego pisania jest już w kolejce, kierownictwo zastanawia się nad dostosowaniem wszelkich nadchodzących błędów do tej nowej aplikacji.


title: C++ : Asocjacja, agregacja i kompozycja

text: Zaczynam studiować OOAD i mam trudności ze znalezieniem przykładu kodu w języku C++, który ilustrowałby, w jaki sposób programowo implementowane są „Association”, „Agregacja” i „Kompozycja”. (Wszędzie jest kilka postów, ale dotyczą one C# lub javy). Znalazłem przykład lub dwa, ale wszystkie są sprzeczne z instrukcjami mojego instruktora i jestem zdezorientowany. Rozumiem, że w: * **Powiązanie:** Foo ma wskaźnik do obiektu Bar jako element danych * **Agregacja:** Foo ma wskaźnik do obiektu Bar, a dane Bar są głęboko kopiowane do tego wskaźnika. * **Kompozycja:** Foo ma jako element danych obiekt Bar. A tak to zaimplementowałem: //ASSOCIATION class Bar { Baz baz; }; klasa Foo { Bar* bar; void setBar(Bar* _bar) { bar=_bar; } }; //AGREGACJA klasa Bar { Baz baz; }; klasa Foo { Bar* bar; void setBar(Bar* _bar) { bar = nowy Bar; bar->baz=_bar->baz; } }; //SKŁADANIE klasa Bar { Baz baz; }; klasa Foo { Bar bar; Foo(Baz baz) { bar.baz=baz; } }; Czy to jest poprawne? Jeśli nie, to jak należy to zrobić? Byłbym wdzięczny, gdybyś dał mi również odniesienie do kodu z książki (abym mógł porozmawiać z moim instruktorem)


title: Projekt podmiotu do gry w blackjacka – czy powinienem uczynić z karty podmiot?

text: Tworzę prostą grę w blackjacka wspartą bazą danych Na mojej karcie znajduje się karta klasy publicznej { prywatna twarz twarzy; prywatny garnitur garnitur; //setters.. getters } gdzie `face` i `suit` są wyliczeniami Mam encję `Bet` z następującą @Entity public class Bet{ private Player player; prywatne karty String; //... } Obecnie, kiedy rozdaję karty, parsuję kolor i twarz do łańcucha i łączę je w polu kart, a następnie parsuję karty, jeśli chcę obliczyć wynik. Uważam, że jest to kłopotliwe, więc chcę zmienić moje pole „karty” na Lista w podmiocie zakładu. Teraz, jeśli tak jest, musiałbym również uczynić z klasy Card encję. Ale moja `cardService`, z której otrzymuję moje karty, nie opiera się na bazie danych, po prostu tworzy losowe karty, więc nie ma sensu tworzyć z karty encji — mam rację?


title: Jak bezpieczna (lub niepewna) jest globalna instalacja pakietów Node?

text: Czy powinienem martwić się o bezpieczeństwo podczas globalnej instalacji pakietów Node? Dlaczego lub dlaczego nie?


title: Operator trójargumentowy JavaScript vs. ||

text: Spojrzałem wcześniej na jakiś kod node.js i zauważyłem, że facet, który go napisał, wydawał się faworyzować następującą składnię: var fn = function (param) { var paramWithDefault = null == param ? „Wartość domyślna” : param; } Nad tym, co uważam za bardziej zwięzłe: var fn = function (param) { var paramWithDefault = param || 'Domyślna wartość'; } Zastanawiałem się, czy druga forma jest rzeczywiście bardziej akceptowalną społecznie składnią JavaScript, widziałem ją na wolności więcej razy niż operator trójskładnikowy do tego celu. Zauważyłem, że w pierwszym przykładzie używa podwójnego równa się (nie potrójnego równa się), co oznacza, że „nieokreślone” będzie liczone jako null, co zmniejszyłoby jeden wpływ, o którym mógłbym pomyśleć. Jednak czytałem w wielu miejscach, że == jest raczej złym operatorem w JavaScript (JSLint jest temu bardzo przeciwny, IIRC).


title: Czy śledzenie użycia aplikacji za pomocą wywołań interfejsu API REST jest nieetyczne?

text: Tworzę aplikację, która komunikuje się z moją witryną za pomocą ASIHTTPRequest do API REST opartego na PHP po stronie serwera. Oczywiście w mojej aplikacji mam różne punkty końcowe po stronie serwera i zwykle zwracam dane JSON. Czy rejestrowanie liczników liczby trafień każdego punktu końcowego jest nieetyczne? Chciałbym uchwycić, w jaki sposób aplikacja była używana, przechwytując, jaki punkt końcowy został trafiony, agenta użytkownika, porę dnia, ewentualnie ich adres IP (do grupowych wizyt itp.). Czy powinienem poprosić o pozwolenie, aby to zrobić?


title: Dlaczego języki maszyn wirtualnych nie są kompilowane tylko raz?

text: (Przede wszystkim powinienem wyjaśnić, że kompilatory i maszyny wirtualne (aka) są dla mnie zupełnie nieznaną dziedziną) Jak rozumiem, za każdym razem, gdy uruchamiana jest aplikacja Java/C#/..., wywoływana jest maszyna wirtualna i tłumaczy kod pośredni (kod bajtowy, CIL, itp.) do instrukcji maszynowych. Ale dlaczego tej operacji nie można wykonać tylko raz - w czasie instalacji?


title: „Gödel, Escher, Bach” nadal aktualne?

text: Właśnie ukończyłem kurs na temat obliczalności i logiki, który był interesującym kursem. Wykładowca poleca kilka książek na jego slajdach, m.in. „Gödel, Escher, Bach”. Widzę, że książka jest dość znana i wygląda bardzo interesująco. Ale mam kilka pytań dotyczących jego zawartości. 1. Czy treść jest nadal aktualna dzisiaj? Wydaje mi się, że większość teoretycznych rzeczy nie zmienia się z dnia na dzień, ale czy są jakieś główne punkty, które nie obowiązują już dzisiaj, a których powinienem być świadomy? 2. Zakładam, że w ciągu ostatnich 30 lat poczyniliśmy pewne postępy. Czy ktoś z Was może polecić książkę na ten temat, która obejmuje ten postęp (logika, sztuczna inteligencja, obliczalność)? _Kolejne pytanie:_ Czy muszę wiedzieć o Escher i Bachu?