title: Czego używasz do organizowania wiedzy zespołu?

text: W zeszłym roku wraz z trzema starymi dobrymi przyjaciółmi założyliśmy mały zespół programistów internetowych/mobilnych. Sprawy idą całkiem dobrze. Dużo się uczymy, a do grupy dołączają nowe osoby. Utrzymywanie wiedzy zawsze aktualnej i zsynchronizowanej jest dla nas kluczowe. Długie wątki e-maili po prostu nie są dla nas dobrym rozwiązaniem: są zbyt rozproszone i mylące, a po pewnym czasie trudne do odzyskania. Jak Twój zespół zarządza i organizuje wspólną wiedzę? W jaki sposób gromadzisz i udostępniasz przydatne zasoby (artykuły, linki, biblioteki itp.) wewnątrz swojego zespołu? **Aktualizacja:** dziękujemy za opinię. Bardziej niż używanie wiki do udostępniania typowych procedur lub informacji zespołu, chciałbym udostępniać linki zewnętrzne, artykuły, biblioteki kodu i móc je łatwo komentować w moim zespole. Szczególnie chciałem wiedzieć, czy znasz jakiś sposób/usługę internetową, aby udostępnić listę lektur zespołowi. Mam na myśli coś takiego jak Readitlater/Instapaper, ale dla zespołów, może z dostępnymi statystykami, takimi jak „# współpracowników, którzy to przeczytali”.


title: Zamieszanie wokół pierwszego dnia wykresu wypalania

text: Zbudowałem prosty wykres wypalania za pomocą arkusza kalkulacyjnego Google, jak pokazano poniżej. ![tu wpisz opis obrazka](http://i.stack.imgur.com/IfXtt.png) Projekt składa się z 99 zadań. A użytkownik ukończył 5 zadań pierwszego dnia. Tak więc punkt „Pozostałe zadania rzeczywiste” znajduje się poniżej punktu „Pozostałe zadania idealne” pierwszego dnia, co różni się od wykresu spalania pokazanego w Wikipedii pod adresem http://en.wikipedia.org/wiki/Burn_down_chart. Zastanawiam się, czy dodać datę przed pierwszą datą, aby punkt „Pozostałe zadania rzeczywiste” nałożył się na punkt „Pozostałe zadania idealne” pierwszego dnia.


title: czy możliwe jest automatyczne generowanie POJO z adnotacjami z tabeli?

text: Zastanawiam się, czy jest to możliwe, czy też istnieje narzędzie do generowania POJO z adnotacjami z tabeli. Aby to było jasne, na przykład tabela Osoba ma pola takie jak identyfikator, imię, nazwisko itp. I chcę wygenerować POJO o nazwie Osoba z wykonanymi mapowaniami z adnotacjami.


title: Jaka jest lepsza nazwa dla tego stołu wiele do wielu?

text: Część jednej z moich aplikacji zawiera tabele „contracts” i „contract_types”, w których typ może mieć wiele kontraktów, ale kontrakt może być tylko jednego typu. Teraz pojawiła się nowa zmarszczka: umowa może z biegiem czasu zmieniać rodzaj (chociaż, na szczęście, wciąż może być tylko jednego rodzaju w danym momencie). Najprostszym rozwiązaniem wydaje się być wprowadzenie nowej tabeli z kolumnami mniej więcej tak: id_kontraktu id_typu_od_daty do_daty Ale jak nazwać nową tabelę? `contract_type_allocations` to najlepsze, co mogę do tej pory zrobić i nie mogę powiedzieć, że jestem pod wrażeniem siebie. Sugestie przyjęte z wdzięcznością.


title: Czy powinienem przeanalizować XML na serwerze, czy udostępnić serwer proxy i pozwolić przeglądarce przeanalizować go?

text: Muszę połączyć się z API innej firmy. Za pomocą tego API wysyłam żądanie GET z przeglądarki użytkownika końcowego i otrzymuję odpowiedź XML. Te dane mają być używane w aplikacji opartej na przeglądarce, w której użytkownik może je przeszukiwać, używać do podejmowania decyzji itp. Głównym problemem jest to, że większość przeglądarek ma zablokowane międzydomenowe użycie XML, więc nie mogę po prostu uzyskać XML z interfejsu API. Jednak ogólne dane są zasadniczo podzielone na dwa zestawy. 1. Pierwszy zestaw danych jest publiczny i należy go aktualizować tylko co jakiś czas, dzięki czemu można go buforować dla wszystkich użytkowników po stronie serwera, znacznie zmniejszając ruch. 2. Drugi zestaw danych jest prywatny i indywidualny dla każdego użytkownika. Dane te są również częściej aktualizowane w interfejsie API. Powoduje to, że buforowanie jest znacznie mniej skuteczne. Ze względu na skalowalność chciałbym, aby obciążenie serwera było jak najmniejsze. Widzę przed sobą dwie opcje: 1. Zapewnij serwer proxy, który może być używany do kierowania żądań XML do serwera innej firmy i bezpośrednio tam iz powrotem między klientem a interfejsem API innej firmy. 2. Niech serwer wykona konwersję z XML na JSON i usunie niepotrzebne informacje. Zasadniczo oznacza to stworzenie nowego API dla naszego serwera, co przekłada się na żądania z API 3rd party. Jaki byłby najlepszy sposób dostarczenia danych użytkownikowi? (Nie musi być jedną z dwóch opcji)


title: Dlaczego moja klasa jest gorsza od hierarchii klas w książce (początkujący OOP)?

text: Czytam _Obiekty PHP, wzorce i praktyka_. Autor stara się modelować lekcję na uczelni. Celem jest wypisanie rodzaju lekcji (wykład lub seminarium) oraz opłat za lekcję w zależności od tego, czy jest to lekcja godzinowa, czy o stałej cenie. Tak więc wynik powinien wynosić 20 opłat za lekcję. Rodzaj opłaty: stawka godzinowa. Rodzaj lekcji: seminarium. Opłata za lekcję 30. Rodzaj opłaty: stała stawka. Rodzaj lekcji: wykład. gdy dane wejściowe są następujące: $lekcje[] = new Lesson('stawka godzinowa', 4, 'seminarium'); $lekcje[] = new Lesson('stała stawka', null, 'wykład'); Napisałem tak: class Lesson { private $chargeType; prywatny czas trwania $; prywatne $lekcjiType; public function __construct($chargeType, $duration, $lessonType) { $this->chargeType = $chargeType; $to->czas trwania = $czas trwania; $this->lekcjiType = $lekcjiType; } funkcja publiczna getChargeType() { return $this->getChargeType; } funkcja publiczna getLessonType() { return $this->getLessonType; } public function cost() { if($this->chargeType == 'stała stawka') { return "30"; } else { return $this->czas trwania * 5; } } } $lessons[] = new Lesson('stawka godzinowa', 4, 'seminarium'); $lekcje[] = new Lesson('stała stawka', null, 'wykład'); foreach($lekcje jako $lekcja) { print "Opłata za lekcję {$lekcja->koszt()}."; print " Typ opłaty: {$lesson->getChargeType()}."; print " Typ lekcji: {$lesson->getLessonType()}."; drukuj "<br />"; } Ale według książki mylę się (ja też jestem całkiem pewien). Zamiast tego autor podał jako rozwiązanie dużą hierarchię klas. W poprzednim rozdziale autor podał następujące „cztery drogowskazy” jako czas, w którym powinienem rozważyć zmianę struktury mojej klasy: * Powielanie kodu * Klasa, która zbyt dużo wiedziała o jego kontekście * Waluta wszystkich transakcji \- klasy, które próbują robić wiele rzeczy * Instrukcje warunkowe Jedyny problem, jaki widzę, to instrukcje warunkowe, i to w niejasny sposób - więc po co to refaktoryzować? Jak myślisz, jakie problemy mogą pojawić się w przyszłości, których nie przewidziałem? **Aktualizacja** : Zapomniałem wspomnieć - to jest struktura klas, którą autor dostarczył jako rozwiązanie - wzorzec strategii: ![Wzorzec strategii](http://i.stack.imgur.com/RJbQZ.png )


title: W jaki sposób tablica symboli odnosi się do przestrzeni nazw?

text: Oficjalny samouczek używa terminu _tabela symboli_ w kilku miejscach, w których spodziewałbym się terminu _przestrzeń nazw_. 1\. Definiowanie funkcji > Wykonanie funkcji wprowadza nową tablicę symboli używaną dla lokalnych zmiennych > funkcji. Dokładniej, wszystkie przypisania zmiennych w funkcji > przechowują wartość w lokalnej tablicy symboli; natomiast zmienne > referencje najpierw szukaj w lokalnej tablicy symboli, następnie w lokalnej tablicy symboli > otaczających funkcji, następnie w globalnej tablicy symboli, a na końcu > w tablicy wbudowanych nazw. 2\. Więcej o modułach > Każdy moduł posiada własną prywatną tablicę symboli, która jest używana jako globalna > tablica symboli przez wszystkie funkcje zdefiniowane w module. W ten sposób autor modułu > może korzystać ze zmiennych globalnych w module, nie martwiąc się > przypadkowymi kolizjami ze zmiennymi globalnymi użytkownika. Znalazłem blog Eli Bendersky'ego, w którym cytuje moduł symtable: Tabele symboli są generowane przez kompilator z AST tuż przed wygenerowaniem kodu bajtowego. Tablica symboli odpowiada za obliczenie zakresu > każdego identyfikatora w kodzie. Wygląda więc na to, że tablica symboli poprzedza przestrzeń nazw. Jeszcze inny cytat, z pierwszego źródła, prowadzi mnie do przekonania, że one również istnieją w tym samym czasie. > Rzeczywiste parametry (argumenty) wywołania funkcji są wprowadzane do > lokalnej tablicy symboli wywoływanej funkcji, gdy jest ona wywoływana; w ten sposób argumenty > są przekazywane przy użyciu wywołania przez wartość (gdzie wartość jest zawsze obiektem > referencja, a nie wartością obiektu).1 Czy tablica symboli jest zaangażowana w tworzenie przestrzeni nazw? Czy tabela symboli „zawiera” przestrzeń nazw lub po prostu informacje, które zawiera przestrzeń nazw? Krótko mówiąc, jak tablica symboli odnosi się do przestrzeni nazw?


title: Jak wyjaśnić nie-programistom, czym jest .NET?

text: Nie pracuję w firmie programistycznej i jestem jedną z nielicznych osób w firmie, które wiedzą coś o programowaniu. Spędzam dużo czasu automatyzując inne programy, które są używane w biurze poprzez publiczne API, a także stworzyłem kilka samodzielnych aplikacji. Pracuję prawie całkowicie w C#.NET, ponieważ każda aplikacja, której używamy w biurze, wydaje się mieć jakąś formę .NET API. Kilka osób pytało mnie o naukę "jak programować" i od czego powinni zacząć. Myślę, że o wiele bardziej sensowne jest nauczenie się języka .NET, ponieważ prawie wszystkie programy, które chcieliby zautomatyzować, mają interfejs API .NET i wygląda na to, że VBA jest na drodze i jest zastępowany przez VSTA. Próbuję jednak dowiedzieć się, jak wyjaśnić, czym jest .NET i dlaczego powinni się tego nauczyć komuś, kto nie wie nic o programowaniu. W rzeczywistości nie jest to język, ponieważ istnieje wiele języków uważanych za języki .NET. Dodatkowo myślę, że istnieje rozróżnienie między ".NET" i "The .NET Framework", ponieważ ten ostatni dotyczy bardziej bibliotek dostarczonych przez Microsoft.


title: Czy projektant ma pisać kod CSS?

text: Zastanawiam się, czy tworzenie CSS ma być zadaniem projektanta czy programisty. Nie mówię tutaj o naprawdę skomplikowanym układzie CSS, mam na myśli bardziej skinning. Czy to ma być odpowiedzialność jednego lub drugiego?


title: Jak mam napisać specyfikację języka programowania?

text: Bardzo lubię projektowanie języków programowania. Czasami myślę, że moje projekty językowe i ich potencjalni użytkownicy skorzystaliby na obszernym dokumencie standardów. Przyjrzałem się wielu standardom językowym, od bardzo formalnych (C++) do raczej nieformalnych (ECMAScript), ale tak naprawdę nie potrafię zrozumieć, jak powinienem podzielić i zorganizować taki dokument, mimo że myślę, że ogólnie jestem całkiem dobry w pisaniu technicznym. Czy powinienem to napisać jak długi samouczek, czy bardziej jak formalny artykuł do matematyki? Jak mogę go aktualizować, jeśli rozwijam go wraz z implementacją referencyjną? Czy powinienem po prostu zrezygnować i traktować wdrożenie i dokumentację jako de facto standard? Co więcej, czy naprawdę istnieje jakaś znacząca korzyść z posiadania standardu? Czy _wymaganie_ standardu oznacza, że język jest niepotrzebnie skomplikowany?


title: Znajdowanie najważniejszych węzłów) na wykresie niekierowanym

text: Mam duży (≈ 20 milionów węzłów) ukierunkowany wykres z krawędziami wewnętrznymi i zewnętrznymi. Chcę dowiedzieć się, które części wykresu zasługują na największą uwagę. Często większość wykresu jest nudna, a przynajmniej jest już dobrze zrozumiana. Sposób, w jaki definiuję „uwagę”, polega na pojęciu „połączenia”, tj. Jak mogę znaleźć najbardziej połączone węzły na wykresie? W dalszej części można założyć, że węzły same w sobie nie mają punktacji, krawędzie nie mają wagi i są albo połączone, albo nie. Ta strona internetowa sugeruje dość skomplikowane procedury, takie jak przestrzeń n-wymiarowa, wektory własne, koncepcje centralności grafów, pageRank itp. Czy ten problem jest aż tak złożony? Czy nie mogę wykonać prostego przejścia wszerz całego grafu, w którym w każdym węźle wymyślę sposób na znalezienie liczby krawędzi. Węzeł z największą liczbą krawędzi wewnętrznych jest najważniejszym węzłem na wykresie. Czy coś mi umyka?


title: Wdrażanie nowego standardu kodowania do istniejącej aplikacji

text: Ostatnio mieliśmy pewne zmiany w sklepie, w którym pracuję, ponieważ komentarze w naszym kodzie źródłowym były robione pospiesznie i wyjaśniane bardzo mało. Rozpoczęliśmy pracę nad pierwszym projektem standardów kodowania wydziałów i jedno z większych pytań brzmi: Czy powinniśmy wdrożyć ten standard w istniejącym kodzie źródłowym? Ponieważ jest to tylko pierwszy projekt naszych standardów kodowania (stworzony w celu promowania elastyczności i przyszłych rozważań), czy powinniśmy wdrażać nowe funkcje i podczas konserwacji? **Aktualizacja:** Chciałabym podziękować za wszystkie otrzymane odpowiedzi i komentarze na ten temat. Nasz sklep zaczął robić postępy w opracowywaniu projektu naszych standardów kodowania i wzięliśmy fragmenty ze wszystkich komentarzy i odpowiedzi do pracy przez cały nasz proces. Dziękuję za poświęcony czas i doświadczenie w tej sprawie.


title: Dzielenie historyjek użytkowników na mniejsze historie

text: Czytałem różne techniki dzielenia dużych historyjek użytkowników w przydatne sposoby, takie jak przepływ pracy użytkownika przez system itp. Zmagam się z tym, jak sformułować te mniejsze historie, jeśli wszystko, co osiągają, to ułatwienie następnego kroku w procesu, a nie dostarczanie użytkownikowi głównej korzyści z aplikacji. Na przykład, jeśli mój nowy system jest podzielony na 3 mniejsze kondygnacje wzdłuż linii; 1. Utwórz nowe konto online 2. Utwórz określone podmioty na moim nowym koncie online 3. Niech moje urządzenie mobilne wysyła zapytanie do tych podmiotów na moim koncie i działa na nich System naprawdę zapewnia użyteczną funkcjonalność dla użytkownika końcowego tylko wtedy, gdy wszystkie historie są kompletne. Jeśli więc zgodnie z tradycyjnym „Jako [Użytkownik] chciałbym [Funkcjonalność], abym [Korzyść]” Zaletą pierwszego i drugiego wątku jest po prostu ułatwienie kolejnych wątków, a nie zapewnienie użytkownikowi głównej funkcjonalności ( epicki). Czy to jest właściwy sposób na zrobienie tego?


title: Jakich umiejętności programistycznych potrzebuje ktoś w QA, aby efektywnie pracować w ekstremalnych projektach programistycznych?

text: Cóż, tytuł naprawdę mówi wszystko, ale aby nieco rozwinąć, czy możesz wziąć losowy, zazwyczaj skuteczny dział QA i poprosić go o nauczenie się pracy w środowisku XP (oczywiście z krzywą uczenia się, aby podnieść przepływ pracy XP) lub czy potrzebowaliby więcej umiejętności programistycznych, aby być skutecznym? Jeśli tak, to co powinni wiedzieć?


title: Jak udostępniać metody i właściwości między niestandardowymi kontrolkami sieciowymi

text: Zajmuję się tworzeniem niektórych niestandardowych formantów sieci web w .NET przy użyciu C#. Kontrolki dziedziczą ze standardowych kontrolek internetowych i dodają dodatkowe właściwości i funkcje (np. tworzę 'extendedTextBox' i dodaję właściwość 'required', która po ustawieniu na 'true' doda wymagane pole .NET walidator do kontrolki automatycznie.Robię to dla wielu kontrolek internetowych (np. radioButtonList, textArea).Podzielają one kilka wspólnych właściwości i metod, na przykład mam metodę AddRequiredFieldValidator, która wykorzystuje niektóre z dodanych przeze mnie rozszerzonych właściwości .Chciałbym udostępnić wspólne właściwości i metody.Próbowałem dodać metody do oddzielnej klasy jako metody rozszerzające dla kontrolki sieciowej.Aby to osiągnąć zaimplementowałem interfejs, który definiuje dodatkowe współdzielone właściwości i jestem używając go w ten sposób: public interface IExtendendControl { string RequiredMessage { get; set; } string ValidatorCssClass { get; set; } bool ClientScript { get; set; } RequiredFieldValidator rfv { get; s et; } } public static class ExtendedControlExtensions : IExtendendControl { public static void AddRequiredFieldValidator(ta kontrolka IExtendendControl) { control.rfv = new RequiredFieldValidator(); control.rfv.ErrorMessage = control.RequiredMessage; ConfigureAndAddValidator(sterowanie, sterowanie.rfv); } public static void ConfigureAndAddValidator(ta kontrolka IExtendendControl, walidator BaseValidator) { validator.ControlToValidate = control.ID; validator.Display = ValidatorDisplay.Dynamic; validator.CssClass = "ValidationMessage"; validator.CssClass += control.ValidatorCssClass; validator.EnableClientScript = control.ClientScript; control.Controls.Add(walidator); } } Problem polega na tym, że metoda „ConfigureAndAddValidator” nie wie teraz nic o właściwościach „ID” lub „ClientScript” kontrolki, ponieważ „IExtendedControl” definiuje tylko właściwości niestandardowe, a nie standardowe właściwości kontrolki sieci Web. Spróbowałem więc dodać klasę bazową, która dziedziczy po WebControl i implementuje interfejs w następujący sposób: public interface IExtendendControl { string RequiredMessage { get; ustawić; } string ValidatorCssClass { get; ustawić; } bool ClientScript { get; ustawić; } RequiredFieldValidator rfv { get; ustawić; } } public class BaseExtendedControl : WebControl, IExtendendControl { public string RequiredMessage { get; ustawić; } ciąg publiczny ValidatorCssClass { get; ustawić; } public bool ClientScript { get { return ClientScript = true; } set { } } public RequiredFieldValidator rfv { get { return rfv = new RequiredFieldValidator(); } set { } } } public static class ExtendedControlHelper : IExtendendControl { public static void AddRequiredFieldValidator(ta kontrolka BaseExtendedControl) { BaseExtendedControl extendControl = (BaseExtendedControl)kontrola; extendControl.rfv = new RequiredFieldValidator(); rozszerzonyControl.rfv.ErrorMessage = rozszerzonyControl.RequiredMessage; ConfigureAndAddValidator(kontrola, ExtendedControl.rfv); } public static void ConfigureAndAddValidator(ta kontrolka BaseExtendedControl, walidator BaseValidator) { validator.ControlToValidate = control.ID; validator.Display = ValidatorDisplay.Dynamic; validator.CssClass = "ValidationMessage"; validator.CssClass += control.ValidatorCssClass; validator.EnableClientScript = control.ClientScript; control.Controls.Add(walidator); } } Teraz problem polega na tym, że w mojej klasie extendedTextBox nie mogę rzutować mojego ExtendedTextBox jako 'BaseExtendedControl', aby korzystać z metod rozszerzających, ponieważ extendedTextBox dziedziczy ze standardowej klasy TextBox w następujący sposób: klasa public ExtendedTextBox : TextBox, IExtendendControl, więc jest brak wspólnej podstawy do rzutowania ExtendedTextBox jako "BaseExtendedControl", ponieważ nie dziedziczy z niej. Nie mogę też po prostu przekazać rozszerzonych obiektów kontroli sieci jako parametru do metod udostępnionych, ponieważ rozszerzone kontrolki są różnych typów (np. dziedziczą z TextBox, RadioButtonList i tak dalej). Jeśli określę oczekiwany typ przekazywany do metod „standardowych” jako „WebControl”, to nie zadziała, ponieważ rozszerzone kontrolki mają dodatkowe właściwości. Ponieważ nie mogę używać prawdziwego dziedziczenia wielokrotnego w C#, jak zaprojektować to, aby móc udostępniać metody i właściwości?


title: Kiedy nie używać oprogramowania ponownie?

text: Pracuję nad aplikacją, która miała podstawowe wymagania dotyczące uwierzytelniania w pierwszej wersji (tj. pomyśl o pojedynczym logowaniu administratora), a teraz mam wymaganie, aby rozszerzyć to o różnych użytkowników, role i uprawnienia. Zasugerowano, że spróbuję zintegrować się z istniejącym produktem, który robi tego rodzaju rzeczy jako oddzielny serwer do uwierzytelniania podstawowego lub rozszerzając go na uwierzytelnianie dwuskładnikowe. Aplikacja, nad którą pracuję, jest małą aplikacją do pobrania, która ma być łatwa w konfiguracji i uruchomieniu. Drugi produkt jest duży i „przedsiębiorczy”, wymagający ręcznej konfiguracji, którą mógłbym spróbować zrobić automatycznie w zależności od potrzeb (być może). Dużym problemem jest to, że gdy jest to opisane jako zestaw funkcji tego, co chcielibyśmy zrobić w moim produkcie, idealnie pasuje do tego, co robi inny produkt, ale nie jest w formie, w której mogę z niego korzystać. Kierownictwo chce integracji z innym produktem, ponieważ wydaje się intuicyjne, że moglibyśmy to wykorzystać, ale drugi produkt nie jest w formie, z której mógłbym korzystać. tj. myśląc o tym w kategoriach MVC, nie sądzę, że istnieje sposób na oddzielenie widoku od modelu. Inną rzeczą, o którą się martwię, co wydarzyło się w przeszłości, jest to, że jeśli zostanę poproszony o zintegrowanie się z tym, to ja wykonam całą pracę integracyjną, a jeśli czegoś nie da się zrobić z inny produkt, to po prostu nie mam szczęścia. Integracja z moim produktem jest drugorzędna w stosunku do wszystkiego, czego chciałby inny zespół, a mój zespół nie jest „klientem”, więc nie ma motywacji, aby nakłonić ich do naprawy lub dodania rzeczy za nas. **Podsumowując, moje pytanie brzmi:** Nie chcę wymyślać koła na nowo, ale czy powinienem próbować wcisnąć kwadratowy kołek w okrągły otwór, próbując użyć produktu, który robi to, czego potrzebuję, ale nie w formie łatwej do ponownego wykorzystania? edit: używam Javy, więc Spring Security jest opcją.


title: Jaki jest lepszy sposób na zaprojektowanie tej klasy?

text: Obecnie mam taki kod: OntologyGenerator generator = new OntologyGenerator(); generator.AddOntologyHeader("Testowanie"); generator.AddClassDeclaration(owlBuilder); generator.AddSubClass(owlBuilder); generator.AddAnnotationAssertions(owlBuilder); gdzie ten parametr OwlBuilder, który widzisz, że jest przekazywany, ma kolekcje obiektów takie jak: public class OwlLBuilder: IOwlLBuilder { private ICollection<IOwlClass> owlClasses = new Collection<IOwlClass>(); private ICollection<IOwlRelation> owlRelations = nowa kolekcja<IOwlRelation> (); } więc na przykład kiedy mówię generator.AddClassDeclaration(owlBuilder); będzie przeszukiwać kolekcję owlClasses tego parametru owlBuilder i robić z nim kilka rzeczy... Czuję, że to brzydki projekt. Czy masz jakieś inne lepsze sugestie projektowe, z odrobiną przykładowego kodu, abym mógł mieć duży obraz tego, co powinienem zrobić w mojej głowie!


title: Kiedy uczyłeś się JS, jaki był twój moment Aha?

text: **Pamiętasz, kiedy uczyłeś się JavaScript? Jaki był moment, w którym nagle „złapałeś”?** (Na przykład mój moment CSS aha miał miejsce, gdy dowiedziałem się o modelu pudełkowym...) Powodem, dla którego pytam, jest to, że uczę się JS przez 6 tygodni, ale nadal uważam to za dość mylące. Oto cytat z czegoś, co ostatnio czytałem w SO: > „..funkcje działają podobnie do wartości, ponieważ metoda jest właściwością obiektu > która ma wartość funkcji (która jest również obiektem).” Jestem ciekawa, czy ty też byłeś zdezorientowany na początku i co sprawiło, że to zrozumiałeś. (Czytam Sitepoints "Simply JavaScript", książkę "Eloquent JavaScript" i śledzę samouczek Lyndy Essential JavaScript. Nie mam żadnego doświadczenia w programowaniu i byłem okropny z matematyki ;) Dzięki!


title: Jak znaleźć stanowiska dla początkujących w nowym mieście?

text: Właśnie kończę studia na kierunku informatyka (jutro jest mój ostatni egzamin). Myślałem o poszukiwaniu pracy w tym semestrze, ale chciałem skupić się na studiach i pracy w niepełnym wymiarze godzin, więc trochę spóźniłem się na poszukiwanie pracy. Chcę znaleźć pracę w mieście, w którym mam bardzo mało kontaktów zawodowych. **Jak byś szukał pracy w nowym mieście?** Jeszcze tam nie mieszkam i nie mogę łatwo tam pojechać, więc znalezienie pracy miejsca do zastosowania nieco trudniejsze. Normalnie pytałbym ludzi, z którymi studiowałem i pracowałem, ale mam niewiele kontaktów w mieście, w którym chcę pracować. Gdzie szukałbyś pracy? Korzystam z * Craigs-list * ofert pracy z moich uniwersytetów (ale są one głównie skupione na wschodnim wybrzeżu) * tej rządowej strony z ofertami pracy. Czy ktoś ma jakieś świetne zasoby do znalezienia pracy?


title: Podaj bardziej formalną definicję terminu „pytoniczny” niż PEP8?

text: Dla mnie, jako programisty Pythona, posiadanie formalnej definicji terminu „python” byłoby znacznie ważniejsze i mniej subiektywne w porównaniu do zadawania bardziej retorycznych (nieformalnych) pytań. Może to prowadzić do lepszej komunikacji dzięki mniej subiektywnej argumentacji (jak omówiono tutaj). PEP8 Guido jest przyjmowany za punkt wyjścia pomimo pewnego religijnego dogmatyzmu (np. PEP20 jest bardziej aksjomatyczny, krótszy i prostszy, ale nie ma kodu). Zidentyfikowanie „minimalizmu”, „czytelności” (zrozumienie przez człowieka) i „jednoznaczności” (wyraźny kod) jest w rzeczywistości tym samym, co parafrazowanie PEP20. Ale czy możliwe jest przepisanie zen Pythona w Pythonie? Oczywiście print('Piękne jest lepsze niż brzydkie') nie przechwytuje Pythona w Pythonie ;-) Jakieś przemyślenia na ten temat? Docelowo chciałbym zbliżyć się do bardziej logicznej lub matematycznej interpretacji sprawy. Argument w postaci kodu, który odpowiada, dlaczego rodzina fragmentów **A** jest _pythonic_ w porównaniu do rodziny fragmentów **B** jest również akceptowalna. **EDYTUJ** Jeśli to możliwe, postaraj się zredukować odpowiedź do poniższego schematu. Rozważmy wszystkie możliwe poprawne składniowo teksty programu generowane przez jakąś procedurę (np.). Należy pamiętać, że bierzemy pod uwagę tylko programy napisane w pythonie (który jest językiem formalnym z odpowiednią gramatyką). Również poprawność składniowa nie oznacza poprawności semantycznej (programy mogą zawierać błędy lub nie mają żadnego oczywistego celu). Dalej obserwujemy (zakładamy), że ostateczna rodzina _POmega_ wszystkich programów poprawnych składniowo w Pythonie musi zawierać podzbiór programów, które są nazywane _Pythonic_. Teraz, aby spierać się o to, co to znaczy być pytonem, użyjemy metody formalnej - innego języka o nazwie _Powód_, który byłby mniej niejednoznaczny (spójny, kompletny) niż język naturalny. Zdefiniujemy mapowanie z programów w _Omega_ na _Powód_. Takie odwzorowanie nazwiemy interpretacją. Stworzymy również więcej mapowań w podobny sposób (np. jak w) dla wszystkich pojedynczych symboli w _Pythonie_ i ich kombinacji (instrukcji). Teraz, gdybyśmy kłócili się o obrazy takich odwzorowań, zrobilibyśmy to w formie dowodów w języku _Powodu_. Pytanie brzmi, czy podzbiór _Pythonic_ rzeczywiście istnieje, czy możemy to wywnioskować z aksjomatów w _Powodach_ zbudowanych/przeformułowanych na podstawie „Zen Pythona” lub innego motywującego zestawu pojęć? W rzeczywistości cały dedukcyjny rdzeń języka _Powód_ zostałby zbudowany z „Zen” lub PEP8. Będziemy musieli udowodnić, że każdy program z _Pythonic_ będzie składał się tylko z instrukcji dla obrazów, których _Powodem_ można wykazać, aby spełniały początkowe aksjomaty języka modelowego. Możliwe są różne wyniki: 1. Podzbiór programów _Pythonic_ może być pusty. Nie znaleźliśmy żadnego programu, który spełniałby nasze aksjomaty w _Rozsądzie_. 2. Może się zdarzyć, że ten zestaw aksjomatów okaże się niejednoznaczny (niespójny lub niekompletny). Wtedy nasze pierwotne założenie o istnieniu programów _Pythonic_ byłoby błędne. 3. Alternatywnie aksjomatyczne "Zen" mogłoby być wystarczająco proste i tak dobrze dobrane, że zbiór _Pythonic_ nie jest pusty. Teraz pytanie brzmi, czy taki (spójny, kompletny) zbiór będzie miał wartość praktyczną, tj. czy możemy powiedzieć, że taki zbiór aksjomatów jest rzeczywiście formalną definicją słowa „pytoniczny”? To szkic tego, jak można próbować podejść do odpowiedzi na pytanie w sposób formalny. Byłbym wdzięczny za zalecenia dotyczące bardziej eleganckiego podejścia do rozwiązania problemu (wszystko oprócz ignorowania tego). Ale na koniec ważne jest dla mnie, jak wygląda taki zestaw aksjomatów. W ten sposób pozwoli w precyzyjny (ilościowy) sposób zadawać i próbować wyjaśnić pytania, takie jak dlaczego programy mają cechy „pytoniczne” kiedyś napisane zgodnie z następującymi „dogmatami” pytona? BTW One można zbudować bardziej wyrafinowany model _Powodu_, wprowadzając odpowiednik "czynnika ludzkiego" - programistę programów. Wtedy pytanie brzmi - czy człowiek może formalnie twierdzić, że program, do którego ma prawa, należy do podzbioru "Pythonic"?


title: Czy jest coś takiego jak zbyt długie pozostawanie w pracy?

text: Po przeczytaniu ostatnio kilku wątków związanych z „przeskakiwaniem pracy”, zastanawiałem się, jak przeciwieństwo przeskakiwania pracy może również stanowić problem. Znam wielu ludzi (zwłaszcza w dużych, stosunkowo niemrawych firmach), którzy czuli się komfortowo w wygodnej i niekwestionowanej roli i pozostali w firmie przez bardzo długi czas - powiedzmy 10, 15 lat lub nawet dłużej. Być może trochę się przenieśli wewnętrznie, ale był to głównie przypadek „ _roku 15-krotnego doświadczenia” , jak powiedzieliby doświadczeni menedżerowie ds. rekrutacji. Innymi słowy, były to przypadki „Projektów Specjalnych”. Po prostu siedzenie w wygodnej roli, w której nie ma więcej nauki, ale może to wyglądać dobrze na papierze (w CV), jeśli różne rzeczy, w które byli zaangażowani, są nieco upiększone. To, co naprawdę skłoniło mnie do myślenia, to fakt, że najdłuższa rola w moim CV (prawie 6 lat) nieco, przynajmniej łagodnie, wpisuje się w tę kategorię. Gdybym był całkowicie intelektualnie uczciwy, powiedziałbym, że naprawdę mam z tego tylko 3 lata solidnego doświadczenia w nauce. Ostatnie 2-3 lata były w trybie cichej konserwacji. Wiem więc z pierwszej ręki, że jest to całkiem możliwe, niż wielu „seniorów” z 15-letnim stażem (jeśli przez cały czas pracowali w takiej pracy) może nie być tak szeroko doświadczonych i „seniorów” (jeśli chodzi o posiadanie 15 lat jakości). doświadczenie), jak wyglądają na papierze. Więc moje pytanie brzmi - czy kręcenie się w tej samej pracy przez bardzo długi czas wzbudza jakiekolwiek sygnały ostrzegawcze? Na przykład: jeśli widzisz CV, które ma tylko jedną 15-letnią pracę po studiach, w przeciwieństwie do równie doświadczonej osoby, która ma kilka 4-5 lat pracy, czy facet z jedną pracą wygląda na możliwe "Projekty specjalne " sprawa, że miałeś tylko jedną bardzo długą pracę? Z mojego doświadczenia wynika, że jest to całkiem prawdopodobne. A przynajmniej, że facet z kilkoma pięcioletnimi praktykami jest prawdopodobnie bardziej dynamiczny i elastyczny, ponieważ doświadczył różnych ról, środowisk i technologii (i różnych zastosowań, nawet jeśli używa tych samych technologii we wszystkich zawodach). **EDYTUJ:** Pamiętaj, że osobiście nie martwię się, że _moja_ historia wygląda tak. Moja najdłuższa rola powyżej służy tylko jako mini przykład tego, co może się stać z wygodnymi rolami długoterminowymi, co sprawiło, że zacząłem myśleć o tym w kategoriach ogólnych (jeśli już, moja faktyczna historia zatrudnienia (z wyjątkiem tej najdłuższej roli) skłania się bardziej ku byciu trochę zbyt chmielowy).


title: Znalezienie zwinnego trenera

text: Mam nadzieję, że to właściwe miejsce, aby zadać to pytanie, ale moja firma niedawno rozpoczęła proces, w którym przyglądamy się, jak tworzymy oprogramowanie, od narzędzi, których używamy, po metodologię. Jak możesz sobie wyobrazić, mamy rodzaj niekończących się spotkań, podczas których siedzimy przy stole i dzielimy włosy. Aby rzeczywiście coś zrobić, zasugerowałem, aby zatrudnić profesjonalistę, który przyjrzy się, jak robimy to, co robimy, i być może poprowadzi nas do bardziej zwinnego podejścia do dostarczania oprogramowania. Mój problem polega na tym, że nie jestem pewien, jak znaleźć konsultanta, którego moglibyśmy sprowadzić i zacząć nas? Myślałem o zbliżeniu się do kogoś takiego jak ThoughtWorks, ale myślę, że znalezienie kogoś, kto nie będzie narzucał nam agendy lub produktu, byłoby lepsze. W międzyczasie kupiłem kilka książek i poczytam trochę na plaży podczas wakacji.


title: Jak/gdzie najlepiej zareklamować swój projekt open source, aby zmaksymalizować moje szanse na znalezienie współpracowników?

text: Pracuję nad projektem open source i szukam współpracowników. Jaki jest mój najlepszy zakład, jeśli chodzi o reklamowanie mojego projektu, mając na uwadze konkretnie znalezienie innych programistów zainteresowanych współpracą?


title: Czy to rozwiązanie pętli jest możliwe z rekurencją?

text: Ostatecznie chciałbym uogólnić te rozwiązania, aby działały z krotką o dowolnej długości. Myślę, że do tego potrzebna jest rekurencja, ale nie byłem w stanie tego zrobić. def connectRanges(maxValues) : for x in range(0, maxValues[0]) : for y in range(0, maxValues[1]) : for z in range(0, maxValues[2]) : print (str(x ) + '-' + str(y) + '-' + str(z)); m = (6,9,20); kombajnZakresy(m); http://repl.it/WiZ


title: Czy powinienem podążać normalną ścieżką, czy przedwcześnie przegrać?

text: Z książki _Code Complete_ pochodzi następujący cytat: > "Umieść normalny przypadek po `if` zamiast po `else`" Co oznacza, że wyjątki/odchylenia od standardowej ścieżki powinny być umieszczane w przypadku `else`. Ale _Pragmatic Programmer_ uczy nas, jak „rozbijać się wcześnie” (s. 120). Jakiej zasady powinienem przestrzegać?


title: Nadużywane lub nadużywane techniki programowania

text: Czy są jakieś techniki w programowaniu, które uważasz za nadużywane (tj. używane w znacznie większym stopniu niż powinny) lub nadużywane, lub używane po trochu do wszystkiego, a jednocześnie nie są dobrym rozwiązaniem wielu problemów, które ludzie próbują rozwiązać? rozwiązać z nim. Mogą to być wyrażenia regularne, jakiś wzorzec projektowy, może algorytm lub coś zupełnie innego. Może myślisz, że ludzie nadużywają wielokrotnego dziedziczenia itp.


title: Jak uzyskać listę prawidłowych adresów?

text: Muszę uzyskać listę poprawnych adresów w 4 lub 5 klastrach (miastach) zarówno w Wielkiej Brytanii, jak i USA. Ma to na celu wygenerowanie przykładowych danych dla aplikacji, która wykona geolokalizację i wyszukiwanie. W tej chwili generuję adresy mniej lub bardziej losowo, co oznacza, że trafiam na nieistniejące kody pocztowe i oczywiście ulica i numer nigdy nie pasują do kodu pocztowego. Jakieś zalecenia, jak programowo uzyskać listę adresów do budowania danych testowych?


title: Repozytoria publiczne a prywatne

text: Załóżmy, że opracowuję aplikację na sprzedaż. Czy ma sens korzystanie z publicznego repozytorium dla tego projektu? Czy domyślne prawa autorskie nie chronią kodu przed użyciem go przez kogoś innego? Jeśli tak, jakie są korzyści z opłacania prywatnego repozytorium?


title: Czy to najlepsza praktyka z Enum w C#

text: Kiedy Enum jest używane jak poniżej, powiedzmy, czy mamy enum Designation { Manager = 0, TeamLead = 1, Associate = 2 }, a następnie napisz poniższy kod if (designation == Designation.TeamLead) //somecode Teraz, jeśli zdecydujemy się zmienić wylicz element z „`TeamLead`” na „`Lead`” następnie musimy zmodyfikować również powyższą linię kodu np. `desygnacja == Designation.TeamLead` na `desygnacja == Designation.Lead`. Więc jaka jest najlepsza praktyka.


title: obliczanie, czy czasy poziomu usług są dotrzymane

text: W przypadku narzędzia do raportowania biletów chcę obliczyć, czy zostały spełnione określone czasy poziomu usług (slt). To jest (nieco uproszczone): Czy czas między otwarciem a zamknięciem biletu mieścił się w pewnym przedziale czasu. Teraz jest też coś, co nazywa się oknem serwisowym (SW), na przykład pn-pt, 9:00-17:00. Teraz, aby obliczyć, czy slt został spełniony, należy wykluczyć czasy spoza SW. Nawet jeśli nie jest to przewidziane, bilety można otwierać lub zamykać poza SW, ponieważ istnieją inne sla, które pozwalają na usługę 24x7. Inżynier mógłby popracować nad biletem poza SW, ponieważ może być mu łatwiej zamknąć bilet, gdy jest przy nim. Może pracował nad powiązanym biletem. Aby określić czas, jaki zajęło zgłoszenie między godziną otwarcia i zamknięcia, pomyślałem o dwóch algorytmach: 1) Rozróżnij wszystkie możliwe kombinacje daty_początkowej i daty_końcowej w obrębie lub poza nią, w różne dni i tak dalej (widzę 8 kombinacji) . Następnie dla każdej kombinacji skonfiguruj osobną formułę, aby obliczyć czas potrzebny na bilet. Plus: mały narzut obliczeniowy Minus: Raczej skomplikowany, dużo kodu 2) Zdecyduj się na najmniejszą możliwą jednostkę (minuty wydają się być odpowiednie), a następnie dla każdej jednostki między datą_początkową a datą_końcową zdecyduj, czy ta jednostka znajduje się w SW, czy poza nim. Jeśli jesteś w środku, dodaj do czasu biletu. Plus: bardzo prosty Minus: duże obciążenie obliczeniowe. Skłaniam się ku 2), ponieważ obliczenia są tanie, preferowany jest prosty kod, a reszta programu zawiera wiele czasochłonnych zapytań do bazy danych, więc małe obliczenia nie będą zauważalne. Oba rozwiązania wydają mi się jednak mało eleganckie. Czy ktoś widzi trzecią drogę?


title: Jak umieścić różne wersje swojej biblioteki pod kontrolą wersji? Czy używasz tagów? Albo gałęzie? Lub inna metoda?

text: Niedawno zacząłem umieszczać swój kod pod kontrolą wersji (w laboratorium, w którym pracuję, pod SVN, a moje własne kody w githubie (oczywiście z git)). Przed użyciem kontroli wersji robiłem coś takiego. Miałem folder z nazwą biblioteki, wewnątrz wielu folderów z numerem wersji. Za każdym razem, gdy chciałem rozpocząć pracę nad nowszą wersją, robiłem kopię ostatniej wersji, zmieniałem nazwę na nową wersję i zaczynałem implementację. Wydaje się to jednak zbyteczne, gdy folder znajduje się pod kontrolą wersji. Poza redundancją, jeśli ktoś chce pobrać najnowszą wersję, będzie pobierał wszystkie wersje, jeśli tylko importuje/klonuje. Teraz widzę wiele sposobów na zrobienie tego za pomocą kontroli wersji, ale ponieważ jestem w tym nowy, nie wiem, który byłby łatwiejszy w utrzymaniu. ### Metoda 1: Używanie tagów Jeśli dobrze zrozumiałem tagi, miałbyś swoją główną gałąź, zatwierdzasz każdą zmianę, którą masz i oznaczasz ją wersją. Następnie, gdy chcesz uzyskać jego roboczą kopię, otrzymujesz tę z określonym znacznikiem. (popraw mnie, jeśli się mylę) ### Metoda 2: Wersje rozgałęziające W tej metodzie główną gałęzią będzie gałąź deweloperska. Od czasu do czasu, gdy tworzona jest stabilna wersja (powiedzmy `v1.2.0`), tworzysz gałąź dla tej wersji i nigdy się do niej nie zgadzasz. W ten sposób, jeśli chcesz pobrać określoną wersję, otrzymasz kod z tej gałęzi. Chociaż powiedziałem, że nigdy nie zobowiązujesz się do tego, możliwe jest wykonanie poprawek błędów i zatwierdzenie w gałęzi starej wersji, aby zachować starą wersję. Na przykład, jeśli aktualna wersja to `v2.0`, ale są ludzie, którzy chcą używać `v1.2`, możesz pobrać inną gałąź z `v1.2`, mianowicie `v1.2.1` i zatwierdzić poprawki błędów , lub po prostu zachowaj wersję taką samą jak `v1.2` i po prostu zatwierdź poprawki błędów. Więc gałęzie wyglądałyby tak: v1.2.1 v1.2.2 / / v1.0.0 v1.2.0--------- v2.0.0 / / / ------------- ------------------------- dev W ten sposób masz gałęzie dla każdej pomniejszej aktualizacji wersji. (Zauważ, że na powyższym wykresie v1.2.1 i v1.2.2 lub utworzone po wydaniu v2.0.0, więc nie były częścią rozwoju między v1.2.0 i v2.0.0. Pomyśl o tym jako o wsparciu dla starszych wersji) ### Metoda 3: Rozwój rozgałęzień Ta metoda jest przeciwieństwem poprzedniej. Główną gałęzią byłaby najnowsza stabilna wersja. Zawsze, gdy pracujesz nad nową wersją, tworzysz branch (do rozwoju), pracujesz nad swoim kodem, a gdy jest stabilny, scalasz go z główną gałęzią. W tym przypadku gałęzie wyglądałyby tak: ________ ____ ________________ _____ dev / \/ \/ \/ --------------------------- ------- najnowsza_wersja Prawdopodobnie należy to zrobić w połączeniu z tagami, prawda? ### Pytanie! W każdym razie, moje pytanie brzmi, na podstawie twojego doświadczenia, która z tych metod okazuje się bardziej praktyczna? Czy istnieje znana najlepsza metoda (której prawdopodobnie sam nie wymyśliłem)? Jak te rzeczy są powszechnie wykonywane?


title: Jaki jest dobry projekt z zabawkami do wprowadzenia do DVCS?

text: ## Kontekst Będę coachingiem projektów programistycznych studentów na moim wydziale inżynierskim (grupa <10 studentów). Przy tej okazji chciałem zwrócić uwagę studenta na użyteczność systemów kontroli wersji w szczególności DVCS. Istnieje wiele przekonujących samouczków DVCS, jednak wszystkie te, które znalazłem, wykorzystują nierealistyczne lub wymyślne przykłady (np. hginit wykorzystuje przepisy kulinarne). ## Czego szukam Chcę, aby uczniowie współpracowali w klasie nad _prostym, ale realistycznym_ projektem programistycznym, który pozwoli im odkryć zalety DVCS poprzez jego użycie. Klasa miała współpracować jako zespół programistów. Szukam projektu zabawki na tyle prostego, aby skupić się na przepływie pracy DVCS. Celem jest, aby uczeń zmierzył się z wyzwaniami DVCS, które pojawiają się naturalnie podczas współpracy: poprawki błędów, zarządzanie oddziałami (stabilne vs programistyczne), rozwiązywanie konfliktów scalania itp. Byłbym wdzięczny, gdybyś mógł podać mi konkretne pomysły na projekty i podkreślić ich DVCS wyzwania (np. podstawowy potok przetwarzania sygnałów, w którym każdy krok jest pisany przez innego ucznia, zmuszając go do radzenia sobie z konfliktami interfejsów itp.). Dziękuję !


title: Jaki jest kanoniczny sposób przechowywania tłumaczeń danych użytkownika?

text: Opracowałem oprogramowanie, które pozwala moim użytkownikom dołączyć notkę do pewnych informacji nie związanych z językiem: Model pseudokodu: item(): ID createdate byline //Tylko jeden byline dla opisu obiektu //Tylko jeden opis dla obiektu FAQ : faqID pytanie odpowiedź itemID //ForeignKey Jest to więc w zasadzie prosty model, w którym element informacyjny ma opis i dowolną liczbę pytań z nim związanych. Jeśli mój użytkownik chce teraz mieć tłumaczenia swojego opisu i pytań FAQ, jaki jest kanoniczny sposób rozszerzenia modelu? Niektórzy kandydaci, o których myślałem: * Dodaj pole aliasu (FK do siebie) w polu informacyjnym, a także pole językowe. Następnie przygotuj logikę biznesową, która znajduje żądany język. * Plus: wymagane pola są wymagane dla każdego wpisu językowego. Tworzysz częściowe tłumaczenia. Otrzymasz przypomnienie, gdy schemat doda kolejne pole tekstowe. * Minus: W tabeli są teraz dwa typy obiektów: obiekty języka głównego i obiekty aliasów. * Dodaj tabelę ze wszystkimi polami specyficznymi dla języka (opis) i uzyskaj dostęp do ciągu za pomocą klucza obcego * Plus: czyste, wszystko jest swojego typu * Minus: więcej tabel. Również tabela FAQ musi w jakiś sposób upewnić się, że istnieje pełne tłumaczenie dla każdego języka. Więc jak byś to zrobił?


title: Dynamiczne pisanie argumentów funkcji - jak utrzymać wysoką czytelność?

text: Dynamiczny nowicjusz pisania tutaj, mając nadzieję na kilka pomarszczonych słów mądrości. Jestem ciekaw, czy istnieje zestaw najlepszych praktyk dotyczących radzenia sobie z argumentami funkcji (i bądźmy szczerzy, ogólnie ze zmiennymi) w dynamicznie typowanych językach, takich jak Javascript. Problem, z którym często się spotykam, dotyczy czytelności kodu: patrzę na funkcję, którą napisałem jakiś czas temu i nie mam pojęcia, jaka jest struktura zmiennych argumentów. Zwykle w momencie tworzenia nowego kodu jest ok: wszystko jest w mojej głowie świeże, każda zmienna i parametr ma sens, bo właśnie je napisałem. Tydzień później? Nie tak bardzo. Załóżmy na przykład, że próbuję przetworzyć garść danych o sesjach użytkownika w witrynie i uzyskać z tego coś pożytecznego: var crunchSomeSessionData = function(sessionsMap, options) { [...] } Pomijając fakt, że funkcja nazwa nie jest pomocna - to oczywiście jest ogromna sprawa - właściwie nie wiem nic na temat struktury sessionMap lub opcji. Ok .. Mam pary k/v obiektu sessionMap, ponieważ nazywa się on Map, ale czy wartość jest prymitywną, tablicą, innym hashem rzeczy? Co to są opcje? Tablica? Ciąg rozdzielony spacjami? Mam kilka możliwości: * wyjaśnienie struktury dokładnie w nagłówku komentarza do funkcji. Problem w tym, że teraz muszę utrzymywać kod w dwóch miejscach. * mieć jak najbardziej użyteczną nazwę. np. userIdToArrayOfTimestampsMap lub nawet jakiś pseudo-węgierski dialekt do nazewnictwa zmiennych, o którym mówię tylko ja, który wyjaśnia, jakie są typy i jak są zagnieżdżone. Prowadzi to do naprawdę gadatliwego kodu, a ja jestem fanem trzymania rzeczy poniżej 80 col. * rozbijaj funkcje, dopóki nie przekażę tylko prymitywów lub kolekcji prymitywów. Wyobrażam sobie, że to może działać, ale wtedy prawdopodobnie skończę z mikrofunkcjami, które mają co najwyżej jedną lub dwie linie, funkcjami, które istnieją tylko w celu czytelności. Teraz muszę przeskoczyć po całym pliku i przekomponować funkcję w mojej głowie, co tylko pogorszyło czytelność. * niektóre języki oferują destrukturyzację, co do pewnego stopnia można traktować jako dodatkową dokumentację tego, co ma zawierać typ argumentu. * może utworzyć „klasę” dla określonego typu obiektu, nawet jeśli nie zrobiłoby to wielkiej różnicy w prototypowym języku, takim jak JS, i prawdopodobnie zwiększyłoby koszty utrzymania, niż jest to konieczne. Alternatywnie, jeśli jest to możliwe, można spróbować użyć protokołów, może czegoś na wzór deftype/defrecord z Clojure itp. W statycznie typizowanym świecie nie jest to aż tak duży problem. Na przykład w C# otrzymujesz: public void DoStuff(Dictionary<string, string> foo) {[...]}; Ok, spokojnie, wiem dokładnie, co otrzymuję, nie muszę czytać nagłówka funkcji ani wracać do wywołującego i zastanawiać się, co to zmyśla itp. Jakie jest tutaj rozwiązanie? Czy wszyscy ludzie rozwijający się w dynamicznie typowanych językach są ciągle zakłopotani tym, jakie typy otrzymują ich podprogramy? Czy istnieją strategie łagodzenia?


title: Generator raportów bazy danych odpytywania usługi systemu Windows do pracy

text: Tworzę nowy generator raportów dla naszego wewnętrznego systemu ankiet. (Nie, nie mogę używać żadnego gotowego oprogramowania. Są to wysoce spersonalizowane raporty.) Chcę używać Topshelf do hostowania generatora jako usługi. Nasz obecny generator jest aplikacją komputerową i wymaga zalogowania użytkownika na serwerze. Chcę tego uniknąć. Samo generowanie raportów jest bardzo proste i proceduralne. Ale serwer jest więcej niż zdolny do generowania kilku raportów jednocześnie. Chcę, aby usługa uruchomiła kilka wystąpień generatora w tym samym czasie, czy jest to coś, do czego użyłbym biblioteki zadań równoległych? Trochę pseudo wyglądałoby trochę tak: poller.Poll(order => { // wywołanie blokujące(?) nasłuchiwanie nowych zleceń raportu var gen = new Generator(order); gen.process(); // generuje zestaw raportów gen = null; // lub coś innego, aby zniszczyć generator dla tego raportu }); Czy ktoś ma jakieś sugestie, jak to zrobić?


title: Więc rozwijam przepływ pracy z vagrant + git ... czy to ma sens?

text: **Odpowiednie szczegóły dotyczące tła** 1. Mamy dwa typy maszyn wirtualnych (pakiety narzędziowe i serwery WWW), których potrzebują programiści. 2. Będziemy używać git do kontroli wersji. 3. Mamy programistów, którzy mają różne preferencje dotyczące środowiska pracy (np. Niektóre Linux, Niektóre Windows). 4. Jestem w obozie Linuksa i wierzę, że Git i Windows nie mieszają się tak dobrze, jak Linux i Git. Jednak może to być osobiste uprzedzenie. 5. Używamy Linuksa w produkcji. **Tworzenie maszyn wirtualnych Vagrant do dystrybucji** 1. Zbuduj podstawowy box z odpowiednim systemem operacyjnym dla wagranta. 2. Korzystając z menedżera konfiguracji (np. Szefa kuchni), aby zbudować obrazy narzędziowe i internetowe, przekonwertuj je na nowe skrzynki bazowe. Sklonuje konfiguracje usług ze scentralizowanego repozytorium git. 3. Roześlij skrzynki bazowe (tak naprawdę tylko obrazy maszyn wirtualnych), aby użytkownicy mogli rozwijać się lokalnie z włóczęgą. Rozproszone pudełko automatycznie pobierze kod źródłowy z niektórych repozytoriów git (np. bibliotek). 4. Jeśli planowane są zmiany dla środowiska produkcyjnego, wszyscy programiści będą musieli zdjąć nowe skrzynki bazowe dla włóczęgów, gdy będą już zapakowane. Myślę, że to najprostszy sposób, w jaki poradzi sobie z tym nowy programista. Staging jest aktualizowany w celu dopasowania do przygotowywanych nowych maszyn wirtualnych deweloperskich. **Przepływ pracy dla programistów** 1. Uzyskaj przydzielony problem z narzędzia do śledzenia problemów. 2. Użyj włóczącej się maszyny wirtualnej, aby sklonować bieżące repozytorium deweloperów do folderu, który współdzieli z systemem operacyjnym hosta (aby programista mógł użyć swojego ulubionego IDE). 3. Developer wprowadza zmiany i testuje lokalnie. 4. Po usatysfakcjonowaniu programista łączy swoje zmiany z repozytorium deweloperów. W przypadku konfliktu współpracuj z deweloperem, który zatwierdził kod powodujący konflikt, aby rozwiązać problem. 5. Gdy Dev jest w stanie stabilnym, Dev jest scalany z bieżącym repozytorium Staging dla kontroli jakości nowych funkcji. Nic nie jest przesuwane z Dev do Staging, dopóki nie zostanie ukończony Krok #6. Hooki generują nową kopię dokumentacji dla Staging. 6. Staging jest klonowany do produkcji po zakończeniu kontroli jakości. Hooki generują nową kopię dokumentacji dla produkcji. Czy są jakieś oczywiste wady/pułapki w powyższych punktach lub kroki, które są ogólnie uważane za „najlepsze praktyki”, które należy dodać?


title: Jak rozważyć funkcję logowania zbierającą wymagania aplikacji? czy jest to wymóg użytkownika?

text: Pracuję nad aplikacją, która oczekiwała, że użytkownik loguje się po uruchomieniu aplikacji (tak jak na przykład w Skype: użytkownik otwiera aplikację i wyświetla mu maskę logowania, gdy wstawia nazwę użytkownika i hasło, aby rozpocząć pracę aplikacji) Teraz przygotowuję diagram przypadków użycia i zbieram wymagania aplikacji (muszę napisać trochę dokumentacji) Czy mogę uznać to za wymaganie użytkownika? Albo co to jest?


title: Czy ktoś mógłby mi pomóc zrozumieć szyfrowanie bazy danych SQL TDE?

text: Nie do końca śledzę, jak to działa. Zgodnie z artykułem MSDN istnieje duża hierarchia kluczy chroniących inne klucze i hasła. W pewnym momencie baza danych zostaje zaszyfrowana. Wysyłasz zapytanie do bazy danych, która jest zaszyfrowana i działa bezproblemowo. Jeśli możesz po prostu normalnie połączyć się z bazą danych i nie musisz się martwić o szyfrowanie z punktu widzenia programisty, jak dokładnie jest to bezpieczne? Z pewnością każdy może po prostu połączyć się i wykonać „wybierz * z x”, a dane zostaną ujawnione. Przepraszam, moje pytanie jest nieco rozproszone, jestem po prostu bardzo zdezorientowany tym artykułem.


title: Jak większość programistów sądziłaby o błędach, które napisali?

text: Czy czują się sfrustrowani, rozczarowani, a nawet w ogóle się nie przyznają?


title: Czy jestem małpą kodu?

text: Właśnie próbowałem zintegrować moją stronę z facebookiem. Dostałem dużo kodu „kopiuj i wklej” ze strony deweloperów Facebooka. Po prostu wstawiam kod i działa dobrze. Czy nazywacie tego rodzaju programistami "małpki kodu"? Jeśli powiesz, że jestem małpą kodu, w tym samym przypadku czego byś ode mnie oczekiwał?


title: Narzędzie do projektowania w C#

text: Widziałem kilku programistów używających narzędzia do projektowania aplikacji, w którym po prostu przeciągali potrzebne elementy (klasy, zmienne, obiekty) i po prostu wykonywali magiczną pracę. Następnie był przycisk do generowania kodu, w którym projekt został wygenerowany w kodzie C# po tym, jak programista kontynuował pracę nad oprogramowaniem ręcznie. Każdy może dać mi wyobrażenie o tym, jak się nazywają i gdzie mogę je zdobyć?


title: Płatności bezpośrednio z karty

text: Za życia nie mogę znaleźć żadnej literatury na ten temat, po prostu dlatego, że nie mam pojęcia, jak to się nazywa. Chcę się dowiedzieć, jak wdrożyć opcję płatności, która polega na płaceniu kartą kredytową/debetową bezpośrednio bez korzystania z usług strony trzeciej, takiej jak PayPal. To jest to, o czym mówię! [tutaj wprowadź opis obrazu](http://i.stack.imgur.com/9gYOn.png) Czy możesz podać mi informacje o tym, jak ta metoda płatności jest nazywana i ewentualnie kilka artykułów, które można przeczytać dalej. Dziękuję Ci!


Zawsze zastanawiałem się, dlaczego jeden _wywołuje_ funkcję, zamiast na przykład _wykonywać_ ją. Wyszukiwanie w Google „etymologii wywołań funkcji” i podobnych terminów nie okazuje się przydatne, Wikipedia o tym nie wspomina, słowniki internetowe albo nie mają żadnego wpisu, albo nie mają sekcji etymologii. Skąd wzięło się pojęcie „wywoływania” funkcji?


title: Jak stworzyłbyś przydatne testy dla raportów Oracle BI Publisher?

text: Jestem ciekaw, jak testować raporty, które wydają się dość proste. Mam stworzyć przypadki testowe dla raportu Oracle (XML Publisher/BI Publisher). Na przykład raport ma po prostu zwracać kolumny (powiedzmy 10 kolumn). Oto, o czym myślałem do tej pory: Sprawdź, czy raport zwraca dokładne dane wyjściowe. Sprawdź, czy wszystkie nagłówki kolumn i wartości tabeli są prawidłowo wyrównane i czy nie występują żadne działania/nieprawidłowe formatowanie Sprawdź, czy daty są w formacie MM/DD/RRRR Sprawdź, czy wszystkie waluty są dokładne i zawierają 2 miejsca po przecinku. Oto przykładowe zdjęcie (co tworzy raport) : ![tu wpisz opis obrazu](http://i.stack.imgur.com/MfxvB.png) Jakie byłyby przypadki brzegowe/graniczne? Jeśli raport przyjmuje parametry, czy to czyni go bardziej wymagającym dla raportu? Dziękuję


title: osadzanie LEWEJ ZŁĄCZY ZEWNĘTRZNEJ w ZŁĄCZE WEWNĘTRZNE

text: Mam pewne problemy z odpowiedzią na jedno z pytań w książce "SQL FOR MORE ŚORTALS". Oto opis problemu ![Opis problemu](http://i.stack.imgur.com/894yN.jpg) Oto struktura bazy danych ![Struktura bazy danych](http://i.stack.imgur.com /CKsHU.jpg) Oto odpowiedź, której nie jestem w stanie pojąć ![Wątpliwa odpowiedź](http://i.stack.imgur.com/SWxVI.jpg) Oto odpowiedź, która wydaje mi się idealna![Potwierdzona odpowiedź ](http://i.stack.imgur.com/PnJza.jpg) Teraz problem z pierwszą odpowiedzią, jaką mam, to: Najpierw używamy LEFT OUTER JOIN dla klasy przepisów i przepisów. Wybiera więc wszystkie wiersze klas przepisów, ale tylko pasujące przepisy. Idealnie w porządku, ponieważ pytanie jest wymagające. Nazwijmy ten zestaw wyników R. Teraz w następnym kroku, gdy użyjemy INNER JOIN do dołączenia do RecipieIngridients, powinien on odfiltrować wiersze z R, w których identyfikator Recipie nie pasuje do identyfikatora przepisu w składnikach Recipie, a tym samym odfiltrować powiązane Klasa przepisu i opis przepisu również (ponieważ filtruje cały wiersz R). Jest to więc sprzeczne z problemem, który wymaga, aby wszystkie recipieID i RecipieDescription były wyświetlane z tabeli Recipe_Classes tylko w tym kroku. Jak to może być poprawne. Albo brakuje mi jakiejś koncepcji.


title: Gdzie powinno odbywać się sprawdzanie uprawnień użytkownika w MVC i przez kogo?

text: Czy sprawdzanie uprawnień użytkownika powinno odbywać się w modelu czy kontrolerze? A kto powinien zajmować się sprawdzaniem uprawnień, obiektem użytkownika czy jakimś pomocnikiem UserManagement? ## Gdzie powinno się to wydarzyć? ### Sprawdzanie w kontrolerze: class MójKontroler { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... Posiadanie sprawdzeń w Kontrolerze pomaga w wykonywaniu prostych akcji Modeli, dzięki czemu możemy zachować całą logikę w Kontrolerach. ### Sprawdzanie w Modelu: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... Umieszczając sprawdzenia w Modelu komplikujemy Model, ale także upewniamy się, że nie pozwalamy przypadkowo użytkownikom robić rzeczy, których nie powinni robić w kontrolerze. ## A przez kogo? Kiedy już ustalimy, kto powinien przeprowadzać kontrole? Użytkownik? Class User { bool hasPermissions(int permissionMask) { ... } ... Ale tak naprawdę nie jest obowiązkiem użytkownika wiedzieć, do czego może uzyskać dostęp, więc może jakaś klasa pomocnicza? Class UserManagement { bool hasPermissions(User user, int permissionMask) { ... } ... Wiem, że często zadaje się tylko jedno pytanie w, cóż, pytaniu, ale myślę, że można na nie odpowiedzieć razem.


title: Czy mogę wymagać jakości kodu w otrzymanym projekcie?

text: Dostałem projekt Drupal od zewnętrznej agencji internetowej i staram się być mądrzejszy zarówno w Drupalu, jak i jego podejściu do tworzenia strony. Z czasem dowiedziałem się nieco więcej o Drupalu, chociaż zauważyłem, że to naprawdę nie jest moja filiżanka herbaty. Ostatnio próbowałem „po prostu” zastąpić generację HTML części witryny, która wydawała się być generowana przez niestandardowy moduł (ich dodatki do witryny). Zmieniłem ten kod i zdałem sobie sprawę, że efekt po prostu niczego nie zmienił, a przynajmniej tak myślałem. W zasadzie teraz bez przesady wymieniłem ten sam fragment kodu z bardzo małymi różnicami 26 razy i _nadal_ nie zmienia się to wszędzie. Więc to, z czym mam do czynienia, to zestaw kodu, który dosłownie nigdy lub prawie nie słyszał o globalnej klasie ani funkcji i jest po prostu kopiuj i wklej w całej witrynie. Jestem ciekaw, co mam z tym zrobić. Jest tylko jeden plik, który zawiera ponad 3000 wierszy _dokładnego_ tego samego kodu 16 razy. Jeśli zlecasz agencji internetowej programowanie na stronie, czy możesz oczekiwać, że będzie to zdrowy rozsądek, że kod powinien być przynajmniej _mały_ w utrzymaniu i po prostu niedużym fragmentem kodu, bardziej denerwującym w edycji niż o wiele bardziej koniecznym, czy też konkretnie muszą być wymagane, a zamiast tego powinienem musiał sprawdzić poprawność kodu przed zapłaceniem za przekazanie witryny? Po raz pierwszy w mojej karierze zetknąłem się z tak kiepsko napisanym fragmentem kodu i wydaje mi się, że kupiliśmy dobrze wyglądający garnitur, który widzieliśmy z zewnątrz sklepu, a wszystko, co dostaliśmy, to plakat z tym garnitur w tej samej cenie. ## Pytanie Co byłoby właściwe w moim przypadku? Czy mam to ssać i przekonać pracodawcę, że kod jest źle napisany w nadziei, że mój wyznaczony termin na ukończenie projektu się wydłuży, czy mogę zażądać od agencji internetowej wykonania jakiegoś działania? **EDYTUJ:** Dzięki za wszystkie odpowiedzi! Pomagają mi spojrzeć na to z innej perspektywy. Omówię to nieco bardziej wewnętrznie i postaram się wskazać najlepszą odpowiedź, mimo że większość z was dotyczy tych samych, ale również różnych dziedzin pytania.


title: Czy IE ma bardziej rygorystyczne przetwarzanie JavaScript niż Chrome?

text: Nie ma to na celu rozpoczęcia wojny religijno-technicznej przeglądarek – nadal wolę Chrome, przynajmniej na razie, ale: Z powodu prawdopodobnie związanego z Chrome problemu z moją stroną internetową (patrz https://code.google.com/p /chromium/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Pri%20M%20Iteration%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified&groupby=&sort=&id=161473), tymczasowo przełączyłem się na IE (10), aby sprawdzić, czy będzie również postrzegać wartość czasu jako nieprawidłową. Jednak nawet nie dotarłem do tego punktu - IE zatrzymało mnie na moich torach, zanim mogłem tam dotrzeć; ale odkryłem, że IE miał rację - jest bardziej szczegółowy/precyzyjny w walidacji mojego kodu. Na przykład otrzymałem to z IE: SCRIPT5007: Wartość właściwości '$' jest null lub niezdefiniowana, a nie obiekt Function ... który odwoływał się do tego: <script src="/CommonLogin/Scripts/jquery-1.9 .1.min.js" type="text/javascript"></script> <script type="text/javascript"> // treść czasami staje się biała???? z jquery 1.6.1 $("body").css("background-color", "#405DA7"); < Ta linia jest podświetlona jako winowajca: $("body").css("background-color", "#405DA7"); jQuery znajduje się tuż nad nim - dlaczego więc uznał "$" za niezdefiniowany, zwłaszcza gdy Chrome nie miał z nim problemu... ach! Spojrzałem na tę lokalizację (/CommonLogin/Scripts/) i zobaczyłem, że wersja jQuery tam faktycznie była jquery-1.6.2.min.js. Dodałem zaktualizowany plik jQuery (1.9.1) i przeszedłem przez to. Więc teraz pytanie brzmi: dlaczego Chrome to ignoruje? Czy pobiera odnośną wersję z własnej sieci CDN, jeśli nie może jej znaleźć w określonym przez Ciebie miejscu? IE oznaczyło również inne błędy po tym; więc myślę, że być może IE jest lepszy w łapaniu czających się problemów niż przynajmniej Chrome. Nie testowałem jeszcze diesbzg Firefoksa.


title: Aplikacja do statycznej analizy kodu: od czego zacząć?

text: Próbuję utworzyć _poc_ dla narzędzia **_static code analysis_** obsługującego obiekt zorientowany i język proceduralny (na przykład C i Java). Nawet po dłuższym wyszukiwaniu w Internecie nadal nie jestem pewien, od czego zacząć. * Na początek zaplanuj użycie bardzo niewielu metryk, prawdopodobnie prostych. * Dostępnych jest kilka narzędzi, ale szukam ogólnego podejścia, a nie narzędzia. Kilka otwartych pytań: * Czy narzędzie powinno działać na podstawowym kodzie obiektowym, czy na surowym kodzie źródłowym? * Czy powinienem utworzyć język specyficzny dla domeny do definiowania reguł parsowania itp.? Nie proszę o kompletne rozwiązanie. Pytam tylko, czy ktoś może wskazać mi właściwy kierunek.


title: Wykonanie kodu w obrębie ograniczników

text: Czy jest jakiś sposób, w jaki mogę wykonać blok kodu w pętli, na przykład: [jakiś kod idzie tutaj] Gdzie ograniczniki to „[” i „]”, a także zezwalając na zagnieżdżone bloki, tj.: [użytkownik może tworzyć kolejna pętla[]] Tworzę parser dla języka, który implementuje taką semantykę i odczytuje kod jeden bajt/znak na raz, ponieważ wszystkie polecenia są pojedynczymi znakami i ponieważ składnia ma być bardzo minimalna (co jest dość ważne) i obecnie utknąłem w tej pętli. Próbowałem dopasować bajt (ponieważ czytam tylko 1 znak na raz) ze znakiem „[”, a następnie ustawiam zmienną globalną w całej instancji, ale wydaje się, że pęka, gdy instrukcje są zagnieżdżone i nie wydaje się pracować. Każda pomoc (możliwe, że w Pythonie) jest mile widziana! **EDYTUJ:** Zgodnie z tym, co skomentował @mattnz, pytanie i post zostały dokładniej wyjaśnione.


title: Poprawne zarządzanie unikalnymi danymi w SQL

text: Tutaj w Brazylii mamy osobisty identyfikator o nazwie **CPF**. Ten identyfikator ma ciąg 11 cyfr i jest unikalny dla każdego obywatela Brazylii. Być może w innych krajach też jest coś takiego. Jak jest unikalny identyfikator, zdecydowałem się ustawić go w bazie danych jak **UNIKALNY KLUCZ**. A teraz sprawy się komplikują. Użytkownik może zostać zarejestrowany przez administratora i usunięty przez jakiś problem. Jednak w rzeczywistości nie jest usuwany, ale ukrywany przez usuniętą flagę. A za chwilę mógłby zostać odtworzony na nowo (istnieje potrzeba odtworzenia tego, a nie ponownego włączenia). Ponieważ jest to indywidualny identyfikator, CPF zostanie ponownie użyty na odtworzonym użytkowniku i spowoduje konflikt w UNIQUE KEY. W tej sytuacji pomyślałem o praktycznych rozwiązaniach problemu, a także o jego wadach. Ale podoba mi się, jaki jest najwłaściwszy sposób rozwiązania tego rodzaju problemu. 1. **Nie używaj UNIQUE KEY.** Wadą jest to, że może to wydłużyć czas zapytania, co prawdopodobnie można rozwiązać za pomocą kolumny zawierającej tylko KEY. 2. **Ustaw kolumnę na NULL na pseudo-DELETE.** Wadą jest to, że stracę informacje, jednak mogę rozwiązać po prostu utworzenie drugiej kolumny do przechowywania jej wartości przed anulowaniem. 3. **UNIKALNY KLUCZ może grupować kolumnę z kolumną usuwania daty (domyślnie NULL).** Wadą jest konieczność używania dwóch kolumn dla każdej grupy UNIQUE KEY. 4. **Utwórz drugą tabelę do przechowywania danych usuniętych bez UNIQUE KEY.** Wady tutaj są prawie nieobliczalne! 5. **Usuń wiersz zamiast go ukrywać.** Wadą jest to, że mogę stracić referencje w FK użytkownika. Obecnie wolę pierwszą opcję, a w razie potrzeby wybrałbym drugą lub trzecią opcję. Ale zastanawiam się, czy istnieje bardziej poprawny sposób, podążając za koncepcją bardziej akceptowaną przez społeczność.


title: kategoryzacja junior / professional / senior

text: Hej, czy to tylko ja, czy kategoryzacja poziomów deweloperskich jest bardzo subiektywna? Mam wrażenie, że każda firma stara się zatrudniać doświadczonych programistów jako juniorów, ponieważ nie znają oni technologii. Na przykład moja własna kariera: kilka razy zmieniałem technologie, pozostając przy javie jako języku programowania. Na przykład najpierw pracowałem przez 3 lata używając technologii JavaSE, następna firma, w której pracowałem, zatrudniła mnie jako juniora, ponieważ nie miałem doświadczenia w JavaEE - jednocześnie sprzedając mnie jako profesjonalny poziom klientom (pracuję w konsultingu). Kolejna firma zatrudniła mnie ponownie jako juniora, ponieważ nie miałem doświadczenia z SAP - pracują głównie z technologiami SAP Java, co jest zdecydowanie niszą. Mimo to sprzedają wszystkich swoich konsultantów technologicznych za dokładnie tę samą stawkę, płacąc im znacznie różne pensje. Teraz, gdy ponownie zmieniam pracę, czuję, że wszystko zacznie się od nowa, ponieważ nie mam doświadczenia w Springu ani wiedzy na temat Oracle. tl;dr = czy moja obserwacja jest całkowicie nieuzasadniona, że firmy używają tych kategoryzacji jako sposobu na utrzymanie niskich płac?


title: Ochrona zastrzeżonego kodu, który łączy się z kodem LGPL v3

text: Zostałem ostrzeżony, że LGPL v3 zabrania wszelkiego rodzaju modyfikacji, które zapobiegałyby inżynierii wstecznej, w tym ochrony oprogramowania, takiej jak zaciemnianie. W praktyce, czy ta licencja uniemożliwia używanie czegoś takiego jak SecureSWF lub po prostu minifikatora JavaScript podczas łączenia programu z biblioteką na licencji LGPL?


title: Wzory ciągów, które można wykorzystać do filtrowania i grupowania plików

text: Jedna z naszych aplikacji filtruje pliki w określonym katalogu, wyodrębnia z niego niektóre dane i eksportuje dokument z wyodrębnionych danych. Algorytm wyodrębniania danych zależy od pliku i do tej pory używamy wyrażenia regularnego do wyboru algorytmu, na przykład `.*\.txt` zostanie przetworzony przez algorytm A, `foo[0-5]\. xml` zostanie przetworzony przez algo B, itd. Jednak teraz potrzebujemy kilku plików do przetworzenia razem. Na przykład w jednym przypadku potrzebujemy dwóch plików, `foo.*\.xml` i `bar.*\.xml`. Część informacji do wyodrębnienia znajduje się w pliku _foo_, a druga część w pliku _bar_. Co więcej, musimy upewnić się, że dzika karta jest kompatybilna. Na przykład, jeśli istnieje 6 plików foo1.xml foo23.xml bar1.xml bar9.xml bar23.xml foo4.xml oczekiwałbym, że foo1 i bar1 będą identyfikowane jako grupa, a foo23 i bar23 jako kolejna grupa. bar9 i foo4 nie mają pary, więc nie będą traktowane. Teraz, ponieważ filtr jest konfigurowany przez użytkownika, musimy mieć wzorzec, który może wyrazić powyższe wymaganie. Nie sądzę, że możesz wyrazić znaczenie jak powyżej w standardowym wyrażeniu regularnym. `(foo|bar).*\.xml` dopasuje wszystkie 6 plików powyżej i nie możemy zidentyfikować, który plik jest sparowany dla konkretnego pliku. Czy istnieje jakiś standardowy wzór, który może to wyrazić? Lub masz pomysł, jak zmodyfikować regex, aby to wspierać, co można łatwo zaimplementować?


title: Co na dziś programiści „mikrooptymalizują”?

text: W „starych, dobrych czasach”, kiedy kopiowaliśmy shareware na dyskietki dla przyjaciół, używaliśmy również sporo asemblera. Istniała powszechna praktyka „mikrooptymalizacji”, polegająca na wpatrywaniu się i wpatrywaniu w linie montażowe, dopóki nie znalazłeś sposobu na wyrażenie tego w jednej instrukcji mniej. Było nawet powiedzenie, które było matematycznie niemożliwe, że " _Zawsze możesz usunąć jeszcze jedną instrukcję._ " Biorąc pod uwagę, że zmiana wydajności środowiska wykonawczego przez małe stałe współczynniki nie jest głównym problemem dla (większości) dzisiejszego programowania, czy programiści przenoszą te mikro -wysiłki optymalizacyjne gdzie indziej? Innymi słowy, **Czy najlepszą praktykę można doprowadzić do stanu ekstremalnego, w którym nie dodaje już niczego wartościowego?** A zamiast tego marnujesz czas? Na przykład: Czy programiści marnują czas na _generalizowanie_ prywatnych metod, które są wywoływane tylko z jednego miejsca? Czy marnuje się czas na zmniejszenie ilości danych dotyczących przypadków testowych? Czy programiści (nadal) są nadmiernie zaniepokojeni redukcją linii kodu? Poniżej znajdują się dwa świetne przykłady tego, czego szukam: (1) Spędzanie czasu na znajdowaniu właściwych nazw zmiennych, a nawet zmienianie nazwy wszystkiego; oraz (2) Usunięcie nawet drobnego i wątłego powielania kodu. * * * Zwróć uwagę, że różni się to od pytania „W jakim celu optymalizujesz?”, ponieważ pytam, co inni programiści wydają się maksymalizować, z piętnem tego, że są to „mikro” optymalizacje, a zatem nie produktywne użycie czas.


title: Kiedy powinienem używać wiadomości przechodzącej przez pamięć współdzieloną?

text: Wiem trochę, jak korzystać z przekazywania wiadomości i pamięci współdzielonej, ale nadal nie wiem, kiedy wybrać jedno lub drugie. Czy możesz mi opowiedzieć o ich cechach (nie implementacji)?


title: Jak zbudować ścieżkę kariery, aby zostać Architektem?

text: Obecnie jestem młodszym programistą Java z rocznym doświadczeniem. I chcę wiedzieć, jak zostać Architektem. na czym powinienem się skupić, aby osiągnąć ten cel lub być bardziej konkretnym, jaka jest mapa drogowa, aby zostać świetnym architektem?


title: Jak przenieść aplikację J2ME na platformę Android?

text: Słyszałem, że istnieją oprogramowanie do konwersji istniejącej aplikacji J2ME na Androida? Ale do tej pory robiłem ręczną konwersję. Czy wykonuję głupią robotę / czy można przekonwertować dowolną aplikację J2ME?


title: kiedy używać javy, a kiedy c++

text: Powiedzmy, że piszę serwer, który będzie działał nieprzerwanie i odpowiadał na zapytania klienta. Teraz jakie parametry (szybkość, pamięć, łatwość obsługi, jakość itp.) powinienem wziąć pod uwagę, aby zdecydować, czy użyć JAVA, czy C++ i jak? Jak decyduje o tym architektura systemu? A może po prostu wybierają ten, w którym mogą znaleźć doświadczenie?


title: Czy „prawdziwość” jest uzasadnionym terminem programistycznym?

text: SO ma sporo pytań, w których słowo „prawdziwość” oznacza wartość prawdziwości wyrażenia, ocenianego jako wartość logiczna, niezależnie od jego oryginalnego typu. Jest bardzo przydatny w językach dynamicznych. Więc moje pytanie brzmi, czy to prawdziwy termin, a jeśli tak, czy używaliśmy go, zanim Stephen Colbert spopularyzował go? A może po prostu zaadoptowaliśmy to później? W takim razie, jaki jest właściwy termin z definicją, którą podałem powyżej?


title: Używanie fragmentów kodu open source w mojej aplikacji

text: Pracuję nad wewnętrzną aplikacją firmy (nie zbudowaną na Wordpress), która musi mieć funkcjonalność shortcode podobną do Wordpress (http://codex.wordpress.org/Shortcode_API). Wordpress ma wiele funkcji związanych z obsługą krótkich kodów, ale te, na które patrzyłem, były tylko tymi, które obsługiwały część procesu regex. Czy jest coś złego w korzystaniu z kilku potrzebnych mi funkcji Wordpress w mojej aplikacji? Jeśli wszystko jest w porządku, jak mam podejść do udzielania kredytów w tych sekcjach. Zrobiłem szybkie sprawdzenie i Wordpress jest na licencji GPLv2. W mojej aplikacji używam Kohana Framework, który jest na licencji BSD. Nie jestem pewien, czy to coś zmieni, ale pomyślałem, że dodam to na wszelki wypadek.


title: Przejście od środowiska akademickiego do siły roboczej

text: Od 4 lat pracuję jako programista i asystent naukowy. To moja druga główna praca po studiach (stopień CS). W tamtym czasie była to dobra pozycja, ale sfrustrowałem się wolnym tempem i zdecydowałem się wejść do sektora prywatnego. Moje pytanie: jakich umiejętności brakuje programistom akademickim w porównaniu z tymi, którzy byli w ogólnej sile roboczej? Chcę zminimalizować wszelkie braki podczas szukania nowej pracy.


title: Jak wytrwałość wpisuje się w język czysto funkcjonalny?

text: W jaki sposób wzorzec używania programów obsługi poleceń do radzenia sobie z trwałością pasuje do czysto funkcjonalnego języka, w którym chcemy, aby kod związany z IO był jak najcieńszy? * * * Podczas implementacji projektowania opartego na domenie w języku obiektowym często używa się wzorca polecenia/obsługi do wykonywania zmian stanu. W tym projekcie _obsługi poleceń_ znajdują się nad obiektami domeny i są odpowiedzialne za nudną logikę związaną z trwałością, taką jak używanie repozytoriów i publikowanie zdarzeń domeny. Programy obsługi to publiczna twarz Twojego modelu domeny; kod aplikacji, taki jak interfejs użytkownika, wywołuje programy obsługi, gdy zachodzi potrzeba zmiany stanu obiektów domeny. Szkic w C#: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler (repozytorium IDraftDocumentRepository, wydawca IEventPublisher) { _repo = repozytorium; _publisher = wydawca; } publiczne nadpisanie void Handle(DiscardDraftDocument polecenie) { var document = _repo.Get(command.DocumentId); dokument.Odrzuć(polecenie.IdUżytkownika); _publisher.Publikuj(dokument.NoweZdarzenia); } } Obiekt domeny `document` jest odpowiedzialny za implementację reguł biznesowych (takich jak „użytkownik powinien mieć uprawnienia do usunięcia dokumentu” lub „nie możesz odrzucić dokumentu, który już został odrzucony”) oraz za generowanie zdarzeń domeny, które trzeba opublikować (`document.NewEvents` byłoby `IEnumerable<Event>` i prawdopodobnie zawierałoby zdarzenie `DocumentDiscarded`). Jest to fajny projekt - jest łatwy do rozszerzenia (możesz dodawać nowe przypadki użycia bez zmiany modelu domeny, dodając nowe programy obsługi poleceń) i jest niezależny od sposobu utrwalania obiektów (możesz łatwo zamienić repozytorium NHibernate na Mongo repozytorium lub zamień wydawcę RabbitMQ na wydawcę EventStore), co ułatwia testowanie za pomocą podróbek i makiet. Przestrzega również separacji modelu/widoku — program obsługi poleceń nie ma pojęcia, czy jest używany przez zadanie wsadowe, GUI czy REST API. * * * W czysto funkcjonalnym języku, takim jak Haskell, możesz modelować procedurę obsługi poleceń mniej więcej tak: newtype CommandHandler = CommandHandler {handleCommand :: Polecenie -> IO Wynik) dane Wynik a = Sukces a | Błąd Przyczyna Typ Przyczyna = String disableDraftDocumentCommandHandler = CommandHandler uchwyt gdzie uchwyt (DiscardDraftDocument documentID userID) = wykonaj dokument <- loadDocument documentID let result = odrzuć dokument userID :: Wynik [Event] przypadek wynik zdarzeń sukcesu -> zdarzenia publishEvents >> zwróć wynik - - w modelu opartym na zdarzeniach nie ma dodatkowego kroku, aby zapisać dokument Błąd _ -> zwróć uchwyt wyniku _ = return $ Błąd "Spodziewałem się polecenia DiscardDraftDocument" Oto część, którą mam trudności ze zrozumieniem. Zazwyczaj istnieje jakiś rodzaj kodu „prezentacyjnego”, który wywołuje procedurę obsługi poleceń, na przykład GUI lub REST API. Więc teraz mamy dwie warstwy w naszym programie, które muszą wykonać IO - obsługę poleceń i widok - co jest dużym nie-nie w Haskell. O ile wiem, istnieją tutaj dwie przeciwstawne siły: jedna to separacja modelu/widoku, a druga to potrzeba utrzymania modelu. Musi istnieć kod IO, aby utrwalić model _gdzieś_ , ale separacja modelu/widoku mówi, że nie możemy umieścić go w warstwie prezentacji z całym innym kodem IO. Oczywiście w „normalnym” języku IO może (i dzieje się) wszędzie. Dobry projekt nakazuje, aby różne typy we/wy były trzymane oddzielnie, ale kompilator tego nie wymusza. A więc: jak pogodzić separację modelu/widoku z chęcią wepchnięcia kodu IO na sam brzeg programu, kiedy model musi być utrwalony? _Jak oddzielić dwa różne typy we/wy_ , ale nadal z dala od czystego kodu? * * * **Aktualizacja** : Zlecenie wygasa za mniej niż 24 godziny. Nie wydaje mi się, żeby którakolwiek z obecnych odpowiedzi w ogóle odnosiła się do mojego pytania. Komentarz Flame'a @Pthariena na temat stanu kwasowego wydaje się obiecujący, ale nie jest to odpowiedź i brakuje w nim szczegółów. Nie chciałbym, żeby te punkty się zmarnowały!


title: Dlaczego czas wykonania jest za każdym razem inny w javie?

text: Staram się zrobić program w Javie, który mierzy złożoność konkretnego programu w odniesieniu do czasu jego wykonania. Weźmy problem i zakodujmy go na wszystkie możliwe sposoby z uwzględnieniem złożoności czasowej, powiedzmy, że możemy napisać kod dla konkretnego problemu w O(n), O(log(n)), O(n log(n)) i O(n^2). Zanotuję czas wykonania każdego przypadku i stworzę skalę z tymi wartościami, aby zmierzyć złożoność czasową rozwiązania innych osób. Jak 1. O(n) -> 2-3 ms 2. O(log(n)) -> 1-2 ms itd. Teraz jeśli inny kod ma czas wykonania 2,3 ms, to mój program w Javie powie, że dane rozwiązanie ma złożoność czasowa zlecenia O(n). Teraz problem polega na tym, że ponieważ mój kod jest w Javie, za każdym razem, gdy uruchamiam dowolny program za pomocą poleceń Ubuntu za pomocą kodu Java , za każdym razem otrzymuję inny czas wykonywania, a czas wykonywania ma bardzo duży zakres od 0,364246 do 0,902362. Dlaczego tak się dzieje i co mogę zrobić, aby stworzyć wydajną wagę? Oto mój kod: import java.io.*; class ps_ef { public static void main(String args[]) { String s=null,nazwa_pliku,rozszerzenie; int poz = args[0].lastIndexOf("."); rozszerzenie = args[0].substring(pos+1); nazwa_pliku = args[0].substring(0,poz); wewn lang = 0; // 1 -> c,c++ , 2 -> java try { Kompilacja procesu = null; switch(extension) { case "c" : compile = Runtime.getRuntime().exec("gcc -g "+ args[0] + " -o "+nazwa_pliku); język = 1; przerwanie; case "c++" : compile = Runtime.getRuntime().exec("g++ -g "+ args[0] + " -o "+nazwa_pliku); język = 1; przerwanie; case "java" : compile = Runtime.getRuntime().exec("javac "+ args[0]); język = 2; } BufferedReader stdError = new BufferedReader(new InputStreamReader(compile.getErrorStream())); if((s = stdError.readLine()) != null) { System.out.println("Błąd czasu kompilacji LUB ostrzeżenie: "); System.out.println(s); while((s = stdError.readLine()) != null) { System.out.println(s); } } double startTime, run_time; Przebieg procesu; if(lang == 1) { startTime = System.nanoTime(); run = Runtime.getRuntime().exec("./"+nazwa_pliku); run_time = (System.nanoTime()-startTime)/(double)Math.pow(10,6); } else { startTime = System.nanoTime(); run = Runtime.getRuntime().exec("java "+nazwa_pliku); run_time = (System.nanoTime()-startTime)/(double)Math.pow(10,6); } System.out.println("RunTime: "+ run_time+" ms"); BufferedReader run_stdInput = nowy BufferedReader(nowy InputStreamReader(run.getInputStream())); BufferedReader run_stdError = nowy BufferedReader(nowy InputStreamReader(run.getErrorStream())); if(( s = run_stdError.readLine()) != null) { System.out.println("Błąd w czasie wykonywania: "); System.out.println(s); while((s = run_stdError.readLine()) != null ) { System.out.println(s); } } else if((s = run_stdInput.readLine()) != null) { String s_string = null; int nie powiodło się = 0; Plik fs = nowy Plik(nazwa_pliku+.txt"); BufferedReader br = nowy BufferedReader(nowy FileReader(fs)); if((!s.equals(s_string = br.readLine()))) { nie powiodło się = 1; } while(((s = run_stdInput.readLine()) != null) & ((s_string = br.readLine()) != null) & (failed == 0)) { if(!s.equals(s_string) ) { nie powiodło się = 1; przerwanie; } } if((nieudane == 1) || s != null || s_string != null) { System.out.println("Przesłanie nie powiodło się: "); System.out.println("Albo dane wyjściowe są nieprawidłowe.\nLUB\nTwoje dane wyjściowe nie są zgodne z podanym formatem. "); System.exit(0); } else { System.out.println("Przesyłanie powiodło się."); } } } catch(IOException e) { System.out.println("Wystąpił błąd: "); e.printStackTrace(); System.exit(-1); } } } Oto mój wynik działania: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/tWUwp.png)


title: Jak nazywasz aplikację, która nie jest specjalnie powiązana ze strukturą bazy danych?

text: Zastanawiam się, jak nazywasz aplikacje, które nie są zakodowane na sztywno wokół żadnej struktury bazy danych? Podam mały przykład: mam jedną aplikację, w której widoki, kontrolery i model są dostosowane do informacji i pól w modelu, a tym samym do bazy danych. Mam drugą (teoretyczną) aplikację, w której widoki i kontrolery są całkowicie ogólne; Mógłbym zmienić pola w mojej bazie danych i dokonać drobnych korekt w klasach modelu, a aplikacja nadal działa w zakresie edycji/dodawania informacji. Nie próbowałbym tworzyć aplikacji na żadnej z tych zasad, ale zastanawiam się, jak je nazwałbyś.


title: Kontrolery i refaktoryzacja w celu utrzymania / wrażliwości

text: Przeczytałem wiele podobnych postów na stronie: jednak wciąż kwestionuję to, co jest najlepsze w mojej sytuacji (również odpowiedzi są sprzeczne z pytania na pytanie). Mam witrynę internetową (aplikację internetową) z kontrolerem na sekcję logiki domeny (tj. ProductsController, NewsController, ContactsController itp.) i jeden bardzo duży, bardzo brzydki kontroler administracyjny, który zawiera logikę dla Dodaj/Edytuj/Wyświetl/Usuń funkcje dla każdej sekcji... teraz jak możesz sobie wyobrazić ten kontroler wymyka się spod kontroli (podczas gdy każda funkcja nie jest zbyt duża, posiadanie dziesiątek funkcji w jednym kontrolerze nie pasuje do mnie...). Z tego, co wyczytałem, ogólny konsensus jest taki, że po prostu wrzuć funkcje _admin_ do kontrolera 'sections'; jednak niektórzy sugerują również utworzenie nowego kontrolera dla każdej sekcji administratora. więc miałbym wtedy ProductsController i AdminProductsController - wydaje mi się to trochę przesadą, jednak nie mam pojęcia o tym: wszelkie wskazówki lub odczyty byłyby mile widziane - lub jeśli istnieje "najlepsza praktyka w branży", którą byłoby miło wiedzieć również.


title: Jakie są zalety i wady cykli szybkiego wydawania przeglądarek dla twórców stron internetowych?

text: Chrome i Firefox mają teraz szybkie cykle wydawnicze. Również Opera zaczyna nabierać szybkości, a Internet Explorer wkrótce powinien ruszyć na wyższy poziom. Jestem programistą stron internetowych. Co to dla mnie oznacza? Jakie to ma dla mnie konsekwencje? Czy będzie to korzyść dla mojej pracy, czy kolejny ciężar?


title: Jak decydujesz, gdzie powinna należeć funkcjonalność w projekcie na dużą skalę?

text: W mojej obecnej sytuacji programistycznej mamy wiele bibliotek DLL, plików wykonywalnych i bibliotek statycznych. Jak zdecydować, co powinno trafić do biblioteki DLL? Co powinno znaleźć się w pliku wykonywalnym? Po co mieć oddzielne funkcje w różnych plikach wykonywalnych? Mam nadzieję, że odpowiedź będzie zwięzła, ale wydaje się, że jest to temat w dużej mierze uparty. Jak decydujesz, gdzie znajduje się funkcjonalność w projekcie na dużą skalę (więcej niż jeden plik wykonywalny)? Spodziewam się, że odpowiedzi będą się wahać od „Dobrego Projektu” do „Modułowości” do „Cokolwiek kierownictwo umieści w dokumencie wymagań”.


title: Sprytne struktury organizacyjne aplikacji PHP?

text: Istnieje milion struktur systemu plików, które trafiają do niezliczonych dostępnych projektów Open Source. Rzeczy takie jak moduły, pliki językowe, domeny, biblioteki innych firm, migracje, internacjonalizacja, kopie zapasowe i łącza systemowe do innych części systemu dały początek wielu podejściom do organizowania systemu plików projektu. Jako programista PHP zastanawiam się, czy w projektach zaczyna pojawiać się jakakolwiek standaryzacja. Wraz z PSR-0 mamy wreszcie standard nazewnictwa i ładowania plików - ale to nic w stosunku do mojej wiedzy o pozostałych komponentach, które składają się na system, ani o tym, jak można z nimi obchodzić się w rozsądny sposób. **Mamy do czynienia z dużo więcej niż tylko MVC, więc jakie są przykłady dużych projektów, które poprawnie obsługują wszystkie te rzeczy?**


title: Mój pierwszy poważny projekt i martwię się o bezpieczeństwo

text: Tworzę mały portal społecznościowy dla studentów konkretnej uczelni (na której studiuję) i obawiam się o bezpieczeństwo (dostęp do bazy danych). Co powinienem zrobić? Co muszę sprawdzić po raz ostatni, zanim wszedłem online? (Tak, Facebook Facebook. Facebook nie ma takiego wyczucia społeczności. Nie możesz znaleźć wszystkich swoich kolegów z wydziału na Facebooku. Nie możesz zobaczyć wszystkich zagranicznych studentów na Facebooku. Nie możesz ukryć swojej tożsamości na Facebooku podczas komentowania itp. nie porównuj tego z Facebookiem, mieliśmy świetną _lokalną_ sieć społecznościową, dopóki nie stała się _publiczna_ .*))


title: Czy/powinniście uważać wydania GM za ostateczne?

text: Zastanawiałem się, czy jako programista rozważasz wydanie przez GM ostatecznego wydania i czy robisz to dla poważnego rozwoju, czy trzymasz się wersji stabilnej. Dzięki iOS SDK możesz przesyłać aplikacje do Apple w celu przesłania do App Store przy użyciu wersji GM. Czy polecasz używać SDK w wersji GM czy poczekać kilka tygodni i użyć wersji stabilnej?


title: Pytanie dotyczące własności intelektualnej

text: Jak prawie wszyscy tutaj, mam garść skryptów i oprogramowania, które opracowałem i którymi jestem zachwycony. Będę szukał swojej pierwszej pracy jako projektant oprogramowania / koder. Wydaje się naturalne, że będę chętnie zadowolić mojego pracodawcę i użyć skryptów lub podobnych metod, które opracowałem i pracowałem dla mnie w przeszłości, aby zadowolić mojego pracodawcę. Wydaje się pewne, że wiele rzeczy, które koduję, będzie wyglądało bardzo podobnie do rzeczy, które kodowałem w przeszłości. Nie rozumiem, jak udokumentować i przekazać pracodawcy, że ta baza kodów była moja, zanim tu przyjechałem i będzie nadal moja, kiedy wyjdę. Z pewnością jest to powszechny problem, ale żadne z różnych wyszukiwań, które przeprowadziłem w sieci, nie przyniosło odpowiedzi na to pytanie. Jak powszechnie radzi sobie z tą sytuacją w branży? Czuję, że powinna istnieć cyfrowa wersja wysyłania do siebie „listu certyfikowanego” z zawartym moim kodem/oprogramowaniem/skryptami. Nie próbuję chronić mojego kodu przed innymi użytkownikami; Staram się chronić moje prawo do dalszego korzystania z mojej bazy kodów, którą opracowałem przed podjęciem pracy u pracodawcy.


title: Czy lepiej jest użyć zmiennej zewnętrznej, czy przekazać wskaźnik?

text: Pisząc w C, zawsze zastanawiałem się, kiedy najlepiej użyć zmiennej zewnętrznej. Generalnie wolę przekazać wskaźnik do metody. Czy jest odpowiedni czas na użycie zmiennej zewnętrznej i właściwy czas na użycie wskaźników?


title: Kontekst bazy danych i wstrzykiwanie Singletona z IoC

text: Wszystkie poniższe informacje dotyczą aplikacji ASP.NET c#. Mam pamięć podręczną ustawień Singleton, która odczytuje wartości z bazy danych przy pierwszym dostępie i buforuje je, a następnie unieważnia je za pomocą wiadomości SQL Service Broker i ponownie odczytuje zgodnie z wymaganiami. Na potrzeby standardowych kontrolerów tworzę mój kontekst Db w zakresie żądania. Jednak to oczywiście oznacza, że nie mogę użyć tego samego kontekstu w klasie Settings Cache, ponieważ jest to singleton i mamy kolizję zakresów. W tej chwili skończyłem z dwoma kontekstami db - Kontrolery pobierają je za pośrednictwem kontenera IoC, podczas gdy Singleton po prostu tworzy swój własny. Jednak nie jestem zadowolony z tego podejścia (głównie ze względu na sposób, w jaki myślę o dwóch kontekstach, pamięć podręczna nie ustawia niczego na db, więc współbieżność nie jest tak dużym problemem). Jaki jest lepszy sposób na zrobienie tego?


title: Model/wzór architektury projektu rozwoju mobilnego

text: Chciałbym usłyszeć kilka sugestii dotyczących ulepszeń dla architektur projektowych rozwoju mobilnego (Android/iOS). Chciałbym wybrać „bezpieczną” konstrukcję, modułową i łatwą do utrzymania w czasie. O ile wiem, platformy **Android**, a także **iOS** są zbudowane na **MVC** , mają przynajmniej `Activities` i `UIViewControllers`, które są rodzajem _controller_ części **MVC* * (jak wielu podało w Internecie). Znam też do tej pory dwa podejścia do podstawowego projektu ( **Android** /* _iOS_ *): ## 1\. Mój ulubiony (rodzaj MVC) _**Model_** \- Mam tutaj modele, tylko proste klasy getter/setter kształtujące encje projektu _**View_** \- Activity, UIViewController i widoki niestandardowe, tylko wyświetlanie , pobierz dane z interfejsu użytkownika tutaj, zwykle pobiera dane z Kontrolera, nigdy bezpośrednio z Acess _**Controller_** \- niektóre singletony (niekonieczne, ale zwykłe), które zarządzają danymi każdej encji, zwykle wykonują zadania biznesowe, wczytuję dane z warstwy Access i nie masz dostępu do warstwy widoku. _**Access_** \- Menedżery baz danych i usług sieciowych, przesyła dane z powrotem do warstwy kontrolera, nie może mieć kontaktu z żadną inną warstwą. ## 2\. Powszechnie widziane (także coś w rodzaju MVC) _**Model_** \- modele, tylko proste klasy getter/setter kształtujące encje projektu, zwykle też widziałem tutaj również zadania biznesowe. _**View-Controller_** -(Activities and UIViewController), które zarządzają danymi encji, zwykle wykonują zadania biznesowe, a także dbają o wyświetlanie danych użytkownikowi. Wykonuj również połączenia za pośrednictwem niektórych klas usług internetowych, aby uzyskać dane. Do tej pory używam pierwszego wariantu, ponieważ uważam, że jest on bardziej oddzielony i widzę różnicę między tym, kto wykonuje zadania biznesowe, komunikacją interfejsu użytkownika i dostawcami danych. Dzięki temu jest łatwiejszy w utrzymaniu niż drugi. Wadą pierwszej jest to, że ma o 2 więcej warstw niż druga, co oznacza więcej klas (ale mniej kodu w każdej klasie) i na początku projektu może to zająć trochę więcej czasu niż w przypadku drugiej. Jakie podejście stosujesz lub które uważasz za lepsze i dlaczego?


title: Skalowanie Scrum w grupie setek programistów

text: Większość zespołów Scrumowych skłania się do 7-15 osób ****** , chociaż nie jest jasne, jak skalować Scrum wśród setek osób, ani jak można porównać skuteczność danego zespołu z innym zespołem w grupie; co oznacza poza podziałem grupy na zespoły Scrumowe składające się z 7-15 osób, nie jest jasne, w jaki sposób wysiłki między zespołami są zarządzane, porównywane itp. **Wszelkie sugestie związane z którymkolwiek z tych tematów lub dodatkowymi powiązanymi tematami, które mogą mieć większe znaczenie uwzględnić przy planowaniu grupowania SCRUM na dużą skalę?** ****** Przeglądając badania dotyczące sugerowanej wielkości zespołów programistycznych, które wydają się być podstawą sugerowanej wielkości zespołu Scrum, odkryłem, co wydaje się być błędem w badaniach, które dziwnie pokazują, że większe zespoły (15+ ppl), a nie mniejsze (7 osób) są lepsze. * * * **AKTUALIZACJA, „Odp.: Scrum nie skaluje się”:** Poczyniłem ogromne postępy osobiście badając temat, ale pomyślałem, że odpowiem na ogólne przekonanie niektórych, że Scrum nie skaluje się, cytując cytat z Succeeding with Agile autorstwa Mike'a Cohna: > **Scrum Czy Skaluje:** Musisz podziwiać intelektualną uczciwość > najwcześniejszych autorów Agile. Wszyscy bardzo uważali, aby powiedzieć, że metodyki Agile >, takie jak Scrum, są przeznaczone dla małych projektów. Ten konserwatyzm nie był > dlatego, że agile lub Scrum okazały się nieodpowiednie dla dużych projektów, ale > dlatego, że nie stosowali tych procesów w dużych projektach, a więc > niechętnie doradzali to swoim czytelnikom. Ale w latach od > Manifestu Agile i książek, które pojawiły się krótko przed nim i po nim, > dowiedzieliśmy się, że zasady i praktyki rozwoju zwinnego mogą być > skalowane i stosowane w dużych projektach, aczkolwiek w znacznej ilości > narzutu. Na szczęście, jeśli duże organizacje stosują opisane techniki > dotyczące roli właściciela produktu, pracy ze wspólnym produktem > backlogu, pamiętania o zależnościach, koordynowania pracy między zespołami i > kultywowania społeczności praktyków, mogą z powodzeniem skalować Scrum > projekt. > > **ŹRÓDŁO:** (przebiegł przez książkę dzięki odpowiedzi Ladislava Mrnki)


title: Pytania do rozmowy kwalifikacyjnej z programistami internetowymi

text: Przeczytałem dzisiaj artykuł, w którym wymieniono kilka podstawowych pytań dotyczących tworzenia stron internetowych: 1. Opisz, w jaki sposób dane POST zostały przesłane na serwer przez przeglądarkę. 2. Wyjaśnij kilka kodów stanu HTTP (może z wyjątkiem 404 i 500). 3. Wyjaśnij SOLID lub nazwij wzorzec projektowy. 4. Wyjaśnij, jak poprawić szybkość ładowania strony lub wygodę użytkownika. Autor mówi: „ **jeśli nie możesz odpowiedzieć na powyższe pytania, jest wiele osób, które nie pomyślałyby o Tobie jako o Senior Web Developerze.** „ Moje pytania są następujące: 1. Jak trafne są te pytania w odniesieniu do do programowania i skalowalności sieci Web w prawdziwym życiu? 2. Jak prawdziwe jest to stwierdzenie? Innymi słowy, czy uważasz tę wiedzę za wymóg, aby zostać uznanym za starszego programistę stron internetowych? 3. Udało mi się odpowiedzieć na wszystkie pytania, wydawało mi się, że zbyt łatwo, więc zastanawiam się, czy lepiej jest użyć tych lub podobnych pytań do programistów ekranowych, niż prosić ich o napisanie przykładowego kodu.


title: MVC, praktyki projektowania Java i wady java.util.Observable i java.util.Observer

text: Planuję naukę programowania Model-View-Controller (MVC) przy użyciu języka Java. Podczas czytania natknąłem się na post, który wspomina o **java.util.Observer** i **java.util.Observable** dla rozwoju MVC. Ponieważ nigdy wcześniej o tym nie słyszałem, po więcej googlowaniu natknąłem się na ten post SO, który omawia pewną wadę projektową z wyżej wymienionymi klasami. Moje pytanie ma teraz trzy części 1. Czy te klasy są nadal używane w przemyśle do rozwoju MVC (z wyjątkiem Eclipse, o którym mowa w poście SO)? 2. Jakie są wady tych klas i dlaczego/dlaczego nie należy ich używać? 3. Czy są jakieś sposoby rozwoju projektów MVC w przemyśle? (byłoby miło, gdybyś mógł odpowiedzieć na to w sposób ogólny, NIE szukając odpowiedzi typu **WIOSNA** :P ) **[edytuj: zarówno dla aplikacji komputerowych, jak i internetowych]**


title: Forki aplikacji webowych (Spring, JSF), jak ponownie wykorzystać istniejący kod do podprojektów?

text: moje pytanie będzie nieco filozoficzne i "zorientowane na architekturę", więc proszę o cierpliwość. W tej chwili mamy istniejącą aplikację internetową Java zbudowaną na bazie Spring i JSF(facelets) z maven. To w zasadzie nasze narzędzia, które ograniczają nasz zakres możliwych rozwiązań. Teraz do rzeczy. Musimy zaimplementować widelec tej aplikacji, który będzie działał w różnych domenach dla różnych "konsumentów końcowych" i zaimplementować kilka żądań zmian dla obu wersji, ale **baza kodu tych wersji prawdopodobnie zawsze będzie ~90% taka sama**. Te same prośby o zmianę można zdefiniować do wdrożenia w obu wersjach jednocześnie, ALE mogą też pojawić się oddzielne prośby o zmianę tylko dla wybranej wersji. Nie mamy kontroli nad tym, jakie prośby o zmianę mogą pojawić się później w projekcie (ale spodziewamy się, że będzie ich sporo). Różnice w funkcjonalności mogą wystąpić zarówno w części bean jak i view aplikacji. Nie chcemy tworzyć 2 całkowicie oddzielnych projektów, ponieważ wprowadzenie zmian może czasami oznaczać ich dwukrotne wdrożenie. WAŻNYM PROBLEMEM jest to, że spodziewamy się **jeszcze więcej widelców w przyszłości**, więc wysiłek może się jeszcze bardziej zwielokrotnić. Pytanie brzmi, jakie sposoby kontroli lub wzorce architektoniczne możemy wprowadzić, aby promować lepszą konserwowalność naszych projektów. Jednym z rozwiązań może być na przykład: * wykorzystanie profili Spring do wstrzykiwania odpowiednich komponentów w oparciu o aktualny widelec aplikacji i całkowicie separującą implementację widoku (xhtml). **Reasumując, szukamy najlepszego sposobu na wdrożenie zmian w całej aplikacji, które można wyizolować i aktywować tylko w oparciu o jakąś zmienną kontekstową (jak rozpowszechnić ją wszędzie?).** Doceniamy każdy wkład, pomysł lub nową perspektywę.


title: Etykiety Java. Być albo nie być

text: Zanim zacznę to pytanie, wiem, że java 'goto' jest wielkim zakazem. Tak więc pisałem program i mam kilka wciętych pętli i instrukcji i muszę `BREAK` wielokrotnie na polecenie. Zamiast mieć mnóstwo zmiennych `boolean` i instrukcji `if(!<booleanName>) BREAK;` w tych pętlach i instrukcjach, jakie są opinie wszystkich na temat używania etykiet do ich łamania za pomocą instrukcji `BREAK <label>`? np. for(...) { indented_example_loops: // Nazwa etykiety for(...) { for(...) { if(match) break indented_example_loops; // ^ Instrukcja Break przerywająca 2 pętle for naraz } } } Doskonale? W porządku robić od czasu do czasu? Całkowicie uniknąć? czy powinienem iść do rogu i wezwać diabła, aby zabrał moją duszę?


title: Czy python lambda jest „naprawdę formalnym” rachunkiem λ, czy po prostu udostępnia nazwę?

text: Od czasu do czasu używam lambdy Pythona. Czy jest tak formalny, że można bezpiecznie powiedzieć, że można z nim zrobić formalny rachunek lambda? Właśnie go użyłem, ale nie do końca rozumiałem, czy lambda Pythona i rachunek lambda, jak czytałem, zostały wykonane przez Alonzo Church. Myślę, że użyłem go również w JavaScript. Czy nie jest to bardziej powszechne w językach funkcjonalnych (np. Haskell, Scheme/Lisp, Clojure...) i nigdy nie widziałem lambdy używanej z Javą lub C (++)? Na tej stronie jest napisane "funkcja, którą można przekazać innej funkcji jako argument". Co to jest kod „lambda”? Ale jak mam się do tego na tyle przyzwyczaić, żeby wiedzieć, gdzie z tego skorzystać? Jeśli mogę to zrobić, powiedzmy, SQL, JPQL lub GQL, czy nie powinienem wolą robić tego w języku zapytań?


title: Czy lokalizacja podatkowa jest dobrym zastosowaniem dla Workflow Foundation?

text: **Scenariusz:** mamy zarówno kod WinForm, jak i MVC, który jest używany do pracy na ogólnokrajowej platformie dla wielu użytkowników, która zajmuje się logistyką dla wielu użytkowników. Zasady podatkowe zmieniają się w zależności od stanu, a nawet miasta lub hrabstwa. Te przepisy podatkowe mają ogromne znaczenie dla naszej branży. Inną kwestią jest to, że zasady mogą się zmieniać w zależności od ustawodawstwa. System będzie musiał zajmować się przypadkami, w których przed datą działa to w jedną stronę, a po tej dacie inaczej. To przejście będzie musiało zostać wprowadzone do systemu i przetestowane przed tą datą. **Proponowane rozwiązanie:** użyj Workflow Foundation, aby stworzyć system oparty na czasie, w którym nasi użytkownicy mogą zmieniać i dodawać reguły zmieniające sposób obliczania podatków. **Pytanie:** Nie korzystałem z Workflow Foundation, a wyszukiwanie zwróciło książki do obejrzenia, ale niewiele przykładów osób z powodzeniem korzysta z tej technologii. Czy mój scenariusz dobrze wykorzystuje Workflow Foundation? (Myślę, że tak.) Jeśli masz jakieś doświadczenie z Workflow Foundation, jakieś wskazówki, jak to działa?


title: Alternatywa dla wskaźnika „Pasing/Broken build”?

text: W przypadku ciągłej integracji wykonującej testy przy każdym zatwierdzeniu, powszechną najlepszą praktyką jest, aby wszystkie testy przechodziły przez cały czas (czyli „nie psuj kompilacji”). Mam z tym pewne problemy: Na przykład nie można pomóc projektowi open source poprzez tworzenie testów odpowiadających biletom. Wiem, że jeśli zaproponuję pull request do projektu open source zawierającego test zakończony niepowodzeniem, kompilacja zostanie oznaczona jako nie powiodła się, a projekt nie będzie chciał, aby została ona scalona ze swoim repozytorium, ponieważ „uszkodziłoby to kompilację”. A **Nie wierzę, że nieudane testy w repozytorium** to coś złego. To tak, jakby mieć otwarte problemy w trackerze. To tylko rzeczy, które czekają na naprawę. To samo dotyczy firmy. Jeśli pracujesz z TDD, nie możesz pisać testów, zatwierdzać, a następnie pisać kodu logicznego, który spełnia test. Oznacza to, że jeśli napisałem na laptopie 4-5 testów, nie mogę ich popełnić przed wyjazdem na wakacje. Nikt nie może odebrać mojej pracy. Nie mogę nawet "udostępnić" ich koledze, chyba że wysyłam je na przykład przez e-mail. Uniemożliwia również pracę z jedną osobą piszącą testy, a drugą piszącą model. Wszystko, co można powiedzieć, czy niewłaściwie używam/nie rozumiem procesu kompilacji/ciągłej integracji? Wydaje mi się, że „przejście”/„nie przejście” to zbyt wąski wskaźnik. Czy istnieje sposób na zapewnienie kompatybilności ciągłej integracji i TDD? Może istnieje standardowe rozwiązanie/praktyka, aby odróżnić „nowe testy” (które mogą zawieść) i „testy regresji” (które **nie** powinny zawieść, ponieważ kiedyś działały)?