title: wydajne buforowanie ze złożonymi uprawnieniami użytkownika

text: Obecnie uczę się o memcached/redis i staram się wymyślić, jak mógłbym wykorzystać tego rodzaju technologię w pracy. Teraz rozumiem, że powinieneś głównie buforować dane, które są wspólne dla wielu użytkowników i które nie są modyfikowane co sekundę. W naszej architekturze mamy bardzo relacyjny model danych modelu danych połączony z dość złożonym systemem zarządzania uprawnieniami. Aby uprościć, niektóre obiekty są zagnieżdżone pod innymi obiektami o różnych typach. Obiekt może mieć kilku „rodziców”. Danemu użytkownikowi można nadać dostęp do podzbioru danych za pomocą deklaracji typu `użytkownik może czytać wszystkie obiekty, które mają rodziców a&b typu A i B`. W przypadku grup sytuacja może być bardziej skomplikowana. To bardzo utrudnia przewidzenie, który obiekt może zobaczyć dany użytkownik. Nie widzę też, jak mogę wymyślić dobrą regułę unieważniania pamięci podręcznej, ponieważ wiele zdarzeń może mieć wpływ na to, co widzi użytkownik (modyfikacja reguł dostępu, modyfikacja rodzica w hierarchii, dodanie/usunięcie użytkownika z grupy itp.) . Więc czuję, że będę musiał stworzyć pamięć podręczną na użytkownika o niskim oczekiwanym czasie trwania, co nie wygląda zbyt przydatne. Czy w tym kontekście jest jeszcze nadzieja na znalezienie porządnej strategii buforowania? Czy robię błędne założenia?


title: Jak powszechne jest metaprogramowanie?

text: Jak często widziałeś lub widziałeś metaprogramowanie w projektach? Na uniwersytecie nigdy nie widziałem, żeby to zastosowano, ale widziałem to w mojej poprzedniej pracy (kiedy to zobaczyłem, byłem zdumiony tym, jak skuteczne było). Ale jak powszechne jest to? Czy jest używany cały czas, czy tylko sporadycznie?


title: Gromadzenie użytkowników do bugtrackera

text: Mam w pełni skonfigurowany moduł do śledzenia błędów modliszki do śledzenia problemów w aplikacjach, które tworzę. Kiedy użytkownik jest zdyscyplinowany i idzie prosto do Modliszki, aby napisać raport o problemie, otrzyma najszybszą odpowiedź, a wszystko, co dotyczy problemu, będzie bardzo łatwe do śledzenia. Jednak nie wszystkim się to podoba. Swoje problemy zgłaszają telefonicznie, mailowo, w ogóle ich nie zgłaszają. Jaki byłby najlepszy sposób na zachęcenie ich do korzystania z systemu bugtracker? Oczywiście MUSZĄ zobaczyć jakieś natychmiastowe korzyści, aby mogli wrócić i szukać dalszych korzyści. EDYCJA: Mówię o wsparciu dla produktów, które sprzedaję jako niezależny dostawca oprogramowania.


title: Jak poradzić sobie z trudnym programistą dołączającym do projektu open source?

text: Mam skrypt open source dla konkretnej strony (staram się nie nazywać tutaj niczego po imieniu), który wraz z kilkoma innymi programistami niedawno przenieśliśmy na GitHub. Odkąd przenieśliśmy się na nowy system, pozyskaliśmy kilku nowych programistów, w tym jednego bardzo aktywnego. Jednak ten aktywny zaczął wiele zmieniać w projekcie. Przede wszystkim usunął nasz system wersjonowania (nie taki jak Git, ale w ten sposób -- nazwaliśmy go wersjami `v4.1.16`) i powiedział, że lepiej byłoby po prostu przesłać kod na stronę, gdy uznamy, że jest gotowy. Teraz nie ma scentralizowanego miejsca do umieszczania informacji o wydaniu, co stało się denerwujące. Rzeczą, która przygotowała mnie do spakowania rzeczy i wyjazdu, był skrypt push. Inny programista w projekcie napisał prosty skrypt push oparty na Pythonie. Ponieważ przechowujemy wiele wersji skryptu online w różnych miejscach, zacząłem kodować większy program Java z interfejsem graficznym, który zastąpi skrypt Pythona. Poszedłem na IRC, aby powiadomić o tym wszystkich, i otrzymałem bardzo irytującą odpowiedź od programisty, że stary skrypt oparty na Pythonie może zrobić wszystko, co mój, i jest o wiele lżejszy (skomentował również fakt, że myślał Python był lepszy niż Java i tak dalej). Przejrzałem kod starego skryptu push i zobaczyłem, że nie ma tam żadnej z funkcji, które według niego istniały. Więc teraz chcę wiedzieć, co robić. Spędziłem dużo czasu nad tym projektem, więc nie chcę tak po prostu wstawać i odchodzić, ale ciężko mi pracować z nowym programistą. Z drugiej strony, jest teraz autorem nr 1 w projekcie, z jeszcze większą liczbą zatwierdzeń niż główny programista. Naprawdę nie jestem pewien, co z tym zrobić. Czy ktoś jeszcze doświadczył tego problemu? Jeśli tak, co zrobiłeś? **AKTUALIZACJA 1** : Wyłączyłem dostęp wszystkich użytkowników i proszę, aby ludzie przeszli przez pull requesty. Zaproponowałem również kilka środków, aby rozwiązać inne problemy. Wszyscy inni nie okazali dla tego żadnego poparcia. Kłopotliwy twórca powiedział po prostu, że ludzie, którzy nie śledzą uważnie „zaangażowania”, mogą myśleć, że projekt jest zdezorganizowany, podczas gdy tak naprawdę nie jest. Oczywiście się z tym nie zgadzam, więc poważnie rozważam rezygnację z projektu. **UPDATE 2** : Główny programista zaczął narzekać na fakt, że jeden z moich zatwierdzeń rzekomo usunął trzy znaki nowej linii w kodzie (zatwierdzenie przywrócone pojawiło się zaraz po opublikowaniu dyskusji i nawet nie odnosi się do mojego "zatwierdzenia" ), a potem obaj zaczęli dyskutować, czy odwołać mój dostęp do zatwierdzania. Zrobiłem więc logiczną rzecz i opuściłem projekt. Dzięki za pomoc wszystkim!


title: Czy mogę użyć @font-face „Courier New”?

text: Obecnie mam swój stos czcionek: rodzina czcionek: „Courier New”, Courier, monospace; We wszystkich przeglądarkach, w których testuję, widzę czcionkę wyświetlaną w czcionce `Courier New`, z wyjątkiem moich urządzeń z Androidem - mojego nexusa i mojego kindle'a. I chociaż mają awaryjny tryb monospace, wolałbym, aby moja witryna wyświetlała się tak samo na tych urządzeniach. Czy naruszam jakiekolwiek licencje, dodając czcionkę za pomocą `@font-face`? Jeśli tak, jak mam to rozwiązać? @font-face { font-family: "Courier New"; src: url(/fonts/cour.ttf) format('truetype'); }


title: Czy przechowywanie oprogramowania w chmurze u renomowanych dostawców jest bezpieczne?

text: Mam członka zespołu, który odmawia korzystania z jakiejkolwiek formy prywatnego repozytorium kodu źródłowego na Github lub Bitbucket z powodu „obaw związanych z bezpieczeństwem”. W rezultacie trudno nam udostępniać mu kod. Wydaje się być zaniepokojony kradzieżą kodu źródłowego przez jakąś stronę. Dla mnie korzystanie z repozytoriów kodu źródłowego w chmurze jest dość standardową praktyką branżową. Ale czy ta osoba ma rację? Sprzedawcy okradają klientów z innych branż. Czy wielomilionowy pomysł nie powinien być przechowywany w zewnętrznej usłudze chmurowej, takiej jak AWS, Github, Bitbucket, App Engine itp.?


title: Mapowanie między modelem widoku architektonicznego 4+1 a UML

text: Jestem trochę zdezorientowany tym, w jaki sposób model widoku architektonicznego 4+1 mapuje się na UML. Wikipedia podaje następujące mapowanie: * **Widok logiczny:** Diagram klas, diagram komunikacji, diagram sekwencji. * **Widok rozwoju:** Diagram komponentów, Diagram pakietów * **Widok procesu:** Diagram aktywności * **Widok fizyczny:** Diagram wdrożenia * **Scenariusze:** Diagram przypadków użycia Artykuł Rola sekwencji UML Konstrukcje diagramów w koncepcji cyklu życia obiektu dają następujące mapowanie: * **Widok logiczny** (diagram klas (CD), diagram obiektów (OD), diagram sekwencji (SD), diagram współpracy (COD), diagram stanu (SCD), diagram aktywności (AD)) * **Widok rozwoju** (diagram pakietów, diagram komponentów), * **Widok procesu** (diagram przypadków użycia, CD, OD, SD, COD, SCD, AD), * **Fizyczne view** (diagram wdrożeniowy) oraz * **Widok przypadków użycia** (diagram przypadków użycia, OD, SD, COD, SCD, AD), który łączy w sobie cztery wymienione powyżej. Strona internetowa UML 4+1 View Materials przedstawia następujące mapowanie: ![UML 4+1 View Materials](http://i.stack.imgur.com/5zzFg.gif) Wreszcie biała księga Zastosowanie widoku 4+1 Architektura z UML 2 daje jeszcze inne mapowanie: * **Widok logiczny** diagramy klas, diagramy obiektów, wykresy stanu i struktury złożone * **Widok procesu** diagramy sekwencji, diagramy komunikacji, diagramy aktywności, diagramy czasowe, diagramy przeglądu interakcji * **Widok rozwoju** diagramy składowe * **Widok fizyczny** diagram wdrożeń * **Widok przypadku użycia** Diagram przypadków użycia, diagramy aktywności Jestem pewien, że dalsze poszukiwania ujawnią również inne mapowania. Chociaż różni ludzie zwykle mają różne perspektywy, nie rozumiem, dlaczego tak jest w tym przypadku. W szczególności każdy diagram UML opisuje system w określonym aspekcie. Na przykład, dlaczego „diagram sekwencji” jest uważany za opisujący „logiczny widok” systemu przez jednego autora, podczas gdy inny autor uważa go za opisujący „widok procesu”? Czy mógłbyś mi pomóc wyjaśnić zamieszanie?


title: Przypisanie praw autorskich do projektów open source

text: Jakiś czas temu napisałem aplikację na BlackBerry. Uważam, że teraz chcę go wydać na licencji open source. Zdecydowanie rozważam licencję GPL v3. Cały kod jest mój; nie ma bibliotek innych firm (z wyjątkiem, oczywiście, wszystkich standardowych bibliotek BlackBerry/Java, z którymi jestem „powiązany”). To pierwszy projekt open source, który będę prowadził lub uruchamiał. Czuję się trochę zagubiony w kwestii obsługi składek. Wydaje się, że mniej więcej standardem jest oczekiwanie pewnego rodzaju przeniesienia praw autorskich od współtwórców, aby projekt miał ujednolicone prawa autorskie. Mogę albo scedować wszystkie prawa autorskie na FSF, albo scedować wszystkie prawa autorskie na siebie. Jak mam sobie z tym poradzić? Najważniejsze cechy każdej implementacji, której używam, to: * Chroni mnie przed pozwem za wszelkie niezamierzone naruszenia GPL w moim własnym kodzie * Chroni wkład innych osób przed niewłaściwym wykorzystaniem przeze mnie, jeśli stanę się zły * Zachęcanie innych do wkładu w projekt (a przynajmniej nie zniechęca do takiego wkładu) Jeśli chodzi o przeniesienie wszystkich praw autorskich na siebie, najbardziej obiecującą strategią cesji praw autorskich wydaje się być strategia oparta na umowie współtwórcy Oracle, która znajduje się tutaj: http://openjdk.java.net/legal/oca .pdf. Czuję jednak, że spodziewam się, że każdy współtwórca podpisze dokument prawny, ponieważ podanie mi dość osobistych danych wymaga wiele, zwłaszcza biorąc pod uwagę, że mój projekt jest bardzo mały. Czy powinienem dalej wymagać od współtwórców podpisania dokumentu podobnego do umowy Oracle? Czy powinienem po prostu przyjmować datki i trzymać kciuki, aby nie mieć żadnych problemów na drodze? Czy jest inna strategia, którą powinienem zastosować?


title: Jak oszacować czas na zadania, które przede wszystkim polegają na rozwiązaniu problemu?

text: Podczas gdy doświadczony programista może oszacować, ile czasu zajmie implementacja kodu, gdy wzorzec i problem, który rozwiązuje kod, są dobrze zrozumiane, jak można dobrze oszacować, gdy cel końcowy jest dobrze zrozumiany, implementacja jest w 95% teoretyczna/rozwiązuje problem i ma bardzo małą ilość implementacji? Moja praca często składa się z zadań do osiągnięcia dobrze zdefiniowanych celów, jednak muszę znaleźć sposób na osiągnięcie tego celu i dopóki nie zrozumiem rozwiązania, nie jest jasne, jakie mogą być dodatkowe bariery. Mówiąc dokładniej, często pracuję nad generowaniem kodu lub narzędziami do automatycznej manipulacji kodem. Gdy rozwiązanie zostanie w pełni rozwiązane, a narzędzie doprowadzone do perfekcji, bardzo szybko dokona bezpośrednio 95% rzeczywistych zmian. Nie mam jednak sposobu, aby oszacować, ile dodatkowych problemów trzeba będzie rozwiązać, aby narzędzie do generowania lub analizy poradziło sobie z nieprzewidywalnymi przypadkami skrajnymi. Na potrzeby planowania moja firma chce mieć lepsze wyobrażenie o tym, jak długo to potrwa, ale ponieważ nie wiem, ile dodatkowych problemów może pojawić się podczas pracy nad rozwiązywaniem każdego etapu rozwiązania. Nie jestem pewien, jak mogę podejść do lepszego oszacowania.


title: Wzorce do propagacji zmian w modelu obiektowym...?

text: Oto typowy scenariusz, który zawsze jest dla mnie frustrujący. Mam model obiektowy z obiektem nadrzędnym. Rodzic zawiera kilka obiektów podrzędnych. Coś takiego. public class Zoo { public Lista<Zwierzę> Zwierzęta { get; ustawić; } public bool IsDirty { get; ustawić; } } Każdy obiekt potomny ma różne dane i metody public class Animal { public string Name { get; ustawić; } public int Wiek { get; ustawić; } public void MakeMess() { ... } } Gdy zmienia się potomek, w tym przypadku, gdy wywoływana jest metoda MakeMess, pewna wartość w rodzicu musi zostać zaktualizowana. Powiedzmy, że gdy pewien próg Animal's narobił bałaganu, należy ustawić flagę Zoo's IsDirty. Jest kilka sposobów na poradzenie sobie z tym scenariuszem (o których wiem). **1)** Każde zwierzę może mieć numer referencyjny nadrzędnego zoo w celu informowania o zmianach. public class Animal { public Zoo Parent { get; ustawić; } ... public void MakeMess() { Parent.OnAnimalMadeMess(); } } Wydaje się to najgorszą opcją, ponieważ łączy Animal z obiektem nadrzędnym. A jeśli chcę zwierzę, które mieszka w domu? **2)** Inną opcją, jeśli używasz języka obsługującego zdarzenia (takiego jak C#), jest zasubskrybowanie elementu nadrzędnego w celu zmiany zdarzeń. public class Animal { wydarzenie publiczne OnMakeMessDelegate OnMakeMess; public void MakeMess() { OnMakeMess(); } } public class Zoo { ... public void SubskrybujZmiany() { foreach (var zwierzę w Zwierzętach) { zwierzę.OnMakeMess += new OnMakeMessDelegate(OnMakeMessHandler); } } public void OnMakeMessHandler(object sender, EventArgs e) { ... } } Wydaje się, że to działa, ale z doświadczenia trudno jest utrzymać. Jeśli Zwierzęta kiedykolwiek zmienią Zoo, musisz zrezygnować z subskrypcji wydarzeń w starym Zoo i ponownie zapisać się w nowym Zoo. Sytuacja pogarsza się tylko w miarę pogłębiania się drzewa kompozycji. **3)** Inną opcją jest przeniesienie logiki do rodzica. public class Zoo { public void AnimalMakesMess(Animal animal) { ... } } To wydaje się bardzo nienaturalne i powoduje powielanie logiki. Na przykład, gdybym miał obiekt House, który nie ma wspólnego rodzica dziedziczenia z Zoo.. public class House { // Teraz muszę zduplikować tę logikę public void AnimalMakesMess(Animal animal) { ... } } nie znalazłem jeszcze dobrej strategii radzenia sobie z takimi sytuacjami. Co jeszcze jest dostępne? Jak można to uprościć?


title: Do czego służy klasa „Memento” we wzorcu projektowym Memento?

text: We wzorcu projektowym „Memento” Gang of Four, klasa `Memento` wygląda jak bezużyteczny wrapper, który w rzeczywistości nie dostarcza mi żadnej wartości. Po co to jest? Czy jest jakiś powód, dla którego nie możesz po prostu ominąć obiektu `String` (w przykładzie Wikipedii)?


title: Dobra praktyka oddzielania repozytorium Git od opublikowanego repozytorium?

text: Mamy centralne repozytorium Git, z którego programiści pobierają i wprowadzają zmiany. Dokonują zmian w domyślnej gałęzi master. Nasze narzędzie Continuous Integration (CI) buduje artefakty z tej domyślnej gałęzi głównej i jest podmiotem odpowiedzialnym za promowanie czegoś, co chcemy przetestować do gałęzi „UAT” (w rzeczywistości jest to wykonywane przez osobę, która jest mistrzem budowania, klikając przycisk na Strona narzędzi CI, która zajmie się promocją). Narzędzie CI odpowiada również za promocję kodu z UAT do gałęzi „Produkcja”. Celem gałęzi UAT i Produkcji jest uchwycenie tego, co zostało awansowane do UAT i do Produkcji. W gałęzi UAT nie ma żadnych prac rozwojowych, a produkcja będzie zawierać tylko "rozwój" w postaci nieczęstych "naprawek", ponieważ nasze iteracje rozwoju/wydawania są bardzo szybkie (iteracje 1-tygodniowe). Jeśli możemy to zrobić łatwo, chcielibyśmy wprowadzić kontrolę, która zapobiegnie błędnym wprowadzaniu zmian rozwojowych bezpośrednio w gałęziach UAT i produkcji. Jedną z myśli jest posiadanie podpięcia na centralnym serwerze, który zapewnia, że tylko użytkownik narzędzia CI może wprowadzać zmiany w UAT i produkcji. Pomyśleliśmy również, że możemy mieć centralne repozytorium, z którego programiści korzystają, zawierające tylko gałąź główną i drugie repozytorium zawierające gałęzie UAT i Production. Narzędzie CI będzie komunikować się z obydwoma repozytoriami — będzie patrzeć na rozwój, aby zobaczyć, kiedy nastąpią zmiany, i użyje drugiego repozytorium do promocji do gałęzi UAT i produkcji. Czy to jest to, co zwykle robią ludzie (oddzielne repozytoria dla celów rozwoju i promocji?) Czy byłoby to lepsze niż podejście server hook?


title: Kryteria ustalania priorytetów zaległości produktowych

text: Poniżej znajduje się moja lista najważniejszych kryteriów. Co myślisz? 1. Wartość dla użytkownika - naturalnie cechy, które są ważniejsze dla użytkownika muszą być na pierwszym miejscu 2. Czas wdrożenia - im szybciej zaimplementujesz cechę, tym wyżej powinna być na liście 3. Zależność między cechami - oczywiście Ty nie można utworzyć funkcji „dach” bez uprzedniego rozwinięcia funkcji „ściany”. 4. Redukcja ryzyka - Jeśli jakaś funkcja jest bardzo ważna dla projektu, ale nie jesteśmy pewni, czy faktycznie możemy ją rozwinąć (z powodu ograniczeń technologicznych lub dlatego, że nie wiemy, jak zareagują na nią użytkownicy), wspina się ona w górę na liście.


title: Czy wynik strcmp jest taki sam na wszystkich komputerach i kompilatorach?

text: Kod: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n = strcmp("hello","help"); printf("%d\n", n ) ; zwróć 0; } Wynik: -1 Czy wartość tego programu musi być taka sama na wszystkich komputerach lub różnych kompilatorach? Innymi słowy, czy ta wartość zwracana może przyjmować różne wartości dla tego samego programu, gdy jest uruchamiana na różnych kompilatorach lub na różnych komputerach?


title: Rozwój kariery od architekta systemów?

text: Jakie są zwykłe ścieżki kariery z roli architektury systemów? Czy ludzie kiedykolwiek przechodzą z ról związanych z architekturą do kierownictwa i pracują w kierunku CIO/CTO, czy też zazwyczaj po prostu kierują się w stronę architektury korporacyjnej? Czego sugerowałbyś nauczyć się / zrobić, aby pomóc w pozycjonowaniu, aby przejść do kierownictwa i ostatecznie do ról CIO / CTO? Doświadczenie?


title: Projekty baz danych, tabele równoległe czy dodatkowe pola?

text: Prowadzę bazę danych dla centrum sekwencyjnego. Inni programiści pobierają z tego dane i uruchamiają zautomatyzowane i półautomatyczne procesy z bazy danych. Omawiamy zmianę w bazie danych. W tej chwili mamy bibliotekę, która ma relację jeden-do-jednego z multipleksem_index, który może służyć do identyfikacji biblioteki. Teraz chcemy dodać opcjonalny GBS_index do każdej biblioteki (kolejna opcjonalna relacja jeden do jednego). Tak więc każda biblioteka będzie miała multiplex_index i opcjonalnie GBS_index. Kolumny przechowywane w nowym GBS_index będą takie same jak w przypadku multiplex_index. Mamy więc 2 opcje przechowywania danych GBS_index. 1) Przechowuj dane GBS_index w oryginalnej tabeli multiplex_index i identyfikuj je za pomocą pola „type”. 2) Możemy dodać tabelę równoległą do GBS_index, która odzwierciedla tabelę multiplex_index. Preferuję drugą opcję tabeli równoległej, ponieważ uważam, że jest mniej prawdopodobne, aby złamać istniejący kod (skrypty odpytują bazę danych o listę multipleksów, w tym przypadku musiałyby wykluczyć indeksy GBL_indexes). Koncepcyjnie oba typy indeksów są „indeksami multipleksowymi”, ale są używane w nieco inny sposób. Czy istnieją mocne argumenty za lub przeciw którejkolwiek z opcji? * * * Ok, szybkie wyjaśnienie sekwencjonowania DNA może pomóc. Sekwencjonowanie DNA polega na pobraniu DNA z komórek i podzieleniu ich na "odczyty" około 200 par zasad (każda para zasad jest jak znak DNA A,T,G lub C). Ładujemy biblioteki (DNA z przygotowanej próbki biologicznej) na maszynę i sekwencjonujemy je. Dwa rodzaje indeksów, o których mówiłem, to kolejny fragment DNA o znanej sekwencji, który jest dołączony do początku biblioteki DNA przed zsekwencjonowaniem. W ten sposób możemy odczytać pierwszy bit sekwencji, z której pochodzi każda odczytana biblioteka (~200 znaków). (Na ogół interesuje nas liczba odczytów pasujących do pozycji w genomie referencyjnym). Teraz możemy mieć jeden (multipleks) lub dwa (multipleks + GBS) indeksy na początku DNA biblioteki (jeden występuje po drugim), które tworzą unikalną kombinację do identyfikacji biblioteki. Początkowo dwie biblioteki z tym samym multiplex_index nie powinny być ładowane razem, ponieważ nie można ich zidentyfikować na podstawie sekwencji multiplex_index. Teraz kombinacja dwóch indeksów powinna być unikalna.


title: Używasz jTransforms do komercyjnej (niewolnej) aplikacji na Androida?

text: Zajmuję się tworzeniem aplikacji, która używa JTransforms do obliczania FFT i InverseFFT. Planuję sprzedać tę aplikację w Sklepie Play. Biblioteka JTransforms jest objęta potrójną licencją MPL/LGPL/GPL. Czy to oznacza, że muszę ujawnić społeczności kod źródłowy mojej aplikacji? Czy to oznacza, że nie mogę używać biblioteki open-source do sprzedaży niewolnych aplikacji? Znalazłem następujący link, w którym biblioteka ScissDSP używa JTransforms na licencji LGPL: https://github.com/Sciss/ScissDSP/blob/master/licenses/JTransforms-License.txt Czy to oznacza, że MPL/LGPL/GPL jest sortowane -of Pick 'n' Wybierz typ licencji ?


title: Nazywanie zmiennych logicznych: zanegowane lub nie

text: Kilka lat temu byłem na zajęciach z inżynierii oprogramowania i nauczyciel wyjaśnił, jak nie należy negować komunikatów, opcji, zmiennych itp., aby uniknąć nieporozumień. Podał przykład (coś takiego): > Czy na pewno nie chcesz usunąć tego pliku? Tak, Nie, Anuluj wyjaśniając, że w przypadku akcji „USUŃ” użytkownik potrzebowałby więcej czasu, aby dowiedzieć się, czy „Tak” usunie plik, czy nie, i może prowadzić do frustracji, jeśli użytkownik wybierze „Nie”. Chciałbym wiedzieć, czy podobne zjawisko szybkiego reagowania istnieje w kodzie źródłowym. Przeglądam moduły Node.js i często widzę opcje takie jak: `disableTimeout = false`, `noAutoDetect = true` itd. Co według mnie lepiej byłoby napisać jako `timeoutEnabled = true` i `autoDetect = false` itd. .? Może się to wydawać kwestią opinii, ale wierzę, że jest to kwestia inżynierii i doprowadzenia innych do prawidłowego zrozumienia celu zmiennej. Uważam, że istnieją badania akademickie popierające tę zasadę i wolałbym odpowiedzi poparte odnośnikami zewnętrznymi.


title: napełniać pojemniki blokami o różnych rozmiarach, aby mieć pojemniki o "podobnych" rozmiarach

text: Mam posortowaną listę bloków `L`, które chcę umieścić w 4 kontenerach `C`, kontenery mają limit rozmiaru `S`. Chcę mieć podobną wysokość pojemników, przez podobną rozumiem, że rozbieżność wielkości powinna być jak najmniejsza. np.: S = 4 L = [1, 1, 3, 1, 2, 1, 2] powinno dać w wyniku: C = [[1, 1], [3], [1, 2], [1, 2] ] uwaga: zawsze można włożyć wszystkie bloki do 4 pojemników i nie mogę zmienić kolejności bloków, czy jest sposób, aby to zrobić wydajnie? Nie mogłem znaleźć nazw algorytmów na ten temat, ale tak naprawdę nie wiedziałem, jak tego szukać


title: Zmniejsz liczbę oświadczeń if dzięki wzorcowi projektowemu

text: Miałem pętlę przez obiekt `Process`, każda instancja `procesu` może być innego typu, wywodząca się z klasy bazowej `Process` (np.: `Process1`, `Process2`,...). Każdy pochodny typ „Procesu” ma inne właściwości. Na przykład: niektóre `Procesy` są indeksowalne, o czym informuje flaga `IsIndexable`. Gdy `Process` jest indeksowalny, ma pewne dodatkowe właściwości (na przykład: `AccessDate`), których nie ma proces nieindeksowany. Teraz muszę cyklicznie wykonywać każdy proces w żądaniu.Process (pamiętaj, że indeksowalne procesy różnią się od innych) foreach (Proces procesu w request.Process) { if(process.getType().Name.Equals("Process1 ")) // proces indeksowalny { ((Process1)proces).Name = "aName"; ((Process1)proces).AccessDate = DateTime.Now; } else if(process.getType().Name.Equals("Process2")) // proces nieindeksowalny { ((Process2)process).Name = "anotherNane"; //błąd kompilacji — AccessDate nie istnieje dla typu Process2 //((Process2)process).AccessDate = DateTime.Now; } } Ponieważ nienawidzę tego kaskadowania, jeśli przepisałem za pomocą interfejsu: IProcessable processableImpl = // niektóre rzeczy Unity oparte na typie żądania foreach (Process Process in request.Processes) { processableImpl.fillTheRightProperties(process); } `processableImpl` jest wstrzykiwany w inny sposób na podstawie `request.Type`. W tym momencie metoda `fillTherRightProperties` wykona za mnie pracę nad bieżącym `procesem`. interfejs publiczny IProcessable { void fillTheRightProperties(Proces procesu); } public class IndexableProcess : IProcessable { void fillTheRightProperties(Process process){ Process1 process1 = process as Process1; if(process1==null) throw MyException("Oczekiwany proces1"); process1.Nazwa = "Nazwa"; process1.AccessDate = DateTime.Now; } } public class NonIndexableProcess : IProcessable { void fillTheRightProperties(Process process){ Process2 process2 = process as Process2; if(process2==null) throw MyException("Oczekiwany proces2"); process2.Nazwa = "Nazwa"; } } To jest piękniejsze niż kaskadowe `if`, ale wciąż nie czuję się tak pięknie, jak mogłoby być. Czuję naruszenie odpowiedzialności, ponieważ właściwość `process` edycji konkretnej klasy w innym miejscu i boję się przeczytać ten kod tydzień później.


title: Czy masz jakieś pytania i odpowiedzi w stylu „Family Feud” dotyczące gry dla uczniów szkół średnich?

text: Zbieram pytania i odpowiedzi z matematyki, nauk ścisłych i technologii do gry w stylu „Family Feud” dla uczniów szkół średnich. Mam problem ze znalezieniem i zastanowieniem się nad pytaniami, zwłaszcza w dziedzinie technologii. Preferowane są pytania dotyczące technologii (programowanie lub ogólna technologia). Jeśli nigdy nie widziałeś teleturnieju, „Family Feud” obejmuje dwa zespoły, które próbują odgadnąć najpopularniejsze odpowiedzi na pytania zadawane grupie 100 respondentów. Zespół musi odgadnąć wszystkie popularne odpowiedzi, aby uzyskać punkty za pytanie. Na przykład, jeśli pytanie brzmi: „Jakie są główne tagi w HTML 4.0?”, odpowiedzi mogą brzmieć: 1. P (64 głosy) 2. DIV (16 głosów) 3. TABELA (8 głosów) 4. BLINK ( 4 głosy)


title: Czy dywersyfikacja mojej wiedzy programistycznej jest dobra?

text: Posiadam umiejętności w wielu językach programowania, takich jak Java, C++, C, Obj-C, Scala, Haskell i Matlab. Jednak w ogóle nie znam/lubię programowania internetowego. Bardzo szybko się też nudzę. Dlatego nie pracowałem z żadnymi projektami Java, które są większe niż powiedzmy 20-30 plików Java. Kończę studia i chcę pracować jako programista, szczególnie w obszarze mobilnym. Czy mam wystarczające umiejętności, aby zostać rekrutowanym przez dobre firmy?


title: Pomóż mi zrozumieć następujące punkty dotyczące wzorca strategii, w jaki sposób odnosi się do zasady otwartej/zamkniętej

text: Uczę się wzorców projektowych. Przeczytałem ten artykuł. Punkt nr. 3 nie jest dla mnie jasne. Pisarz powiedział, że **strategia pozwala zmienić wnętrzności obiektu**. Jest to jednak pogwałcenie zasady **open-close**. Czy się mylę? Jeśli się mylę, pomóż mi zrozumieć, co pisarz chciał opisać. 1. Strategia jest podobna do metody szablonu, z wyjątkiem jej szczegółowości. 2. Państwo jest jak strategia, z wyjątkiem jego intencji. 3. Strategia pozwala zmienić wnętrzności obiektu. Dekorator pozwala na zmianę skórki. 4. State, Strategy, Bridge (i do pewnego stopnia Adapter) mają podobne struktury rozwiązań. 5. Wszystkie mają wspólne elementy idiomu „uchwyt/ciało”. Różnią się intencją - to znaczy rozwiązują różne problemy. 6. Strategia ma 2 różne implementacje, pierwsza jest podobna do State. Różnica polega na czasie wiązania (Strategia jest wzorcem jednokrotnego wiązania, podczas gdy Stan jest bardziej dynamiczny). Obiekty strategiczne często są dobrymi ciężarkami.


title: Potrzebne przemyślenia dotyczące struktury projektu/struktury danych

text: Czytam plik binarny, ma kilka bloków, każdy blok ma inne nazwy/dane. Niektóre z tych danych to wartość ciągu, data, data i godzina, ale większość z nich to wartości całkowite. Poprzednio koduję strukturę dla każdego bloku i tworzę element publiczny do przechowywania każdej właściwości tego bloku, a następnie tworzę klasę Wrapper, ta klasa opakowania ma obiekt każdej klasy bloku i przypisujemy wartości w tej klasie opakowania, aby zachować kompletny plik w jednym obiekt. Teraz szukam bardziej wydajnego sposobu na zrobienie tego, ponieważ nasz poprzedni kod nie był zbyt wydajny i muszę przepisać wszystkie klasy Block, ale właśnie pomyślałem, czy jest łatwiejszy i bardziej wydajny sposób na zrobienie tego. Może zamiast tego powinienem użyć obiektu List lub Dictionary? To, co uważasz za najlepsze, to zrobić. Btw moje pliki mają 100 MB + i stąd jest dużo danych, ponieważ plik jest binarny, gdy ma 100 MB :).


title: Czy powinienem się martwić o przeinżynieryzowane zadania programistyczne zadane podczas rozmowy kwalifikacyjnej?

text: Niedawno odbyłem telefoniczny wywiad z firmą. Po tej rozmowie telefonicznej kazano mi wykonać krótkie zadanie programistyczne (mały program; nie powinien zająć więcej niż trzy godziny). Otrzymałem tylko bezpośrednie polecenie dokończenia zadania i oddania kodu. Dano mi pełną swobodę w posługiwaniu się dowolnym językiem i nie powiedziano mi dokładnie, jak oddać kod. Natychmiast zaplanowałem wrzucenie go na Github, napisanie dla niego zestawu testów, użycie Travis-CI (bezpłatna ciągła integracja dla publicznych repozytoriów Github) do uruchomienia zestawów testowych i użycie CMake do zbudowania plików makefile Linuksa dla Travis-CI. W ten sposób nie tylko mogę pokazać, że rozumiem, jak używać Git, CMake, Travis-CI i jak pisać testy, ale także mogę po prostu połączyć się ze stroną Travis-CI, aby mogli zobaczyć wyniki testów. Pomyślałem, że to sprawi, że ankieter będzie trochę wygodniejszy. Ponieważ dobrze znam te technologie, w zasadzie nie poświęciłoby to czasu na wykonanie zadania. Jednak trochę się martwię, że robienie tego wszystkiego dla stosunkowo prostego zadania wyglądałoby źle. Chociaż nie dałoby mi to dużo więcej czasu, nie chcę, aby myśleli, że spędzam zbyt dużo czasu na rzeczach, które powinny być proste.


title: Co powinien wiedzieć główny programista zespołu Objective-C

text: Porady dotyczące bycia wiodącym programistą są mile widziane. Doradztwo na temat bycia głównym deweloperem zespołu Objective-C, bardziej. Niestety nie mam doświadczenia w Objective-C (przypuszczam, że pierwszą rzeczą do zrobienia jest nauczenie się tego). Poza tym nigdy wcześniej nie byłem głównym programistą. Mam około 6 lat doświadczenia w tworzeniu aplikacji w Java, Flex i C#.


title: Zmniejszenie powtarzalnego kodu DI

text: Mam metodę, która konstruuje zależności przy użyciu Unity. Obecnie wszystkie wywołania robią prawie to samo: rejestrują 2 obiekty repozytorium i 2 obiekty 'App Part'. Mój problem polega na tym, że jest ich dużo, a metoda stała się masowa. Uogólniłem wywołania, ale oto przykład: container.RegisterType<IRepositoryOneDataAccess, RepositoryOneDataAccess>(); container.RegisterType<IRepositoryTwoDataAccess, RepositoryTwoDataAccess>(); container.RegisterType<IAppPart, FirstAppPart>("FirstAppPart.TestName"); container.RegisterType<IAppPart, SecondAppPart>("SecondAppPart.TestName"); Pomyślałem, że można to podzielić, aby zmniejszyć kod w metodzie, która rejestruje typy w kontenerze. Najpierw przeniosłem dolne 2 wywołania do innej metody, ponieważ oba rejestrują się do tego samego interfejsu, wymyśliłem tę metodę: private void RegisterParts<TPartOne, TPartTwo>(string firstAppPartName, string secondAppPartName) gdzie TPartOne : IAppPart gdzie TPartTwo : IAppPart { container.RegisterType<IAppPart, TPartOne>(firstAppPartName); container.RegisterType<IAppPart, TPartTwo>(secondAppPartName); } Wydaje się, że to działa, ale nie jestem pewien, czy jest to najlepszy sposób na zrobienie tego. Chciałbym również przenieść inne wywołania do innej metody, najlepiej takiej samej jak ta, którą stworzyłem, ale nie jestem pewien, jak to zrobić, ani nawet czy jest to możliwe. Czy istnieje lepszy sposób na refaktoryzację tego?


title: Hierarchia serwerów Subversion, potrzebujesz porady

text: Mam konfigurację serwera subversion, którą muszę opiekować się kilkoma projektami, pogrupowanymi według języka, następnie klienta (firmy), a następnie projektu, np. repos/ flex3 \com1 \project1 \project2 \com2 \project1 \project2 \project3 flex4 \com1 \projectx \com2 \projecty java \projectz repos jest moim głównym repozytorium, a następnie mam 3 repozytoria wewnątrz (tworzenie za pomocą svnadmin create) flex3, flex4 i java, to flex3 powinien mieć dwa foldery com1 i com2 dla różnych klientów, każdy będzie zawierał różne repozytoria "projektów". Mam wrażenie, że zrobiłem to źle, czy powinienem po prostu utworzyć strukturę najwyższego poziomu jako normalne foldery, a następnie przekształcić com1 i com2 itp. w repozytoria za pomocą "svnadmin create", aby różne projekty mogły być dodawane bezpośrednio pod nimi. Czy to jest poprawne? Dziękuję


title: Co powiedzieć szefowi, jeśli chce, abyś używał zmiennej globalnej?

text: Obecnie odbywam staż od 4 miesięcy i podczas przeglądania mojego kodu szefowi nie podobało się, że utrzymywałem konkretny obiekt lokalnie dla wielu metod w kilku oddzielnych klasach w ramach jednego zestawu. Nie podobało mu się, że za każdym razem tworzono mi nowy obiekt i zamiast tego kazał mi utworzyć pojedynczy obiekt, do którego można uzyskać dostęp z dowolnego miejsca. Dlatego musiałem utworzyć go jako obiekt statyczny w klasie statycznej i po prostu odwoływać się do niego stąd, chcę go użyć! Jak sobie z tym poradzisz, skoro zawodowo programuję dopiero od 4 miesięcy!


title: Programowanie instrumentów pochodnych na akcje

text: Zastanawiałem się nad ubieganiem się o pracę programistyczną, która wymaga doświadczenia w zakresie instrumentów pochodnych na akcje i chociaż wiem, czym są instrumenty pochodne na akcje, nie mam pojęcia, jakie rzeczy zrobiłby programista pracujący z instrumentami pochodnymi na akcje. Zastanawiałem się więc, czy są tutaj jacyś deweloperzy, którzy mieliby doświadczenie w pracach deweloperskich zajmujących się instrumentami pochodnymi na akcje i mogliby rzucić nieco światła na to, jakie zadania powinien wykonać programista instrumentów pochodnych na akcje.


title: Próbujesz rozbić elementy, które są listami na liście?

text: Próbuję napisać program, który tworzy: ?- g([2,3, [22,[3],9] ,4,[5],99],X). X= [2,3,22,[3],9 ,4,5,99] więc wyszukuje listy w podanej liście i zastępuje je elementami bez nawiasów []. więc napisałem ten program: Pierwszy blok po prostu szuka pierwszego elementu na liście, którym jest lista Jeśli nie ma takiego elementu, zwraca `[nie ma_listy]`. pierwsza_lista_na_liście([],[nie ma_listy]):-!. pierwsza_lista_na_liście([H|_],X):-jest_listą(H),X=H,!. pierwsza_lista_na_liście([_|T],X):-pierwsza_lista_na_liście(T,X). Pierwszy blok sprawdza się w prologu idealnie. Drugi blok po prostu szuka na liście elementu X, a następnie dzieli listę na dwie listy, jedna to lista wszystkich elementów przed X, a druga to elementy po X. splite_when_find_element([H|T],H,[ ],T):-!. splite_kiedy_znajdź_element([H|T],X,F,G):- splite_kiedy_znajdź_element(T,X,F1,G),append([H],F1,F). działa również dobrze w Prologu. a trzeci blok jest dołączany i łączy dwie listy w nową listę. dołącz([],L,L). append([H|T],L,[H|U1]):- append(T,L,U1). a ostatnia część to: gg(L,L):-pierwsza_lista_na_liście(L,[nie ma_listy]),!. gg(L,U):-pierwsza_lista_na_liście(L,X), splite_kiedy_znajdź_element(L,X,F,G),gg(G,R),append(F,X,E), append(E,R,U) . kiedy podam `zapytanie [2,[3],5]` otrzymuję również `[2,[3],5]` i naprawdę nie rozumiem, dlaczego to robi.


title: Śledzenie projektów

text: W swojej pracy zajmuję się kilkoma projektami jednocześnie (a kto nie?). Czasami muszę dokonać zmian w projekcie, którym zajmowałem się pół roku temu lub nawet dłużej. I trudno przypomnieć sobie szczegóły dotyczące projektu. Zwykle szukam dat modyfikacji plików, a następnie zaczynam przekopywać się do wiadomości e-mail, aby znaleźć odpowiednie rozmowy. Jeśli projekt jest naprawdę mały, to nie ma go nawet w VCS firmy. Czasami przypomnienie sobie szczegółów projektu trwa znacznie dłużej niż wprowadzenie wymaganej zmiany. Zacząłem używać Onenote do śledzenia istotnych informacji o projektach, ale niewiele mi się w tym udało, prawdopodobnie dlatego, że nie mam jasnego obrazu tego, jak ta baza wiedzy powinna wyglądać. Byłoby miło, gdybym mógł użyć jakiegoś zautomatyzowanego narzędzia, które może łączyć odpowiednie e-maile, kody źródłowe, informacje o błędach i prośby o funkcje oraz okresy różnych działań związanych z konkretnym projektem. Z zaawansowanymi możliwościami wyszukiwania. Jak śledzisz te informacje?


title: Dlaczego standard C++ nie przyjął szablonów wyrażeń?

text: Jak rozumiem, szablony wyrażeń jako technika zostały odkryte znacznie przed powstaniem oryginalnego standardu C++ w 1998 roku. Dlaczego nie zostały użyte do poprawy wydajności kilku standardowych klas, takich jak `std::string` i streams?


title: Czy testy jednostkowe są naprawdę tak przydatne?

text: Właśnie ukończyłem studia z CS i obecnie pracuję jako Junior .NET Developer (C#, ASP.NET i formularze internetowe). Kiedy byłem jeszcze na uniwersytecie, temat testów jednostkowych był poruszany, ale nigdy tak naprawdę nie widziałem z tego korzyści. Rozumiem, co ma robić, a mianowicie określić, czy blok kodu nadaje się do użycia. Jednak nigdy wcześniej nie musiałem pisać testu jednostkowego, ani nie czułem takiej potrzeby. Jak już wspomniałem, zwykle rozwijam się za pomocą formularzy webowych ASP.NET, a ostatnio myślałem o napisaniu testów jednostkowych. Ale mam kilka pytań na ten temat. Czytałem, że testowanie jednostkowe często odbywa się poprzez pisanie „makiet”. Rozumiem tę koncepcję, ale nie potrafię zrozumieć, w jaki sposób mam pisać makiety dla stron internetowych, które są całkowicie dynamiczne i gdzie prawie wszystko zależy od danych pochodzących z bazy danych. Na przykład: używam wielu repeaterów, które mają zdarzenia ItemDataBound itp. (znowu w zależności od danych, które są "nieznane"). Tak więc pytanie numer 1: Czy pisanie testów jednostkowych dla formularzy internetowych ASP.NET jest czymś, co robi się często, a jeśli tak: jak rozwiązać problem „środowiska dynamicznego”? Kiedy się rozwijam, przechodzę przez wiele prób i błędów. To nie znaczy, że nie wiem, co robię, ale mam na myśli, że zwykle piszę jakiś kod, naciskam `Ctrl F5` i widzę, co się stanie. Chociaż to podejście sprawdza się przez większość czasu, czasami mam wrażenie, że jestem trochę nieświadomy (z powodu mojego małego doświadczenia). Ja też czasem marnuję w ten sposób dużo czasu. Pytanie numer 2: Czy radzicie mi zacząć pisać testy jednostkowe? Myślę, że może mi to pomóc w faktycznym wdrożeniu, ale znowu czuję, że może mnie spowolnić.


title: Czy istnieje nazwa losowego stosu?

text: Stworzyłem kontener, który działa jak sterta binarna pod względem wstawiania i wyskakiwania elementu głównego. Kluczową różnicą jest to, że wszystkie etapy porównania są zastępowane losowym wezwaniem do podjęcia decyzji, kiedy iść w lewo/w prawo. (Podstawową strukturą danych jest wektor, zapisany jako tablica rozszerzalna, więc nie musisz wcześniej wiedzieć, ile elementów będzie zawierała sterta.) Pomysł polega na tym, że możesz wstawiać elementy, a kiedy je zdejmujesz, możesz dostaniemy dowolny element losowo. Możesz także iterować przez całą kolekcję, po czym stos jest przetasowywany (po prostu wyskakując i ponownie wstawiając N razy). Zarówno wstawianie, jak i usuwanie to O(log N), przetasowanie to O(N log N). Jego główne zastosowanie to gry, pomyśl o talii kart lub Bingo-tumbler. To nie jest prawdziwa sterta, ponieważ nie ma gwarancji, że elementy będą mniejsze lub większe niż ich dzieci. Ale zarówno wkładanie, jak i usuwanie odbywa się w stylu sterty, po prostu losowo. (Ponadto, w przeciwieństwie do zwykłego Sterty, przedmioty nie muszą być ze sobą porównywalne.) Czy istnieje standardowa nazwa dla tego rodzaju rzeczy? A może lepszy sposób na osiągnięcie tych samych rezultatów? Na razie nazywam to "GrabBag", ponieważ wydaje się, że to dość dobrze to opisuje, ale zastanawiałem się tylko, czy istnieje dla niego bardziej rozpoznawalna nazwa. Rozejrzałem się za możliwymi standardowymi nazwami tego, ale nic nie mogłem znaleźć. Jedyne, co udało mi się znaleźć, to albo Randomized Meldable Heaps, które są czymś innym, albo ludzi narzekających na przypadkowe uszkodzenie stosów, które nie są nawet powiązane.


title: Jak utworzyć strukturę stanu trójskładnikowego w bazie danych i aplikacji?

text: Jak powinienem ustrukturyzować, szczególnie w DB, ale także w aplikacji, stan triarny? Na przykład mam rekordy opinii użytkowników, które należy przejrzeć, zanim zostaną zaprezentowane opinii publicznej. Oznacza to, że recenzent opinii musi zobaczyć niesprawdzone opinie, a następnie je zatwierdzić lub odrzucić. Przychodzi mi do głowy kilka sposobów przedstawienia tego: 1. Dwie flagi logiczne: Widziane/Niewidoczne i Zatwierdzone/Odrzucone. Jest to najprostsze i prawdopodobnie najmniejsze rozwiązanie bazodanowe (przypuszczalnie pola logiczne to proste bity). Minusem jest to, że tak naprawdę są tylko trzy stany, na których mi zależy (niewidoczne/zatwierdzone/odrzucone), a to tworzy cztery stany, w tym jeden, na którym mi nie zależy (rekord, który jest widoczny, ale niezatwierdzony lub odrzucony, jest zasadniczo niewidoczny). 2. String kolumna w DB ze stałymi/wyliczeniem w aplikacji. Używając Rating::APPROVED_STATE w aplikacji i pozwalając, by był równy temu, co chce w DB. To jest większa kolumna w bazie danych i jestem zaniepokojony porównaniami ciągów, gdy potrzebuję tych rekordów. Być może możliwe do złagodzenia za pomocą indeksu? 3. Pojedyncza kolumna logiczna, ale zezwalaj na wartości null. „Prawda” jest zatwierdzona, „fałsz” jest odrzucana. Nie widać wartości „null”. Nie jestem pewien, jakie są plusy/minusy tego rozwiązania. Jakimi zasadami powinienem kierować się przy wyborze? Już myślę w kategoriach rozmiaru bazy danych i kosztu wyszukiwania rekordów na podstawie stanu, a także czytelności kodu, który kończy się przy użyciu tej struktury.


title: Stabilność a niezawodność

text: Czy istnieje różnica między _stabilnością_ a _niezawodnością_ (przynajmniej w kontekście inżynierii oprogramowania), czy można ich używać zamiennie? Jeśli nie, jakie byłyby przykłady niezawodnych, ale niekoniecznie stabilnych systemów i na odwrót?


title: Powód, aby traktować wewnętrzne zmienne klasy i funkcje wewnątrz klasy jako „oddzielne” byty

text: Uwaga: jest podobne pytanie, które dotyczy mojego tematu: Lepszy styl dla zmiennych składowych? ... ale to pytanie nie dotyczy "radzenia sobie z dużą bazą kodu i zrozumienia funkcji, które stały się zbyt duże". Szukam potwierdzenia lub odrzucenia tego, czy moja sytuacja uzasadnia to, że jest to wystarczający powód, aby przyjąć praktykę pisania funkcji wewnętrznych do klasy tak, jakby były oddzielnymi bytami, z odpowiednimi parametrami i wartościami zwracanymi. **Moje pytanie** Zmienne wewnętrzne klasy są uważane za objęte zakresem jako „globalne” w obrębie zawartości tej klasy. W związku z tym zmienne te nie muszą być jawnie dołączane jako parametry funkcji wewnętrznych klasy. Ponadto, jeśli funkcje wewnętrzne zwracają wartości, które mogą należeć do istniejących zmiennych wewnątrz klasy, również nie muszą one być zwracane jawnie. Możesz po prostu odwołać się do nich za pomocą obiektu `this`. Ale czy jest to dobra praktyka? Moje pytanie pochodzi z kontekstu refaktoryzacji ogromnej, starszej bazy kodu. W związku z tym, gdy widzę funkcję wewnątrz klasy, która wygląda jak `$this->IamACute3000LineFunctionDoingInsanelyCuteStuffInASpaghettiCodeLikeWay()`, nie mam pojęcia, które zmienne „globalne” w klasie muszą wykonywać swoją pracę i co dokładnie zwraca . To sprawia, że radzenie sobie z tym kodem jest trudne i czasochłonne, gdy jakakolwiek praca ma być wykonana na klasie. Tak więc, mimo że może to nie mieć sensu wewnątrz samej klasy, widzę pewną zaletę w pisaniu kodu, jak poniżej, traktując zmienne i parametry tak, jakby funkcja została napisana do użytku poza samą klasą: class HelloClass { $private $ Nazwa; $prywatne $powitanie; public function __construct($name) { $this->name = $name; //linia zainteresowania $this->greeting = $this->prepGreeting($this-name); } //funkcja będąca przedmiotem zainteresowania private function prepGreeting($nazwa) { return "Witaj, $imie"; } public function getGreeting() { return $this->greeting; } } $sayHello = new HelloClass("Dennis"); print $sayHello->getGreeting(); Tutaj `prepGreeting` jest funkcją, o której mowa. Z pewnością wygląda to trochę śmiesznie… ponieważ ledwo korzysta z wbudowanych mechanizmów klas, jeśli w ogóle. Zamiast tego można go przepisać jako taki (z odpowiednimi zmianami innych konstruktorów, których nie pokazano): private function prepGreeting() { $this->greeting = "Hello, " . $to->nazwa; } Ale wtedy musisz właściwie przeczytać treść funkcji, aby zrozumieć, co robi, czego dotyka i co zwraca. **Moje pytanie** : w moim przykładzie, gdzie mam do czynienia z dużym kodem, gdzie zrozumienie funkcji wymaga czasu, myślę, że jest dobry powód, aby pisać wewnętrzne funkcje klasowe tak, jakby były oddzielne, nie należące do klasy , ponieważ będzie lepiej rozumieć, co dzieje się wewnątrz funkcji i co zwraca. Ta funkcja będzie samodzielna i jako taka bardzo pomoże w refaktoryzacji. Mógłbym wyciągnąć tę funkcję, zgiąć tak, jak chcę, aby zgiąć, przenieść ją do innej klasy, jeśli będę musiał, co ułatwi pracę z samą klasą. Ale ogólnie, czy zalecałbyś taką praktykę pisania funkcji podczas pisania/projektowania klas? A może zamiast tego zaleciłbyś użycie wbudowanego obiektu `this`, traktującego wewnętrzne zmienne klasy jako "klasy globalne", nawet jeśli może to wpłynąć na czytelność/zrozumienie/zrozumienie funkcji, jeśli jej rozmiar rośnie, jak to często robi w prawdziwych projektach życiowych? Wreszcie, czy brakuje mi ważniejszych punktów, skupiając się na tym konkretnym problemie związanym ze stylem pisania funkcji? **Dodatek** Widzę zaletę, być może w użyciu jakiegoś pośredniego planu, gdzie parametry funkcji nie są przekazywane do funkcji (funkcja używa obiektu `this`, aby się do nich dostać), ale funkcja nadal zwraca wartości, zamiast aktualizacja `this` obiektu bezpośrednio, i to od wywołującego zależy zaktualizowanie `this` zmiennej. tzn. zmieni to moją "linię zainteresowania" na następujący kod: `$this->greeting = $this->prepGreeting();` i przynajmniej na pierwszy rzut oka będę wiedział, co funkcja ma zwrócić.


title: Jak zbędne powinny być moje testy?

text: To jest coś, z czym często borykam się podczas testowania, ale nigdy nie mogę znaleźć kanonicznej ani rozsądnej odpowiedzi. * * * **Prosty scenariusz** Funkcja `f()`, pobiera plik, przetwarza go i zwraca przetworzony plik. `f()` ma testy jednostkowe, aby sprawdzić, czy działa zgodnie z oczekiwaniami. Aplikacja interfejsu wiersza poleceń (CLI) pobiera ścieżkę pliku jako dane wejściowe i używa `f()` do przetwarzania odpowiedniego pliku. * * * Jak mam przetestować CLI? Przekazanie mu ścieżki i upewnienie się, że obsługuje tę ścieżkę — niezależnie od tego, czy plik istnieje, czy nie — jest logiczne, ale przekazanie tego pliku do `f()` i sprawdzenie wyniku jest dokładnie tym, co robię w testach jednostkowych dla ` f()`. Jest zbędny i dwa razy więcej pracy. Co więcej, utrzymywanie testów, gdy funkcja się zmienia, to znowu dwa razy więcej pracy. Uwaga: `f()` może znajdować się w dowolnym miejscu — na przykład w bibliotece napisanej przez kogoś innego lub jako część samego programu. Próbuję zrozumieć najlepsze praktyki w (nie) nadmiarowym testowaniu funkcjonalności, nie tylko w tym małym przykładzie.


title: Jakiego procesu/wytycznych należy przestrzegać, gdy mam zamiar wycofać kilka metod z moich klas usług w Javie?

text: Mój zespół planuje wycofać kilka metod z określonej biblioteki. Nie chcę ich po prostu usuwać, ale nie chcę zwracać wyników z metod, które mają zostać przestarzałe. Jakich wytycznych/procesów najlepiej przestrzegać?


title: Railsy: uzyskać dane o kolekcji modeli z nowym modelem lub metodą?

text: mieć model `Produkt` z atrybutami `sales`, `views` i muszę uzyskać liczbę sprzedaży/wyświetleń wszystkich produktów, w tym przypadku bardziej poprawne jest zaimplementowanie tych rzeczy jako metody i wywołanie typu `Product.all. sprzedaży” lub stworzyć nowy model „Statystyki” i wdrożyć jako „Stat.products.sales”?


title: Czy konieczne jest typowanie strukturalne w modelu hierarchicznym?

text: > Jest to część serii pytań, które skupiają się na projekcie o nazwie > Projekt Abstrakcji, który ma na celu wyabstrahowanie pojęć używanych w > projektowaniu języka w formie ram. >> Kolejną powiązaną z nim stronę związaną z łatwością obsługi można zobaczyć tutaj. Meta-temat związany z zapytaniem o ramy i odpowiednie > miejsce do publikowania można znaleźć tutaj. Piszę framework, który opisuje koncepcje w statycznych językach wysokiego poziomu (takich jak C#, VB.NET i tak dalej). W ramach tego polega na syntezie struktur opisujących te pojęcia. Jedno pytanie, jakie miałem, dotyczyło tego, co nazywa się typowaniem strukturalnym, które zamierzam zaimplementować za pomocą parametrów typu (konstruktory z parametrami byłyby zdecydowanym dodatkiem). Jest to koncepcja, której nie implementują ani C#, ani VB.NET. Pytanie, które mam dzisiaj, brzmi: czy typowanie strukturalne w modelu hierarchicznym jest konieczne? Jeden mały przykład, o którym mogę pomyśleć, to modele opracowane, które opierają się na wzorcach, ale niekoniecznie mają interfejs do określenia tego wzorca. Jest to przydatne w przypadkach, gdy chcesz użyć kodu dla wielu typów podstawowych bez wspólnego przodka, ale o podobnej strukturze. Jeśli chcesz wyświetlić listę elementów w konsoli za pomocą ich nazwy, musisz napisać jedną metodę dla najniższego wspólnego przodka, który definiuje tę właściwość nazwy. Na przykład osoba, kontrola i typ używają różnych metod. Jeśli zostanie zaimplementowany, wynikowy kod będzie wyglądał mniej więcej tak: public static void DisplayNames<T>(IEnumerable<T> namedItems) gdzie T ma { ///<summary>Zwraca nazwę elementu</summary> string Nazwa { get; } } { foreach (var namedItem w namedItems) Console.WriteLine(namedItem.Name); } '[' i ']' są używane w celu ujednoznacznienia (w przeciwnym razie trudno byłoby odróżnić ciało struktury typu-parametru od struktury interfejsu). Sugestie są mile widziane.


title: Wiele projektów/rozwiązań w studiach wizualnych w podróży

text: Jako jeden programista pracuję nad dużą aplikacją asp.net. Często pracuję jednocześnie nad kilkoma prośbami o zmianę. Na przykład zmiana wymagana w komponencie Finanse i zmiana wymagana w komponencie sprzedaży. Czasami tworzę osobny projekt, aby przechowywać zmiany, a następnie odwoływać się do głównej aplikacji (odniesienie pliku do zestawu). Czy jest to powszechne podejście, czy są jakieś narzędzia/techniki, które to ułatwiają? Na przykład dokonam zmiany w komponencie sprzedażowym, stworzę nowy projekt (SalesChange.sln) i jeśli dokonam zmiany w komponencie Finanse, stworzę nowy projekt o nazwie FinanceChange.sln. FinanceChange.sln i SalesChange.sln odwołują się do MainProject.sln i zostaną ostatecznie zmigrowane do MainProject.sln.


title: Zadawanie pytań technicznych podczas rozmowy kwalifikacyjnej (jako rozmówca)

text: Chciałbym wiedzieć, czy ktoś zadał już pytania techniczne Twojemu rozmówcy. Mówiąc coś w stylu: „No cóż, zadałeś mi kilka pytań technicznych, a teraz, czy masz coś przeciwko, jeśli cię zadam? Jeśli mam dołączyć do Twojej firmy, będziemy ściśle współpracować i chcę się upewnić, że szanuję umiejętności moich współpracowników, tak jak oni szanują moje...". Czy to nie brzmi arogancko? Jestem ciekawy twojej opinii lub doświadczenia (oczywiście jako rozmówca lub ankieter). PS: konto jednorazowe, ponieważ nie chcę, aby ludzie, którzy mnie znają, wiedzieli, że przygotowuję wywiady.


title: Jak mogę zmotywować kierownictwo, aby zezwolić na pracę jako freelancer?

text: Jestem programistą w małej firmie. Czasami otrzymuję od poprzednich pracodawców dodatkową gotówkę za pracę jako freelancer lub za prace dorywcze, które mógłbym wykonywać po godzinach, nie naruszając w żaden sposób mojej pracy na pełny etat. Niestety mój menedżer wyraźnie zabronił mi pracy przy jakichkolwiek projektach pobocznych. Powodem, dla którego mówi, jest to, że jeśli w ogóle mam w życiu jakiś wolny czas, nawet w weekendy, to należy go poświęcić na pracę dla jego firmy. Argumentuję, że weekendy to mój czas, więc powinienem być w stanie robić to, co chcę. Po drugie, poszerzałem swoje umiejętności o różne problemy, których inaczej bym nie zauważył, zamiast po prostu wpatrywać się w ten sam projekt przez cały rok. W rzeczywistości uczyniłoby mnie to bardziej doświadczonym programistą i pomogłoby w mojej pracy na pełny etat. Wygląda na to, że wszyscy inni pracują na boku i zarabiają dodatkowe pieniądze, ale nie chcę ich wyrzucać. Jakiej innej motywacji mógłbym użyć, aby pomóc mojemu szefowi dostrzec, że to nie jest taka zła rzecz?


title: Dlaczego Perforce może być lepszym systemem kontroli wersji?

text: Widziałem, jak niektórzy ludzie kochają Perforce, a niektórzy nienawidzą. Jako użytkownicy lub administratorzy mający doświadczenie z innymi systemami kontroli wersji (bezpłatny plik cookie dla tych z doświadczeniem DVCS [git, Mercurial]), jaki jest główny powód/funkcja, która sprawia, że kochasz Perforce bardziej niż inne systemy kontroli wersji? **Edytuj** : Nie, nie sprzedam Perforce... to tylko część moich bieżących badań nad ofertą DVCS w mojej firmie (zobacz historię moich pytań)


title: Pytanie do wywiadu: Jak zaimplementowałbyś wyszukiwarkę Google?

text: Załóżmy, że w wywiadzie zapytano Cię „Jak zaimplementowałbyś wyszukiwarkę Google?” Jak odpowiedziałbyś na takie pytanie? Mogą istnieć zasoby wyjaśniające, w jaki sposób wdrażane są niektóre elementy w Google (BigTable, MapReduce, PageRank, ...), ale to nie pasuje do wywiadu. Jakiej ogólnej architektury byś użył i jak byś to wytłumaczył w ciągu 15-30 minut? Zacząłbym od wyjaśnienia, jak zbudować wyszukiwarkę, która obsługuje ~100k dokumentów, a następnie rozszerzy to poprzez sharding do około 50 milionów dokumentów, a potem być może kolejny skok architektoniczny/techniczny. To jest widok 20 000 stóp. To, czego chciałbym, to szczegóły - jak właściwie odpowiedziałbyś na to w wywiadzie. Jakich struktur danych użyjesz. Z jakich usług/maszyn składa się Twoja architektura. Jakie byłoby typowe opóźnienie zapytania? A co z problemami z przełączaniem awaryjnym / podziałem mózgu? Itp...


title: Usuwanie treści z usługi

text: Nie jestem do końca pewien, jaka jest prawdziwa praktyka w społeczności programistów. Ale gdy użytkownik usunie zawartość z Twojej usługi (np. usunięcie aktualizacji statusu, jego zdjęcia lub komentarza). Czy rzeczywiście powinienem usunąć je z mojego serwera, czy po prostu go ukryć? Powodem, dla którego o to pytam, jest to, że żyjemy w czasach, w których tworzone przez nas usługi są głodne danych. Dane są najcenniejszym aspektem usługi, którą tworzysz, a zachowanie wszystkiego, co się pojawia, ma kluczowe znaczenie. Jaka jest ogólna praktyka w tego typu sytuacjach? Jakie są twoje rekomendacje?


title: SOLIDNA struktura i projekt aplikacji

text: Jedną z możliwych struktur aplikacji jest rozbicie jej na moduły, takie jak dostęp do danych, rdzeń, usługi, interfejs użytkownika. Teraz, w zależności od tego, jakiego typu ORM używasz, warstwa dostępu do danych będzie miała zestaw jednostek reprezentujących tabele w bazie danych. Warstwa podstawowa będzie miała zestaw jednostek reprezentujących logikę biznesową. Warstwa usług będzie miała zestaw jednostek DTO, z którymi będzie się komunikować z interfejsem użytkownika. I na koniec interfejs użytkownika będzie miał zestaw modeli widoków, których będzie używał w widokach. Teraz, gdy uzyskujemy dostęp do informacji lub przechowujemy je w bazie danych, musimy przekształcać obiekty z jednego typu na inny. Gdy usługa wywołuje rdzeń, musi przekształcić obiekty z jednego typu na inny, a na koniec interfejs użytkownika musi przekształcić DTO w modele widoku. W wielu przypadkach przekształcenie jest prostą czynnością kopiowania właściwości z jednego obiektu do drugiego. Jest to bardzo powtarzalne i czasochłonne zadanie, które generuje duże ilości kodu. Moje pytanie brzmi, czy robię coś złego tutaj. Czy powinienem mieć tylko jeden typ jednostki? Jeśli tak, czy nie sądzisz, że w jednym obiekcie byłoby za dużo informacji do dostępu do danych, logiki biznesowej itp. Czy istnieje szybki sposób kopiowania właściwości między obiektami? Odbicie jest opcją, ale szybko się komplikuje, gdy mamy do czynienia z wykresami obiektów? Wiem, że nie ma srebrnej kuli, aby rozwiązać ten problem, ale musi istnieć kilka dobrych podejść do ręcznego kopiowania właściwości między jednostkami?


title: Nowa praca zdenerwowana?

text: Niedawno przyjąłem nową ofertę pracy jako programista. Docieram tam pierwszego dnia, a ludzie nie angażują się i tak naprawdę nie uśmiechają się. Pod koniec pierwszego tygodnia przejrzeli mój kod i rozerwali go na strzępy, a jeden z programistów powiedział, że spróbują mnie nauczyć, jak lepiej kodować. Opis stanowiska dotyczył niedawnego doświadczenia w obecnych frameworkach, ale nie było tam nic o tym, co będę robił przez połowę czasu, co w jednej minucie wspierałoby starszy system, a w następnej krwawiło. Mogę powiedzieć, że istnieje duże prawdopodobieństwo, że spięłam się z co najmniej jedną osobą, ponieważ mają tendencję do myślenia, że wydajność jest jedyną rzeczą dla kodu i to powinno być oczywiste dla wszystkich. Jeśli kod jest nie do zaakceptowania przez tę osobę, to nie wychodzi (przynajmniej takie odniosłem wrażenie, gdy zobaczyłem ich recenzje kodu). Jeden z deweloperów powiedział mi, że projekt, nad którym pracowała, był skomplikowany do zmiany i że nie zrobiłaby tego w ten sposób. Wywodzę się z założenia, że szybko go rozwijam, Refaktoruj do standardu językowego, gdy jest to praktyczne dla osi czasu, ale co najważniejsze, wyprowadzam go za drzwi bez łamania. Tutaj chodzi o kodowanie w jak najmniejszej liczbie wierszy, najbardziej wydajny kod, oprócz tego, że po prostu to zrobisz (wziąć górę). Co o tym myślicie? 1.) Czy ktoś z was spotkał/pracował już w takiej sytuacji? 2.) Czy są malejące zwroty z konieczności bycia waletem wszystkich zawodów, wspierania starych i rozwijania krwawej krawędzi?


title: Wielowątkowość Pythona i wykorzystanie nowoczesnych procesorów - jakie są minusy?

text: > Szczegóły implementacji CPython: W CPython, dzięki Global Interpreter > Lock, tylko jeden wątek może wykonać kod Pythona na raz (nawet jeśli niektóre biblioteki zorientowane na wydajność mogą obejść to ograniczenie). Jeśli chcesz, aby Twoja aplikacja > lepiej wykorzystywała zasoby obliczeniowe maszyn > wielordzeniowych, zaleca się korzystanie z wieloprocesorowości. Jednak wątkowanie jest > nadal odpowiednim modelem, jeśli chcesz jednocześnie uruchamiać wiele zadań związanych z we/wy >. > -> threading > > multiprocessing to pakiet, który wspiera procesy spawnowania przy użyciu > API podobnego do modułu threading. > -> wieloprocesorowe Wszystkie współczesne procesory PC są wielordzeniowe. Jakie są wady tworzenia nowych procesów zamiast wątków? Jeśli nie są one wystarczająco znaczące, dlaczego w ogóle istnieje moduł wątkowości?


title: Najszybsza biblioteka parsująca XML C++

text: Mam tysiące plików .xml o rozmiarze od 1 MB do 45 MB (bez DTD). Muszę przeanalizować i dalej manipulować tymi plikami XML przed wygenerowaniem oddzielnych plików .xml z wynikami mojego wyrażenia regularnego. Jaka jest najszybsza biblioteka analizująca XML typu open source dla C++? Poza biblioteką parsowania, jakich innych podejść mogę użyć, aby przyspieszyć parsowanie XML?


title: Wieloprocesorowość Pythona z kolejką vs ZeroMQ IPC

text: Jestem zajęty pisaniem aplikacji Pythona przy użyciu ZeroMQ i implementacją odmiany wzorca Majordomo opisanej w ZGuide. Mam brokera jako pośrednika między grupą pracowników a klientami. Chcę przeprowadzić obszerne logowanie dla każdego przychodzącego żądania, ale nie chcę, aby broker marnował na to czas. Broker powinien przekazać to żądanie logowania do czegoś innego. Myślałem o dwóch sposobach: 1. Utworzyć pracowników, które są tylko do logowania i używać transportu IPC ZeroMQ 2. Używać wieloprocesowego przetwarzania z kolejką Nie jestem pewien, który z nich jest lepszy lub szybszy. Pierwsza opcja pozwala mi używać obecnych klas bazowych procesów roboczych, których już używam dla normalnych procesów roboczych, ale druga opcja wydaje się szybsza do zaimplementowania. Poproszę o poradę lub uwagi do powyższego lub ewentualnie inne rozwiązanie.


title: Połącz rejestrację z Twitterem i Facebookiem

text: Chcę mieć funkcję rejestracji/logowania w mojej witrynie za pomocą przycisków „Zaloguj się przez Facebooka” i „Zaloguj się przez Twittera”. Biorąc pod uwagę następujący scenariusz: * Użytkownik A loguje się za pomocą Twittera. * Konto zostaje utworzone. * Użytkownik A wylogowuje się. * Użytkownik A wraca w przyszłym tygodniu i nie pamięta, w czym się zarejestrował (lub po prostu ma ochotę), używając tym razem loginu Facebook. Jak możesz połączyć te konta? Do tej pory są dwie opcje, które mogę wymyślić: - * Cookie (niezawodne) * Wykonaj akcję "logowanie" i "rejestracja". Więc jeśli „zalogują się” przez Facebooka, pojawi się komunikat „Nigdy nie zarejestrowałeś się na tej stronie przez Facebooka. Może używałeś Twittera?” (Ale może wtedy „zarejestrują się” na Facebooku, a wtedy nadal nie mam połączenia z poprzednim kontem na Twitterze)


title: Projekt Open Source wystrojony, ale nie ma dokąd pójść

text: W ciągu ostatnich 2 lat ja i mój kolega zbudowaliśmy aplikację do analizy statystycznej online, używając mieszanki silverlight, wcf i R. Ja (programista c#) napisałem wszystkie rzeczy silverlight i wcf, podczas gdy mój kolega (statystyk) wymyślił statystyki algorytmów i napisał kod R. Teraz uważamy, że ta aplikacja jest dość wyjątkowa - bogata aplikacja statystyk gui online, która jest znacznie bardziej intuicyjna niż wszystkie inne internetowe aplikacje statystyczne, które widziałem. Ale mimo to tak naprawdę nie wiemy, gdzie się udać z projektem, głównie z następujących powodów: 1) To dość skomplikowana sprawa - bez połączenia umiejętności programowania i statystyk trudno byłoby każdemu "dostać się" do projektu i przyczynić się. 2) Zatrzymuje nas brak odpowiedniego miejsca do hostowania strony. Obecnie znajduje się w rodzinnym centrum multimedialnym Windows 7, co nie jest najlepszym miejscem do jego hostowania, ponieważ może przeszkadzać pannie próbującej oglądać Corrie / Friends / Oprah itp. Więc ktoś ma jakieś pomysły, jak to zrobić? Myślę, że moją siłą jest programowanie, a nie marketing, więc pomimo ciężkiej pracy nad tym przez ostatnie kilka lat czuję, że znalazłem się w ślepym zaułku! Ponadto, czy ktoś wie o jakimkolwiek darmowym hostingu Windows dla projektów open source? Gdybym znalazł odpowiednie miejsce na umieszczenie aplikacji, mógłbym poczuć się ponownie pobudzony do całej sprawy. Kod źródłowy znajduje się na codeplex pod adresem: http://silverstats.codeplex.com, podczas gdy aplikacja jest obecnie hostowana na http://silverstats.co.uk Edytuj: aby odpowiedzieć na niektóre z podniesionych kwestii: nie mam żadnych dokumentacji, więc jest to ważny punkt i coś, na co muszę się przyjrzeć. Uważam jednak, że jest łatwy w użyciu - spróbuj sam! Jest oparty na przeciąganiu i upuszczaniu i dość intuicyjny (o ile masz wiedzę na temat statystyk). Jedna uwaga: nie jest skierowana do statystyków! Jest skierowany do osób, które muszą wykonywać statystyki, aby wykonywać swoją pracę (dlatego jest łatwy w użyciu). Osobiście pod względem łatwości użytkowania bije jak Rcmdr! Masz rację, że maniacy R i statystyk będą nadal korzystać z R i SAS i tworzyć swoje skrypty. Tak więc, aby odpowiedzieć na inne pytanie: Czy jest skryptowalny – oczywiście nie dlatego, że podważyłoby to koncepcję łatwości użytkowania, możesz równie dobrze odpalić R i stuknąć… Czy to daje grafikę: tak – wyjście jest ładne i czyste w html z tekstem wyjaśniającym dla ludzi przestraszonych statystykami. Czy jest to zweryfikowane, tak i nie... projekt jest spin-offem z naszego zamkniętego źródła (ale darmowego!) pakietu statystyk o nazwie InVivoStat (google it), który został zbudowany w tym samym celu: ułatwienie statystyk osobom niebędącym statystykami, w tym przypadku naukowcy zajmujący się naukami przyrodniczymi. Skrypty R, których używa InVivoStat, są w pełni zweryfikowane przez GxP z dowodami hostowanymi na stronie InVivoStat. Ten projekt (SilveR) używa tych samych skryptów, więc można argumentować, że wymagana jest odrobina rewalidacji, ponieważ interfejs się zmienił, ale jestem całkowicie przekonany, że skrypty R są poprawne.


title: Rozwój oparty na zachowaniu IRL

text: Czy ktokolwiek z Was wykorzystywał w swoich projektach rozwój oparty na zachowaniu? Koncepcja i narzędzia do tego brzmią świetnie. Ale czy łatwo było to wprowadzić, a potem się tego trzymać? Czy doprowadziło to do znaczących i widocznych pozytywnych rezultatów?


title: najlepszy sposób na „wprowadzenie” OOP/OOD do zespołu doświadczonych inżynierów C++

text: Szukam skutecznego sposobu, który również nie będzie zniewagą, na wprowadzenie koncepcji OOP do istniejących członków zespołu? Moi koledzy z drużyny nie są nowicjuszami w językach OO. Zajmujemy się C++/C# od dłuższego czasu, więc sama technologia jest znajoma. Jednak rozglądam się i bez większego wysiłku (głównie w formie przeglądów kodu) wydaje się, że tworzymy kod C, który akurat znajduje się wewnątrz klas. Nie ma prawie żadnej zasady pojedynczej odpowiedzialności, abstrakcji ani prób minimalizacji sprzężenia, żeby wymienić tylko kilka. Widziałem klasy, które nie mają konstruktora, ale pobierają memset na 0 za każdym razem, gdy są tworzone. Ale za każdym razem, gdy mówię OOP, wszyscy kiwają głową i sprawiają wrażenie, jakby dokładnie wiedzieli, o czym mówię. Znajomość koncepcji jest dobra, ale (niektórzy bardziej niż inni) wydaje się, że bardzo trudno nam je zastosować, jeśli chodzi o realną pracę. Przeglądy kodu były bardzo pomocne, ale problem z przeglądami kodu polega na tym, że pojawiają się dopiero po fakcie, więc niektórym wydaje się, że kończymy na przepisaniu (głównie refaktoryzacja, ale nadal zajmuje dużo czasu) kodu, który właśnie został napisany. Ponadto przeglądy kodu dają informacje zwrotne tylko poszczególnym inżynierom, a nie całemu zespołowi. Bawię się pomysłem zrobienia prezentacji (lub serii) i spróbuję ponownie wywołać OOP wraz z kilkoma przykładami istniejącego kodu, który mógłby zostać napisany lepiej i mógłby zostać zrefaktoryzowany. Mógłbym wykorzystać kilka naprawdę starych projektów, których nikt już nie posiada, więc przynajmniej ta część nie powinna być delikatną kwestią. Czy to jednak zadziała? Jak powiedziałem, większość ludzi robiła C++ od dłuższego czasu, więc przypuszczam, że a) będą siedzieć tam myśląc, dlaczego mówię im rzeczy, które już znają, lub b) mogą to uznać za zniewagę, ponieważ jestem mówiąc im, że nie wiedzą, jak wykonywać pracę, którą wykonywali od lat, jeśli nie od dziesięcioleci. Czy istnieje inne podejście, które dotarłoby do szerszego grona odbiorców niż przegląd kodu, ale jednocześnie nie byłoby karą wykładu? Nie jestem świeżo upieczonym dzieckiem po studiach, które ma utopijne ideały doskonale zaprojektowanego kodu i nie oczekuję tego od nikogo. Powodem, dla którego to piszę, jest to, że właśnie zrobiłem recenzję osoby, która faktycznie miała przyzwoity projekt wysokiego poziomu na papierze. Jeśli jednak zobrazujesz klasy: A -> B -> C -> D, w kodzie B, C i D implementują prawie ten sam interfejs publiczny, a B/C mają jedną funkcję liniową, dzięki czemu najwyższa klasa A robi absolutnie cała praca (od zarządzania pamięcią, parsowania ciągów, negocjacji ustawień...) głównie w 4 metodach mongo i, dla wszystkich celów i celów, wywołuje prawie bezpośrednio w D. **Aktualizacja:** Jestem kierownikiem technicznym( 6 miesięcy w tej roli) i mają pełne wsparcie kierownika grupy. Pracujemy nad bardzo dojrzałym produktem, a koszty utrzymania zdecydowanie dają się poznać.


title: Czy to możliwe, aby nauczyć się Pythona, budując sensowne aplikacje i pomijając czytanie ciężkich książek?

text: Planuję się nauczyć **Pythona**. Znam html, javascript, vb .net, ado .net, ms sql i trochę c#. Więc mam dobrą praktyczną wiedzę z zakresu programowania i potrafię pisać różne aplikacje desktopowe i webowe. Wcześniej uczę się tych języków, czytając książki od strony 1 do końca. Następnie zbuduj sensowne aplikacje. Zazwyczaj będę używał książek z początku Wrox lub Sam Unleashed. A każda z tych książek przekroczy 900++ stron. Uważam, że ten sposób uczenia się języka programowania jest powolny i męczący. Tak więc, tym razem do nauki języka Pythona, moim zamiarem jest zrobienie tego w inny sposób. Nie zamierzam czytać książki od deski do deski, ale po prostu użyję kilku wstępów online do samouczków Pythona. Chcę budować sensowne aplikacje od razu od minimalnej znajomości Pythona i zmagać się ze wszystkimi drogami do ukończenia aplikacji. Oczywiście skonsultuję się z SO i innymi witrynami, aby rozwiązać moje problemy z Pythonem. Czy ten sposób uczenia się Pythona jest opłacalny, czy powinienem trzymać się czytania książek od deski do deski, zanim zbuduję jakąkolwiek sensowną aplikację? Znaczące aplikacje oznaczają tutaj aplikacje ze świata rzeczywistego, takie jak witryna e-commerce, blog, konwerter obrazów (aplikacja komputerowa), menedżer haseł (aplikacja komputerowa), system fakturowania (aplikacja komputerowa) i odtwarzacz multimedialny (aplikacja komputerowa). Dla twojej informacji, stworzyłem te znaczące aplikacje w vb .net.


title: Jak podchodzisz do projektowania klas w obiektach OOP?

text: Kiedy próbuję zaprojektować rozwiązanie OO, zazwyczaj używam modelowania CRC, w którym wymieniam nazwy klas (rzeczowniki), co robią (czasowniki) i jak współpracują z innymi klasami. Ten blog ma następującą rzecz do powiedzenia o tym podejściu rzeczownikowo-czasownikowym… To podejście, które będę nazywać „rzeczownikiem i czasownikiem”, jest tak ograniczone, że ośmielę się nazwać to uszkodzeniem mózgu… Moje pytanie brzmi: czy istnieje lepsza technika modelowania do stosowania podejścia OO?


title: Wybierz wysiłek w projektowaniu kodu lub lenistwo w świecie Banku

text: Pracowałem przez dwa lata w świetnym Banku Inwestycyjnym. Zrobiłem kilka projektów technicznych z chęcią stworzenia kodu jak najbardziej zoptymalizowanego, z poszanowaniem przyjętych dobrych wzorców projektowych, zasady SOLID, prawa demeter i unikania wszelkiego rodzaju duplikatów kodów... Gdy dostawa w produkcji => zero błędów, wszystko się wydarzyło zgodnie z oczekiwaniami. Jednak większość programistów zgłosiła się do mnie, aby sprecyzować, że cały mój kod jest zbyt skomplikowany, aby można go było czytać ze zrozumieniem. Słuchałem na przykład: "zrób trochę if i instanceof, zapomnij o polimorfizmie, aby bardzo łatwo było naprawić awaryjne błędy produkcyjne". Nie wolałem odpowiadać ...... Wiedząc, że ci programiści wcale nie są ciekawi, odmawiają zrozumienia dobrego projektu (na przykład 90% programistów nie wie, co to jest wzorzec strategii i tworzy kod proceduralny i nigdy oo-projektować, bo chcą, jak mówili, prostoty), moi kierownicy projektów powiedzieli mi, że naprawdę jestem w złym kierunku i jestem zbyt idealistą dla świata Banku. Co byś mi doradził? Czy powinienem podtrzymywać pragnienie naprawdę dobrego kodu, czy też dostosować mnie do większości programistów, którzy, powtarzam, nie są naprawdę interesujący pod względem kodu projektowego, który według mnie jest całym pięknem naszej pracy programistycznej. A może wręcz przeciwnie, czy powinni nauczyć się podstawowych zasad OO i najlepszych praktyk, aby dostosować się do mojego kodu?


title: Czy liczba problemów (błąd i funkcja) jest dobrą miarą projektu?

text: Jeden z projektów, nad którymi pracuję, mierzony jest liczbą zagadnień. Kierownictwo podało arbitralne (o ile wiem) pomiary, że w naszym systemie śledzenia problemów nie potrzebujemy więcej niż X błędów i Y funkcji. To wydaje się być błędnym podejściem, ale nie mogę znaleźć żadnych pism na ten temat.


title: Czy zespół korzystający ze Scrum może osiągnąć wiedzę na temat współtworzenia i domeny, jeśli obsługuje wiele domen SW?

text: Pracowałem w zespole, który rozwijał i wspierał narzędzia do praktyk SW. Narzędzia te zostały napisane (i będą pisane) w wielu językach programowania. Według Scrum, dana historia **może być realizowana przez kilku członków zespołu** (zgodnie z tym, co wiem). Kiedy jest zorganizowany w zespole, który jest zorientowany na określoną domenę/framework SW (na przykład .NET), wydaje się to możliwe, a nawet rozsądne. Ale jeśli Twój zespół musi pisać w _Pythonie, C#, Javie itp._ dla kilku narzędzi, niektóre o różnej orientacji (DB/UI), czy jest to możliwe? Jak w tym przypadku należy dokonać „podziału pracy”? Dziękuję.


title: Wybór restrykcyjnej licencji, aby zachować zgodność, ale nie egzekwowanie jej

text: Jestem bardzo ciekaw tego: powiedzmy, że musisz używać GPL w swojej bibliotece, ponieważ niektóre zależności jej używają lub (jeśli twoja biblioteka jest rozwidleniem) biblioteka nadrzędna używa GPL. Teraz GPL nie działa dobrze z kilkoma ważnymi licencjami open source, co oznacza, że niektórzy użytkownicy po prostu nie mogą używać twojej biblioteki z powodu problemów licencyjnych, co nikomu nie pomaga Opcja, z którą się bawiłem, nadal używa GPL w celu zachowania zgodności z zależnościami, ale mówię użytkownikom, że nie będę wymuszać jej w stosunku do oprogramowania open source lub (jeśli to zbyt szerokie) oprogramowania, które korzysta z licencji open source, ale nie do uzupełnienia, takich jak Apache, MPL, CC itp. Czy będą jakieś konsekwencje prawne robienia tego? Czy naraziłoby to moich użytkowników na ryzyko prawne?


title: Jak zaprojektować 2 wtyczki, które mają wspólny składnik?

text: Mam obiekt, który pobiera dane i wypluwa przekształcone dane wyjściowe o nazwie `IBaseItem`. Mam również dwa parsery, `IParserA` i `IParserB`. Te parsery przekształcają dane zewnętrzne (odpowiednio w formacie dataA i dataB) do formatu używanego przez mój `IBaseItem` (baseData). Chcę stworzyć 2 systemy, jeden współpracujący z dataA i jeden współpracujący z dataB. Umożliwią użytkownikowi wprowadzenie danych i dopasowanie ich do odpowiednich wtyczek/implementacji oraz przekształcenie danych do outData. Chcę sam pisać tych policjantów ruchu, ale inni ludzie dostarczają parsery i logikę baseitem, i jako taki implementuję te elementy jako wtyczki (stąd użycie interfejsów). Inni programiści mogą wybrać implementację jednego lub obu parserów. **P:** Jak powinienem uporządkować sposób, w jaki podstawowe elementy i parsery są kojarzone, przechowywane i ładowane do każdego z moich programów? _Relacje klasowe:_ ![tutaj podaj opis obrazka](http://i.stack.imgur.com/w9adn.png) **Co próbowałem:** Początkowo myślałem, że dla każdego z moi 2 policjanci drogowi, z których każdy ma w sobie parser i element bazowy. Jednak powielanie logiki elementu podstawowego nie wydaje się właściwe (zwłaszcza jeśli zmieni się logika elementu podstawowego). Potem pomyślałem, że wszystkie podstawowe elementy mogą mieć własną bibliotekę dll, a następnie jakoś kojarzą parsery i podstawowe elementy (przewodniki?), Ale nie wiem, czy implementacja identyfikatora/skojarzenia narzutu dodaje zbyt wiele cery.


Witam Jaka jest dobra metodologia dla małego 2-osobowego projektu? Waha się od 20-40 godzin. To głównie małe strony internetowe. Chcę podejść do tego jako programista, ale Agile i inne metodologie wydają się zbyt duże dla tego, o co mi chodzi. Dziękuję


title: testy jednostkowe dla parsera csv

text: Jakich testów powinienem użyć do testów jednostkowych parsera csv? Mam prosty parser csv w C# i chcę mieć pewność, że mam dobre pokrycie testami jednostkowymi wszystkich typowych (i nietypowych) przypadków brzegowych. Jakich testów należy użyć, aby zidentyfikować potencjalne problemy i przypadki graniczne?


title: Nowe słowo kluczowe „opóźnienie” dla JavaScript

text: Miałem świetny pomysł na nowe słowo kluczowe javascript „delay”, ale nie wiem, co mogę zrobić, aby dostosować je do nowej specyfikacji. Chcę też wiedzieć, co o tym myślicie i czy jest to w ogóle realistyczne. ## Co oznacza słowo kluczowe `delay` ? Słowo kluczowe `delay` nie robi nic więcej poza zatrzymaniem wykonywania bieżącego stosu i natychmiastowym przejściem do następnego "zadania" w kolejce. Ale to nie wszystko! Zamiast odrzucać stos, dodaje go na koniec kolejki. Po wykonaniu wszystkich "zadań" przed ich wykonaniem, stos kontynuuje wykonywanie. ## Do czego to jest dobre? „opóźnienie” może sprawić, że kod blokujący będzie nieblokujący, podczas gdy nadal wygląda jak kod synchroniczny. Krótki przykład: setTimeout(function(){ console.log("dwa"); },0); console.log("jeden"); opóźnienie; //ponieważ aktualnie w kolejce znajduje się inne zadanie, wykonaj to zadanie przed kontynuowaniem console.log("trzy"); //Wyjścia: jeden, dwa, trzy To proste słowo kluczowe pozwoliłoby nam stworzyć synchronicznie wyglądający kod, który za kulisami jest asynchroniczny. Na przykład używanie modułów node.js nie byłoby już niemożliwe do użycia w przeglądarce bez sztuczek. Z takim słowem kluczowym byłoby tyle możliwości! Czy ten wzór jest przydatny? Co mogę zrobić, aby wprowadzić to do nowej specyfikacji ECMAscript? Uwaga: zadałem to wcześniej na Stack Overflow, gdzie zostało zamknięte.


title: Śledzenie wymagań/problemów podobne do arkusza kalkulacyjnego online

text: Czy istnieje oprogramowanie do śledzenia wymagań/problemów, które jest podobne do arkusza kalkulacyjnego Google? Mamy Fogbugz, ale uważam, że jest cięższy i wolniejszy niż zwykły arkusz kalkulacyjny. Czy istnieje alternatywa Fogbugz, która jest - szybka - może wyświetlać problemy/wymagania jako arkusz kalkulacyjny (at) i umożliwia edycję w miejscu - obsługuje struktury drzewa (gdzie problem może mieć problemy podrzędne)? Jest to wymagane w przypadku małego projektu. Będzie 2 programistów i 1-2 innych użytkowników. Domyślam się, że tylko jeden użytkownik będzie go aktywnie utrzymywał. AKTUALIZACJA Nie twierdzę, że arkusz kalkulacyjny jest lepszy niż Fogbugz lub podobne narzędzia. W rzeczywistości szukam narzędzia, które jest podobne do Fogbugz i może zastąpić arkusz kalkulacyjny, ale szybsze niż Fogbugz i ma dodatkową funkcję (tryb tabelaryczny). Chciałbym znaleźć narzędzie, które może działać w trybie przypominającym tabelę (jeden wiersz na wydanie), ale ma bogaty zestaw funkcji (podobnie jak Fogbugs i JIRA). Uważam, że Fogbugz (i podobne narzędzia) są niewygodne, ponieważ muszę wejść do formularza internetowego, aby cokolwiek edytować. Edycja lokalna (gdy problemy są wyświetlane jako tabela) byłaby znacznie szybsza.


title: Dodawanie testów jednostkowych do starszego, zwykłego projektu C

text: Tytuł mówi wszystko. Moja firma ponownie wykorzystuje starszy projekt oprogramowania układowego dla mikrokontrolera, napisany całkowicie w zwykłym C. Są części, które są oczywiście błędne i wymagają zmiany, a pochodzące z tła C#/TDD Nie podoba mi się pomysł losowej refaktoryzacji rzeczy z brak testów, które zapewniłyby nas, że funkcjonalność pozostaje niezmieniona. Zauważyłem również, że trudne do znalezienia błędy były wprowadzane w wielu przypadkach poprzez najmniejsze zmiany (co, jak sądzę, zostałoby naprawione, gdyby zastosowano testowanie regresji). Należy bardzo uważać, aby uniknąć tych błędów: trudno jest śledzić kilka globalnych elementów wokół kodu. Podsumowując: * Jak dodać testy jednostkowe do istniejącego, ściśle powiązanego kodu przed refaktoryzacją? * Jakie narzędzia polecacie? (mniej ważne, ale nadal miło wiedzieć) Nie jestem bezpośrednio zaangażowany w pisanie tego kodu (odpowiadam za aplikację, która będzie współdziałać z urządzeniem na różne sposoby), ale byłoby źle, gdyby pozostawiono dobre zasady programowania, gdyby tam była szansa, że można je wykorzystać.


title: Umowa licencyjna aplikacji Facebook i ograniczenia: Czego nie mogą zrobić, niż moja aplikacja internetowa?

text: Napisałem fajną małą aplikację internetową (w Javie/GWT/JS) i eksperymentowałem z pomysłem udostępnienia jej również za pośrednictwem Facebooka jako aplikacji Facebooka. Po spędzeniu trochę czasu na czytaniu dokumentacji programistów Facebooka, wydaje mi się, że mogę po prostu utworzyć aplikację Facebook, aby wskazać dowolny adres URL i użyć go jako aplikacji/płótna. Osiąga to poprzez `iframe`s. **Więc moim wstępnym planem jest skierowanie go na moją (istniejącą) aplikację internetową, abym nie musiał jej całkowicie pisać od nowa.** Ale wtedy pomyślałem: Facebook **musi** regulować, co różne rzeczy _można_ zrobić za pomocą aplikacji Facebooka, a czego aplikacja _nie_ może_ zrobić. Na przykład nie wyobrażam sobie, żebym mógł wskazać aplikację Facebooka, aby wskazywała na adres URL aplikacji internetowej, która akceptuje płatności e-commerce (co całkowicie omija Facebooka i nie pozwala im odciąć się od transakcji e-commerce! ). Nie wyobrażam sobie również, aby Facebook pozwalał programistom na wskazywanie ich aplikacji Facebooka na _dowolny stary adres URL_ bez jakiegoś skanu, w przeciwnym razie otworzyłby Facebooka na okropności każdego zagrożenia bezpieczeństwa znanego ludzkości. Wiem na pewno, że kiedy piszesz natywną aplikację na iOS i umieszczasz ją w Apple App Store, Apple faktycznie skanuje twój kod źródłowy pod kątem naruszeń ich umowy EULA. Więc moje pytanie: **czy Facebook robi to samo?** Jeśli tak, jakie są ich warunki dotyczące tego, czego aplikacja Facebooka może/nie może zrobić? Zaskakująco, nie mogę tego nigdzie znaleźć!! Z góry dziękuję!


title: Jak zbliżyć ten projekt do właściwego DDD?

text: Od kilku dni czytam o DDD i potrzebuję pomocy przy tym przykładowym projekcie. Wszystkie zasady DDD sprawiają, że jestem bardzo zdezorientowany tym, jak mam cokolwiek budować, gdy obiekty domeny nie mogą pokazywać metod warstwie aplikacji; gdzie jeszcze zaaranżować zachowanie? Repozytoria nie mogą być wstrzykiwane do jednostek, a zatem same jednostki muszą pracować nad stanem. Następnie jednostka musi wiedzieć coś jeszcze z domeny, ale inne obiekty encji też nie mogą być wstrzykiwane? Niektóre z tych rzeczy mają dla mnie sens, ale niektóre nie. Nie znalazłem jeszcze dobrych przykładów, jak zbudować całą funkcję, ponieważ każdy przykład dotyczy zamówień i produktów, powtarzając w kółko inne przykłady. Najlepiej uczę się, czytając przykłady i próbowałem zbudować funkcję, korzystając z informacji, które zdobyłem do tej pory o DDD. Potrzebuję twojej pomocy, aby wskazać, co robię źle i jak to naprawić, najlepiej z kodem, ponieważ „nie zalecałbym robienia X i Y” jest bardzo trudne do zrozumienia w kontekście, w którym wszystko jest już niejasno zdefiniowane. Jeśli nie mogę wstrzyknąć jednostki do innej, łatwiej byłoby zobaczyć, jak zrobić to poprawnie. W moim przykładzie są użytkownicy i moderatorzy. Moderator może zablokować użytkowników, ale z zasadą biznesową: tylko 3 dziennie. Próbowałem ustawić diagram klas, aby pokazać relacje (kod poniżej): ![tutaj wpisz opis obrazka](http://i.stack.imgur.com/lVonP.png) interface iUser { funkcja publiczna getUserId( ); funkcja publiczna getUsername(); } klasa Użytkownik implementuje iUser { protected $_id; chroniona $_nazwa użytkownika; funkcja publiczna __construct(UserId $user_id, Username $username) { $this->_id = $user_id; $this->_username = $username; } funkcja publiczna getUserId() { return $this->_id; } public function getUsername() { return $this->_username; } } class Moderator extends User { protected $_ban_count; chroniony $_last_ban_date; funkcja publiczna __construct(UserBanCount $ban_count, SimpleDate $last_ban_date) { $this->_ban_count = $ban_count; $this->_last_ban_date = $last_ban_date; } public function banUser(iUser &$user, iBannedUser &$banned_user) { if (! $this->_isAllowedToBan()) { throw new DomainException('Nie możesz dzisiaj zablokować większej liczby użytkowników.'); } if (data('d.m.Y') != $this->_last_ban_date->getValue()) { $this->_ban_count = 0; } $this->_ban_count++; $date_banned = data('d.m.Y'); $expiration_date = date('d.m.Y', strtotime('+1 tydzień')); $banned_user->add($user->getUserId(), nowy SimpleDate($date_banned), nowy SimpleDate($expiration_date)); } protected function _isAllowedToBan() { if ($this->_ban_count >= 3 AND date('d.m.Y') == $this->_last_ban_date->getValue()) { return false; } zwróć prawdę; } } interfejs iBannedUser { funkcja public add(UserId $user_id, SimpleDate $date_banned, SimpleDate $expiration_date); funkcja publiczna remove(); } klasa BannedUser implementuje iBannedUser { protected $_user_id; chronione $_date_banned; chroniony $_data_wygaśnięcia; funkcja publiczna __construct(UserId $user_id, SimpleDate $date_banned, SimpleDate $expiration_date) { $this->_user_id = $user_id; $this->_date_banned = $date_banned; $this->_expiration_date = $expiration_date; } funkcja publiczna add(UserId $user_id, SimpleDate $date_banned, SimpleDate $expiration_date) { $this->_user_id = $user_id; $this->_date_banned = $date_banned; $this->_expiration_date = $expiration_date; } public function remove() { $this->_user_id = ''; $this->_date_banned = ''; $this->_expiration_date = ''; } } // Gromadzi obiekty $user_repo = new UserRepository(); $zły_użytkownik = $user_repo->findById(123); $moderator_repo = nowy Repozytorium Moderatora(); $moderator = $moderator_repo->findById(1337); $banned_user_factory = nowy BannedUserFactory(); $banned_user = $banned_user_factory->build(); // Wykonuje ban $moderator->banUser($evil_user, $banned_user); // Zapisuje obiekty do bazy danych $user_repo->store($evil_user); $moderator_repo->store($moderator); $banned_user_repo = nowy BannedUserRepository(); $banned_user_repo->store($banned_user); Czy encja Użytkownik powinna mieć pole `'is_banned'', które można sprawdzić za pomocą `$user->isBanned();`? Jak usunąć bana? Nie mam pojęcia.


title: Dlaczego bitbucket jest popularny w Europie Wschodniej?

text: Patrzyłem na trendy Google dla bitbucket i github i wygląda na to, że bitbucket prowadzi github w Rumunii, Bułgarii i na Łotwie. Dlaczego tak jest? Czy są ku temu jakieś historyczne powody?


title: Czym jest cykl T&R?

text: W ofercie pracy widziałem następujące rzeczy: „Od analityka biznesowego oczekuje się określenia odpowiedniej strategii IT, potencjalnych rozwiązań IT oraz wsparcia w zgłoszeniu do cyklu T&R”. Czy ktoś wie, czym jest cykl T&R? Nigdy o tym nie słyszałem, a google nie pomaga.


title: Jeśli używam Ruby Migrations, czy muszę używać reszty Ruby on Rails?

text: Obecnie próbuję opracować strategię migracji baz danych dla mojej organizacji. Obejmuje to wprowadzanie skryptów bazy danych do kontroli źródeł, zarządzanie wersjami, zarządzanie wydaniami do kontroli jakości / produkcji, zarządzanie rozgałęzieniami i łączeniem różnych gałęzi wydań itp. Ruby Migrations wydaje się oferować rozwiązania wielu z tych problemów. Ale patrząc na dokumentację Ruby on Rails, nie jest dla mnie jasne, czy Ruby Migrations można oddzielić od reszty frameworka. Pracuję głównie w sklepie .NET, ale z wieloma innymi technologiami i wieloma platformami DBMS (SQL Server, Oracle w różnych wersjach). Rubiego w ogóle nie ma w naszym portfolio i nie planujemy go używać. Gdybym miał używać Ruby Migrations, byłby to jedyny element frameworka Ruby on Rails, którego chcielibyśmy użyć. Czy migracje Ruby mogą być efektywnie wykorzystywane do zarządzania zmianami w bazie danych niezależnie od reszty frameworka Ruby on Rails? Czy są jakieś dokumenty lub artykuły opisujące ten przepływ pracy? (Tak, wiem, że istnieją inne opcje, takie jak Liquibase, ale za pomocą tego pytania próbuję dowiedzieć się o Ruby Migrations.)


title: Jak Python kompiluje swój kod w C?

text: Czytałem, że niektóre konstrukcje Pythona są bardziej wydajne, ponieważ są skompilowane w C. https://wiki.python.org/moin/PythonSpeed/PerformanceTips Niektóre z użytych przykładów to map() i filter(). Zastanawiałem się, jak Python jest w stanie to zrobić? Jest ogólnie interpretowany, więc w jaki sposób część kodu jest kompilowana, podczas gdy inny jest interpretowany - i to w innym języku? Dlaczego po prostu nie skompilować całości?


title: Czy programista powinien wiedzieć, jak to zrobić?

text: Jestem programistą stron internetowych. Zajmuję się tworzeniem wszelkiego rodzaju witryn i aplikacji internetowych. To dla mnie bardzo dziwne, że wielu klientów nie zna różnicy między web developerem a slicerem. Chcą po prostu "dać ci PSD" i oczekują, że dasz im stronę internetową z zapleczem DB i tak dalej... Pytam tylko: czy mylę się w moim myśleniu? Oczywiście programista WWW MUSI znać html i css, ale nie sądzę, że powinien pokroić PSD i wykonać całą pracę, jaką może wykonać guru css... Chciałbym usłyszeć twoje opinie na ten temat.


title: Jakie jest znaczenie 10 znaków w tym poście wujka Boba?

text: W tym wpisie na blogu autorstwa Wujka Boba http://blog.8thlight.com/uncle-bob/2012/04/20/Why-Is-Estimating-So-Hard.html Autor podaje możliwe rozwiązanie problemu. Pisze „Spróbuj tego. Podziel długi ciąg tekstu na kolumny o długości 10 znaków. Za każdym razem, gdy łamiesz linię, zapisz pozycję łamania i dlaczego zdecydowałeś się użyć tej pozycji”. Problem polega na podzieleniu adresu na 13 kolumn znaków, więc gdzie 10 wchodzi w grę? A może używa tego jako kolejnego przykładu niezwiązanego z gettysburskim? Chciałbym przedstawić to mojemu zespołowi w prezentacji, którą mam wkrótce zrobić. Zamierzam opisać post, opisać problem i poprosić członków mojego zespołu o wycenę. Po tym, jak przejdę do wyjaśnienia pozostałych przesłanek, dlaczego szacunki są często przesadzone. Zapraszam do zaoferowania sugestii, w jaki sposób mogę zrobić dobrą prezentację. Większość z nich mogę sobie wyobrazić, ale pod koniec wydaje mi się, że jest lekki. Po krótkiej ankiecie skupiam się na problemie oszacowania niewłaściwej rzeczy, a następnie proponuję rozwiązanie.


title: Jak mogę ocenić znajomość języka HTML/CSS kandydata podczas rozmowy kwalifikacyjnej?

text: Próbuję określić kilka dobrych pytań do rozmowy kwalifikacyjnej, aby ocenić zdolność osób przychodzących do pracy w HTML/CSS, jednak ten temat jest bardzo szeroki i nie jestem pewien, jakie pytania mogę zadać, aby właściwie ocenić czyjś HTML/ Znajomość CSS. Jakie pytania mogę zadać, aby ocenić umiejętności kandydata w języku HTML/CSS podczas rozmowy kwalifikacyjnej? Idealnie chciałbym zadać kilka pytań, a następnie dać im prawdziwy scenariusz do walki.


title: Jak znaleźć najkrótszą ścieżkę między dwoma podwykresami większego wykresu?

text: Pracuję z ważonym, nieskierowanym multigrafem (pętle są niedozwolone; większość połączeń węzłów ma krotność 1; kilka połączeń węzłów ma krotność 2). Muszę znaleźć najkrótszą drogę pomiędzy dwoma podwykresami tego wykresu, które się na siebie nie nakładają. Nie ma innych ograniczeń dotyczących tego, które węzły powinny być używane jako punkty początkowe/końcowe. Krawędzie mogą być selektywnie usuwane z grafu w określonych momentach (jak wyjaśniłem w moim poprzednim pytaniu), więc możliwe jest, że dla dwóch danych podgrafów nie będzie możliwości ich połączenia. Jestem prawie pewien, że słyszałem wcześniej o algorytmie do tego, ale nie pamiętam, jak się to nazywa, a moje wyszukiwanie w Google ciągów takich jak „najkrótsza ścieżka między podgrafami” nie pomogło. Czy ktoś może zaproponować bardziej efektywny sposób na zrobienie tego niż porównywanie najkrótszych ścieżek między wszystkimi węzłami w jednym podgrafie ze wszystkimi węzłami w drugim podgrafie? Albo chociaż powiedz mi nazwę algorytmu, żebym mógł sam go sprawdzić? Na przykład, jeśli mam poniższy wykres, węzły zakreślone na czerwono mogą być jednym podwykresem, a węzły zakreślone na niebiesko mogą być innym. Wszystkie krawędzie miałyby dodatnie wagi całkowite, chociaż nie są pokazane na obrazku. Chciałbym znaleźć każdą ścieżkę, która ma najkrótszy całkowity koszt, o ile zaczyna się w czerwonym węźle i kończy w niebieskim węźle. Uważam, że oznacza to, że nie można ignorować określonych pozycji węzłów i wag krawędzi. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/d568B.png) (To tylko przykładowy wykres, który wziąłem z Wikimedia i narysowałem, a nie mój rzeczywisty problem.)


title: Projektowanie oprogramowania a projektowanie produktów fizycznych

text: Mam kilka pytań, na które muszę odpowiedzieć, aby przygotować się do egzaminu, a to właściwie nie jestem pewien, na czym polega wyraźna różnica: „Wyjaśnij różnicę między projektowaniem oprogramowania a projektowaniem produktów fizycznych” Mam na ten temat opinię, ale im więcej pomyśl o tym, tym bardziej wydaje się, że nie ma żadnej prawdziwej różnicy, z wyjątkiem tego, że narzędzia i formuły używane podczas tworzenia fizycznych przedmiotów zostały ustalone setki lat temu, a heurystyki/modele istnieją od zawsze. Pomyślałem też, że kiedy już zaprojektujesz łyżkę i ją wykonasz, nie ewoluuje ona z czasem, spełnia swoje wymagania i to tyle, podczas gdy w przypadku oprogramowania nowe wymagania pojawiają się cały czas, więc musisz wziąć pod uwagę pewne cechy jakościowe w tym szacunek. To jest z mojej klasy architektury oprogramowania, jeśli potrzebujecie kontekstu. Jakie są różnice między projektowaniem oprogramowania a projektowaniem fizycznym i czy moja odpowiedź jest chybiona?


title: Czy mogę mieć rzeczywisty przykład wykorzystania modułu skryptów Spring w Twojej aplikacji Java?

text: Framework Spring obsługuje użycie języków skryptowych (w szczególności JRuby, Groovy i BeanShell), dzięki czemu skrypt w dowolnym z nich może wywoływać kod Java i vice versa. Czytałem, że możliwe wykorzystanie tej funkcji jest wtedy, gdy niektóre moduły wymagają częstych zmian i pozwoliłoby to na modyfikację aplikacji bez konieczności jej ponownego wdrażania. Próbowałem wyobrazić sobie możliwe użycie, ale brzmi to dla mnie zbyt niejasno. Zwykle kojarzę rzeczy, które mogą się zmienić z konfiguracją, danymi lub wprowadzeniem nowej funkcji w aplikacji, ale nie z istniejącym modułem, którego zachowanie może się często zmieniać. Podsumowując: kiedy skorzystałeś ze skryptów Springa, a przynajmniej jaki byłby realistyczny, konkretny przykład?


title: Jak języki czysto funkcjonalne radzą sobie z modułowością?

text: Pochodzę ze środowiska obiektowego, gdzie nauczyłem się, że klasy są lub przynajmniej mogą być używane do tworzenia warstwy abstrakcji, która pozwala na łatwe przetwarzanie kodu, który może być następnie użyty do tworzenia obiektów lub być używany w dziedziczeniu. Na przykład mogę mieć klasę zwierząt, z której dziedziczą koty i psy i takie, że wszystkie dziedziczą wiele takich samych cech, a z tych podklas mogę tworzyć obiekty, które mogą określać rasę zwierząt, a nawet nazwę z tego. Lub mogę użyć klas do określenia wielu wystąpień tego samego kodu, który obsługuje lub zawiera nieco inne rzeczy; jak węzły w drzewie wyszukiwania lub wiele różnych połączeń z bazą danych, a co nie. Ostatnio przechodzę do programowania funkcjonalnego, więc zacząłem się zastanawiać: jak czysto funkcjonalne języki radzą sobie z takimi rzeczami? To znaczy języki bez żadnej koncepcji klas i obiektów.


title: Dostęp do danych dla aplikacji komponowalnych

text: Zastanawiam się, czy ktoś może podzielić się swoimi przemyśleniami, doświadczeniem i wskazówkami, jak podejść do warstwy dostępu do danych dla aplikacji komponowalnej? Przez aplikację komposowalną rozumiem aplikację z warstwą domenową złożoną z modułów. Celem jest uczynienie aplikacji wysoce rozszerzalną poprzez „podłączenie” dodatkowych (lub zamiennych) modułów. Każdy moduł zawiera (i izoluje) zestaw powiązanych funkcji. Moim dylematem jest właściwe podejście do warstwy dostępu do danych, aby wspierać tę kompozycyjność (modularność), jednocześnie zapewniając izolację od wewnętrznej bazy danych. Ponieważ każdy „moduł” może implementować własny zestaw obiektów domeny, tak naprawdę nie ma możliwości, aby zobaczyć działanie ORM, takiego jak EF, chyba że po prostu utworzę jeden mega kontekst danych lub wprowadzę zmiany w warstwie dostępu do danych za każdym razem, gdy wprowadzany jest nowy moduł (co nie jest możliwe, jeśli moduł został dodany przez firmę zewnętrzną lub jako rozszerzenie po wdrożeniu). Co jest warte, jest to aplikacja na skalę korporacyjną z bazą danych zawierającą ponad 200 tabel i mnóstwo sproc, udfs itp. Jakimi radami możesz się podzielić? **AKTUALIZACJA** Potwierdzam dzisiaj, że będziemy używać starszego magazynu danych dla rozwiązania, które wykorzystuje procedury składowane i funkcje zdefiniowane przez użytkownika dla większości operacji dostępu do danych. Mamy nadzieję, że w miarę upływu czasu odejdziemy od tego, ale budżet i harmonogram projektu dyktują, jak budujemy na istniejących bazach danych. Czy to zmienia twoje myśli?


title: Jak zastosować programowanie dynamiczne do problemów optymalizacyjnych z dwoma ograniczeniami?

text: Załóżmy, że masz zbiór klocków, każdy o określonej wysokości i określonej wadze. Na przykład: Przykładowe wejście: (190, 190) (120, 40) (100, 10) (90,130) (70, 40) (60, 70) (30, 30) (10, 90) Przykładowe wyjście: 4 Chcesz aby znaleźć maksymalną liczbę bloków, które można ułożyć, z dwoma ograniczeniami: każdy blok musi być lżejszy niż ten pod nim i musi być również krótszy niż ten pod nim. Jak to rozwiązujesz? Moje podejście polegało na rozwiązaniu go mniej więcej jak problem z plecakiem. Zamawiam klocki od lekkich do cięższych i zaczynam od końca tablicy. Następnie dla każdego bloku, który rozważam, znajduję maksimum między ułożeniem tego bloku a jego brakiem i zwracam go. Oto kod w języku C: int maxPile(Blocks array[], int block, int maxHeight, int maxWeight){ /* bazowy przypadek, w którym pozostał tylko 1 blok do rozważenia */ if (block==0){ if ((array[0 ].height < maxHeight) && (array[0].weight < maxWeight)) return 1; w przeciwnym razie zwróć 0; } /*przypadek, w którym bieżący blok może być ułożony w stos, sprawdź max między stosami lub nie*/ if ((tablica[blok].height < maxHeight) && (tablica[blok].weight < maxWeight)) return max(1+maxPile (tablica,blokk-1,tablica[blok].height,tablica[blok].waga),maxPile(tablica,blok-1,maxHeight,maxWeight)); /*przypadek, w którym bieżący blok nie może być ułożony w stos, więc przejdź do następnego*/ w przeciwnym razie return maxPile(array,block-1,maxHeight,maxWeight); } Powyższy algorytm wydaje się poprawnie rozwiązać problem. Problemem, jak można się domyślić, są nakładające się na siebie podproblemy, więc złożoność jest wykładnicza. Zwykłym sposobem rozwiązania tego problemu jest programowanie dynamiczne, ale trudno mi je zaimplementować, szczególnie ze względu na 2 ograniczenia. Gdyby istniało pojedyncze ograniczenie, powiedzmy waga, zbudowałbym dwuwymiarową tablicę, w której wiersze reprezentowałyby podzbiór bloków, z którymi pracujesz, a kolumny reprezentowałyby maksymalną dostępną wagę. Ale z dwoma ograniczeniami musiałbym mieć trójwymiarową tablicę do przechowywania rozwiązań podproblemów, a gdy tylko zestaw danych trochę się powiększy, stanie się to niewykonalne. Innym pomysłem, który rozważałem, było wzięcie 3 czynników (bieżący blok, maksymalna waga i maksymalna wysokość), przekazanie ich przez funkcję haszującą i zapisanie wyniku w tabeli haszującej. Z jakiegoś powodu to nie działa. Masz pomysły jak dodać dynamiczne programowanie do powyższego rozwiązania? (albo jak skuteczniej go rozwiązać?). **Aktualizacja** : Wydaje się, że konieczne jest również posortowanie tablicy według drugiego ograniczenia (tj. wysokości w tym przypadku) i ponowne uruchomienie funkcji, ponieważ w tej kolejności maksimum może być większe.