title: Dlaczego oferty pracy zawsze szukają „gwiazd rocka”?

text: Zauważyłem ostatnio tendencję do proszenia programistów, którzy są _rockstarami_. Rozumiem, szukają kogoś, kto jest naprawdę dobry w tym, co robią. Ale dlaczego (módlcie się) odwołujemy się do gwiazdy rocka? Czy te firmy naprawdę chcą tych cech jako prawdziwej gwiazdy rocka? * Imprezować całą noc i budzić się rano, aby zająć się szybkim biznesem? * Nadużywanie środków odurzających, * Narcyzm u celebrytów, * Wynagrodzenie znacznie przewyższające ich kierownictwo, * Doskonałe do wystawiania krótkotrwałego programu, * Rozrywka zamiast wartości, * 1 przebój (projekt) cuda lub wykonawcy jednego gatunku, * I tak dalej Co myli się z _Senior_ lub _Principal_ Software Engineerem, który ma ugruntowaną i sprawdzoną pasję do biznesu? Raczej przeciwnie, kogoś, kto: * zakasuje rękawy i zabiera się do pracy, * obiera właściwy kierunek i pomaga wpływać na zespoły, * programy w zakresie wyuczonych i właściwych praktyk, * zapewnia szybką komunikację z całym zespołem, * potrafi kodować i rozumieć wiele języków, * rozumie naukę i teorię obliczeń, czy istnieje tendencja do dywersyfikacji rang inżynierii oprogramowania? **Ile rockstarów software'owych możesz zatrudnić, zanim twój zespół zacznie się rozpadać?** Jasne, wielu ludzi robi to na własną rękę, może nawet nieliczni, którzy kodują na koncerty, ale założę się, że większość jest dla biznes. Nie widzę reklam księgowych gwiazd rocka, maszynistów rockstar ani dyrektorów finansowych rockstartu. Co sprawia, że programista i jego działy rekrutacyjne skłaniają się ku takim zawodom?


title: Czy mogę tworzyć oprogramowanie o zamkniętym kodzie źródłowym z kodem o otwartym kodzie źródłowym?

text: Korzystałem z popularnego pakietu muzycznego (Ableton Live), kiedy otworzyłem sekcję prawną pliku pomocy i zobaczyłem, że program zawiera licencje kodu, które wydawały się zarówno darmowe jak w wolności i darmowe jak w piwie. Niestety nie mogę znaleźć kopii online, ale w razie potrzeby mogę wymienić licencjonowane pakiety. Z tego co widzę, są tu 3 możliwości: 1. Dość duża firma łamie zasady licencjonowania kodu - bardzo mało prawdopodobne, gdyby tak było, dlaczego miałaby zamieścić tekst licencji? 2. Z jakiegoś powodu można pobierać opłaty za i zamykać źródła pakietu zawierającego kod opensource - jest to dla mnie zdecydowanie nowość. 3. Nie rozumiem czegoś - bardzo prawdopodobne.


title: Jak uruchomić aplet jak aplikację desktopową bez instalowania całego JDK?

text: Chcę zrobić aplikację desktopową - zegar analogowy z możliwością ustawiania alarmów za pomocą java. Do renderowania wszystkich grafik i funkcji przycisków, odpowiedzią jest aplet Swing. Ale problem polega na tym, że chcę uruchomić aplet na pulpicie, więc potrzebuję podobnej przeglądarki apletów. Przeglądarka apletów jest dostarczana z JDK i myślę, że instalowanie całego JDK w systemie do uruchamiania zwykłego budzika nie jest wcale dobrym pomysłem, ponieważ zajmie dużo miejsca. Czy jest jakieś wyjście? Czy mogę uzyskać tylko przeglądarkę apletów (lub coś podobnego) zamiast całego JDK, aby móc uruchomić mój aplet? Czy jest jakiś inny sposób, w jaki mogę wykonać mój projekt za pomocą Javy?


title: kiedy wprowadzić warstwę usług aplikacyjnych w aplikacji n-warstwowej?

text: Zajmuję się tworzeniem aplikacji internetowej, której głównym celem jest pobieranie danych z bazy danych, wyświetlanie ich w interfejsie użytkownika, pobieranie danych wejściowych użytkownika i zapisywanie ich z powrotem do bazy danych. Aplikacja nie będzie chrupać żadnego algorytmu siły przemysłowej, ale będzie otrzymywać bardzo dużą liczbę trafień w godzinach szczytu (opisanych poniżej), które będą się zmieniać w ciągu dnia. Warstwy to typowa prezentacja, biznes, dane. Warstwa danych jest obsługiwana przez serwer bazy danych. Warstwa biznesowa będzie zawierać komponent DAL umożliwiający dostęp do serwera bazy danych przez TCP. Mam następujące opcje do rozdzielenia tych warstw na warstwy: 1. Warstwy prezentacji i warstwy biznesowej mogą znajdować się na tej samej warstwie. 2. Warstwa prezentacji na osobnej warstwie i warstwa biznesowa na osobnej warstwie. W przypadku wyboru 2 warstwa biznesowa będzie dostępna przez warstwę prezentacji przy użyciu usługi WCF za pośrednictwem protokołu http lub tcp. Nie widzę żadnego intensywnego przetwarzania w warstwie biznesowej, więc skłaniam się ku opcji 1 powyżej. Uważam również, że z tego samego powodu dodanie nowej warstwy wprowadzi tylko opóźnienie sieci. Jednak pod względem skalowalności na wypadek konieczności skalowania w górę lub w górę, co jest lepszym sposobem? Ta aplikacja będzie musiała obsługiwać do 6 milionów użytkowników na godzinę. W każdej sesji użytkownika będzie rozsądna ilość danych, przechowujących preferencje użytkownika i inne szczegóły. Będę również używał buforowania na poziomie strony.


title: Jak mogę zrefaktoryzować bazę kodu, podczas gdy inni szybko się do niej zobowiązują?

text: Jestem w prywatnym projekcie, który w końcu stanie się open source. Mamy kilku członków zespołu, wystarczająco utalentowanych w zakresie technologii do tworzenia aplikacji, ale nie mamy oddanych programistów, którzy potrafią pisać czysty/piękny i co najważniejsze, długoterminowy, nadający się do utrzymania kod. Postanowiłem zmienić bazę kodu, ale jest to trochę nieporęczne, ponieważ ktoś z zespołu w innym kraju, z którym nie mam regularnych kontaktów, może aktualizować tę całkowicie oddzielną rzecz. Wiem, że jednym z rozwiązań jest szybka komunikacja lub stosowanie lepszych praktyk PM, ale nie jesteśmy jeszcze tacy wielcy. Chcę tylko wyczyścić kod i ładnie połączyć się z tym, co zaktualizował. Czy użycie oddziału byłoby odpowiednim planem? Połączenie najlepszych starań? Coś innego?


title: Obieg pracy GIT do tworzenia stron internetowych

text: Dawno temu mały zespół web developerów, z którym współpracuję, zaczął używać git do tworzenia stron internetowych. Wtedy po prostu zobowiązaliśmy się bezpośrednio do inscenizacji lub masteringu, a następnie często łączyliśmy się między nimi. To było lepsze niż nic, ale był też bałagan. Nie tak dawno temu przyjęliśmy przepływ pracy gitflow. Chociaż z pewnością jest lepszy niż chaos, który pojawił się wcześniej, wydaje się nieco kłopotliwy i nadmiernie zorientowany na uwolnienie / kamień milowy. Moi koledzy deweloperzy często proszą mnie o wyjaśnienie, jak to ma działać i co powinno się łączyć, a co nie. Ogólnie rzecz biorąc, wydaje się, że nie nadaje się do prac związanych z tworzeniem stron internetowych, gdzie często wdrażamy kod i nie śledzimy konkretnych kamieni milowych do wydania. Zgodnie z niedawną sugestią znajomych zacząłem przyglądać się GitHub Flow. Czytanie posta Scotta Chacona w tym miejscu idealnie trafia w ten problem: > Dlaczego więc nie użyjemy git-flow na GitHub? Cóż, głównym problemem jest to, że > wdrażamy cały czas. Proces git-flow jest zaprojektowany w dużej mierze wokół > „uwolnienia”. Tak naprawdę nie mamy „wydań”, ponieważ wdrażamy do produkcji > każdego dnia – często kilka razy dziennie. FWIW, przyjrzałem się również temu miłemu podsumowaniu przepływów pracy na stronie Atlassian: https://www.atlassian.com/git/workflows#!workflow-feature-branch Jednak WSZYSTKIE wyglądają na słabe wybory do tworzenia stron internetowych w mały zespół i ponownie nastawiony na duże wydania aplikacji, a nie częste/dzienne wydania. Pytanie dotyczy SE z prośbą o porównanie git-flow z github-flow http://stackoverflow.com/questions/18188492/what-are-the-pros-and-cons-of-git-flow-vs-github -flow Ogólnie to dobra odpowiedź, ale jak wspomniałem w moim komentarzu poniżej, meta.programmers.SE wydaje się wskazywać, że pytania dotyczące ogólnych najlepszych praktyk przepływu pracy należą tutaj i miałem nadzieję na szerszą listę możliwych odpowiedzi niż tylko git-flow i github-flow, będąc specyficznym dla tworzenia stron internetowych. Dlatego myślę, że uzasadnia to nowe pytanie. W związku z tym, jaki jest najlepszy/preferowany przepływ pracy oparty na git dla małego zespołu programistów internetowych pracujących nad projektami z dość ciągłym wdrażaniem? Czy to github-flow czy coś innego?


title: Jaki jest skuteczny sposób organizowania zadań dla nowego projektu?

text: Czy istnieje praktyczne rozwiązanie organizacji początkowych zadań do nowego projektu? Aby rozwinąć, wyobraź sobie, jakie cechy/historie/cele są określone dla projektu. Jak można zorganizować je w rozsądne zadania w pierwszych kilku wersjach? Scenariusz, który zwykle mam na myśli, zawiera funkcje wymienione jako odniesienie wysokiego poziomu do tego, co powinno obejmować doświadczenie użytkownika końcowego. Zadania do konstruowania takich funkcji są następnie dzielone na porcje (takie jak „utwórz interfejs dla komponentu X”). Takie zadanie niekoniecznie jest „powiązane” tylko z tą cechą i może być przydatne przy budowaniu kolejnych cech. Czy podział funkcji na małe rozwiązania z możliwością kodowania jest prawidłowy? A może powinny być nieco usunięte z jakiejkolwiek konkretnej implementacji? Nie spodziewam się, że istnieje jedna „prawidłowa” odpowiedź na to pytanie, ale szukam podejścia dość pragmatycznego i nienachalnego. Dla przypomnienia szukam rozwiązań niezależnych od jakichkolwiek narzędzi czy „systemów” służących do zarządzania samymi zadaniami.


title: Korzystanie z flag „zapobiegaj wykonaniu metody”

text: Przede wszystkim chcę zwrócić uwagę na moje obawy związane z pewnym pseudokodem (myślę, że zrozumiesz lepiej) Załóżmy, że masz globalną flagę debugowania lub zmienną klasy o nazwie „debug”, klasa a : var debug = FALSE i używasz jej do włączyć metody debugowania. Jak wiem, istnieją dwa rodzaje użycia: po pierwsze w metodzie : metoda a : jeśli debuguj to wywołaj metodę b; metoda b : druga w samej metodzie: metoda a : wywołanie metody b; metoda b : jeśli nie debugowanie wyjścia I chcę wiedzieć, czy istnieje jakaś różnica we/wy pliku lub wskaźnika stosu między tymi dwoma podejściami. Które zastosowanie jest lepsze, bezpieczniejsze i dlaczego?


title: Czy ten kod może być bardziej zwięzły?

text: Niedawno natknąłem się na kod, w którym w wielu, wielu miejscach, oceny wyrażeń były przypisywane do różnych tablic, po jednym indeksie na raz. Przykład pseudokodu: array[0] = item1[0] + item2[0]; tablica[1] = element1[1] + element2[1]; tablica[2] = element1[2] + element2[2]; lub array[0] /= zmienna; tablica[1] /= zmienna; tablica[2] /= zmienna; Moim instynktem byłoby najpierw utworzyć funkcję do iteracji przez tablicę i przypisywania oceny za pomocą pojedynczej pętli for. Po drugie, po prostu wywołaj tę funkcję z argumentami dla tablicy, liczbą określającą, przez ile indeksów przejść w pętli i jakie elementy mają zostać ocenione. * Oczywiście przeszkodą w tej metodzie jest to, że oceniane wyrażenia są dowolne - mogą to być dodawanie, odejmowanie, dzielenie, mnożenie. * Po drugie, operandy wyrażeń mogą być zmiennymi lub tablicami, i oczywiście w językach statycznie typowanych typy mogą być różne. * Również liczba argumentów może być zróżnicowana. Czy możliwe jest uczynienie tego kodu bardziej zwięzłym, biorąc pod uwagę wszystkie możliwe przypadki i jak technicznie nazwałoby się to rozwiązanie?


title: Spójność obiektu

text: Staram się, aby moje obiekty były spójne przez cały okres ich życia. W niektórych przypadkach konfiguracja obiektu wymaga wielu wywołań różnych procedur. Na przykład obiekt połączenia może działać w ten sposób: Connection c = new Connection(); c.setHost("http://cokolwiek") c.setPort(8080) c.connect() proszę zauważyć, że jest to tylko głupi przykład, który pozwoli ci zrozumieć, o co chodzi. Pomiędzy wywołaniami setHost i setPort obiekt jest niespójny, ponieważ Port nie został jeszcze określony, więc ten kod może spowodować awarię Connection c = new Connection(); c.setHost("http://cokolwiek") c.connect() Oznacza, że wymagane jest, aby connect() miała poprzednie wywołania zarówno setHost, jak i setPort, w przeciwnym razie nie będzie w stanie działać, ponieważ jego stan jest niespójny . Możesz naprawić problem przy użyciu wartości domyślnej, ale mogą wystąpić przypadki, w których nie można wymyślić rozsądnej wartości domyślnej. W kolejnym przykładzie zakładamy, że port nie ma wartości domyślnej, a zatem wywołanie funkcji c.connect() bez wcześniejszego wywołania zarówno setHost, jak i setPort będzie niespójnym stanem obiektu. To dla mnie wskazuje na niewłaściwy projekt interfejsu, ale mogę się mylić, więc chcę poznać Twoją opinię. Czy organizujesz swój interfejs tak, aby obiekt był zawsze w spójnym (tj. sprawnym) stanie zarówno przed, jak i po wywołaniu? **Edytuj** : Proszę nie próbować rozwiązywać problemu, który podałem powyżej. Wiem, jak to rozwiązać. Moje pytanie ma znacznie szerszy sens. Poszukuję zasady projektowania, oficjalnie lub nieformalnie, dotyczącej spójności stanu obiektu między wywołaniami.


title: Jak mogę uniknąć zespołu cieśni nadgarstka?

text: Używanie klawiatury i myszy przez długi czas jest prawdopodobnie jedną z przyczyn zespołu cieśni nadgarstka. Jak mogę tego uniknąć?


title: Książki o programowaniu niezależnym od języka

text: Czy są jakieś świetne książki o programowaniu lub tworzeniu oprogramowania, które są niezależne od języka? Dlaczego powinienem to przeczytać?


title: Znormalizowany interfejs struktury danych

text: Chcę pracować z różnymi strukturami danych (tablice, listy połączone pojedynczo/podwójnie, struktury posortowane itp.) na zasadzie plug-and-play. Na przykład chcę móc łatwo wymieniać posortowaną listę i tablicę (która jest ponownie sortowana po każdym wstawieniu/usunięciu), aby przetestować, która z nich ma lepszą wydajność. W każdym znanym mi języku publiczny interfejs do takich struktur danych jest bardzo niespójny. Zmiana implementacji wymaga więc dużo pracy. Czy istnieje język lub wzorzec projektowy niezależny od języka, który ułatwia zdefiniowanie ogólnego interfejsu publicznego, który działa z dowolną strukturą danych? Oczywiście rozumiem, jak różna byłaby wydajność (np. wyszukiwanie binarne w posortowanej tablicy a wyszukiwanie liniowe w zwykłej tablicy). Proszę tylko, aby wydajność struktury danych nie spadła asymptotycznie lub przez duży stały współczynnik ze względu na użycie standardowego interfejsu. Przykładowy problem: przejdź przez kontener liczb, znajdź dwie najbliższe sobie liczby i usuń ich parę. (Jeśli kilka par jest równych odległości, wybierz dowolną parę). Chciałbym, aby kod, który rozwiąże problem, pozostał niezmieniony, gdy przełączam się między różnymi kontenerami.


title: wymaga pobrania odtwarzacza wideo do przyjęcia

text: Obecnie nasza strona będzie wymagała od naszych użytkowników pobrania odtwarzacza, aby oglądać filmy, które będą chcieli oglądać na naszej stronie. Filmy są przesyłane przez użytkowników z różnych źródeł (na przykład smartfony w formacie 3gp). Jednak większość ludzi ma Flash na swoich komputerach. Staram się „delikatnie stanąć” i powiedzieć zespołowi, że wymaganie pobrania odtwarzacza wideo jest nie do przyjęcia. Moje myślenie jest następujące: * zamiast pozwalać ludziom na przesyłanie 3gp i innych formatów, a następnie ponownie wyświetlać dokładny format na ŻĄDANIA od użytkowników naszej witryny * zamiast tego użyjemy konwertera wideo, takiego jak FFMpeg, aby przekonwertować każdy przesłany film do FLV do oglądania na Lampa błyskowa. * więc gdy użytkownik poprosi o obejrzenie jednego z filmów na naszej stronie -- boom, prawdopodobnie ma już zainstalowany Flash, więc po prostu odtwarzamy wideo w jego odtwarzaczu Flash. Uważam, że najlepiej jest obsługiwać wideo FLV flash. Czy to prawda, że wymaganie, powiedzmy, pobrania odtwarzacza 3gp tylko w celu obejrzenia filmu jest złym podejściem?


title: Mój najbardziej ukochany projekt marzeń wydaje się przypominać produkt, który już istnieje. Co powinienem zrobić?

text: Wydaje mi się, że jest to bardziej pytanie o „wygodę” niż o legalność. Widzisz, przez ostatnie kilka miesięcy prowadziłem burzę mózgów i rozwijałem produkt, całkowicie sam. Planowałem wydać go na jakiejś wolnej licencji. Chociaż wiem, że żaden pomysł nigdy nie jest wyjątkowy, z radością zauważyłem, że sposób, w jaki zwizualizowałem moje oprogramowanie, w jego formie i przeznaczeniu, był jedyny w swoim rodzaju, aczkolwiek fragmenty przypominające inne. Ten prywatny projekt był bardzo ceniony. Teraz odkryłem, że istnieje produkt sprzed co najmniej dekady, który jest tak bliski mojemu, że wygląda na plagiat. Podczas gdy z resztą miałem 8:2 na moją korzyść, pod względem funkcji, z tym produktem wydaje się, że jest to transponowane, w tym filozofia. Przyznaję, że niejasno pamiętam, jak słyszałem jego nazwę, ale nigdy nie pomyślałem o przeczytaniu o tym - nazwa nie wydawała się wzbudzać zainteresowania itp. - aż do teraz. Czytam o tym i teraz jestem zrozpaczony i udręczony. Nie ma ryzyka jakichkolwiek działań prawnych, ponieważ to oprogramowanie jest w "wolnej" domenie, a mój jest nadal projektem prywatnym i nie wiem, czy kiedykolwiek zarobię pieniądze od jakiegokolwiek kupującego, co następnie doprowadzi do kłopotów, ale nie o to chodzi. Chodzi o to, jak pozostać skoncentrowanym i entuzjastycznym jak wcześniej? Mam około miesiąca pracy w toku, głównie programowanie i pełne testowanie, a to mnie całkowicie wyczerpało. Jestem w pozycji płodowej. Mówię sobie o takich samodzielnych działaniach Newtona-Leibniza, Faradaya-Henry'ego z podobnymi rezultatami, ale to nie pomaga. Nie chcę, żeby to przeniosło się na moje codzienne życie i życie zawodowe. Wyczuwam dwie kwestie, które mnie kłują. (1) Chciałem pochwalić moją kreatywność. (2) Żywiłem się małym pragnieniem ewentualnej szansy na zarobienie dobrych pieniędzy poprzez przyciągnięcie kupującego. To może być przypadkowy i prawie nieistotny problem dla obywateli świata biznesu, ale ja jestem z innego świata. Pomoc.


title: foreach($items as &$item) uważane za szkodliwe?

text: Czy za złą praktykę uważa się przekazywanie elementów w tablicy PHP według referencji zamiast według wartości? Odpowiednia dokumentacja: http://php.net/manual/en/control-structures.foreach.php


title: Czy istnieje nieskończona ilość wiedzy w języku programowania?

text: Potrafię płynnie programować w Javie, C#, C, Scali i Javascript. Czuję się komfortowo z Objective-C, ale nie pamiętam konwencji używanych do zarządzania pamięcią. Potrafię czytać Pythona i Rubiego oraz pisałem skrypty w Rubim. Otrzymałem zadanie napisania oferty pracy. Nasza aplikacja (Hansen) została zbudowana w C# (nie przez nas) i korzysta z wyzwalaczy zdarzeń napisanych w Visual Basic. Moja grupa używała C# do tworzenia programów, które komunikują się z Hansenem poprzez usługi sieciowe Hansena. Nie byłam konkretna co do technologii, których potrzebujemy. Czułem, że wyszczególnienie konkretnych zestawów umiejętności (znajomość C# i IIS oraz Oracle) stanowi barierę wejścia, która nie była konieczna. Mój młodszy współpracownik (do dwóch tygodni) uznał, że powinniśmy skupić się tylko na .NET. Nasi menedżerowie zatrudniają na stanowisko na poziomie podstawowym. Rozpoczęła się kłótnia, w której bierze przekonanie, że potrzebujemy C# i że facet wyszkolony w Javie nie mógłby się przystosować. Odpowiadam, że nie ma nieskończonej ilości wiedzy w języku programowania i że są tam nowe języki i że dość łatwo jest wybrać język programowania, jeśli ma się wiedzę na temat funkcjonalnego świata programowania (C# dodał anonimowe funkcje i generyki oraz Javę dodano anonimowe klasy i generyki z powodu presji ze strony tego świata). Nasz kod jest lepszy, gdy go posiadamy. Miałem tę dyskusję już wcześniej, kiedy pracowałem w grupie Java w moim dziale. Po prostu nie sądzę, że istnieje nieskończona ilość wiedzy w języku programowania lub platformie programistycznej. Myślę, że ktoś, kto czuje się komfortowo, JPA może dostosować się do LINQ i ADO.NET. Czy brakuje mi czegoś w założeniu, że języki programowania nie mają nieskończonej ilości wiedzy i że cztery lata doświadczenia poświęcone wyłącznie C# nie czyni automatycznie lepszym programistą?


title: Jaka jest zaleta statycznego określania zakresów i dynamicznego ich używania w przypadku Pythona?

text: Najpierw wyjaśnię, że znam C i uczę się Pythona. Więc moje OOPS jest trochę złe. Czytałem oficjalny samouczek i znalazłem to > Chociaż zakresy są określane statycznie, są używane dynamicznie. W dowolnym momencie > podczas wykonywania istnieją co najmniej trzy zagnieżdżone zakresy, których > przestrzenie nazw są bezpośrednio dostępne: > > * najbardziej wewnętrzny zakres, który jest przeszukiwany jako pierwszy, zawiera nazwy lokalne > * zakresy wszystkich otaczających funkcji, które są przeszukiwane począwszy od z > najbliższym zakresem obejmującym, zawiera nazwy nielokalne, ale także nieglobalne > * przedostatni zakres zawiera nazwy globalne bieżącego modułu > zakres zewnętrzny (ostatni przeszukiwany) to przestrzeń nazw zawierająca nazwy wbudowane > Rozumiem przestrzenie nazw. Myślę, że zakresy to to samo. Ale nie mogłem zrozumieć, co oznacza zdanie o zakresach? Jaka jest zaleta takiego układu? Rozumiem to zdanie, ale nie mogłem tego sobie wyobrazić. Więc proszę nie mów, że to problem z moim angielskim.


title: Czy powinienem planować z wyprzedzeniem, czy obmyślać programy podczas ich pisania?

text: Myślałem dzisiaj o książce Paula Grahama „Hakerzy i malarze”. Dokładniej, te dwa akapity: > „Nauczono mnie na studiach, że należy całkowicie rozpracować program > na papierze, zanim nawet podejdziemy do komputera. Odkryłem, że nie programowałem > w ten sposób. Odkryłem, że lubię program siedzący przed komputerem, > a nie kartka papieru. Co gorsza, zamiast cierpliwie > pisać kompletny program i upewniać się, że jest poprawny, po prostu wyrzucałem kod, który był beznadziejnie zepsuty i stopniowo biłem > Debugowanie było rodzajem ostatniego etapu, w którym wyłapywałeś literówki i przeoczenia... > Wydawało się, że programowanie polega na debugowaniu. > > ... O ile wiem, sposób, w jaki mnie nauczyli Program na studiach był > całkowicie niewłaściwy. Powinieneś rozgryźć programy w trakcie ich pisania, tak jak > pisarze, malarze i architekci." Tak jest nauczane w moim college'u i jestem prawie pewien, że większość innych uczelni też. Domyślasz się, co zrobi twój program, a potem wymyślasz, jak to zrobić, potem piszesz i debugujesz. Czasami tworzysz podstawową wersję i dodajesz funkcjonalność, ale chodzi o to, że się zastanowisz, a następnie wpiszesz. Przypomina to ten rozdział w książce Feynmana zatytułowany "On rozwiązuje radia myśląc!" gdzie chodził dookoła, myśląc o tym, jak można zepsuć radio, a potem je naprawia. Dla mnie na tym polega programowanie - myślenie, a następnie znalezienie rozwiązania. Czy to jest powszechne podejście do kodowania? Jeśli tak, dlaczego więcej osób nie po prostu zhakuje i nie złoży programu bez wcześniejszego wyobrażenia sobie, jak on będzie wyglądał? Jakie są zalety i wady myślenia i pisania w porównaniu z rzucaniem i biciem?


title: Parsery przeglądarek a samodzielne parsery

text: Firefox/Chromium mają dobrze zaimplementowane(?) parsery. Dlaczego więc parsery takie jak lxml i inne takie parsery są opracowywane z tak wielkim wysiłkiem? Czy nie wymyślają na nowo koła? A może rozwiązują inny problem? Czy parsery w przeglądarkach nie mogą zostać przekształcone w samodzielne biblioteki?


title: Nauka programowania asynchronicznego

text: Asynchroniczne, nieblokujące programowanie sterowane zdarzeniami wydaje się być modne. Mam podstawowe koncepcyjne zrozumienie tego, co to wszystko znaczy. Jednak nie jestem pewien, kiedy i gdzie mój kod może skorzystać na byciu asynchronicznym lub jak sprawić, by blokujące IO nie było blokujące. Jestem pewien, że mogę po prostu użyć do tego biblioteki, ale bardziej interesują mnie bardziej szczegółowe koncepcje i różne sposoby samodzielnego ich wdrażania. Czy istnieją jakieś wyczerpujące/definitywne książki lub inne zasoby na ten temat (takie jak GoF dla wzorców projektowych lub K&R dla C, tldp dla rzeczy takich jak bash)? (Uwaga: nie jestem pewien, czy jest to faktycznie funkcjonalnie identyczne pytanie, jak moje pytanie dotyczące programowania sterowanego zdarzeniami uczenia się)


title: Przechowywanie danych tłumaczeniowych jako kolumna JSON

text: Decydujemy o tym, jak przechowywać tłumaczenia niektórych opisów elementów bazy danych. Moglibyśmy pójść w tradycyjny sposób i zachować tabelę tłumaczeń (oraz tabelę językową i tabelę połączeń object_translation) LUB pomyśleliśmy, że lepiej byłoby mieć po prostu kolumnę Description zawierającą JSON w następujący sposób: { "EN": "To jest tłumaczenie na angielski", "EE" : "Zobacz na kirjeldus eesti keeles" } Czy są jakieś poważne wady, dlaczego nie powinniśmy tego używać? (Nie widziałem, żeby był używany nigdzie indziej)


title: Jak ludzie pozbywają się gałęzi warunkowych w Programowaniu Funkcjonalnym?

text: Długo działające przypadki przełączników lub konstrukcje if-else-if są unikane w OOP przy użyciu polimorfizmu wszędzie tam, gdzie ma to zastosowanie. zamiast rozgałęziania przez dopasowanie wartości, rozgałęzianie odbywa się na poziomie klasy. Jak można zastosować podobne podejście w paradygmacie programowania funkcjonalnego, a konkretnie Clojure?


title: Autor umieścił prawa autorskie do kodu z informacją o licencji publicznej gnu - implikacje?

text: Znalazłem projekt na Github, w którym jestem zainteresowany współpracą, który twierdzi, że jest open source i ma dołączoną licencję GPL. Ale oryginalny autor dodał powiadomienie o prawach autorskich do każdego pliku źródłowego. Nie jestem pewien dlaczego, ale nie czuję się słusznie przyczyniając się do projektu, który zawsze będzie miał na sobie czyjeś nazwisko. To naprawdę łamie atmosferę stworzoną przez społeczność i sprawia, że nie czuję się spokojna co do tego, co autor może wybrać dalej z projektem. Jakie są implikacje prawa autorskiego do otwartego kodu GPL jako takiego? Jaką moc daje to oryginalnemu autorowi nad współtwórcą? # Copyright (C) 2012, 2013 __AUTHORNAME__ # Ten plik jest częścią __PROJECTNAME__. # # __PROJECTNAME__ jest wolnym oprogramowaniem: możesz je rozpowszechniać i/lub modyfikować # zgodnie z warunkami Powszechnej Licencji Publicznej GNU opublikowanej przez # Free Software Foundation, w wersji 3 Licencji lub # (według Twojego wyboru) dowolna późniejsza wersja. # # __NAZWA PROJEKTU__ jest rozpowszechniana w nadziei, że będzie przydatna, # ale BEZ ŻADNEJ GWARANCJI; nawet bez dorozumianej gwarancji # PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Zobacz Powszechną Licencję Publiczną # GNU, aby uzyskać więcej informacji. # # Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU


title: Zasoby dla programistów, które pomogą im tworzyć lepsze raporty o błędach

text: Czy są dostępne jakieś dobre artykuły lub filmy, których programiści mogliby użyć do nauczenia się tworzenia bardziej szczegółowych raportów o błędach? Często muszę weryfikować przypadki, które zostały otwarte przez deweloperów, gdzie tytuł jest jedyną dostępną informacją, więc chciałbym pomóc deweloperom stać się lepszymi zgłaszającymi błędy, z korzyścią dla nas obu.


title: Jak radzisz sobie z wyzwaniem projektowania nieruchomości na dużym ekranie?

text: To pytanie jest nieco bardziej subiektywne, ale mam nadzieję, że uzyskam nową perspektywę. Jestem tak przyzwyczajony do projektowania dla określonego rozmiaru ekranu (zwykle 1024x768), że uważam, że ten rozmiar nie stanowi problemu. Zwiększenie rozmiaru do 1280x1024 nie zapewnia wystarczającej powierzchni ekranu, aby zrobić znaczną różnicę, ale da mi trochę więcej miejsca na oddech. Zasadniczo po prostu rozszerzam mój „rozmiar siatki” i ten sam podstawowy projekt dla nieco mniejszego ekranu nadal działa. Jednak w ostatnich kilku projektach wszyscy moi klienci korzystali z ekranów 1080p (1920x1080) i chcieli, aby rozwiązania wykorzystywały jak najwięcej tej nieruchomości. 1920 pikseli w poprzek zapewnia nieco mniej niż dwa razy większą szerokość, do której jestem przyzwyczajony, a szeroki ekran sprawia, że niektóre z moich starych podejść do projektowania nie działają tak dobrze. Problem, na który się natykam, polega na tym, że w obliczu tak dużej przestrzeni mam do czynienia z kilkoma poważnymi problemami. * Ile kolumn powinienem użyć? Szeroki format nadaje się do podziału na 3 kolumny z podziałem 2:1:1 (tj. kolumna treści jest większa niż pozostałe dwie). Jeśli jednak wybieram trzy kolumny, co mam zrobić z tą dodatkową kolumną? * Jak _efektywnie_ wykorzystać ekran? Istnieje pokusa, aby umieścić wszystko na ekranie na raz, ale zbyt duża ilość informacji w rzeczywistości utrudnia korzystanie z aplikacji. Biała przestrzeń jest ważna, aby pomóc zrozumieć złożone informacje, ale zbyt wiele sprawia, że powiązane pojęcia wydają się zbyt oddzielne. * Zwykle pracuję z aplikacjami internetowymi, które zawierają złożone dane, a wizualizacja i prezentacja są kluczem do zrozumienia nieprzetworzonych danych. Gdy użytkownik ma również duży ekran (co najmniej 24"), niektóre informacje są poza zasięgiem wzroku i trzeba przesunąć wskaźnik na dużą odległość. Jak upewnić się, że wszystko, co jest potrzebne, pozostaje w wizualnych punktach aktywnych? * Proste witryny takie jak blogi faktycznie radzą sobie lepiej, gdy szerokość jest ograniczona, co powoduje wiele zmarnowanych nieruchomości. Zastanawiam się, czy umieszczenie pola tekstowego i podglądu tekstu obok siebie byłoby dużą korzyścią dla strony administratora tego typu ekranu? (1:1 podział na dwie kolumny).W przypadku Twoich odpowiedzi wiem, że prawie wszystko w projektowaniu to „to zależy”. Szukam: * _Ogólnych zasad, których używasz_ * _Jak zmieniło się Twoje podejście do projektowania_ I stwierdzam, że muszę się przeszkolić, jak pracować z tym innym formatem.Każdy skok w rozdzielczości, nad którym pracowałem do tej pory, wynosił około 25%: 640 do 800 (wzrost o 25%), 800 do 1024 (wzrost o 28% ) i 1024 do 1280 (wzrost o 25%). Jednak skok z 1280 do 1920 oznacza dobry wzrost o 50%. To odpowiednik skoku od 640 do 1024. Nie było powszechnie używanego średniego rozmiaru, który pomagałby uczyć się lekcji bardziej stopniowo.


title: Strukturyzacja kontroli dostępu na hierarchicznym grafie obiektów

text: Mam encję Folder, która może być moderowana przez użytkowników. Foldery mogą zawierać inne foldery. Więc mogę mieć taką strukturę: Folder 1 Folder 2 Folder 3 Folder 4 Muszę zdecydować, jak wdrożyć moderację dla tego podmiotu. Wymyśliłem dwie opcje: **Opcja 1** Gdy użytkownik otrzymuje uprawnienia moderowania do folderu 1, zdefiniuj relację moderatora między folderem 1 a użytkownikiem 1. Żadne inne relacje nie są dodawane do bazy danych. Aby ustalić, czy użytkownik może moderować Folder 3, sprawdzam, czy Użytkownik 1 jest moderatorem folderów nadrzędnych. Wydaje się, że łagodzi to część złożoności obsługi aktualizacji/przeniesionych jednostek/dodatków w folderze 1 po zdefiniowaniu relacji, a odwrócenie relacji oznacza, że mam do czynienia tylko z jedną jednostką. **Opcja 2** Gdy użytkownik otrzyma uprawnienia moderowania do Folderu 1, zdefiniuj nową relację między Użytkownikiem 1 a Folderem 1, _i_ wszystkimi jednostkami podrzędnymi aż do najwspanialszego z wnuków, gdy relacja jest tworzona i jeśli kiedykolwiek zostanie usunięta, wykonaj iterację w dół wykresu, aby usunąć relację. Jeśli dodam coś w folderze 2 po utworzeniu tej relacji, po prostu skopiuję wszystkich moderatorów do nowej encji. Ale kiedy muszę pokazać tylko foldery najwyższego poziomu, które moderuje użytkownik, muszę wysłać zapytanie do wszystkich folderów, które mają folder nadrzędny, którego użytkownik nie moderuje, w przeciwieństwie do opcji 1, w której po prostu wysyłam zapytania do wszystkich elementów, które użytkownik moderuje. **Myśli** _Myślę_, że sprowadza się to do określenia, czy użytkownicy będą częściej odpytywać o wszystkie elementy nadrzędne, niż o elementy podrzędne... jeśli tak, to opcja 1 _wydaje się_ lepsza. Ale nie jestem pewien. Czy jedno podejście jest lepsze od drugiego? Czemu? A może istnieje inne podejście, które jest lepsze niż oba? Używam Entity Framework na wypadek, gdyby miało to znaczenie.


title: Gotowy do Open source oprogramowania, ale chcesz zarobić na nim trochę pieniędzy

text: Jestem Studentem UG i Przedsiębiorcą. Założyłem małą firmę, z którą staram się dostarczać rozwiązania dla różnych firm w moim mieście za pomocą mojego oprogramowania. Włożyłem 30-40 godzin na kodowanie i rozwój. Byłem wielkim fanem projektów Open Source, a także budowałem oprogramowanie na pythonie. Ale teraz, jeśli chodzi o sprzedaż mojego oprogramowania moim klientom, oczekuję pieniędzy. (Czy jestem hipokrytą?) 1. Czy jest jakaś licencja OSS, na której mogę zarabiać i otwierać moje źródło? Proszę zasugeruj. 2. Lub w inny sposób zarabiania pieniędzy na moim oprogramowaniu? (Wydaje mi się, że zasługuję na uznanie. Jeśli nie kod, to chociaż pomysły? :D )


title: Wyświetlanie liczby zarejestrowanych użytkowników na stronie

text: Buduję grę online podobną do Mafia Wars. Myślałem o wyświetleniu liczby zarejestrowanych użytkowników na stronie głównej, ale potem pomyślałem: > „Co jeśli nowy użytkownik zobaczy, że całkowita liczba zarejestrowanych użytkowników wynosi > **5**?!” :D To byłoby zbyt krępujące dla mojej _wciąż rozwijającej się_ gry. Potem przyszła kolejna myśl: > „Dlaczego zamiast tego nie wyświetlam **500**?!” ;) Nikt nie będzie wiedział, czy na mojej stronie jest zarejestrowanych 500 użytkowników, chyba że zaczną grać i wchodzić w interakcje z innymi graczami. Mam jednak wrażenie, że to nieetyczne. Co jeśli spowoduje to negatywną reklamę na mojej stronie?!! Jaka jest twoja opinia, czy powinienem sfałszować numer? czy powinienem to uczciwie pokazać? czy powinienem poczekać, aż będę miał 1000 konta rzeczywistego i zacząć wyświetlać numer? A co najważniejsze, czy to legalne?! :D


title: Zalety systemu „Message Passing” w porównaniu z systemem „Event Based”

text: Moje pytanie pochodzi z nieco niewykształconej perspektywy. Jakie są względne zalety systemu „przekazywania wiadomości” w porównaniu z systemem „opartym na zdarzeniach”. Dlaczego jeden miałby wybrać jedno, a nie drugie? Jakie są ich mocne i słabe strony? Chciałbym wiedzieć nie tylko „w teorii”, ale także „w praktyce”. EDIT: _Specyficzny problem_: Chcę zbudować system komponentów, które można wpinać, które zachowują się jak usługi małej skali (każdy wykonuje jakieś małe zadanie lub dostarcza jakąś informację). Usługi mogą: * być warstwowe, dzięki czemu wyjście jednej usługi może działać jako jedno z wejść do innego * mieć hierarchię zamykania, dzięki czemu jedna usługa może być zawarta w innej bez określonej relacji wejścia-wyjścia, jak wspomniano w poprzednim zdaniu. Celem systemu jest przekształcenie pojedynczego przepływu zdarzeń niskiego poziomu w innym systemie na informacje i funkcjonalność wyższego poziomu, a ponadto zapewnienie kanału zwrotnego do innego systemu, zapewniając pojedynczą serię zdarzeń. Jeśli to nie wystarczy, mogę podać więcej szczegółów. Po rozejrzeniu się jeszcze trochę. To i to chyba lepiej opisuje moją sytuację. Wygląda na to, że może dobrze pasować do mojej sytuacji: http://akka.io/


title: Skuteczny sposób na zachowanie wcześniejszych projektów wraz z ich roboczym środowiskiem programistycznym?

text: Uważam, że kiedy chcę uruchomić przeszły projekt, minie dużo czasu, zanim go znajdę i zanim znów wszystko ustawię, aby móc go uruchomić. Na przykład mam projekty Pythona, które stworzyłem w Linuksie i zależy to od pakietów oprogramowania, które można łatwo zainstalować w Linuksie, ale nie mam już maszyny wirtualnej z Linuksem, której używałem. A niektóre z moich innych projektów zależą od innych zmiennych, takich jak konfiguracja serwera WWW, zmienne PATH, sdk, IDE, wersja systemu operacyjnego, urządzenie itp. Czy ktoś ma skuteczny sposób na poradzenie sobie z tym problemem? Na razie zajmowałem się tylko utrzymaniem kopii zapasowej kodu źródłowego, ale **trudno jest przywrócić działające środowisko programistyczne, a także trudno jest utrzymać działające środowisko programistyczne**.


title: Korzystanie z HBase lub Cassandra dla serwera tokenów

text: Próbowałem dowiedzieć się, jak używać HBase/Cassandra w systemie tokenów, który ponownie wdrażamy. Prawdopodobnie mogę wycisnąć znacznie więcej z MySQL, ale wygląda na to, że czepiam się niewłaściwego narzędzia do tego zadania tylko dlatego, że dobrze je znamy. W końcu uderzy w ścianę (jak nam się przydarzyło w innych obszarach). Oczywiście zacząłem szukać możliwych rozwiązań NoSQL. Wyróżniające się (przynajmniej pod względem szumu) to HBase i Cassandra. Historia wygląda mniej więcej tak: 1. Użytkownik może wysłać prezent innym użytkownikom. 2. Każdy prezent posiada listę odbiorców lub jest publiczny, w którym to przypadku jest ograniczony liczbą lub datą ważności 3. Dla każdego wysłanego prezentu generujemy token, który jednoznacznie identyfikuje ten prezent. 4. Dla każdego prezentu śledzimy listę potencjalnych odbiorców i ich aktualny status związany z danym prezentem (przyjęty, odrzucony itp.). 5. Użytkownik może poprosić o wyświetlenie wszystkich swoich aktualnie oczekujących prezentów 6. Użytkownik może poprosić o listę użytkowników, którym wysłał dzisiaj prezent (używane do ograniczenia liczby wysłanych prezentów) 7. Wymagana zdolność „zrzucania” lub „ignorowania” „ prezenty, które straciły ważność (prezenty sprzed x dni są uważane za przeterminowane) Istnieją inne wymagania, ale uważam, że powyższe obejmuje najważniejsze. Jak mam to zrobić i modelować za pomocą HBase lub Cassandra? * * * Cóż, ściana była performansem. Kilka dziesiątek milionów rekordów dziennie na 2 stołach trzymanych przez 2 tygodnie (szkoda, że nie mogłem zachować tego dłużej, ale nie było mowy). Czasy odpowiedzi stawały się coraz wolniejsze, aż w końcu musieliśmy zacząć zmniejszać liczbę dni przechowywania danych. Buforowanie pomaga tutaj, ale nie jest to idealne rozwiązanie, ponieważ duża część operacji to aktualizacje. Również, jak wspomniałem w moim oryginalnym poście. Szeroko używamy MySQL. Wiemy dokładnie, co może, a czego nie może zrobić, zarówno w przypadku naiwnych implementacji, jak i partycjonowania natywnego i wreszcie poziomego shardingu naszego zestawu danych na poziomie aplikacji, aby znajdował się na wielu węzłach bazy danych. _Można_ to zrobić, ale nie o to mi chodzi. Zadałem bardzo konkretne pytanie dotyczące projektowania rozwiązania przy użyciu rozwiązania NoSQL, ponieważ bardzo trudno jest znaleźć tam przykłady projektów. Brainlag, nie próbując uchodzić za niegrzeczne. Właściwie to bardzo doceniam, że jesteś jedyną osobą, która zadała sobie trud odpowiedzi. ale widzę to w kółko. Ludzie zadają pytania, a inni zakładają, że nie mają pojęcia, o czym mówią, i udzielają nieistotnych odpowiedzi. Proszę zignorować RDBMS. Pytanie dotyczy nosql.


title: Jakie są najistotniejsze książki dotyczące szacowania projektów oprogramowania?

text: Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki i inne przydatne informacje dotyczące szacowania projektów oprogramowania? Co w tej książce czyni ją wyjątkową?


title: Kiedy klucz prywatny zostanie przekazany klientowi?

text: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth- authentication/ Czytałem ten artykuł i jeszcze go nie zrozumiałem. Kiedy klucz prywatny jest przekazywany klientowi? **Powiedz, że mam klienta JavaScript - gdzie mam przechowywać ten klucz prywatny (po przypisaniu) - plik cookie?** Myślę, że może to być zrobione podczas uwierzytelniania użytkownika, jeśli klient JavaScript wysyła żądanie postu i uwierzytelnia użytkownika , serwer sprawdza poprawność danych wejściowych i zwraca identyfikator użytkownika (klucz publiczny), a następnie jakiś wygenerowany ciąg (przechowywany w tabeli) = klucz prywatny? A potem po prostu postępuj zgodnie z podejściem (cytowanym) z artykułu: [KLIENT] Przed wywołaniem REST API połącz razem kilka unikalnych danych (zazwyczaj są to wszystkie parametry i wartości, które zamierzasz wysłać, jest to argument „data” we fragmencie kodu na stronie AWS) [KLIENT] Hash (najlepiej HMAC-SHA1 lub SHA256) blob danych (z kroku #1) z Twoim prywatnym kluczem przypisanym do Ciebie przez system. [KLIENT] Wyślij serwerowi następujące dane: Niektóre informacje umożliwiające identyfikację użytkownika, takie jak „klucz API”, identyfikator klienta, identyfikator użytkownika lub coś innego, czego może użyć do identyfikacji użytkownika. To jest publiczny klucz API, nigdy prywatny klucz API. Jest to wartość publiczna, którą każdy (nawet źli geniusze mogą znać, a tobie to nie przeszkadza). Jest to tylko sposób, aby system wiedział, KTO wysyła żądanie, a nie czy powinien ufać nadawcy, czy nie (rozwiąże to na podstawie HMAC). Wyślij wygenerowany HMAC (hash). Wyślij wszystkie dane (parametry i wartości), które i tak zamierzałeś wysłać. Prawdopodobnie niezaszyfrowane, jeśli są to nieszkodliwe wartości, takie jak „mode=start&number=4&order=desc” lub inne bzdury operacyjne. Jeśli wartości są prywatne, musisz je zaszyfrować. (OPCJONALNIE) Jedynym sposobem ochrony przed „odtwarzaniem ataków” na interfejs API jest dołączenie do żądania znacznika czasu, aby serwer mógł zdecydować, czy jest to „stare” żądanie, i odrzucić je. Sygnatura czasowa musi być uwzględniona w generowaniu HMAC (efektywnie oznaczając utworzony czas w hashu), oprócz sprawdzenia „w dopuszczalnych granicach” na serwerze. [SERWER] Odbierz wszystkie dane od klienta. [SERWER] (patrz OPCJONALNIE) Porównaj sygnaturę czasową bieżącego serwera z sygnaturą czasową wysłania przez klienta. Upewnij się, że różnica między dwoma znacznikami czasu jest w akceptowalnym limicie czasu (może 5-15 minut), aby utrudnić powtarzanie ataków. UWAGA: Pamiętaj, aby porównać te same strefy czasowe i uważaj na problemy, które pojawiają się przy zmianie czasu na letni. AKTUALIZACJA: Jak słusznie zauważyło kilka osób, po prostu użyj czasu UTC i zapomnij o problemach z czasem letnim. [SERWER] Korzystając z danych identyfikujących użytkownika przesłanych wraz z żądaniem (np. API Key) odszukaj użytkownika w bazie danych i załaduj jego klucz prywatny. [SERWER] Połącz ze sobą te same dane, które zrobił klient w ten sam sposób, w jaki zrobił to klient. Następnie zahaszuj (wygeneruj HMAC) ten obiekt blob przy użyciu klucza prywatnego, który wyszukałeś w bazie danych. (patrz OPCJONALNIE) Jeśli chronisz przed atakami typu powtórka, dołącz sygnaturę czasową klienta do ponownego obliczenia HMAC na serwerze. Ponieważ już ustaliłeś, że ten znacznik czasu mieści się w dopuszczalnych granicach do zaakceptowania, musisz ponownie zastosować go do obliczenia skrótu, aby upewnić się, że był to ten sam znacznik czasu wysłany od klienta, a nie sfabrykowany znacznik czasu od człowieka. atak w środku. [SERWER] Uruchom ten bałagan danych przez hash HMAC, dokładnie tak, jak to zrobiłeś na kliencie. [SERWER] Porównaj hash, który właśnie otrzymałeś na serwerze, z hashem, który wysłał Ci klient; jeśli pasują, klient jest uważany za legalnego, więc przetwórz polecenie. W przeciwnym razie odrzuć polecenie! Po drugie, uważam, że byłoby to bardziej czytelne z samego artykułu... Czy dobrze to rozumiem?


title: Jak rozłożyć konstruktora?

text: Powiedzmy, że mam klasę Enemy, a konstruktor wyglądałby mniej więcej tak: public Enemy(String name, float width, float wysokość, pozycja Vector2, float speed, int maxHp, int attackDamage, int defense... itd.){} To wygląda źle, ponieważ konstruktor ma tak wiele parametrów, ale kiedy tworzę instancję Enemy, muszę określić wszystkie te rzeczy. Chcę również tych atrybutów w klasie Enemy, abym mógł przeglądać ich listę i pobierać/ustawiać te parametry. Myślałem, że może zaklasyfikować Enemy do EnemyB, EnemyA, jednocześnie zakodowując ich maxHp i inne specyficzne atrybuty, ale wtedy straciłbym dostęp do ich zakodowanych na sztywno atrybutów, gdybym chciał przejść przez listę Enemy (składającą się z EnemyA, EnemyB i EnemyC). Po prostu próbuję nauczyć się kodować czysto. Jeśli to robi różnicę, pracuję w Java/C++/C#. Każdy punkt we właściwym kierunku jest doceniany.


title: Jak uniknąć duplikowania modelu domeny w wielojęzycznej aplikacji rozproszonej?

text: Mój zespół pracuje obecnie nad platformą internetową i planujemy podzielić aplikację na zestaw niezależnych usług napisanych w różnych językach, problem polega na tym, że usługi te opierają się na warstwie modelu domeny, która będzie musiała zostać zduplikowana w różnych językach (C# i Java). Warstwa domeny jest bardzo spójna i nie można jej łatwo rozdzielić. Biorąc pod uwagę, że wymagana jest praca z wieloma językami ** jaki jest dobry styl architektoniczny, który pozwoli na pozytywne podejście do tego problemu?**


title: Jak mogę wchodzić w interakcję z urządzeniem dźwiękowym po stronie klienta za pośrednictwem aplikacji internetowej?

text: Próbuję znaleźć coś, co pozwoli aplikacji internetowej na analizę wejścia liniowego lub mikrofonowego od klienta i przesłanie tych danych na serwer. Przyjrzałem się pokrótce WebRTC i chociaż uważam, że jest to najbardziej przekonująca odpowiedź „w przyszłości”, jest (w momencie pisania) daleki od kompletności i/lub standaryzacji jako protokół. Byłaby to moja pierwsza aplikacja internetowa, która wymagałaby takiej funkcjonalności. Idealnie, część przetwarzania sygnału dźwiękowego mogłaby być obsługiwana przez kod po stronie klienta, aby zmniejszyć wpływ opóźnienia urządzenia (powiedzmy, czas potrzebny na przejście dźwięku z instrumentu do komputera, przejście przez konwersję cyfrowo-analogową i następnie zostać wysłany do aplikacji) i „lag” w Internecie. W pewnym momencie sygnał musiałby wrócić na serwer w celu analizy. To może być trochę zaawansowana koncepcja, ale być może istnieje sposób na użycie istniejącej wtyczki - po prostu pomyślałem, że zwrócę się do ludzi, którzy spędzili więcej czasu w tej dziedzinie niż ja. Z góry dziękuję za poświęcony czas.


title: Czy projektanci interfejsu użytkownika XAML są dziś powszechni?

text: Zastanawiam się nad stworzeniem aplikacji Silverlight, a brakuje mi umiejętności, aby stworzyć dobrze wyglądający interfejs użytkownika. Dzisiejsi graficy zwykle znają HTML i CSS, dzięki czemu oszczędzają mi trudu robienia czegoś, w czym nie jestem dobry. Czy tak jest w przypadku XAML? Czy do tej pracy muszę zatrudnić dwóch pracowników?


title: Czy programowanie zorientowane obiektowo naprawdę modeluje świat rzeczywisty?

text: Widziałem, jak często powtarza się, że programowanie obiektowe opiera się na modelowaniu świata rzeczywistego, ale czy tak jest? Wydaje mi się, że nie dotyczy to niczego poza warstwą biznesową. Moje klasy GUI/klasy dostępu do danych nie modelują niczego w prawdziwym świecie. Nawet w warstwie biznesowej mam klasy takie jak obserwatorzy, menedżerowie, fabryki itp., które nie są obiektami ze świata rzeczywistego. Staram się projektować moje zajęcia tak, aby korzystać z takich rzeczy, jak enkapsulacja, ale czy prawdziwy świat jest zamknięty? Podczas gdy niektóre tworzone przeze mnie obiekty są modelowaniem obiektów świata rzeczywistego, czy kod przed OOP nie zrobi tego samego? Wątpię, czy OO było pierwszymi osobami, które włączyły do swoich baz kodu pojęcia takie jak Klient. Ale OO tak naprawdę dotyczy modelowania rzeczy, a ta metoda modelowania nie wydaje mi się inspirowana prawdziwym światem. A więc: czy programowanie obiektowe naprawdę modeluje rzeczywisty świat? **EDYTUJ:** Jeśli zamierzasz opublikować kolejną odpowiedź mówiącą mi, jak niesamowite jest OO, nie rozumiesz pytania. Pytanie dotyczy tego, jak opisujemy OO, a nie zalety OO.


title: Kiedy NIE warto korzystać z Fabryki?

text: W dzisiejszych czasach dość często korzystam z TDD i naprawdę dobrze się bawię - wszystko wydaje się płynąć lepiej i jest naturalnie lepiej skonstruowane i zorganizowane. Jednak pisząc trochę kodu IO, wykorzystując `System.IO.Stream`s, zastanawiałem się - kiedy w ogóle warto nie używać fabryki? Ponieważ w przypadku `Stream' z pewnością lepiej nie używać fabryki. Ogólnie rzecz biorąc, w przypadku bardziej złożonych typów, które zdefiniowałem, takich jak klasa, która kontroluje uwierzytelnianie czegoś i interfejsy z bazą danych, prawdopodobnie użyjesz kontenera wstrzykiwania zależności i zostanie rozwiązany w czasie wykonywania bez konieczności _faktycznie_ tworzenia takiego. Jednak w niektórych przypadkach, gdy trzeba utworzyć wiele takich instancji, można utworzyć Fabrykę do konstruowania tego typu - na przykład: class Foo Foo(Bar bar, Foobar foobar, Fuzz fuzz) ... koniec tutaj, ponieważ nie chcesz ujawniać, jak bezpośrednio utworzyć ten obiekt klientom, którzy tego potrzebują, ujawniasz fabrykę, która je utworzy i wstrzyknie to do klienta. Ma to tę zaletę, że w dowolnym momencie można zastąpić fabrykę czymś innym i jest zwykle używane do tworzenia wystąpień typów, które mają typy pochodne. class FooFactory void Create(Bar, Foobar, Fuzz) end Wracając jednak do mojego punktu `Stream` - czy warto byłoby stworzyć Fabrykę dla dekoratora wokół Stream? Na przykład w moim projekcie mam `BinaryDataStream`, który odczytuje moje dane ze Streamu. BinaryData jest w formacie niestandardowym i pobiera argument Stream w swoim konstruktorze. Używanie `nowego` wydaje się naruszać wszystko, co wiem, czego nauczyłem się odkąd zacząłem używać TDD, **ponieważ podaję zależność, w której musi wyraźnie wiedzieć, jak zdobyć swojego współpracownika** Jednak fabryka wydaje się przesadą. Myśli? EDYCJA: Myślę, że muszę wyjaśnić. Nie mam na myśli unikania przez cały czas new(), ponieważ oczywiście ma to zastosowanie do wiązania zależności i tym podobnych. **jednak** miałem na myśli następującą sytuację (kopiuj-pasta z komentarzy): > Miałem na myśli to, że powiedziano mi, że używanie operatora > new() do współpracownika z wnętrza typu, używa współpracownika > i lepiej jest a) przekazać typ wstrzyknięty lub b) > przekazać fabrykę (jeśli musisz utworzyć nieznaną liczbę tych typów). Używając new() wewnątrz współpracownika, powiążesz, jak utworzyć ten obiekt i > gdzie go utworzyć bezpośrednio z rzeczą, która tego wymaga, i że lepiej jest > wstrzyknąć wstępnie skonfigurowaną instancję do konstruktora, jeśli potrzebujesz > jednej instancji tego lub wstrzyknij fabrykę do konstruktora, jeśli chcesz > utworzyć wiele/nieokreśloną liczbę instancji


title: Jaka jest nazwa wzorca do używania łączenia metod w celu zbudowania obiektu?

text: Często używam wzorca, w którym używam łączenia metod do ustawienia obiektu, podobnie do wzorca `Builder` lub `Prototype`, ale nie tworząc nowych obiektów przy każdym wywołaniu metody, zamiast tego modyfikując oryginalny obiekt. **Przykład:** nowe Menu().withItem("Jajka").withItem("Hash Browns").withStyle("Kolacja"); Zastanawiam się tylko, czy istnieje nazwa dla tego wzorca i czy jest on uważany za antywzorzec, bo chociaż potrafi czytać płynniej, może prowadzić do długich łańcuchów metod.


title: Rozwój Androida a iPhone

text: Co jest lepszą karierą w tworzeniu aplikacji na Androida niż na iPhone'a. Android ma tę zaletę, że jest open source, podczas gdy iPad/iPhone jest jednym z najlepszych produktów na rynku, a Apple jest obecnie liderem w branży mobilnej. Jakie byłyby zalety i wady każdej kariery i czy programiści iPhone'a mogą łatwo przejść na Androida? Daj mi znać, jeśli ktoś ma doświadczenie w którymkolwiek z tych obszarów


title: Czy generowanie kodu podnosi jakość kodu?

text: Argumentując za generowaniem kodu, szukam przykładów, w jaki sposób zwiększa to jakość kodu. Aby wyjaśnić, co mam na myśli przez generowanie kodu, mogę opowiedzieć tylko o moim projekcie: Używamy plików XML do opisywania relacji encji w naszym schemacie bazy danych, dzięki czemu pomagają nam generować nasz framework ORM i formularze HTML, które można wykorzystać do dodawania, usuwać i modyfikować encje. Moim zdaniem poprawia to jakość kodu, ponieważ zmniejsza się błąd ludzki. Jeśli coś jest niepoprawnie zaimplementowane, to jest zepsute w modelu, co jest dobre, ponieważ błąd może pojawić się wcześniej, ponieważ więcej wygenerowanego kodu też jest zepsutych. Ponieważ zostałem poproszony o definicję **jakości kodu** , pozwólcie, że wyjaśnię, o co mi chodziło **jakość oprogramowania**. **Jakość oprogramowania** : to nie jeden atrybut, ale wiele, np. wydajność, modyfikowalność, czytelność, poprawność, solidność, zrozumiałość, użyteczność, przenośność itp., które wpływają na siebie nawzajem.


title: Struktura danych do wyszukiwania plików

text: Zadawałem to pytanie już wcześniej i dostałem kilka odpowiedzi/pomysłów, ale nie jestem pewien, jak je wdrożyć. Buduję rozwiązanie do przesyłania wiadomości telekomunikacyjnych. Obecnie używam bazy danych do zapisywania moich transakcji/wiadomości dla zbudowanego przeze mnie stosu sieciowego, a jak wiesz, jest to wolniejsze niż użycie struktury danych (hash, linkedlist itp.). Mój problem polega na tym, że dane mogą być naprawdę ogromne i nie zmieszczą się w pamięci. Myślałem o zapisaniu rekordów w pliku, a kluczu i numerze linii w hashu, to jeśli chcę uzyskać dostęp do jakiegoś rekordu, mogę uzyskać numer linii z hasza i pobrać go z pliku. Nie wiem, na ile to jest wydajne; Myślę, że baza danych wykonuje o wiele lepszą robotę niż ta w moim imieniu. Proszę podziel się tym, co masz na myśli.


title: Czy dobrym pomysłem jest stworzenie strony internetowej, która ma niewielki dostęp do DB? CRUD zostanie zrobione poprzez wywołanie API dostarczonego przez osobny wewnętrzny system zaplecza

text: W niedalekiej przyszłości mam zamiar rozpocząć tworzenie aplikacji. Ta aplikacja składa się z: 1. Systemu zaplecza. Ten system udostępnia API do wykorzystania przez klienta. Ten system łączy się z magazynem danych i zewnętrznym API. 2. Magazyn danych: może być relacyjnym lub nosql. 3. Klient: Klientem będzie strona internetowa i aplikacje mobilne. Moje powody są poniżej: 1. Chcę zapobiec duplikowaniu zapytań SQL i wywołań API stron trzecich po stronie aplikacji witryny. Aplikacja i strona internetowa będą tworzone przez różnych programistów. Tylko programiści systemów zaplecza, którzy mogą tworzyć zapytania lub wywoływać zewnętrzne API. Wszyscy twórcy stron powinni korzystać wyłącznie z API dostarczanego przez system back-end 2. Moim zdaniem strona jest również klientem, podobnie jak aplikacja mobilna. Jeśli aplikacje mobilne pobierają dane z API systemu zaplecza, dlaczego strona nie powinna być taka sama. 3. Słyszałem, że Twitter używa podobnego pomysłu (choć mogę się mylić). Jego strona internetowa korzysta z API Twittera, podobnie jak ich aplikacja mobilna. Moją główną troską w tej architekturze jest to, że wydajność witryny będzie niższa niż w przypadku, gdy witryna może bezpośrednio wykonać zapytanie lub wywołanie API innej firmy. Czy są jakieś inne plusy i minusy, o których powinienem pomyśleć?


title: Czy istnieje technologia dynamicznego przypisywania kontekstu wykonania dla programów przeznaczonych dla wielu platform o bardzo zróżnicowanej wydajności w czasie wykonywania?

text: To może być nic nowego i prawdopodobnie istnieje, ale nigdy się o tym nie dowiedziałem i chciałbym. Najprostszym sposobem, aby być bardziej konkretnym, jest podanie przykładu. Byłem w autobusie i pobrałem aplikację Text to Speech na mój telefon z Androidem. Wiem, że syntezator mowy może działać na moim telefonie, ale prawdopodobnie działa na zdalnym serwerze. Założę się, że w niedalekiej przyszłości procesory w telefonach wzrosną i niektórzy ludzie będą mieli telefony, które mogą wykonać pracę, ale niektórzy nie. W scenariuszu, który właśnie opisuję, idealną sytuacją może być, gdyby środowisko wykonawcze dynamicznie ściągało kod do lokalnego wykonania i/lub wypychało kod z powrotem do zdalnego wykonania. Zdaję sobie sprawę, że istnieje wiele struktur do zdalnego wywoływania obiektów, ale czy którykolwiek z nich zakłada powyższe?


title: Korzystanie z oddzielnych wątków lub pojedynczego wątku

text: W moim projekcie, w systemie bezpieczeństwa, używałem gniazda, aby uzyskać dane klienta, a następnie zapisać je w bazie danych (jego adres IP i port, z którego się połączył oraz usługa, do której miał dostęp). Zastanawiałem się, czy pobieranie szczegółów i przechowywanie ich w bazie danych powinno odbywać się w osobnych wątkach, czy w jednym wątku. Które podejście jest bardziej korzystne?


title: Szukam rekomendacji do projektowania baz danych klasy 101

text: Otrzymałem zadanie wyszkolenia nowego programisty MS Access, który za kilka tygodni wejdzie do mojego działu. Nie jestem do końca pewien, jaki jest jego poziom wiedzy, ale z tego, co widziałem, wie bardzo niewiele, jeśli w ogóle, o podstawowych koncepcjach projektowych, takich jak normalizacja. Nie sądzę, żeby znał się nawet na VBA i nadal jest napędzany głównie makrami/kreatorami. W moim dziale nie ma budżetu na szkolenia, więc mogę skorzystać tylko z bezpłatnych opcji. Jakie zasoby można polecić, aby pomóc mi nauczyć go podstaw i zacząć rozwijać podstawy, na których będę mógł się rozwijać, aby przyspieszyć?


title: Kurs bezpieczeństwa internetowego?

text: Chciałbym odbyć kurs dotyczący bezpieczeństwa w sieci. Widziałem kilka certyfikatów, które mogą być interesujące: * CIW Web Security Professional * CISSP® - Certified Information Systems Security Professional * Certified Secure Software Lifecycle Professional Co wiesz o tych certyfikatach? czy są rozpoznawane? Nie próbuję zostać hakerem, chcę tylko upewnić się, że mam wystarczającą wiedzę na temat bezpieczeństwa sieci, aby poradzić sobie z dzisiejszym internetem. Z mojego niefachowego punktu widzenia „Certified Secure Software Lifecycle Professional” wygląda dokładnie tak, jak chcę, problem polega na tym, że kosztuje ponad 500 dolarów! Dlaczego certyfikacja? no cóż, chcę się uczyć, ale chciałbym też mieć możliwość zademonstrowania przyszłemu pracodawcy/klientowi, że muszę się uczyć i zdawać egzaminy, a nie tylko uczęszczać na kurs. Pozdrowienia.


title: Wskazówki/Proces tworzenia stron internetowych przy użyciu Django w małym zespole

text: Tworzymy aplikację internetową przy użyciu Django i jesteśmy małym zespołem 3-4 programistów — niektórzy zajmują się interfejsem użytkownika, a inni Backendem. Chciałbym kilka wskazówek i sugestii od ludzi tutaj. Oto nasza obecna konfiguracja: 1. Używamy Gita jako naszego narzędzia SCM i stosujemy ten model rozgałęzień. 2. Postępujemy zgodnie z PEP8 dla twojego przewodnika stylu. 3. Agile to nasza metodologia tworzenia oprogramowania i używamy do tego Jira. 4. Używamy wtyczki Confluence do Jira do dokumentacji i zamierzam pisać skrypt, który również zrzuca PyDocs do Confluence. 5. Używamy `virtualenv` do piaskownicy 6. Używamy `zc.buildout` do budowania To jest wszystko, co przychodzi mi do głowy. Wszelkie inne sugestie/wskazówki byłyby mile widziane. Czuję, że mamy całkiem niezłą konfigurację, ale jestem też przekonany, że moglibyśmy zrobić więcej.


title: Historie użytkowników o zadaniach automatycznych, kim jest użytkownik?

text: Zgodnie z formalnym stylem historii użytkownika: > Jako `<użytkownik>` chcę `<goal>`, aby `<korzyść>`. Jak można pisać historie, gdy nie ma oczywistej interakcji użytkownika, jak w przypadku zautomatyzowanych procesów, takich jak fakturowanie nocne?


title: Kto jest autorem/twórcą wzorca repozytorium?

text: Jestem prawie pewien, że to nie czwórka. Mam wrażenie, że to nowszy wzór. Gdzie została opublikowana/wspomniana po raz pierwszy?


title: Jak sformatować negatywne historyjki użytkowników?

text: Zgodnie z formalnym stylem historii użytkownika: > Jako `<użytkownik>` chcę `<goal>`, aby `<korzyść>`. Nasz zespół napotkał trudności w wyrażaniu rzeczy, w których właściciele systemu chcą zrobić coś, co negatywnie wpłynie na użytkownika. Jako arbitralny przykład załóżmy, że właściciel chce, aby system obciążał klientów za każdym razem, gdy sprawdzają pocztę e-mail. Zgodnie z formalnym stylem historyjek użytkowników możesz napisać to w następujący sposób: > Jako klient chcę być obciążany opłatami za każdym razem, gdy sprawdzam pocztę, aby > właściciel systemu mógł zwiększyć swoje przychody. Oczywiście klient nie chce być obciążany; historia staje się trudna do przeczytania, a język staje na drodze faktów. Jak można inaczej napisać wymaganie?


title: Dlaczego podczas otwierania pliku PDF w przeglądarce dostępna jest opcja „sprawdź element”, a nie „wyświetl źródło”?

text: Podczas otwierania plików PDF w Chrome i Firefox przycisk „Wyświetl źródło” jest wyszarzony. Jednak „Sprawdź element” ujawnia kod HTML. Czy przeglądarki po prostu pobierają plik i generują html, aby go wyświetlić?


title: Jak mam obsługiwać dwa crony, które aktualizują bazę danych?

text: Pracuję nad eksploratorem bloków klonów Bitcoin (w szczególności Mincoin), który ma zegar blokowy wynoszący około 1 minuty. Dla tych, którzy nie są zaznajomieni z Bitcoinem, w zasadzie nowa struktura danych zwana blokiem jest propagowana do sieci co minutę. Sam blok zawiera wiele informacji, ale najważniejsze są trzy rzeczy: * Poprzedni blok przed nim * Następny blok w łańcuchu * Struktura danych zawierająca transakcje w sieci Czasami więc w Bitcoin dochodzi do „reorganizacji”, która oznacza, że sieć wykryje, że niektóre z najnowszych bloków są nieważne i przełączy się na oddział innego górnika. W tej chwili co 1 minutę pobieram wszystkie nowe bloki z sieci i przechowuję je w swojej bazie danych. Jednak gdy nastąpi reorganizacja, wcześniej nie byłem w stanie usunąć i ponownie wykonać struktury blokowej mojej bazy danych. Teraz, gdy napisałem tę funkcjonalność, napotykam nowy problem. Mam funkcję, która przegląda ostatnie 100 bloków i sprawdza, czy hash bloku jest taki sam, jak raport mojego klienta Mincoin. Gdyby nastąpiła reorganizacja, niektóre bloki będą inne. Znajduję pierwszy blok, który jest inny i usuwam z bazy danych blok przed nim (aby ten blok mógł wskazywać poprawny nowy, który zostanie znaleziony), sam blok i wszystkie rekordy wszystkich bloków i transakcji, które mają miejsce po go, a następnie odbuduj stamtąd. Problem polega na tym, że proces wyszukiwania i usuwania każdej transakcji w usuniętych blokach trwa dłużej niż minutę z powodu dużej ilości danych, mimo że pola, których szukam, są indeksowane. Obawiam się więc, że 1-minutowy cron, który umieściłem na programie spowoduje problem, w którym zacznie ponownie pisać z bazy danych w tym samym czasie, gdy trwa proces usuwania z funkcji przebudowywania. Używam PHP i PDO, więc mam transakcję PDO dla funkcji przebudowy, ale to tylko dodaje więcej zamieszania. Jeśli transakcja PDO zacznie usuwać rekordy, to podczas tego procesu nowy cron odnajdzie jakieś nowe bloki i zapisze je do bazy, to transakcja PDO się kończy, jakie dane będą przechowywane? Czy spowoduje to błąd? Jak najlepiej sobie z tym poradzić - czy powinienem zapisać jakieś pole w bazie danych, które kontroluje zwykłego crona (po prostu ustawić przełącznik 0 lub 1 do włączania i wyłączania) i pozostawić przełącznik wyłączony, gdy funkcja odbudowy działa? Nie jestem pewien, jak zorganizować przepływ tego programu, aby upewnić się, że nie powoduje to, że moja baza danych zawiera niedokładne dane.


title: Czego brakuje w ASP.NET MVC?

text: Myślę, że większość ludzi zgodziłaby się, że ASP.NET MVC to jedna z lepszych technologii, które dał nam Microsoft. Daje pełną kontrolę nad renderowanym kodem HTML, zapewnia oddzielenie problemów i pakietów do bezstanowej natury sieci. Ostatnia wersja frameworka dała nam nowe funkcje i narzędzia i jest super, ale… jakie rozwiązania Microsoft powinien uwzględnić w nowych wersjach frameworka? Jakie są największe luki w porównaniu z innymi frameworkami internetowymi, takimi jak PHP czy Ruby? Co może poprawić produktywność programistów? Czego brakuje w ASP.NET MVC? Dlaczego ta brakująca funkcja jest ważna? Jak sobie teraz radzisz bez tego?


title: Fabryka statyczna vs fabryka jako singleton

text: W części mojego kodu mam statyczną fabrykę podobną do tej: public class SomeFactory { // Static class private SomeFactory() {...} public static Foo createFoo() {...} public static Foo createFooerFoo() { ...} } Podczas przeglądu kodu zaproponowano, że powinien to być singleton i wstrzyknięty. Powinno to wyglądać tak: public class SomeFactory { public SomeFactory() {} public Foo createFoo() {...} public Foo createFooerFoo() {...} } Kilka rzeczy do podkreślenia: * Obie fabryki są bezstanowe . * Jedyną różnicą między metodami są ich zakresy (instancja vs statyczna). Wdrożenia są takie same. * Foo to fasola, która nie ma interfejsu. Argumenty, które miałem za statycznym to: * Klasa jest bezstanowa, dlatego nie wymaga tworzenia instancji * Możliwość wywołania metody statycznej wydaje się bardziej naturalna niż konieczność tworzenia instancji fabryki. Argumenty przemawiające za fabryką jako singleton był: * Dobrze jest wstrzykiwać wszystko * Pomimo bezpaństwowości fabryki, testowanie jest łatwiejsze dzięki wstrzykiwaniu (łatwe do oszukania) * Powinno być kpiną podczas testowania konsumenta Mam poważne problemy z podejściem singletona, ponieważ wydaje się sugerować że żadna metoda nie powinna być statyczna. Wydaje się również sugerować, że narzędzia takie jak `StringUtils` powinny być pakowane i wstrzykiwane, co wydaje się głupie. Na koniec oznacza to, że w pewnym momencie będę musiał kpić z fabryki, co nie wydaje się właściwe. Nie przychodzi mi do głowy, kiedy będę musiał kpić z fabryki. Co myśli społeczność? Chociaż nie lubię podejścia singletonowego, nie wydaje mi się, żebym miał przeciwko niemu strasznie mocny argument.


title: Wyabstrahować złożoność transakcyjnego magazynu wartości klucza

text: Nasza aplikacja przechowuje ustawienia w „transakcyjnym magazynie klucz-wartość” platformy. prefs.edit().putInt("a", 1).commit(); int a = prefs.getInt("a"); Chciałbym dokonać refaktoryzacji naszego kodu w następujących celach: * Lepsze bezpieczeństwo typów (np.: int a = prefs.getA(); prefs.setA(1);) * Ukrycie złożoności przechowywania wartości Wygląda na to, że potrzebujesz klasy Preferences i klasy, aby przetłumaczyć ją do/z magazynu. public class Preferencje { private int a; public int getA() { return a; } public void setA(int a) { this.a = a; } } public class PreferencesMapper { IValueStore valueStore; public PreferencesMapper(IValueStore valueStore) { this.valueStore = valueStore; } public void save(Preferences prefs) { this.valueStore .edit() .putInt("a", prefs.getA()) .commit(); } public Preferences load() { Preferences prefs = new Preferences(); prefs.setA(this.valueStore.getInt("a")); zwróć preferencje; } } Teraz słabe typowanie jest skoncentrowane w tej pojedynczej klasie, a reszta aplikacji jest bardziej niezawodna. Jednak kod nadal przecieka złożoność ładowania/zapisywania i zastanawiam się, czy jest to konieczne. Preferencje p = preferencjaMapper.load(); p.zbiórA(1); preferencjeMapper.save(p); Myślę, że idealną sytuacją, w odniesieniu do projektowania z pojedynczą odpowiedzialnością, jest posiadanie jednej klasy Preferences, która wie, jak załadować/zapisać (lub samodzielnie delegować do czegoś innego). Szukam wskazówek, jak poprawić tę sytuację.


title: Jaka jest droga do zostania menedżerem/CIO/CTO?

text: Z twojego doświadczenia, co należy zrobić lub zrobić, aby zostać menedżerem/CIO/CTO, gdy masz wykształcenie informatyczne/programistyczne? Czy muszę ukończyć studia menedżerskie (MBA), aby zostać menedżerem lub zrobić karierę na poziomie zarządzania? Czy ktoś chce się podzielić?


title: Czy kompozycja usługi SOA faktycznie działa w praktyce?

text: Jedną z głównych zasad projektowania usług SOA jest zasada Service Composability (https://en.wikipedia.org/wiki/Service_composability_principle). Pomysł polega na tym, że komponując nowe usługi z wykorzystaniem istniejących jako elementów budulcowych, można szybko rozwijać nowe usługi. Podobnie jak w przypadku wywoływania istniejących metod obiektów podczas implementacji nowych metod. Stąd ma pochodzić znaczna część wzrostu produktywności z SOA. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/xsmJJ.jpg) Czy ktoś naprawdę to robi w praktyce? Widziałem to powtarzane w nieskończoność w tekście pisanym, ale sam nie doświadczyłem pracy w rzeczywistych implementacjach. Większość tekstu pomija również wzmiankę o **obsłudze transakcji**, co wydaje mi się największą przeszkodą w realizacji usług komponowalnych. Po pierwsze, naprawdę musisz rozwiązać problem z transakcjami, zanim będziesz mógł skomponować jakiekolwiek nietrywialne usługi. Oczywiście, jeśli przykład ma usługi „findCurrentTime()” i „writeLogMessage()”, łatwo jest nie martwić się o transakcje, ale nie mając przykładów z prawdziwego świata, takich jak „depositMoney()” i „withdrawMoney()”. Znam dwie opcje: 1. Zaimplementuj prawdziwe transakcje za pomocą WS-Atomic Transaction lub podobnego 2. Zaimplementuj rozwiązanie oparte na kompensacji, które kompensuje wywołanie do A za pomocą "cancelA()" lub coś takiego, jeśli wywołanie do B nie powiedzie się Oba te wydają się bardzo problematyczne / prawie bezużyteczne dla mnie: * Transakcja WS-Atomic * _dużo_ złożoności, większość porad, które znalazłem, ostrzega tylko „ból w dupie, nie rób tego” * wsparcie jest ograniczone, na przykład jeśli weźmiesz ESB o otwartym kodzie źródłowym, główne alternatywy ServiceMix, Mule czy WSO2 nie obsługują *odszkodowania* wdrożenie obsługi odszkodowań wydaje mi się bardzo skomplikowane. Co robimy, jeśli usługa A się powiedzie i nigdy nie otrzymamy odpowiedzi od usługi B i nie wiemy, czy się nie udała, czy się udała? Ręczne radzenie sobie z taką logiką (jako implementator usług compositingu) sprawia, że mam ochotę podciąć sobie nadgarstki - taka praca powinna dla mnie wykonywać niektóre narzędzia!. * Nie widzę też, jak możesz mieć metody kompensacji w nietrywialnych usługach. Powiedzmy, że twoja usługa A to "depositMoney()" i to się powiedzie, inna akcja szybko przenosi pieniądze gdzie indziej, a następnie otrzymujemy "compensateDepositMoney()", co teraz robimy? Wygląda na wielką puszkę robaków. Wydaje mi się, że **składanie usług jest tak podstawową zasadą SOA, że tak naprawdę nie czerpiesz korzyści z SOA, jeśli nie możesz (wygodnie) komponować usług**. Jaka jest rzeczywistość? 90% użytkowników SOA korzysta z „ułomnej architektury SOA” bez rzeczywistego składu usługi? A może większość użytkowników faktycznie korzysta z kompozycji usług i przesadzam z trudnością?


title: Jakie algorytmy przydałyby się do zaprojektowania symulatora giełdy?

text: Jesteśmy w trakcie budowania gry symulacyjnej na giełdzie. Projekt frontendu jest gotowy, ale nie mamy pojęcia, jak dokładnie należy zaprojektować algorytmy zaplecza. Jakie algorytmy powinniśmy wdrożyć, aby to zadziałało? Programujemy w PHP/RoR/Python. Jeśli istnieje już system open source, na który moglibyśmy spojrzeć, byłby to dodatkowy bonus.


title: Jak długo powinniśmy generalnie spędzać na pisaniu testów jednostkowych dla nowej funkcji lub naprawiania błędów?

text: Kiedy muszę zaimplementować nową funkcję lub naprawić błąd, zwykle próbuję odtworzyć sytuację za pomocą testu. Czasami spędzam około 3 godzin na wymyślaniu urządzeń i pisaniu testu. Rzeczywista implementacja funkcji lub naprawa błędów zajmuje mniej niż 1 godzinę. Czy ktoś inny spędza co najmniej 3 razy więcej czasu na napisanie testu w porównaniu z faktycznym wdrożeniem funkcji lub naprawą błędu? Jaki jest akceptowalny stosunek czasu spędzonego na pisaniu testu do pisania kodu?


title: Czy powinienem szukać odpowiedzi na ćwiczenia z programowania?

text: Niedawno rozpocząłem swoją podróż do nauki programowania i dostałem książkę o Objective-C. Chodzi o to, że dość często zacinam się, próbując wymyślić, jak rozwiązać różne ćwiczenia. Jestem całkiem nowy, obecnie w rozdziale 5 i próbuję dowiedzieć się, jak wykonać różne ćwiczenia. Utknąłem i nie mogę rozwiązać ćwiczenia, więc szukam rozwiązania na oficjalnym forum i próbuję zrozumieć, jak je rozwiązali. Potem ciągle myślę, że intencją autora musi być możliwość wykonania poniższych ćwiczeń, więc trochę się martwię, że nie będę w stanie wykonać wszystkich ćwiczeń. Zastanawiałem się więc: czy szukanie rozwiązania online i próba zrozumienia metody stojącej za rozwiązaniem jest złym zachowaniem w nauce, czy też powinienem trzymać się tej metody i uczyć się jej jakoś prędzej czy później? Co robiłeś, kiedy brałeś udział w tym samym procesie uczenia się co ja?


title: Czy dokładne określenie czasu, jaki każdy członek zespołu spędza nad historią, jest przydatne w Scrumie?

text: Jeden z moich kolegów zasugerował, ile czasu każdy członek zespołu spędza nad każdą historyjką użytkownika. Wydaje mi się to prawdopodobnie mylące dla zespołu programistów podczas iteracji i mylące jako miara szacowania historii podczas przyszłych spotkań planistycznych. Czy ktoś z was ma doświadczenie z takim systemem i ma jakieś przemyślenia na temat tego, jak użyteczny lub destrukcyjny może on być?


title: Czy naprawdę potrzebuję oop do mojej pracy? Po 10 latach myślę, że nie

text: Po 10 latach pisania czegoś w rodzaju logiki biznesowej dla mojej firmy zdałem sobie sprawę, że dla 95% mojego kodu po prostu nie potrzebuję żadnych specjalnych technik OO. Przez lata starałem się być lepszy z tymi wszystkimi rzeczami OO. Ale z każdą książką lub artykułem byłem coraz bardziej zdezorientowany, a wynikowy kod był brzydszy i trudniejszy w utrzymaniu. I zawsze wydawało się to niewłaściwe i zbyt skomplikowane. Chodzi o to, że moja praca jest bardzo łatwa z technicznego punktu widzenia. Czytaj rzeczy z bazy danych (nie tak naprawdę SQL), wykonaj obliczenia i może zapisz coś z powrotem do bazy danych. Największym problemem jest prawidłowa obsługa błędów i transakcji. Dowiedziałem się, że najłatwiejszym sposobem wyrażenia siebie w c++ jest pisanie prostych funkcji. Może od czasu do czasu obsługa parametrów za pomocą struktur. Ale to już prawie wszystko. Napisałem kilka klas pomocniczych, których potrzebuję regularnie, ale nie jest to często konieczne. Ale w przeszłości otaczałem każdy mały lub większy fragment kodu klasą. I to też cały czas robią i mówią mi moi współpracownicy z działu c#. Moje pytanie brzmi, co jest z nami nie tak, że myślimy, że możemy rozwiązać każdy problem programistyczny, dorzucając na niego tylko więcej technik OO? Potrzebowałem 10 lat, żeby zrozumieć, że mniej znaczy więcej. Przejrzałem książkę napisaną przez tego gościa z Rumunii, który robi dużo magii z szablonami. I pomyślałem: „Człowieku, to wygląda tak interesująco – dlaczego po prostu tego nie potrzebujesz?” Ponieważ to tutaj jest dla pytań i odpowiedzi: Ile OO potrzebujesz, aby wykonać swoją pracę? I jak często myślisz, że robisz coś bardziej skomplikowanego niż konieczne tylko dlatego, że przeczytałeś o nowym fajnym pomyśle. A co zrobić, żeby nie wpaść w pułapkę przeprojektowania?


title: Czy właściwe jest, aby klasa była tylko zbiorem informacji bez logiki?

text: Załóżmy, że mam klasę „Osoba”, która ma zmienne instancji „wiek”, „waga” i „wysokość”, oraz inną klasę „Fruit”, która ma zmienne instancji „sugarContent” i „tekstura”. Klasa `Person` nie ma metod zapisu seterów i getterów, podczas gdy klasa `Fruit` zawiera zarówno settery, jak i gettery **i** metody logiczne, takie jak `calculateSweetness`. Czy klasa `Fruit` jest typem klasy, która jest lepszą praktyką niż klasa `Person`. Mam na myśli to, że klasa „Osoba” wydaje się nie mieć większego celu; istnieje wyłącznie w celu organizowania danych, podczas gdy klasa `Fruit` organizuje dane i faktycznie zawiera metody dla logiki.


title: Termin dotyczący problemów z wydajnością spowodowanych zapętleniem

text: Czy istnieje termin określający problemy z wydajnością spowodowane przez kogoś, kto tworzy pętlę, która wykonuje setki lub tysiące działań, które można było wykonać zbiorczo? Moim przykładem jest to, że ciągle wpadam w pętle, które przechodzą przez grupę identyfikatorów, a następnie wykonuję pojedyncze zapytanie dla każdego identyfikatora, aby pobrać skojarzony wiersz, zamiast tworzyć pojedyncze zapytanie.


title: Organizowanie jednostronicowej aplikacji ASP.Net z Nancy

text: Jako projekt osobisty tworzę pojedynczą stronę, aplikację sieci web asp.net, używając Nancy do świadczenia usług RESTful na pojedynczej stronie. Ze względu na złożoność pojedynczej strony, w szczególności użyte JavaScripty, myślę, że stworzenie dedykowanego projektu dla strony klienta tworzenia stron internetowych i drugiego dla strony usługowej zorganizuje i uprości rozwój. rozwiązanie | +-- strona internetowa/klient (pojedyncza strona html, js, css) | - zawiera projekt asp.net i bibliotekę nancy | hostować moduły w folderze projektu aplikacji | +-- aplikacja / usługa (moduły Nancy, bootstrap dla innej warstwy) | . . . i inne warstwy (trzywarstwowe, oparte na domenie itp.) . Czy to dobry sposób na zorganizowanie złożonej aplikacji jednostronicowej? Czy nadmiernie pracuję nad aplikacją internetową, powodując zbyt dużą złożoność?


title: Czy aplikacje w stylu Metro zastąpią aplikacje komputerowe?

text: Microsoft Windows8 obsługuje nowe aplikacje w stylu Metro, a aplikacje Metro nie używają Win32; działają na WinRT. Zastanawiam się, czy aplikacje w stylu Metro zostały wymyślone tylko dla tabletów. Czy Microsoft ma nadzieję, że aplikacje w stylu Metro w końcu zjedzą wszystkie stare aplikacje na komputery stacjonarne, czy też pójdą z tymi dwiema platformami do 2020 roku?


title: Na jakiej podstawie podzieliłbyś pieniądze z darowizn między członków zespołu open source bez żadnych konfliktów?

text: Jestem programistą projektu open source, który jest hostowany w SourceForge. Zaczęło się jako mała aplikacja, a po kilku wydaniach stało się coraz bardziej popularne i zaczęło pochłaniać ode mnie więcej czasu i odpowiedzialności. Więc włączyłem opcję darowizny w SourceForge. Z pasją rozwijam go za darmo, ale jeśli (kiedykolwiek) pojawią się jakieś pieniądze, jak mam je podzielić z moim zespołem? 1. Czy powinienem podzielić kwotę równo pomiędzy liczbę członków zespołu? (50-50 jak teraz jest to dwuosobowa drużyna) 2. Ilość klas, commitów lub innych wartościowych zgłoszeń członków zespołu? 3. Jakiś inny pomysł? Co byś zrobił w takiej sytuacji? Proszę o opinie. Mam nadzieję, że to pytanie przyda się innym.


title: Jakie jest uzasadnienie konwencji nazewnictwa przedrostków „I” dla interfejsów w .NET?

text: Wiem, że konwencja „I” istnieje od czasu modelu COM, ale nigdy nie rozumiałem, dlaczego nie została ona ponownie rozważona tak, jak każda inna konwencja nazewnictwa przed .NET. Jeśli chodzi o konsumpcję, jedyną rzeczą, która oddziela interfejs od, powiedzmy, klasy abstrakcyjnej, jest to, że mogą być wielokrotnie dziedziczone. Ale wszystko po Visual Studio 2003 wyświetlało sygnatury typów w podpowiedziach, więc jest tak samo bezużyteczne, jak wszystkie inne węgierskie notacje, które zostały odrzucone. Pomyślałem też, że może być tak, że możesz mieć podstawową implementację interfejsu o tej samej nazwie, np. `Message` dziedziczy `IMessage`, ale większość bibliotek .NET poszła na dodanie słowa „Base” na końcu (np. `System.Collections.ReadOnlyCollectionBase`) — i to ma bardziej semantyczny sens. Interop COM wydaje się być kolejnym możliwym powodem — ale to nie jest tak, że klasy opakowujące, które generuje, są idealnie idiomatyczne .NET, więc wątpię, czy było to względy estetyczne. W jednym z moich nowszych projektów całkowicie zrezygnowałem z konwencji i czuję się dobrze. Czy jest coś, czego mi brakuje?


title: Co powinienem zawrzeć w moim repozytorium z projektów IDE

text: Chcę dodać projekt, który w tym przypadku jest tworzony w Netbeans, ale to pytanie jest ogólne dla większości IDE. Chodzi po prostu o to, co powinienem zawrzeć w moim repozytorium. Na przykład Netbeans tworzy folder nbproject, eclipse tworzy folder .settings itp. Czy powinienem je uwzględnić w moim repozytorium, jakie są zalety/wady dołączania lub nie uwzględniania ustawień specyficznych dla projektu. W tym przypadku jest to projekt osobisty, więc nie wyobrażam sobie, że inni ludzie zaczną nad nim pracować, ale fajnie byłoby dodać absolutne minimum ustawień projektu, aby sam projekt był łatwy do rozpoczęcia pracy na różnych maszynach.


title: Weryfikacja wartości standardów testowych

text: Obecnie opracowujemy koncepcję naszych standardów testowych. Do tej pory nie mamy standardów. Wszystko, co robimy, to kazać deweloperowi pisać testy. Teraz mamy następujący podstawowy pomysł: Użyjemy metryki pokrycia opisanej w artykule na blogu poświęconym testowaniu programistów, aby zobrazować status quo. Nie będziemy żądać, ile procent kodu ma zostać pokryte. Niemniej jednak chcemy jakiejś kontroli. Dlatego sprawdzimy, czy zasięg znacznie się z czasem zmniejszył. W takim przypadku cały zespół zostanie o tym poinformowany. Nie powinno być osobistej obwiniania. Aby zachęcić programistów do pisania większej liczby testów, poprosimy ich o oszacowanie funkcji z myślą o testach, aby mieli wystarczająco dużo czasu na napisanie testów. Nie mamy dużego doświadczenia w normach testowych. Czy to dobre podejście? Czy ta metryka jest przydatna? A co myślisz o naszej strategii kontrolowania członków zespołu? **EDYTUJ** Dodatkowe informacje dotyczące postu Skivvza. Nie mamy prawie żadnego kodu. Ogólnie jest to około 25%. Niektóre komponenty po prostu nie są objęte gwarancją. Naszym problemem jest to, że nasi programiści - głównie osoby z ponad 10 letnim doświadczeniem - w ogóle nie piszą testów. Dlatego inwestujemy dużo czasu w naprawę błędów znalezionych przez nasz zespół testowy. To, czego chcemy, to mieć większą pewność, że nie zepsujemy czegoś przez implementację innej rzeczy i że nie zrobimy tych samych błędów. Dodatkowo byłoby miło, gdyby testy poprowadziły członków naszego zespołu do tworzenia lepszej architektury w ich komponentach. Osobiście widziałem to w komponencie, do którego wszedłem później i w pewnym momencie zrefaktorowałem cały komponent, ponieważ nie dało się go nawet trochę przetestować. Rozwijamy platformę oprogramowania, która rozwija się już od kilku lat. Dlatego mamy dużo kodu, który nie jest objęty testami. Tak jak powiedziałem powyżej, chcemy zmotywować członków naszego zespołu do pisania testów komponentów, które obecnie rozwijają.


title: Dlaczego w znacznikach stron używa się tak wielu tabel HTML?

text: Próbuję zająć się tworzeniem stron internetowych, więc zacząłem uczyć się HTML, CSS i JavaScript. Bardzo dobrze radzę sobie z javascriptem, ale nadal nie mogę nic zrobić za pomocą HTML i CSS, aby uratować mi życie. Chciałem poprosić o kilka miejsc lub wskazówek do poprawy, ale wiem, że pytanie było zadawane niezliczoną ilość razy i po prostu zostanie usunięte, więc pomyślałem, że po prostu zobaczę źródło witryn innych osób. To, co widzę, to stoły po lewej i prawej stronie. Czy istnieje uzasadniony powód do korzystania z tabel?


title: Wydajność pamięci Haskella — co jest lepszym podejściem?

text: Wdrażamy bibliotekę kompresji macierzy opartą na zmodyfikowanej dwuwymiarowej składni gramatycznej. Teraz mamy dwa podejścia do naszych typów danych - które będzie lepsze w przypadku użycia pamięci? (chcemy coś skompresować ;)). Gramatyki zawierają NonTerminals z dokładnie 4 Productions lub Terminal po prawej stronie. Będziemy potrzebować nazw produkcji do sprawdzania równości i minimalizacji gramatyki. Pierwszy: -- | Wpisz synonim symboli nieterminalnych typu NonTerminal = String -- | Typ danych dla prawej strony danych produkcyjnych RightHandSide = DownStep Nieterminal Nieterminal Nieterminal Nieterminal | Terminal Int -- | Typ danych dla zestawu produkcji typ ProductionMap = Mapa NonTerminal RightHandSide data MatrixGrammar = MatrixGrammar { -- symbol startu startSymbol :: NonTerminal -- produkcje produkcje :: ProductionMap } Tutaj nasze dane RightHandSide zapisują tylko nazwy String do określenia kolejnych produkcji, nie wiemy, jak Haskell ratuje te struny. Na przykład macierz [[0, 0], [0, 0]] ma 2 produkcje: a = Terminal 0 aString = "A" b = DownStep aString aString aString aString bString = "B" produkcje = Map.FromList [(aString , a), (bString, b)] Więc pytanie brzmi: jak często Łańcuch "A" jest rzeczywiście zapisywany? Raz w aString, 4 razy w b i raz w produkcjach, czy tylko raz w aString, a pozostałe mają po prostu "tańsze" referencje? Druga: produkcja danych = produkcja struny nieterminalnej Produkcja Produkcja Produkcja | Terminal String Typ Int ProductionMap = Map String Produkcja tutaj termin "Terminal" jest nieco mylący, ponieważ w rzeczywistości jest to produkcja, w której terminal jest po prawej stronie. Ta sama macierz: a = Terminal "A" 0 b = NonTerminal "B" a a a a produkcje = Map.fromList [("A", a), ("B", b)] i podobne pytanie: jak często odbywa się produkcja zapisany wewnętrznie przez Haskella? Możliwe, że wrzucimy nazwy w produkcjach, jeśli ich nie potrzebujemy, ale nie jesteśmy tego pewni w tej chwili. Powiedzmy, że mamy gramatykę z około 1000 produkcji. Które podejście zużyje mniej pamięci? Na koniec pytanie o liczby całkowite w Haskell: Obecnie planujemy nadać nazwę Strings. Ale możemy łatwo przełączyć się na nazwy całkowite, ponieważ przy 1000 produkcjach będziemy mieli nazwy zawierające więcej niż 4 znaki (co zakładam, że jest 32 bitowe?). Jak Haskell sobie z tym radzi. Czy Int jest zawsze 32-bitowy, a liczba całkowita przydziela pamięć, której naprawdę potrzebuje? Przeczytałem też to: Wymyślanie testu semantyki wartości/odniesień Haskella \- ale nie wiem, co to dokładnie oznacza dla nas - jestem bardziej imperatywnym dzieckiem javy niż dobrym programistą funkcjonalnym :P


title: Jak zarządzać potencjalnie nieaktualnymi danymi z API WikiMedia

text: Piszę aplikację internetową, która pobiera małe fragmenty artykułów z Wikipedii i prezentuje je użytkownikom. Nie chcę usuwać wpisów artykułów, ponieważ nie chcę wysyłać śmiesznej ilości żądań do API WikiMedia, niepotrzebnie obciążając je. Moje pytanie brzmi, ponieważ Wikipedia jest z natury dynamiczna i oparta na współpracy, jaki byłby najlepszy sposób na dostarczanie użytkownikom rozsądnie zaktualizowanych treści (treść nie musi odzwierciedlać w 100% aktualnego artykułu, ale nie powinna być zbyt daleko w tyle ) bez ciągłego odpytywania ich serwerów? Skłaniam się ku przechowywaniu fragmentów artykułów w mojej bazie danych wraz ze znacznikiem czasu i za każdym razem, gdy użytkownik zażąda artykułu ze znacznikiem czasu powyżej x dni, ponownie zapytam API i zaktualizuję wpis w mojej bazie danych. Innym problemem jest to, że pobieram artykuły za pomocą JavaScript po stronie klienta, a następnie wywołuję API na moim serwerze, aby je zapisać. Aktualizacja artykułu wyglądałaby tak: Użytkownik wysyła zapytanie do artykułu -> mój serwer zwraca artykuł -> sprawdzenie po stronie klienta stwierdza, że znacznik czasu jest za stary -> po stronie klienta ponownie wysyła zapytanie do WikiMedia i wyświetla zawartość użytkownikowi -> pożary po stronie klienta żądanie do mojego serwera przechowywania danych. Wygląda na to, że można to zrobić lepiej, ale nie chcę odpytywać WikiMedia bezpośrednio z mojego serwera... Jak mogę to ulepszyć? Architektura: framework SlimPHP, sterownik RethinkDB + PHP, jQuery/JS, HTML, CSS


title: Używasz Pythona do analizowania plików dziennika?

text: Moimi pierwszymi użytecznymi projektami jako programista były skrypty Pythona, które analizują istotne informacje z plików dziennika i wykonują pewne analizy. Przeszukałem się i znalazłem kilka funkcjonalnych rozwiązań, ale mam podejrzenie, że istnieją bardziej efektywne podejścia. Opiszę mój obecny proces z 4 podstawowymi krokami: 1. Oczyść dane źródłowe: W bardziej skomplikowanych scenariuszach mam plik tekstowy, który jest ogólnie pewnego rodzaju wariantem CSV. „Ogólnie”, ponieważ może wymagać pierwszego przejścia w celu oczyszczenia sytuacji odstających, zanim będę mógł efektywnie korzystać z modułu CSV. 2. Zapisuj czyste dane do tymczasowego pliku tekstowego: Po wyczyszczeniu każdego wiersza zapisuję wiersz do nowego pliku tekstowego. 3. Czytaj w czystym, sformatowanym, tymczasowym pliku tekstowym za pomocą modułu CSV: Założyłem, że odczytywanie danych za pomocą standardowego modułu CSV byłoby dość wydajną metodą i idealną, ponieważ wtedy mogę łatwo wyodrębnić wartości z określonych kolumn w każdym wierszu. 4. Wyodrębnij odpowiednie wartości: Teraz mogę z łatwością przeszukiwać cały plik, pobierając odpowiednie dane. Dane dołączam do list, które wykorzystuję do właściwej analizy. Dla mnie wielką czerwoną flagą jest to, że tak wiele razy przeglądam wszystkie moje dane. Może powinienem poświęcić więcej czasu na znalezienie wzorców w danych, aby móc wyodrębnić ważne wartości przy pierwszym przejściu? Również przy większych logach (20 000+ linii) jeden z moich skryptów zajmuje 15-30 sekund. Wydaje się to raczej powolne. Jakie są obszary optymalizacji? Czy to modyfikacja obecnego projektu, czy zupełnie inne podejście.


title: Poziom dojrzałości SaaS 2, jak mogę zbudować konfigurowalny SaaS? (Techniki i wzorce)

text: Zgodnie z modelem dojrzałości SaaS SaaS jest na poziomie 2, jeśli jest konfigurowalny, ale jak mogę zacząć w tej koncepcji? Jakie wzorce i techniki mogę wykorzystać, aby włączyć SaaS?


title: Gdzie podziała się chmura obliczeniowa?

text: O tym terminie słyszę od blisko 5 lat. Czytałem o usługach firmy Microsoft (Azure), ale nigdy nie widziałem, aby zostały one przyjęte w powszechnym użyciu. To, co próbuję zrozumieć, to: 1. Co się stało z przetwarzaniem w chmurze? Czy obecna infrastruktura jest niewystarczająca, aby to zrealizować? 2. Czy jest jeszcze w powijakach? 3. Czy jest używany w innych formach, jak wszystkie usługi, które Google wydaje się świadczyć (plus Plus Google OS itp.)? 4. Jeśli to się nie powiodło, to dlaczego?


title: Tworzenie zautomatyzowanego frameworka testowego do testowania dymu interfejsu użytkownika

text: Pracę magisterską na temat zautomatyzowanych testów UI robię w firmie, która stosuje ciągłą integrację swoich projektów. Firma buduje intranety w Microsoft SharePoint 2013, a moim zadaniem jest stworzenie zautomatyzowanego frameworka testowego, który można wykorzystać w dowolnym projekcie jako test dymny i który integruje się z modelem ciągłej integracji. Firma używa Team Foundation Server 2010 i Visual Studio 2012. Wszystkie kompilacje są wykonywane na oddzielnym serwerze kompilacji określonym w definicji kompilacji. Skonfigurowałem CI dla własnego serwera demonstracyjnego i mam dostęp do oddzielnego serwera, którego zamierzam używać jako Kontrolera Testów i Agenta, który będzie uruchamiał wszystkie testy na wdrożonych projektach. Mam kilka, być może niezbyt jasnych, pytań, które dotyczą tego zagadnienia. 1. Moim pomysłem jest napisanie metod testowych przy użyciu Selenium i spakowanie ich do pliku DLL, który można załadować do wszystkich nowych projektów po ich skonfigurowaniu. Testy będą dotyczyć tylko standardowych interfejsów użytkownika programu SharePoint. Wraz z tym dołączę plik `config.xml`, który określa, która strona ma być testowana. Używam Selenium ze standardowymi narzędziami do testowania jednostek programu Visual Studio. Czy są jakieś inne opcje, które mogłyby lepiej pasować do moich intencji? 2. Zrozumiałem, że mogę określić pliki DLL zawierające testy w definicji kompilacji dla TFS, czy byłoby to możliwe dla sposobu, w jaki planuję napisać testy, czy ta opcja dotyczy tylko plików DLL, które są tworzone w rozwiązanie? Jeśli nie, czy mogę dodać je jako odniesienie i oczekiwać, że zostaną uruchomione przez serwer testowy, zakładając, że pasują do wzorca dla zestawów testowych? 3. Firma chciałaby umożliwić programistom dodawanie oddzielnych testów niestandardowych i zasugerowała mi napisanie frameworka testowego w taki sposób, aby mogli zaimplementować interfejs lub coś podobnego. Chcą mieć możliwość pisania w pełni dostosowanych testów Selenium, a moje przemyślenia na ten temat są takie, że łatwiej byłoby im dodać osobną bibliotekę DLL z własnymi testami i pozwolić serwerowi testowemu uruchamiać je osobno? Czy istnieją inne dobre sposoby na „połączenie” istniejącego zestawu testów z niestandardowymi testami pisemnymi?


title: Osadzanie XACML PDP?

text: Muszę wdrożyć elastyczny system kontroli dostępu dla frameworka używanego przez kilka aplikacji .NET. Przyjrzałem się kontroli dostępu opartej na atrybutach (ABAC) i XACML i wydaje się, że zapewnia to niezbędną elastyczność, aby podejmować decyzje nie tylko w oparciu o tożsamość użytkownika, ale także informacje o żądanym zasobie. Typowy scenariusz, w którym tego potrzebuję: > Zezwól na dostęp do akt pacjentów tylko lekarzom przydzielonym do > pacjenta. Jednak przekazanie autoryzacji zewnętrznemu dostawcy lub innemu serwerowi PDP, ponieważ oznaczałoby połączenie sieciowe za każdym razem, gdy PEP (aplikacja) wykonuje akcję, która musi zostać autoryzowana. **Czy ma sens używanie XACML z wbudowanym PDP?** Tzn. aplikacja przekształca decyzje dotyczące autoryzacji na żądania XACML, a następnie wywołuje wbudowany moduł PDP z żądaniem, które je rozwiązuje, wysyła zapytanie do bazy danych o informacje o zasobach i zasadach oraz generuje odpowiedź XACML. A może XACML jest przydatny tylko w scenariuszach rozproszonej kontroli dostępu? Czy generalnie bardziej przydatne jest wdrożenie niestandardowego systemu kontroli dostępu, jeśli nie planuję uzewnętrznić punktu podejmowania decyzji?


title: Czy można wrócić do poprzedniej instrukcji c++

text: Uczę się więc podstaw z C++ i stworzyłem małe tekstowe centrum handlowe, które pyta użytkownika, czy chciałby kupić przedmiot. Jeśli użytkownik odpowie twierdząco lub dowolnym wariantem tak, wyświetli listę przedmiotów, z której możesz następnie wpisać nazwę przedmiotu, który chcesz kupić, i powie „dziękuję, kupiłeś x pozycja, do widzenia” i program się zatrzyma. Jeśli zdecydujesz się na nie, pojawi się komunikat „wybrałeś nie, czy na pewno nie chcesz wrócić i kupić przedmiotu”. Jeśli wpiszesz tak, ponownie wyświetli listę elementów do wybrania, jednak chciałbym, aby to zrobił, a następnie „przestrzegał” poprzedniej instrukcji if (tak jakbyś mówił tak pierwsze pytanie). Mam nadzieję, że złapiesz o co mi chodzi! Dziękuję. EDYCJA: nie jestem pewien, co jest tak niejasne w pytaniu „Chciałbym, aby to zrobił, to „przestrzegać” poprzedniego stwierdzenia if (tak jakbyś powiedział tak na pierwsze pytanie).' Pytam, czy można cofnąć się do poprzedniej instrukcji if, o której wspomniano wcześniej w kodzie, jednak zdaję sobie sprawę, że prawdopodobnie nie jest to możliwe i teraz próbuję znaleźć inny sposób na zrobienie tego. Dziękuję.


title: Jeśli to nie jest historyjka użytkownika, co to jest?

text: Pracuję w organizacji, która próbuje przejść na Agile. Jedną z rzeczy, z którą się zmagam, jest to, co nazywają historyjkami użytkownika. Z mojego doświadczenia wynika, że historyjka użytkownika wyglądałaby następująco: > Use powinno być w stanie wykonać zadanie x przy użyciu narzędzia y Podczas sprintu zaprojektowalibyśmy rozwiązanie, które to umożliwi. Piszemy jednak tak: > Użytkownik powinien kliknąć przycisk A, aby przejść do strony B i przeczytać tekst C, gdzie będzie > następnie wybrać opcję D, która przekieruje go na stronę E. Dane F zostaną > zapisane na baza danych. Dla mnie brzmi to jako rozwiązanie, do czego służy sprint. Czy są scenariusze, w których ta ostatnia jest rzeczywiście odpowiednią historyjką użytkownika? A jeśli nie, to czy istnieje odpowiedni termin dla tego typu szczegółowego „opisu rozwiązania” w ramach procesu Agile?


title: Ważny nietechniczny kurs dla programistów?

text: Jakie szkolenie nietechniczne proponujesz programiście? Przykładem może być kurs wystąpień publicznych, umiejętność prezentacji, język angielski, pisanie biznesowe lub cokolwiek niezwiązanego z programowaniem lub inżynierią oprogramowania.


title: Gdzie trafia komunikat o zwolnieniu przepływu git?

text: Podczas tworzenia wydania za pomocą git flow, takiego jak: git flow release finish <branch_name> jestem proszony o wiadomość o wydaniu. Szukałem po omacku, żeby zobaczyć, dokąd to pójdzie, ale bez powodzenia. Dowolny pomysł?


title: Refaktoryzacja kodu niejasno komentowanego

text: W kodzie refaktoryzacji natknąłem się na kod, który miał komentarze. Przyglądając się bliżej komentarzom, zauważyłem, że kod wyraźnie nie robił tego, co mówiły komentarze. **Bez dostępu do kodera i dokumentacji** oraz bez jasnych wskazówek dotyczących kodu (tj. defektów co do tego, że kod działa niepoprawnie), to najlepsza praktyka, aby założyć, że kod jest poprawny i wyczyścić uwagi?


title: Czy istnieją dowody na to, że leki mogą rzeczywiście pomóc programistom w tworzeniu „lepszego” kodu?

text: Właśnie przeczytałem cytat Steve'a Jobsa: „LSD było jedną z dwóch lub trzech najważniejszych rzeczy, które zrobiłem w moim życiu”. Również cytat z tego artykułu: > Nie był sam wśród informatyków w swoim docenieniu > halucynogenów i ich zdolności do wyzwolenia ludzkiej myśli z więzienia > umysłu. Chociaż **Jestem świadomy faktu, że Jobs nie był programistą** , ten cytat dał mi do myślenia, czy istnieją jakiekolwiek dowody na poparcie teorii, że leki mogą pomóc w uczynieniu „lepszego” programisty. * Czy kiedykolwiek przeprowadzono badanie, w którym programiści otrzymali leki, aby sprawdzić, czy mogą stworzyć „lepszy” kod? * Czy istnieje dobrze znana koncepcja programistyczna lub fragment kodu, który pochodzi od ludzi, którzy brali narkotyki? EDYTUJ Więc zrobiłem trochę więcej badań i okazało się, że Dennis R. Wier faktycznie udokumentował, w jaki sposób wziął LSD, aby owinąć głowę wokół projektu kodowania: > W pewnym momencie projektu nie mogłem uzyskać ogólnego punktu widzenia na działanie > cały system. To naprawdę było zbyt wiele dla mojego mózgu, aby zachować > wszystkie subtelne aspekty i niuanse przetwarzania, abym mógł uzyskać przegląd > przetwarzania i projektowania. Po zmaganiu się z tym problemem przez kilka > tygodni, postanowiłem użyć trochę kwasu, aby sprawdzić, czy umożliwi to > przełom, bo inaczej nie byłbym w stanie ukończyć projektu > i mieć pewność spójnego projektu całościowego[ 1] Jest też interesujący artykuł na przewodach o Kevinie Herbecie, który używał LSD do rozwiązywania trudnych problemów technicznych, a chemik Kary Mullis powiedział nawet > „… że LSD pomogło mu rozwinąć reakcję łańcuchową polimerazy, która pomaga > wzmocnić określone sekwencje DNA ”. [2] EDYCJA 2 Niestety pytanie zostało ponownie zamknięte, ale na HackerNews odbyła się świetna dyskusja. Od pchivers użytkowników HN: > Z tego, co rozumiem, jest tylko jedno badanie dotyczące związku między > kreatywnością a LSD: Środki psychodeliczne w twórczym rozwiązywaniu problemów: pilotaż > badanie. Harman WW, McKim RH, Mogar RE, Fadiman J, Stolaroff MJ. Psychol Rep. > 1966 sierpień;19(1):211-27. http://en.wikipedia.org/wiki/Psychedelics_in_problem- > rozwiązywanie... Wyniki sugerują, że LSD ma pozytywny wpływ na kreatywne > rozwiązywanie problemów. Myślę, że to wstyd, że nie przeprowadzono żadnych dalszych eksperymentów.