title: Jak odpowiadać na przychodzące wiadomości sieciowe w sposób zapewniający luźne połączenie?

text: Pracuję teraz nad protokołem typu klient-serwer w Ruby. Natrafiłem na szkopuł, w którym nie jestem do końca pewien, jak postępować. Obecnie posiadam klasę `Remote`, która oznacza połączenie zdalne (do użytku przez EventMachine). Gdy `Zdalny` odbiera wiadomość (tj. pakiet sieciowy), wysyła ją do `MessageDecoder`, który zwraca zdekodowaną wiadomość w postaci skrótu, na przykład (pseudo-kod z wyprzedzeniem) { source = <the_remote_connection>, message_code = 1, // Kod operacji, który wskazuje, jak odpowiedzieć na tę wiadomość payload = { klucz_specyficzny_pakietu = wartość_specyficzna_pakietu // dostarczany przez dekoder } } Tak więc, gdy otrzymam to z powrotem z `MessageDecoder`, `Remote` wysyła go do swojego `ConnectionListener`, który musi decydować o sposobie dystrybucji tej wiadomości w aplikacji. Oto problem: każda wiadomość może wymagać innego zakresu zmiennych. Na przykład, można wymagać wystąpienia obiektu `World`, o którym `ConnectionListener` nie wie (i słusznie nie powinien - kod sieciowy nie powinien być połączony z resztą programu). Więc moje pytanie brzmi: jak mogę zaimplementować luźno powiązany system do dystrybucji odbieranych wiadomości nieznających sieci ze zdalnego połączenia w mojej aplikacji, który w jakiś magiczny sposób zachowuje zasięgi? EDYCJA: Dla komentarzy, przykład. Załóżmy, że mam obiekt `World`. „Świat” wie o znajdujących się w nim bytach – skałach, drzewach, ty masz ogólną ideę. Tak więc z `Remote` przychodzi komenda `:DestroyRock` \-, która powinna wywołać `World#destroy_rock`. `Świat` nie powinien wiedzieć, **skąd** pochodzi polecenie `:DestroyRock`. Powinien tylko wiedzieć, że wywołano na nim `World#destroy_rock`. Problem polega na tym, że potrzebuję jakiegoś sposobu na znalezienie pośrednika między `ConnectionListener` i `World#destroy_rock`. `ConnectionListener` **zdecydowanie** nie powinien być świadomy istnienia obiektu `World`, ponieważ jeśli tak jest, oznacza to, że połączyłem teraz mój kod **sieci** z moją logiką **gameplay**.. ups. To bardzo źle.


title: Jak poradzić sobie ze scalaniem kodu, który nie został scalony od ~3 lat w sposób zwinny?

text: Nasz zespół niedawno przyjął zwinne praktyki i większość zespołu jest nowa w zwinności. W naszym produkcie używamy kodu opracowanego przez inny zespół i tylko oni go utrzymują. Przez ostatnie 4-5 lat poprzedni programiści łączyli kod, którego zamierzali używać, a nie wszystko. Z biegiem czasu dostosowywany był również kod w naszym oddziale. Od 3 lat te bazy kodu nie zostały połączone. Spodziewamy się wielu zmian i ręcznego rozwiązywania konfliktów, aby wykonać scalenie, ponieważ wszyscy jesteśmy nowi w tym kodzie, a także kod nie był zsynchronizowany przez długi czas. Jak powinniśmy podejść do tego rodzaju zadania/historii w sposób Agile? Czy istnieją jakieś wytyczne, aby podejść do tak niejasnego zadania, w którym niepewność jest bardzo duża i nie wiemy, ile konfliktów/błędów się pojawi? EDYCJA:1 proszę o wyrozumiałość, jeśli pytanie nie jest jasne, daj mi znać w komentarzach, a postaram się wyjaśnić jak najwięcej. Więc spróbuję jeszcze raz. Jako zespół AGILE, czego ja (i zespół) nauczyłem się do tej pory, przed rozpoczęciem 2-tygodniowego sprintu omawiamy wymagania z PM, rozumiemy pracę, którą należy wykonać, finalizujemy podejście do dowolnego projektu DB, a następnie rozpoczyna się 2-tygodniowy sprint . w środku jednego dnia robimy również kolejną sesję PBR, w której można poruszyć wszelkie nowe obawy dotyczące bieżącego sprintu lub po prostu kontynuujemy rozumienie nowych historii do następnego sprintu. W ostatni Day of Sprint robimy Sprint Demo, a następnego dnia Sprint Retrospective. Niedawno poznałem słowo Spike. wiele zespołów AGILE używa Spike'a jako 2-3 dni przerwy między sprintami albo na koniec sprintu, aby zakończyć drobne pozostałe zadanie i nie musi przenosić całej historii do następnego sprintu. Lub czasami na początku sprintu, aby sfinalizować projekt/podejście lub usunąć coś w rodzaju Proof of concept. Kiedy (zespół) zobaczyłem to zadanie scalania kodu, wydaje nam się, że nie ma mowy, abyśmy mogli podzielić tę historię na ograniczone zadanie, ponieważ 90% rzeczy jest nieznanych. nie mamy automatycznego testu wokół kodu, nie łączyliśmy tego kodu wcześniej i znowu jest to scalanie bez bazy po stronie SQL. cokolwiek szacujemy, istnieje duże prawdopodobieństwo, że duża ilość zadania może pozostać niekompletna. teraz z perspektywy czasu stanie się to złe w zespole. a takie zadanie może również zakłócić szybkość pracy zespołu. **Więc moje pytanie brzmi: jak inni ludzie włączają takie zadanie w zespół AGILE. Czy to naprawdę jest wykonywane jako SPRINT? czy powinien to być jednorazowy wysiłek zespołu i nie zalogowany na forum AGILE? W pewnym sensie szukam wskazówek, jak AGILE pozwala wykonać takie zadanie. Jeśli nie Sprint, czy jest coś jeszcze?**


title: Czy lepiej projektować odgórnie czy oddolnie?

text: Jak rozumiem, projektowanie odgórne polega na dopracowaniu abstrakcyjnej koncepcji wysokiego poziomu na mniejsze, betonowe i zrozumiałe części, aż do zdefiniowania najmniejszego bloku konstrukcyjnego. Z drugiej strony, bottom up definiuje części niskiego poziomu, a następnie stopniowo buduje bloki wyższego poziomu, aż uformuje się cały system. W praktyce najlepiej jest połączyć dwie metody: zaczyna się od specyfikacji wysokiego poziomu, aby w pełni określić wiedzę dziedzinową, jej relacje i ograniczenia. Gdy problem jest dobrze zrozumiany, tworzone są najmniejsze bloki budulcowe do zbudowania systemu. Proces: * Tworzenie specyfikacji wymagań * Tworzenie specyfikacji projektu (z diagramami) * Implementacja * Dostarczenie * Powtarzanie (w rozwoju iteracyjnym, zamiast robienia całego kawałka w każdej fazie, robimy po trochu za każdym razem i otrzymujemy codzienne spotkania dostosować się do dynamicznych wymagań klienta) wygląda dla mnie zupełnie normalnie (ze specyfikacjami jako planami). Ma swoje wady, ale dlatego otrzymaliśmy iteracyjny rozwój: zamiast spędzać czas na jednej fazie, mówi, analizie wymagań, aby zbadać każdą możliwą rzecz w wiedzy dziedzinowej, która podlega zmianom (być może codziennie), robimy trochę analizy, trochę projektu, a następnie go zaimplementuj. Innym sposobem jest to, że każda iteracja jest sposobem mini-wodospadu, w którym analiza odbywa się w ciągu kilku dni (lub tygodnia). To samo dotyczy wzornictwa. Resztę czasu poświęca się na wdrożenie. Czy jest coś z natury złego w podejściu odgórnym w połączeniu z rozwojem iteracyjnym? W swoim eseju Programowanie oddolne, Paul Graham wydaje się zachęcać do budowania całkowicie od podstaw lub programowania od podstaw, ale nie do fazy analizy wymagań/projektowania: > Doświadczeni programiści Lisp dzielą swoje programy w inny sposób. Poza projektowaniem odgórnym stosują zasadę, którą można nazwać projektowaniem oddolnym do góry – zmiana języka w celu dopasowania do problemu. O ile wiem, miał na myśli to, że Lisper nadal wykonuje projektowanie odgórne, ale program oddolny, czy to prawda? W innym miejscu napisał: > Warto podkreślić, że projektowanie od dołu do góry nie oznacza po prostu pisania tego samego programu > w innej kolejności. Kiedy pracujesz oddolnie, zwykle kończysz > z innym programem. Zamiast pojedynczego, monolitycznego programu otrzymasz > większy język z bardziej abstrakcyjnymi operatorami i mniejszy > program napisany w nim. Zamiast nadproża otrzymasz łuk. Czy to oznacza, że w okresie pisania programu w Lispie otrzymujesz ogólne narzędzie?


title: Opanowanie języka programowania przez nieprogramowanie?

text: Informatyk Peter Norvig argumentował w swoim eseju Naucz się programować w 10 lat, że potrzebujesz około 10 000 godzin praktyki. Ale Jeff Atwood argumentował w swoim poście Jak zostać lepszym programistą przez nieprogramowanie, że wierzy, że _jedynym sposobem na stanie się lepszym programistą jest nieprogramowanie_. Te artykuły są w opozycji. Czy istnieją dowody naukowe potwierdzające podejście Jeffa Atwooda?


title: Jak napisać sprawdzanie składni

text: Jak jest napisane sprawdzanie składni dla języka programowania? Domyślam się, że najpierw trzeba napisać gramatykę. Jak dalej postępować? **Motywacja** Używam języka programowania (Apex for Salesforce), który jest kompilowany w chmurze i lista błędów jest odsyłana z powrotem do podstawowego edytora Eclipse. Chciałbym pominąć ten proces dla prostych błędów w pisowni i po prostu sprawdzić je lokalnie.


title: Czy ktoś może polecić dobrą książkę o SEO?

text: Obecnie rozwijam witrynę ASP MVC. Czy jest jakaś książka dotycząca ASP MVC SEO lub po prostu SEO w ogóle?


title: TDD Mock weryfikacja połączenia – czy to antywzorzec?

text: Zajmuję się TDD od roku, czuję się z tym całkiem dobrze, uwielbiam moje zestawy testowe i wszystko. Zauważyłem jednak, że ostatnio robię dużo próbnych weryfikacji połączeń. Na przykład miałbym usługę, która będzie miała wstrzyknięte Repozytorium - w moim teście jednostkowym zdałem makiety Repozytorium i zweryfikowałem, czy zostało wywołane w ramach metody, którą testuję. Następnie sprawdzam, czy zwrócone wyniki są poprawne (w innym teście). To zdecydowanie „wydaje się” niewłaściwe, ponieważ moje testy jednostkowe są teraz bardzo powiązane ze szczegółami implementacji. Słyszałem, że należy testować "zachowanie", jednak w wielu sytuacjach to... emm - niemożliwe? Jeśli masz na przykład metodę `void`, zwykle testujesz efekty uboczne. Chodzi mi o to, że łatwo jest iść dalej i pokazać kilka prostych kata kodowych, w których można to zademonstrować, ale IMHO nie odzwierciedla zbyt dobrze rzeczywistych programów, które piszemy. Czy to, co robię źle? Czy tego typu testowanie jest rodzajem anty-wzorca? Będę wdzięczny za twoją opinię na ten temat, nadal jestem trochę nowicjuszem, jeśli chodzi o TDD.


title: Co jest lepsze: wiele wpisów sql czy jeden wpis sql z polem listy?

text: Załóżmy, że mam następujące logiczne informacje: (nazwa_tagu, identyfikator). Na przykład: (jedzenie, 1),(jedzenie, 2),(jedzenie, 3),(picie, 1),(picie, 2) Próbuję zdecydować, jak najlepiej przechowywać to w bazie danych. Mogę po prostu użyć tabeli (STRING, INTEGER), jak w przykładzie, lub bardziej zwartej (STRING, INTEGER_LIST), np. (jedzenie, [1,2,3]),(drink, [1,2]) . Ta metoda jest zdecydowanie bardziej kompaktowa, ale druga metoda wydaje się bardziej trywialnie elastyczna (na przykład mogę wykonać sprzężenie według nazwy_znacznika lub identyfikatora z inną tabelą i nie muszę analizować wyników moich zapytań SQL). Która metoda jest lepsza i dlaczego? Czy nadmiarowość pierwszej metody jest w przeważającej mierze marnotrawna, czy też bazy danych SQL są wystarczająco inteligentne, aby wymyślić wydajną pamięć masową? Czy przetwarzanie po zapytaniu, którego potrzebuje druga metoda (np. Sprawdzenie, czy identyfikator jest już powiązany z tagiem przed jego dodaniem) jest droższe niż nałożenie tego obciążenia na bazę danych w pierwszej metodzie?


> **Możliwy duplikat:** > > Czym dokładnie jest oprogramowanie dla przedsiębiorstw? > > Co oznacza „przedsiębiorstwo” w odniesieniu do architektury oprogramowania? Co sprawia, że komponent lub produkt jest gotowy na oprogramowanie „dla przedsiębiorstw” w porównaniu z oprogramowaniem niekorporacyjnym? Czy jest trudny w użyciu? Czy to wsparcie kontaktów? Czy to reputacja? Czy to poziom testowania? Czy to wsparcie integracyjne? Czy to marketing? Czy skupia się na kliencie produktu? Co sprawia, że oprogramowanie jest „oprogramowaniem dla przedsiębiorstw”, a nie czymś, co jest przeznaczone do powszechnej konsumpcji? Na przykład Derby DB jest przeznaczony dla programistów i małych aplikacji, ale nie jest to „baza danych przedsiębiorstwa”.


title: RESTFul: działania zmieniające stan

text: Planuję zbudować RESTfull API, ale jest kilka pytań dotyczących architektury, które przysparzają mi problemów. Dodanie logiki biznesowej zaplecza do klientów jest opcją, której chciałbym uniknąć, ponieważ aktualizowanie wielu platform klienckich jest trudne do utrzymania w czasie rzeczywistym, gdy logika biznesowa może się szybko zmienić. Powiedzmy, że mamy artykuł jako zasób ( api/artykuł ), w jaki sposób powinniśmy wdrożyć działania takie jak publikowanie, cofanie publikacji, aktywowanie lub dezaktywowanie itd., ale starać się, aby było to tak proste, jak to możliwe? 1) Czy powinniśmy używać api/article/{id}/{action}, ponieważ może się tam zdarzyć wiele logiki backendu, jak np. wypychanie do zdalnych lokalizacji lub zmiana wielu właściwości. Prawdopodobnie najtrudniejszą rzeczą jest to, że musimy przesłać wszystkie dane artykułów z powrotem do API w celu aktualizacji, a praca wielu użytkowników nie mogła zostać zaimplementowana. Na przykład redaktor mógłby wysłać starsze o 5 sekund dane i nadpisać poprawkę, którą inny dziennikarz zrobił 2 sekundy temu i nie ma możliwości, abym mógł to wyjaśnić klientom, ponieważ ci, którzy publikują artykuł, tak naprawdę nie są w żaden sposób związane z aktualizacją treści. 2) Tworzenie nowego zasobu może być również opcją, api/article-{action}/id , ale wtedy zwróconym zasobem nie byłby article-{action} ale artykuł, którego nie jestem pewien, czy jest to prawidłowe. Również w kodzie po stronie serwera klasa artykułu obsługuje rzeczywistą pracę na obu zasobach i nie jestem pewien, czy jest to sprzeczne z myśleniem o REST. Wszelkie sugestie są mile widziane.


title: Jaka jest logika ustawiania numerów wersji w aplikacji?

text: Chciałbym wiedzieć, jaka jest logika ustawiania wersji w aplikacji, którą tworzysz? Mam na myśli od 1,0 do 1,1 lub 1,7 do 2,0


title: Asocjatywność w C

text: int i = 2*5/2; intj = 2*(5/2); printf("%d\n,%d\n",i,j); **Skojarzenie zmiennych** : kiedy uruchamiam ten program, pierwsza instrukcja daje mi `i = 4;` Czy nie powinna dać mi 2, ponieważ zgodnie z regułą BODMAS `/` jest oceniana przed `*`, więc zmienna powinno zostać ocenione jako „(5/2)=2”, a następnie „2*2=4”? Wiem, że to pytanie noobowe, ale to zawsze mnie zaskakuje.


title: Rozwiązania dla wspólnej synchronizacji iOS (iCloud CoreData, CouchDB)?

text: Tworzę aplikację na iOS, w której jedna z funkcji umożliwi użytkownikom udostępnianie i współpracę nad danymi (np. listami). Ze wszystkiego, co przeczytałem i na podstawie sposobu, w jaki działa synchronizacja iCloud CoreData, zakładam, że nie byłoby to dobre rozwiązanie z następujących powodów, ale chciałem się upewnić, że niczego nie przegapiłem, ponieważ wolałbym nie aby korzystać z rozwiązania do synchronizacji innej firmy, jeśli to w ogóle możliwe: * Synchronizacja iCloud dowolnego rodzaju (pary CoreData, Dokument lub Klucz/Wartość) może odbywać się tylko między urządzeniami korzystającymi z tego samego konta iCloud, więc jest przeznaczona dla jednego użytkownika synchronizującego dane na wielu urządzeniach. Każdy rodzaj synchronizacji grupowej (kilka osób edytujących ten sam dokument/listę) jednocześnie będzie ograniczony do tego samego konta iCloud. Przypadki osób korzystających z tego samego konta iCloud ograniczają się zazwyczaj do na przykład męża i żony lub podobnych bliskich relacji dla niewielkiej liczby osób. * Synchronizacja danych iCloud Core ma na celu zapewnienie, że każde zsynchronizowane urządzenie ma te same dane. Wygląda na to, że nie pozwala na synchronizację tylko podzbioru danych, więc scenariusze, w których każdy użytkownik ma własne dokumenty i udostępnia/współpracuje tylko nad ich podzbiorem, nie są obsługiwane. I nawet nie wspominam o problemach z dokumentami z synchronizacją iCloud CoreData, które mogły lub nie zostały rozwiązane w iOS 7. Biorąc pod uwagę powyższe, wydaje się, że CouchDB (z TouchDB) byłby lepszą opcją, jak się wydaje wesprzyj wszystko, czego potrzebuję. Jakie są inne opcje, które ludzie mogą polecić? **AKTUALIZACJA:** Od czasu opublikowania tego zrobiłem więcej badań i odkryłem, że CouchDB w obecnej formie nie jest dobrym rozwiązaniem. Wygląda na to, że jego filtrowana replikacja została stworzona do synchronizacji tylko podzbioru danych (np. danych jednego użytkownika) z urządzeniem mobilnym z centralnej bazy danych serwera, na której znajdują się wszystkie dane użytkowników. Jednak nie jest to wykonalne rozwiązanie zarówno ze względów wydajnościowych, jak i bezpieczeństwa. Chłopaki z Couchbase pracują nad rozwiązaniami tego problemu, ale wszystkie są we wczesnych stadiach alfa. W przypadku rozwiązania, które nie wymaga tworzenia własnego zaplecza, opcje wydają się sprowadzać do Simperium, Parse lub czegoś w rodzaju usług mobilnych Windows Azure. Spośród nich jedynym, który obsługuje synchronizację push w czasie rzeczywistym (nie ma potrzeby odświeżania ani odpytywania o nowe dane) wydaje się być Simperium. Jedynym minusem Simperium jest to, że nie obsługuje danych binarnych (np. obrazów).


title: Jak mam uporządkować moje pliki javascript?

text: Myślę, że najlepiej to opisać za pomocą obrazu. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/d48nw.png) Uświadomiłem sobie, że być może nie jest to najlepszy ani najbardziej logiczny sposób organizowania plików. Jak widać obecnie jest to tylko wysypisko śmieci. Jedynym powodem, dla którego `complexify` ma swój własny folder, jest to, że jest podmodułem w Git. Czy powinienem więc używać folderu `/lib` z `jquery` i `jqueryui` i może `/plugins` ze wszystkimi wtyczkami? Gdzie będą znajdować się moje pliki? Czy są jakieś przyjęte praktyki dotyczące struktury plików w tej sytuacji, gdy masz podstawową bibliotekę, kilka wtyczek, a następnie trochę własnego kodu? _PS, właśnie zdałem sobie sprawę, że mam dwie kopie jQueryUI._


title: Czy przechowywanie danych wejściowych użytkownika w tej samej tabeli, w której administrator przechowuje dane, jest złą praktyką?

text: Jeśli w aplikacji internetowej, powiedzmy, że ma tabelę z zapisanym adresem ulicy ( **Ciągi** ), administrator aplikacji będzie często dodawał dane, aby powiększyć swoje archiwum. Tabela (MySQL) ma klucz podstawowy z `AUTO_INC`. Aplikacja internetowa umożliwia użytkownikom samodzielne dodawanie adresów. Gdy użytkownik wprowadzi adres, powiedz **X** , WSZYSCY użytkownicy aplikacji będą mogli zobaczyć adres **X** podczas wyszukiwania dostępnych adresów. Co się stanie, jeśli adres jest ciągiem znaków, a użytkownik przechowuje nieodpowiednie treści (na przykład złe słowa)? Może to urazić niektórych użytkowników i zmusić ich do zaprzestania korzystania z aplikacji. Zastanawiałem się więc, co byłoby lepsze: * Przechowywanie danych wejściowych użytkownika w osobnej tabeli („oczekujące dane wejściowe”), dopóki administrator nie zatwierdzi ich, a następnie zostaną przeniesione do oficjalnej tabeli? * Lub przechowywać dane wejściowe w tej samej tabeli, co tabela danych wejściowych administratora, ale umieszczać tymczasową flagę na każdym wprowadzonym rekordzie (przez użytkowników), aby były widoczne tylko dla tego użytkownika, dopóki administrator ich nie zatwierdzi? Na marginesie, czy logiczne jest ograniczenie każdego użytkownika do określonej liczby adresów wejściowych dziennie, które może dodać (niektórzy spamerzy mogą wypełnić tabelę tysiącami bezużytecznych rekordów)?


title: Dlaczego istnieje tak wiele konkurencyjnych projektów systemów plików?

text: Tylko krótkie pytanie, ale dlaczego tak wiele systemów plików nadal konkuruje i jest używanych dzisiaj? (ntfs, fat32, ext3(ffs) itp.) Wygląda na to, że projektanci systemów plików mogliby uzgodnić najlepsze aspekty każdego typu systemu i zaimplementować „najlepszy” system plików, nie? Tylko myśl, ponieważ te systemy plików istnieją już od jakiegoś czasu i powinno być przynajmniej trochę oczywiste, które z nich mają dobre cechy w stosunku do innych, i możemy po prostu połączyć dobro w każdym i stworzyć ostateczny system, który jest znacznie lepszy


title: UML, zależności i diagram mapowania danych Martina Fowlera

text: Staram się lepiej zrozumieć zależność. W wyjaśnieniu Martina Fowlera na temat wzorca Mapera Danych, http://martinfowler.com/eaaCatalog/dataMapper.html, diagram UML pokazuje, że Mapper jest zależny zarówno od Obiektu Domeny, jak i Bazy Danych. Wydaje mi się jednak, że _obiekt domeny jest zależny od mapera_. Na przykład, jeśli interfejs Mappera ulegnie zmianie, może być konieczna zmiana obiektu domeny. Spodziewałem się, że zostanie pokazana zależność od domeny do programu mapującego. Na innym poziomie widzę, że Mapper jest zależny od Obiektów Domeny. Obiekty domeny wszystkich klas prawdopodobnie ulegną zmianie i na pewno spowoduje to zmiany w Maperze. Myślę, że czułbym się szczęśliwszy, gdyby zależność Domena/Mapper była dwukierunkowa. Czy czegoś mi brakuje? A może po prostu muszę się trochę rozluźnić? Może Martin pokazuje zależność tylko w jednym kierunku, bo jest to kierunek zdecydowanie ważniejszy?


title: Co zrobić, gdy znajdziesz lukę w zabezpieczeniach witryny Twojej firmy?

text: Znalazłem poważną lukę w zabezpieczeniach jednej z publicznych witryn mojej firmy. To jest nasza pierwsza publiczna witryna, która została przekonwertowana z witryny intranetowej. Zgłosiłem ten problem mojemu szefowi, a oni zasadniczo go zlekceważyli, mówiąc, że przeprojektowanie witryny, aby była bezpieczna, wymagałoby sporo pracy. To naprawdę mnie zaniepokoiło i pomyślałem o wykorzystaniu dziury, aby pokazać skutki, jakie może się zdarzyć, jeśli dostanie się do niej prawdziwy haker. To chyba nie jest najlepszy pomysł, bo efekty mogłyby mnie kosztować pracę, gdyby nie coś gorszego. Jakie są rzeczy, które mogę zrobić, aby pokazać kierownictwu ogrom sytuacji?


title: Znam język, ale nadal nie potrafię kodować jak inni rówieśnicy

text: Przeniosłem się do nowej bazy zadań i kodu (robiłem C#, .NET, Windows Forms, itp. przez ostatnie cztery lata) i zajmuję się tym od trzech miesięcy do dziś. W ciągu tych trzech miesięcy poznałem części języka i składni, których wcześniej nie znałem (MVVM, Silverlight, kilka zaawansowanych rzeczy w .NET, takich jak Action, Func, Callbacks itp.), więc teraz je znam, ale nadal kiedy wchodzę w kod naprawić błąd i widzę ich kod, jestem rozczarowany, ponieważ widzę techniki kodowania, które chociaż znam składnię i rozumiem ją, ale myślę sobie "czy sam mógłbym to napisać"? Odpowiedź brzmi nie. Na przykład tworzą klasy, które mają członka jako "Action" iw czasie wykonywania przypisują akcje do oddzielnych instancji lub rejestrują - wyrejestrowują zdarzenia w niektórych częściach kodu itp. Czy to normalne? i poprawia się z czasem? czy jestem tylko głupim przeciętnym programistą? i jak mogę to ulepszyć?


title: Opracowanie zamiennika GPL z dokumentacji publicznej. Jakieś problemy prawne?

text: W programie, który rozwijam, muszę użyć ulepszonego ListView. ObjectListView wydaje się spełniać moje potrzeby, z wyjątkiem tego, że jest na licencji GPL, a zatem nie nadaje się do użytku w mojej komercyjnej aplikacji. Uważam jednak, że możemy opracować własny zamiennik we własnym zakresie, korzystając z dokumentacji ze strony, bez patrzenia na kod. Czy jest to związane z ryzykiem prawnym? Czy naszą kontrolą musi być GPL lub jakiekolwiek inne ograniczenia licencyjne?


title: Jak instaluje się oprogramowanie z obrazu?

text: Jakiś czas temu przeczytałem artykuł (zapomniałem skąd), który zasadniczo stwierdzał, że ktoś napisał wirusa i wstawił go do obrazu. Końcowy rezultat pozwolił crackerowi na sforsowanie systemu. Jak to jest możliwe?


title: Czy powszechne jest używanie tablic wszędzie z PHP?

text: Jestem świeżo upieczonym absolwentem i dopiero zacząłem pracować nad projektami z prawdziwego świata. Zasadniczo używam PHP przez większość czasu. Właśnie zorientowałem się, że większość rozwiązań, które wymyśliłem dla większości problemów, polega w jakiś sposób na użyciu tablicy. Co ja tutaj robię źle? Jak mogłem się tego oduczyć i zawsze myśleć o czymś innym? A może to wina języka?


title: Problem z CamelCase (PList lub Plist)

text: Ok, rozumiem co to jest CamelCase. To pytanie dotyczy sposobu, w jaki CamelCase jest skróconą wersją listy właściwości (PList). Pytam o to, ponieważ pracuję nad parserem PList w C# i wiedząc, jak wszystko w .NET to CamelCase, zastanawiam się, czy powinno to być `PList` czy `Plist` (także dlaczego)?


Potrzebuję praktycznej odpowiedzi na to pytanie Dlaczego czekać i powiadamiać jest zadeklarowane w klasie Object zamiast Thread? odpowiedź z przykładem zostanie doceniona.


title: Po co deklarować zmienną w jednym wierszu i przypisywać do niej w następnym?

text: (Pomyślałem, że to pytanie zostało już zadane i szukałem go, ale nie mogłem znaleźć duplikatu; jeśli coś przegapiłem, usuń to i przyjmij moje przeprosiny!) Często widzę w kodzie C i C++ następującą konwencję: some_type wart; val = coś; jakiś_typ *ptr = NULL ptr = &coś_innego; zamiast some_type val = coś; jakiś_typ *ptr = &coś_innego; Początkowo założyłem, że to nawyk, który pozostał z czasów, kiedy trzeba było deklarować wszystkie zmienne lokalne na górze zakresu. Ale nauczyłem się nie odrzucać tak szybko nawyków doświadczonych programistów. Czy jest więc dobry powód, aby deklarować w jednym wierszu, a następnie przypisywać? **EDYTUJ** : niektórzy ludzie są zdezorientowani, jeśli chodzi o tagowanie tego pytania jako „c” i „c++”. Tak więc, aby wyjaśnić, interesowała mnie różnica między tym, jak będą się zachowywać zarówno w C, jak i C++. Istnieje wiele przypadków, w których ten sam kod będzie zachowywał się inaczej w C++ niż w C. **EDIT 2**: Przepraszamy za złe sformułowanie: prawdopodobnie nie powinienem był używać słów _declare_ i _define_ bez wyjaśnienia dokładnie, co mam rozumiane przez nich, ponieważ mają bardzo konkretne znaczenia w różnych kontekstach. Zmieniłem tytuł na „przypisz”.


title: Zainstaluj Ubuntu na MacBooku Pro bez płyty CD

text: Próbuję zainstalować serwer Ubuntu na moim MacBooku, ale napęd CD nie działa. Wszystkie przewodniki, które do tej pory widziałem, wykorzystują proces bootcamp (taki sam jak w przypadku systemu Windows), aby to osiągnąć. Obecnie mam partycję Windows na moim komputerze (została zainstalowana z CD, gdy napęd był w porządku), którą zamierzam usunąć, zanim to zrobię. Czy możliwe jest uruchomienie przy użyciu dysku USB z bootloadera Mac przy użyciu tej metody? Nie chcę usuwać partycji Windows, aby stwierdzić, że POTRZEBUJĘ płyty CD, aby to zrobić. Wolałbym również mieć oddzielną partycję, w przeciwieństwie do jakiejkolwiek konfiguracji maszyny wirtualnej, aby to zrobić.


title: Trendy Java i Javascript?

text: Widzę wykres z Google Trends: Javascript: ![Javascript](http://www.google.com/trends/viz?q=javascript&date=all&geo=all&graph=weekly_img&sort=0&sa=N) Dlaczego Javascript nie działa? Czy nie jest to najpopularniejszy język skryptowy w sieci? Co może zastąpić javascript w przyszłości? A także Java (w porównaniu z .net, c#): ![Java](http://www.google.com/trends/viz?q=java,.net,c%23&date=all&geo=all&graph=weekly_img&sort=0&sa=N ) Cóż, zarówno Java, jak i .Net przestają działać, dlaczego? Czy pojawiają się nowe wspaniałe języki lepsze niż Java?


title: Co to za pozwolenie? (Grupy + Role)

text: Zaczynam potrzebować kontroli dostępu do ról w mojej aplikacji. Niewiele o tym wiem, ale rozumiem, jak działa vBulletin: tworzę grupy, a następnie udzielam uprawnień grupom. Myślę, że potrzebuję kontroli dostępu do baz ról (RBAC), ale nie jestem pewien, ponieważ potrzebuję grup, aby nadać uprawnienia zamiast pojedynczych użytkowników (może nie jest to takie skomplikowane). Przykład tego, o czym myślę: Biorąc pod uwagę post: Grupa redaktorów ma uprawnienia do przeglądania go przed opublikowaniem. Grupa Redaktorów ma uprawnienia do edycji swojej zawartości. Grupa publiczna (domyślna) nie ma uprawnień do wyświetlania jej przed opublikowaniem. Grupa administracyjna ma uprawnienia do usunięcia posta. Więc w zasadzie nie chcę orientacji, czy RBAC jest tym, czego potrzebuję. A także, jak dobrze byłoby przechowywać członkostwo grupowe w użytkowniku, na przykład, dobrze byłoby mieć: `ID NAME HASŁO GRUPY (1, MyName, MyPassword, 1/2/3/4/5)” i rozbić za pośrednictwem PHP lub jednego rejestru dla każdego członkostwa grupy w tabeli o nazwie `permissions`, na przykład: `USERID, USERGROUP values (1, 1), (1, 2)` Może powinien być drugi sposób ze względu na formalne normy, ale ja nie studiował jeszcze Bazy danych 1 na studiach.


title: System klient-serwer w .Net

text: Nie proszę o kod, ale raczej o pomysły projektowe. Staram się opracować nowy system, aby dowiedzieć się więcej o rozwoju klienta/serwera. Miałbym 3 systemy: `Client 1: Client` `Server 1: Server` `DB Server 1: DB Server` Stworzyłbym aplikację serwerową, a także aplikację kliencką. gdzie klienci faktycznie mają różne prawa dostępu, które są przechowywane w tabeli DB na serwerze DB. Jednak różne prawa dostępu dawałyby dostęp do różnych funkcji w aplikacji. Na przykład superużytkownik logowałby się na swoje konto, wysyłając dane od klienta do aplikacji Serwera działającej na Serwerze 1, która następnie sprawdzałaby tabelę superużytkowników w bazie danych, aby sprawdzić, czy konto istnieje. Moim początkowym pomysłem byłoby wysłanie obiektu konta z powrotem do klienta, w którym aplikacja kliencka sprawdziłaby, do jakiego typu konta należy i faktycznie wyświetliłaby użytkownikowi odpowiedni formularz/interfejs użytkownika. Jednak takie podejście nie wydaje się zbyt wykonalne, ponieważ wydaje się zbyt słabe i zawiera wiele złego projektu. Być może ktoś mógłby dać mi lepszy pomysł, jak podejść do tego problemu. Podsumowanie : To byłoby jak aplikacja klient-serwer, ale byłyby różne rodzaje użytkowników, którzy mieliby różne prawa i różne funkcje.


title: Najbardziej wydajny algorytm zastępowania pamięci podręcznej

text: Wikipedia wymienia 11 algorytmów wymiany pamięci podręcznej. Zakładając, że prawie nic nie wiem o aplikacji, którą zamierzam rozwijać, **co powinienem użyć jako „domyślnego” algorytmu zastępowania pamięci podręcznej?** Jeśli dobrze pamiętam z kursu OS, LRU jest najlepszym ogólnym algorytmem zastępowania pamięci podręcznej. Ale może się mylę. Jest to również trochę akademickie pytanie, ponieważ generalnie pamięć główna jest tania i obfita i nie muszę się zbytnio martwić o rozmiar pamięci podręcznej.


title: Czy twórcy Javy świadomie porzucili RAII?

text: Jako długoletni programista C# niedawno dowiedziałem się więcej o zaletach _Resource Acquisition Is Initialization_ (RAII). W szczególności odkryłem, że idiom C#: using (var dbConn = new DbConnection(connStr)) { // do stuff with dbConn } ma odpowiednik w C++: { DbConnection dbConn(connStr); // zrób coś za pomocą dbConn }, co oznacza, że pamiętanie o zamknięciu użycia zasobów, takich jak `DbConnection` w bloku `using`, jest niepotrzebne w C++! Wydaje się to być główną zaletą C++. Jest to jeszcze bardziej przekonujące, gdy weźmiemy pod uwagę klasę, która ma składową instancji typu `DbConnection`, na przykład class Foo { DbConnection dbConn; // ... } W C# musiałbym zaimplementować Foo `IDisposable` w następujący sposób: class Foo : IDisposable { DbConnection dbConn; public void Dispose() { dbConn.Dispose(); } } i co gorsza, każdy użytkownik `Foo` musiałby pamiętać o umieszczeniu `Foo` w bloku `using`, na przykład: using (var foo = new Foo()) { // robienie rzeczy z "foo" } Patrząc teraz na C# i jego Javowe korzenie, zastanawiam się... czy programiści Javy w pełni docenili to, z czego rezygnowali, gdy porzucili stos na rzecz sterty, porzucając w ten sposób RAII? (Podobnie, czy Stroustrup w pełni docenił znaczenie RAII?)


title: Dlaczego w Javie nie ma deterministycznego niszczenia obiektów?

text: Rozumiem i korzystam z zalet Garbage Collection w Javie. Jednak nie rozumiem, dlaczego w Javie nie ma sposobu na jawne (i szybkie) zniszczenie obiektu. Z pewnością może to być przydatne w niektórych przypadkach, zakładam, że oprogramowanie ma krytyczne znaczenie dla wydajności. Prawdą jest, że w Javie GC usunie obiekt bez istniejącego odniesienia do niego, więc jeśli chcę, aby obiekt został usunięty, mogę ustawić odniesienie do niego na `null`. Ale jeśli dobrze rozumiem, nie ma pewności, że GC rzeczywiście usunie obiekt, przynajmniej nie natychmiast. A to jest poza kontrolą programisty. Dlaczego w Javie nie ma możliwości jawnego niszczenia obiektów? Rozumiem, że Java została zaprojektowana do użytku jako język wysokiego poziomu, ale abstrahuje od programisty niektóre szczegóły techniczne, aby ułatwić: Java stała się jednym z najczęściej używanych języków i jest używana w dużych projektach . Zakładam, że w dużych projektach często problemem jest wydajność. Skoro Java stała się tym, czym jest, dlaczego nie dodano do języka jawnego niszczenia obiektów?


title: Minimalizowanie zależności dla GUI

text: Pracowałem nad projektem i zostałem odpowiedzialny za projektowanie front-endu GUI projektu. Koduję w Javie i korzystam z zestawu narzędzi Swing. Pod względem użyteczności interfejs GUI podąża za wszystkimi heurystykami Nielsena. Użytkownicy mogą łatwo dostać się tam, gdzie chcą, klikając przycisk / JComboBox. Zasadniczo, w kategoriach Swinga, dzieje się tak, że ich działania napędzają tworzenie/usuwanie niestandardowych paneli. GUI w większości działa dobrze. Muszę jednak przyznać, że jestem całkowicie przerażony napiętą siecią zależności, w której mój kod jest tłumiony. odniesienie do zmienianych paneli/przycisków. Podam przykład: Powiedz, że jest przycisk A Powiedz, że jest panel B wyświetlający obraz C Powiedz, że jest inny obraz D (aktualnie nie jest wyświetlany przez panel B) Kiedy użytkownik kliknie A, panel B powinien usunąć obraz C i wyświetlić obraz D Mój Pytanie brzmi, jaki jest najlepszy sposób śledzenia panelu B? Ponieważ potrzebuję globalnego punktu dostępu do panelu B, moim rozwiązaniem do tej pory było po prostu przekuć go w zmienną statyczną i uzyskać do niej dostęp za pośrednictwem serii statycznych pobierających i ustawiających. Ta zmienna statyczna jest zwykle przechowywana w oryginalnej klasie odwołania. Tj. UserPanel ma zmienną statyczną, która przechowuje odwołanie do siebie. Czy istnieje prosty, wypróbowany i prawdziwy sposób radzenia sobie z tego rodzaju sytuacjami? Podobnie jak mój GUI działa dobrze, ale w ogóle nie jest modułowy i / lub solidny. Aby dodać do tego, przerażający problem „zależności cyklicznych”, który jest unikany przez tak wielu programistów, jest tutaj w pełni skuteczny. Jestem całkiem nowy w programowaniu i po prostu chcę się upewnić, że mój kod będzie dość rozszerzalny i nie spowoduje większego bólu głowy dla następnej osoby, która zdecyduje się spróbować. Wiem, że jest mnóstwo książek, które prawdopodobnie mają na to ładne, eleganckie rozwiązanie, ale niestety po prostu nie mam teraz czasu na czytanie dla przyjemności. Potrzebuję czegoś szybkiego i brudnego. Z góry dziękuję


title: Minimalna dystrybucja linux do kompilacji plików binarnych ramion

text: Mam taką konfigurację: pudełko programistyczne Windows/x86 i PandaBoard ES do testowania z linuksem. Chciałbym prosić o polecenie dystrybucji Linuksa, którą uruchomiłbym w Hyper-V na moim devboksie, która służyłaby tylko do kompilacji binariów arm/linux. Po skompilowaniu tych binariów skopiuję je na kartę pamięci SD i przetestuję na PandaBoard. Dziękuję!


title: rozpoczęcie praktyk programistycznych

text: Ukończyłem studia jako informatyka i inżynieria i jestem naprawdę zdezorientowany w tej chwili. Mój pierwszy kurs dotyczył nauki C i C++ i poznałem ich podstawy. Teraz jestem naprawdę zdezorientowany, co dalej. Niektórzy mówią, że powinienem na razie ćwiczyć algorytmy i robić konkursy w ACM-ICPC. Inni każą mi rozpocząć tworzenie oprogramowania. Ale kiedy zacząłem kopać, jest to naprawdę obszerny temat i jest wiele jego aspektów, takich jak projektowanie stron internetowych, tworzenie stron internetowych, rozwój iOS, android... itd. wiele rzeczy. I jestem naprawdę zdezorientowany tym, co powinienem teraz zrobić. Jakieś rady dla mnie na początek?


title: Operator trójskładnikowy uważany za szkodliwy?

text: Na przykład, czy wolisz ten jednowierszowy int median(int a, int b, int c) { return (a<b) ? (b<c) ? b : (a<c) ? c : a : (a<c) ? a : (b<c) ? c:b; } lub rozwiązanie if/else obejmujące wiele instrukcji powrotu? Kiedy `?:` jest właściwe, a kiedy nie? Czy należy go uczyć, czy ukrywać przed początkującymi?


title: Czy ten algorytm wyszukiwania słów może być szybszy?

text: Problem: Znajdź dopasowanie słowa **S** w tekście **T** Biorąc pod uwagę: **S** i **T** są **częścią języka angielskiego w mowie i piśmie**. Przykład: Dopasuj „Math” do „Kocham matematykę” UWAGA: Ignoruj PRZYPADKI. Mój algorytm: KROK 1) Zamień S, T na char[] KROK 2) dla i=0, i < T.length , i++ KROK 3) dla j=S.length-1, j>0 , j-- KROK 3 jest magia, zamiast dopasowywania `M,A,T,H`, to dopasowuje `M,H,T` i wreszcie `A`. Pomaga to wyeliminować wiele możliwych częściowych dopasowań. Na przykład, jeśli pójdę po kolei jak „MA” jak w metodzie Boyer Moore'a ... może dopasować „Matter, Mass, Matchstick” itp. użycie „M _ _ H” zmniejszy rozmiar dopasowań częściowych. KROK 4) jeśli S[j]!=T[i] -> przerwa; inaczej if j==i -> PRINT MATCH


title: Czy możesz mi pomóc zrozumieć ten wzorzec projektowy stworzony przez eksperta Java?

text: Projekt odziedziczyłem od bardzo doświadczonego programisty Java. Projekt jest aplikacją na Androida, a gość, który programował, ma duże doświadczenie w pisaniu zwykłych aplikacji Java. Wprowadził kilka struktur plików, z którymi wcześniej się nie spotkałem (nie kodowałem aplikacji Java poza obszarem Androida). Mogę bez problemu śledzić kod i do tej pory właściwie skończyłem kilka dodatków, ale teraz chciałbym dowiedzieć się więcej, dlaczego zastosował takie podejście, ponieważ może mi to pomóc w napisaniu lepszego kodu. Z drugiej strony, jeśli jego podejście nie jest odpowiednie dla aplikacji na Androida, to też chciałbym to wiedzieć, więc nie używam takich struktur. Wszystkie pytania podzielę na punkty. 1. W pracy z bazą danych wykonał 3 warstwy: encje, dostęp do danych i kontrolery. Jest to rodzaj struktury MVC. Czy zaleca się używanie go w aplikacjach na Androida? 2. W części kontrolera wykonał następującą strukturę plików: > > controller/ > async/ > AsyncAddObject.java > AsyncExecutorAdd.java > AsyncExecutorGetAll.java > Entity1Controller.java > Entity2Controller.java > Entity3Controller.java > IController.java > pliki asynchroniczne są plikami generycznymi. Czy ta struktura jest ci znana? Pamiętam executory używane w Javie, ale nigdy nie używałem takiego podejścia w rozwoju Androida. Jeśli jest to właściwy sposób, do czego służy Executor? A co z `IController.java` \- czymś typowym w zwykłym kodowaniu Javy? +++++++++ Następnie, gdy chcemy dodać jakiś wpis do bazy danych, używa następującego kodu Entity1 ent = new Entity1(); ent.setCoś(jakiśParametr); AsyncAddObject<Entity1> obj = nowy AsyncAddObject<Entity1>(); obj.setController(mEntity1Controller); obj.setObiekt(ent); nowy AsyncExecutorAdd<Entity1>().execute(obj); Czy to wydaje Ci się mylące? Zwykle wywołuję jakąś metodę bazy danych i przekazuję do niej obiekt. Na przykład zrobiłbym to tak Entity1 ent = new Entity1(); ent.setCoś(jakiśParametr); MojaBazaBazy.addEntity1(ent); //Tylko przykład, dodanie do bazy danych zostanie wykonane w wątku nie-Main. To jest to. Przepraszam za długi post.


title: Technologie internetowe w aplikacjach GUI

text: Podczas mojej wczesnej kariery zawodowej stworzyłem wiele aplikacji GUI dla platformy Windows i widziałem, jak pojawiło się kilka frameworków GUI, poświęciłem im całe magazyny, a następnie zniknęły. MFC jest ikoną. Mając zadanie napisania kolejnej aplikacji GUI, zacząłem badać międzyplatformowe frameworki, takie jak Qt i WxWindows. Znalazłem te same strome krzywe uczenia się, które znałem wcześniej, a narzędzia nie pomagają zbytnio w budowaniu funkcjonalnego i eleganckiego interfejsu użytkownika, ponieważ jest niezgrabny i skomplikowany. Ale ludzie cały czas budują piękne i funkcjonalne interfejsy użytkownika w sieci (spójrz na tę stronę!). Z pewnością istnieją standardy, biblioteki i narzędzia. Moja myśl i moje pytanie: Dlaczego nie napisać GUI, w którym większość interfejsu użytkownika jest obsługiwana przez wbudowaną przeglądarkę? Wiem już, że widżety Qt obsługują dużą część CSS i JavaScript, a programistów z dobrą wiedzą na temat tworzenia stron internetowych można stosunkowo łatwo znaleźć, ..., więc... Czy robiłeś już coś takiego? Jakie masz doświadczenie/radę? Widżet przeglądarki prawdopodobnie będzie obsługiwał podzbiór funkcji popularnych przeglądarek, ale wystarczy, aby stworzyć bogaty interfejs użytkownika przy użyciu technologii internetowych. Dodatkową zaletą są ogromne uproszczenia, które są możliwe, gdy strony internetowe nie muszą komunikować się z serwerem, aby obsługiwać żądania interfejsu użytkownika. Moim pomysłem nie jest osadzenie w pełni rozwiniętej przeglądarki (ojej!). Ma umożliwić wykorzystanie technologii webowych w programowaniu GUI. **[Edytuj]** Nie przyjąłem odpowiedzi, ponieważ te do tej pory to sugestie dotyczące zrobienia czegoś innego, a nie wcześniejszego doświadczenia w robieniu tego, co sugeruję. Nie są nawet opiniami ani spekulacjami na temat pułapek lub korzyści płynących z robienia tego w sugerowany sposób, czego oczekiwałbym w mało prawdopodobnym, że przełamywałbym nowy grunt, używając widżetu przeglądarki, aby zapewnić część interfejsu GUI. Pomyśl o HTML, CSS i ograniczonym JavaScript, bez Internetu, bez .Net lub Java (lub Air lub Flex/Flash), bez relacyjnej bazy danych; tylko pliki wykonywalne, biblioteki i szablony, które można zainstalować, kopiując je, oraz trwałość do katalogu domowego użytkownika przy użyciu systemu plików. ## Kilka dodatkowych pytań pokrewnych Oto one pochodzą z dotychczasowych odpowiedzi: 1. Doświadczenie użytkownika: Czy aplikacja internetowa obsługująca StackExchange nie jest wystarczająco bogata i intuicyjna? 2. Oczekiwania użytkowników: czyż internet i przenośne gadżety (smartfony i tablety) nie oddalają doświadczenia użytkownika od tradycyjnego GUI? 3. Czy to możliwe, że istnieją aplikacje, które muszą być GUI, ale korzystają z bycia _webified_, podczas gdy inne nie?


title: Odwołanie licencji Open Source dla określonych osób

text: Tworzę aplikację na Androida o otwartym kodzie źródłowym, która jest na licencji GPL i bezpłatnie dostępna na Github. Obecnie jest w fazie intensywnego rozwoju, dlatego nie jest jeszcze opublikowany w Sklepie Play. Co mogę zrobić, jeśli ktoś zdecyduje się opublikować go w Sklepie Play, * bez modyfikowania kodu (wystarczy zbudować go z mojego repozytorium i wgrać, ta sama nazwa pakietu). * z modyfikacją kodu źródłowego i opublikowaniem go na Github na tej samej licencji. * i modyfikować kod, ale nie publikować kodu na tej samej licencji.


title: Ramy lotu, statyczne czy niestatyczne?

text: Niedawno natknąłem się na **mikro-framework lotu**, którego chcę użyć w projekcie, ponieważ wydaje się lekki, łatwo rozszerzalny i konserwowany. Większość innych mikro-frameworków, które przeglądałem i podobały mi się, zostały zaktualizowane około 2 - 4 lata temu (takie jak Epiphany, Recess lub Dingo). uruchom go z instancją obiektu** (jak wspomniano tutaj: http://flightphp.com/learn#methods) 1. Jak byś uruchomił framework? (statyczne lub niestatyczne) 2. Co ogólnie myślisz o tym frameworku? Dziękuję Ci!


title: Synchronizacja wzorca MVC

text: Mam problem z synchronizacją wątków modelu i widoku Mam widok, który jest tabelą. W nim użytkownik może wybrać kilka wierszy. Aktualizuję widok, gdy tylko użytkownik kliknie dowolny wiersz, ponieważ nie chcę, aby interfejs był powolny. Ta aktualizacja jest wykonywana przez logikę działającą w poniższym wątku kontrolera. Jednocześnie kontroler zaktualizuje również dane modelu, co odbywa się w innym wątku. tzn. kontroler umieszcza zapytanie w kolejce, która jest następnie wykonywana przez wątek modelowy - który jest interfejsem jednowątkowym. Gdy zapytanie zostanie wykonane, kontroler otrzyma sygnał. Teraz, aby zachować synchronizację widoku i modelu, ponownie zaktualizuję widok na podstawie wartości zwracanej przez zapytanie (dane zwrócone przez model) - mimo że zaktualizowałem już widok dla tej akcji użytkownika. Ale mam do czynienia z problemami, ponieważ zwrócenie wyniku przez model zajmuje dużo czasu, do tego czasu użytkownik wykonałby wiele kliknięć. Tak więc, w wyniku ponownej aktualizacji widoku na podstawie informacji z modelu, widok czasami wraca do stanu, w którym zostały wykonane poprzednie kliknięcia (Załóżmy, że użytkownik klika trzykrotnie w różnych wierszach. Aktualizuję widok, gdy tylko kliknie Tak samo aktualizuję widok, gdy dostanę dane z modelu - co ma być takie samo, jak już zaktualizowany stan widoku.Teraz, gdy użytkownik kliknie trzeci raz, otrzymuję dane za pierwsze kliknięcie z modelu W rezultacie widok wraca do stanu, który jest generowany przez pierwsze kliknięcie) Czy jest jakiś sposób, aby poradzić sobie z takim problemem z synchronizacją?


title: Jaka jest najbardziej rażąca strata pieniędzy, jaką widziałeś i co z tym zrobiłeś?

text: Często jako programiści widzimy duże organizacje marnujące ogromne sumy pieniędzy na nadęte i nieefektywne rozwiązania problemów. Bardzo mnie to boli, ponieważ lubię organizacje, które korzystają z najlepszych rozwiązań rasy. Jednak moje umiejętności jako programisty są ograniczone, jeśli chodzi o wpływanie na kluczowych decydentów i często moje spojrzenie na tę sprawę jest ograniczone do mojego własnego małego technicznego świata. Więc moje pytanie jest takie. Po napotkaniu rażącego marnowania pieniędzy na oprogramowanie i/lub sprzęt, które naprawdę załatwiły twoją kozę, **co zrobiłeś z tym, aby to naprawić**, czy też byłeś skazany na to, że gryziesz kulę i mamroczesz wiecznie pod nosem? Chcę poznać Twoje ogólne wrażenia **a zwłaszcza wnioski, których nauczyłeś się, jak radzić sobie z takimi sprawami w przyszłości**. Nie wymieniajmy nazwisk, doświadczenie, jak poradzić sobie z problemem, jest ważniejsze niż sam produkt obrażający.


title: Kiedy powinienem pisać testy integracyjne?

text: Zgodnie z zasadami TDD testy jednostkowe są pisane przed kodem produkcyjnym, ale co z testami integracyjnymi, które sprawdzają interakcję między konkretnymi (nie mockami) obiektami przewodowymi? Czy powinny być napisane przed testami jednostkowymi, czy po kodzie produkcyjnym tylko po to, aby przetestować „okablowanie”? Zauważ, że nie mówię o testach akceptacyjnych czy funkcjonalnych, ale o testach integracyjnych niższego poziomu.


title: Przypisany do nowego projektu WPF, nic o nim nie wiem

text: Zacząłem jako analityk, rozmawiając z klientem, notując wymagania i cały ten jazz. Zakończył jako jedyny deweloper projektu. Harmonogram jest OK, ale nie OK dla kogoś, kto nie wie nic o tym, jak opracować aplikację WPF, IMHO. Co mogę z tym zrobić, powiedzieć kierownikowi programu, że popełniła ogromny błąd, wybierając kogoś bez umiejętności (nie miała wyboru, tylko mnie nie przydzielono), czy podcięła mi nadgarstki? Czy mam inne możliwości? PS: Naprawdę próbuję się tego nauczyć, nie mogę się dowiedzieć, jak ustrukturyzować projekt MVVM, IoC, Logging. Liczba koncepcji jest cholernie wysoka.


title: Jakie problemy rozwiązują narzędzia do zarządzania konfiguracją?

text: Moja firma tworzy usługę w wirtualnej chmurze prywatnej Amazon. Bez zbytniego wchodzenia w szczegóły, będzie około 5 różnych typów serwerów, a każdy typ będzie musiał być replikowany w zależności od zapotrzebowania. Trochę czytania sprawia wrażenie, że będziemy chcieli użyć narzędzia do zarządzania konfiguracją, takiego jak Puppet lub Chef. Moi szefowie są otwarci na ten pomysł, ale muszą przekonać, że naprawdę warto ponieść początkowy koszt nauki jednego z tych narzędzi. Nie mam doświadczenia z tymi narzędziami i tak naprawdę nie mogę zaoferować niczego poza kilkoma punktami na temat tego, co robią, a mądrzejsi ludzie w Internecie wydają się uważać, że to dobry pomysł. W tym momencie korzyści płynące z CM wydają się po prostu niejasnymi najlepszymi praktykami, ponieważ nie doświadczyłem jeszcze problemów, które mają rozwiązać. Jakich bólów głowy mogę się spodziewać, jeśli nie użyjemy narzędzia do zarządzania konfiguracją?


title: Szukasz dobrego funkcjonalnego / oop / meta języka programowania z:

text: Chcę, żeby to było * generowanie kodu natywnego // Możliwość kompilacji za pomocą czegoś takiego jak GHC * wieloplatformowy (win / linux) * Funkcjonalny i nieco zorientowany obiektowo * lambdy, dopasowywanie wzorców, krotki i inne funkcjonalne rzeczy * Świetna obsługa metaprogramowania * Wcięcia i minimalne obramowania * statyczne pisanie * również chcę mieć wsparcie dla Mixinów :) * Możliwość budowania stron internetowych w oparciu o niektóre frameworki to również dobry plus. * tak i tak, wydajność i stabilność mają znaczenie. Zacząłem **Haskell** , ale nadal nie jestem tego pewien, ponieważ istnieje OCaml. I mam doświadczenie w F#. Ale o ile wiem **OCalm** jest trochę OOP i czasami nawet szybszy (nie jestem pewien) nigdy tego nie próbowałem. Jest też erlang, o **erlang** nic nie wiem. A może brakuje mi czegoś więcej...? **Python** , nie mam pojęcia o Pythonie tutaj, jest funkcjonalny i jest oop i obsługuje mixin oraz popularny i szybki, ale naprawdę nie sądzę, że python jest w stanie wykorzystać całą magię funkcjonalną, myślę, że nie może . Wiem, że ten wątek/temat jest jak rozmowa o niczym lub jak wojna językowa, ale poważnie i naprawdę chcę usłyszeć twoją wizję tego.


title: W prostych słowach, do czego służą abstrakcyjne klasy i/lub interfejsy?

text: Muszę wytłumaczyć niektórym studentom użycie abstrakcyjnych klas i interfejsów, ponieważ mam bardzo duże zaplecze techniczne, chciałbym wiedzieć, czy pomoglibyście mi zdefiniować proste wyjaśnienie dla juniora. Prosta definicja: **Jakie są cele klas abstrakcyjnych, interfejsów i jaka jest różnica między nimi?** **Kiedy warto używać jednej zamiast drugiej?** Dzięki.


title: Jak zarządzać przepływem danych pomiędzy komponentami UI?

text: Próbowałem użyć klas, które implementują ActionListener, aby odpowiedzieć na dane wejściowe użytkownika. Konsekwentnie zauważam, że aby detektor akcji mógł komunikować zdarzenie innym obiektom, musi zawierać obiekt. Podobnie jak obiekt, który chcę zaktualizować po kliknięciu action_src: public class Display_Field { JTextField display; public Display_Field ( JButton action_src ) { action_src.addActionListener( nowy Open_Dialog_Click ( to ) ); } public void setText( Ciąg tekstowy ) { display.setText( text ); } } ActionListener planuję dodać do action_src: public class Open_Dialog_Click implementuje ActionListener { private Display_Field display; public void actionPerformed( Akcja ActionEvent ) { JFileChooser selektor = new JFileChooser(); selecter.showOpenDialog( null ); display.setText( Chooser.getSelectedFile().getName() ); } public Open_Dialog_Click( Display_Field display ) { this.display = display; } } Jest tyle zwojów! Na przykład wyświetlacz musi być skonstruowany za pomocą przycisku, który dodaje element ActionListener, który musi być skonstruowany z wyświetlaczem... **Czy istnieje mniej zawiły sposób na umożliwienie przepływu danych między komponentami?** Rozważałem stworzenie centralnego klasa, w której znajdują się wszyscy słuchacze, działając jako okablowanie dla dowolnej komunikacji między komponentami, ale wygląda na to, że klasa robi zbyt wiele dla własnego dobra. ...a może tak się w końcu to robi?


title: Używanie języka programowania w Google

text: Słyszałem, że Google używa Pythona, Javy i C++. Ale nie wiem, jak jest używany każdy z tych języków programowania. Mam na myśli to, do czego służy Python, Java i C++ w Google. Dlaczego mieliby używać do 3 języków programowania, gdy wystarczy 1 język. Czy ktoś wie?


title: Czy uczciwe jest używanie skróconego adresu URL do wymieniania i podawania linków do projektów na żywo w moim CV?

text: Zrobiłem lub uczestniczyłem w niektórych projektach mobilnych, które są przesyłane na ich odpowiednich rynkach i obecnie działają, i już wspominam o statusie NA ŻYWO dla odpowiednich projektów. Jeden z moich znajomych, który w rzeczywistości jest programistą internetowym, zasugerował mi ostatnio, aby umieścić adresy URL aplikacji, jeśli projekt jest już uruchomiony. I traktuję tę sugestię poważnie. Ale odkryłem, że niektóre adresy URL są naprawdę długie i desperacko trzeba je skrócić. Więc moje pytanie brzmi: czy sprawiedliwe jest skrócenie wszystkich adresów URL aplikacji na żywo? Lub po prostu skróć te, które są tak długie. W przypadku skrócenia wszystkich adresów URL, czy pracodawca może przyjąć ten punkt negatywnie? Dzięki **EDYTUJ** : Po przeczytaniu Twojej odpowiedzi myślę, że muszę wyjaśnić jedną rzecz.... Opracowane przeze mnie aplikacje są aplikacjami mobilnymi i są umieszczane na odpowiednich rynkach, takich jak Blackberry App Store i Android Markets. To wiele znaczy, że aplikacja zaakceptowana do sprzedaży na rynku. I chcę umieścić adres URL tych witryn rynkowych. Linki są tam od dawna, więc nie ma zagrożenia, że link przestanie działać za rok lub dwa.....


title: Dlaczego widzę więcej logicznych konwencji nazewnictwa, w których „jest” jest używane jako pierwsze słowo w zmiennej (np. IsUserAdmin vs UserIsAdmin)?

text: Myślę, że wszyscy zgodzą się, że następujące nazwy zmiennych/właściwości logicznych są standardowe: * UserIsAdmin * OrdersAreClosed Ważną rzeczą do zapamiętania w przypadku wyrażeń logicznych jest to, że są one podawane, a następnie oceniane jako prawda lub fałsz. Użytkownik jest administratorem. Fałszywy. Dostajesz punkt. Jednak ostatnio zauważyłem wzrost liczby wartości logicznych tworzonych w ten sposób: * IsUserAdmin * AreOrdersClosed Czy jestem jedyną osobą, która nie uważa, że brzmi to absolutnie absurdalnie? Nie pytasz „Czy użytkownik jest administratorem?” a potem czekam na tak lub nie. Składasz oświadczenie „Użytkownik jest administratorem” i czekasz na prawdziwą lub fałszywą ocenę. Microsoft ostatnio dużo to robi, podobnie jak programowanie naszych kontrolek sieciowych Telerik. Rzecz w tym, że nie rozumiem, skąd to się bierze. To nigdy nie było popularne, więc zastanawiam się, czy to tylko ja to zauważam, czy jest to trend, który rzeczywiście rośnie, a jeśli tak, to jaki jest tego sens?


title: o projektowaniu baz danych

text: Moje pytanie składa się z trzech części: Kiedy upewnić się, że projekt Twojej bazy danych jest doskonały? * * * Czy powrót do projektu bazy danych w celu zmiany niektórych problemów (takich jak dodanie nowej kolumny, usunięcie kolumny lub zmiana typu danych lub dodanie nowej tabeli lub ....) jest uważany za złą praktykę, czy jest to normalne? * * * Potrzebuję stron internetowych lub książek tylko do szkolenia na temat ERD i „normalizacji”. Potrzebuję wielu próbek, praktyk i studiów przypadków z zalecanymi odpowiedziami, aby wzmocnić moje umiejętności w zakresie projektowania baz danych i uniknąć kiepskich projektów baz danych, które stworzyłem. Uwaga: nie potrzebuję książek wyjaśniających pojęcia, potrzebuję praktyk, przykładów i studiów przypadku z zalecanymi odpowiedziami.


title: Czy warunki płatności wpływają na metodologię projektowania projektu?

text: Podczas pracy nad projektem oprogramowania dla klienta istnieją dwa sposoby rozliczania tego - projekt opłaty stałej lub rozliczanie godzinowe. Czy wybór warunków płatności ma wpływ na wybraną przez Ciebie metodologię projektowania? Na przykład jedną z korzyści płynących z programowania zwinnego jest to, że zmiany można wprowadzać bardzo szybko i mniejszy nacisk kładzie się na dokumentację, szczególnie w odniesieniu do projektowania z góry. Jest to idealne rozwiązanie w przypadku rozliczania godzinowego, ale pracując nad projektem o stałej opłacie, chcesz w jak największym stopniu uniknąć zmian lub naliczyć dodatkowe opłaty za dodatkową utworzoną pracę. W takim przypadku ważniejsza staje się dokumentacja i wstępny projekt, ponieważ stanowią świetny sposób na uzgodnienie dokładnego zakresu projektu i mogą być wykorzystane do wykazania odchyleń od projektu, a tym samym dodatkowych opłat. Czy masz tendencję do korzystania z różnych metodologii projektowania w przypadku projektów o stałej opłacie i stawce godzinowej? Jeśli tak, jaka konkretna metodologia najlepiej sprawdza się w przypadku projektów o stałej opłacie?


title: Czy oprogramowanie na licencji GPL może być odsprzedawane?

text: Moja grupa badawcza opracowuje oprogramowanie do celów badawczych. Lider projektu chce, aby oprogramowanie było open source i lubi GPL, ale chce mieć pewność, że ich oprogramowania nie będzie można sprzedawać. Czy poprawnie czytamy GPL? Oprogramowanie można dowolnie modyfikować, (re)dystrybuować i sprzedawać? Jeśli tak, to widzę, dlaczego trudno byłoby skutecznie sprzedawać oprogramowanie; jednakże GPL nie jest wystarczająco rygorystyczna jak na nasze potrzeby. Jakieś sugestie?


title: Instalator lub przenośny

text: Bardzo obawiałem się programów, które wymagają instalacji. Pozostawiają ślady w rejestrze nawet po odinstalowaniu, a ponadto niektóre dezinstalatory są źle zaprogramowane (co oznacza, że niektórych programów nie można odinstalować). Dotyczy to Windowsa. Dobra strona instalatorów, tworzą skróty i skojarzenia plików. Jednak Komodo w systemie Linux używa skryptu powłoki do konfiguracji i można go bezpiecznie odinstalować, usuwając folder. Czy uważasz, że instalatorzy powinni zostać zlikwidowani? Czy uważasz, że efekt instalacji powinien zostać zastąpiony skryptami powłoki? Czy uważasz, że wszystkie gry komputerowe powinny być przenośne? Czy projekt „skanuj folder /Applications/${AppName}/Information i wyświetlaj ikony aplikacji” powinien być używany w przyszłych środowiskach pulpitu?


title: Jak mogę używać różnych wersji rozwijającej się biblioteki w różnych projektach?

text: # Problem W moich badaniach piszę dużo kodu eksploracyjnego. Idąc dalej, umieszczam funkcje, które chciałbym ponownie wykorzystać w centralnej lokalizacji. Projekt może wyglądać tak: ./mylib ./exploration /experiment_1 /experiment_2 /experiment_3 Gdzie każdy eksperyment wykorzystuje pewne funkcje z `mylib`. Teraz przychodzę i rozpoczynam swój czwarty eksperyment. W tym procesie może być konieczna zmiana mojej biblioteki w sposób niezgodny z poprzednimi wersjami. Teraz nie mogę ponownie uruchomić moich pierwszych trzech eksperymentów bez aktualizacji ich kodów, aby były zgodne z najnowszą biblioteką. _Uwaga_ : Od teraz trzymam `mylib` w kontroli wersji i `exploration` w kontroli wersji, używając git. Oznacza to, że wszystkie eksperymenty znajdują się w tym samym repozytorium. Odbywa się to tak, że pojedyncze „pchnięcie” lub „pobranie” i „scalenie” w „eksperymentach” zsynchronizuje wszystkie moje eksperymenty między komputerami. Czuję, że może być lepszy sposób, ale to może być inne pytanie... # Możliwe rozwiązania * Mógłbym przegryźć kulę i zaktualizować stare eksperymenty ręcznie, gdy tylko trzeba je uruchomić (złe, żmudne, ale proste). * Mogę „sprzedać” moją bibliotekę, kopiując ją za każdym razem, gdy robię nowy eksperyment. (Źle, poprawki błędów muszą być wstawiane do każdej kopii). * Ponieważ utrzymuję moją bibliotekę pod kontrolą wersji, mogę oznaczyć punkty w historii biblioteki zgodnie z wymaganiami eksperymentu. Gdy chcę przeprowadzić eksperyment _n_ , wybieram tag _n_. (Lepiej, ale co, jeśli chcę przeprowadzić dwa eksperymenty jednocześnie? Wygląda na to, że powinien istnieć sposób na automatyczne użycie określonej wersji biblioteki). * Za każdym razem, gdy rozpoczynam eksperyment, utworzę nową gałąź w biblioteka. W każdym folderze eksperymentu sklonuję repozytorium biblioteki i sprowadzę odpowiednią gałąź. (Wydaje się to rozsądne, chociaż może to marnowanie miejsca, ponieważ podczas klonowania powielam wszystkie gałęzie. Mogę też przeprowadzić wiele eksperymentów, co oznacza, że w moim repozytorium będzie wiele gałęzi, które będą zaśmiecać rzeczy niepotrzebnie.) Czy powinienem ponownie rozważyć którekolwiek z powyższych rozwiązań? Słyszałem również o poddrzewach i modułach podrzędnych gita i chociaż _brzmią_, że mogą być odpowiedzią na mój problem, chcę uzyskać informacje od bardziej doświadczonych programistów, zanim zapadnie się czas w króliczą norę.


title: Najnowocześniejsze przepływy pracy Mercurial

text: Mając za sobą solidną wiedzę na temat git, od czasu do czasu używam mercuriala, zwłaszcza podczas łatania projektu opartego na HG. Czuję się trochę nieswojo, bo moja wiedza o mercurialu jest ograniczona i wiele rzeczy robi inaczej niż git. Ponieważ wiele z tych rzeczy jest prawdopodobnie po prostu zakorzenionych w moim braku wiedzy o rtęci, chciałbym to odświeżyć. Jedną z przeszkód w nauce mercurial jest obfitość wtyczek. Wygląda na to, że nie wszystkie wtyczki opisane w Poradnikach są nadal polecane, ponieważ wiele z nich zostało zastąpionych itp. Od czego są dobre, nowoczesne wtyczki na początek? Podczas gdy w Git ciężko pracuję z gałęziami, lubię od czasu do czasu zmieniać bazę, aby uniknąć zbyt wielu zatwierdzeń scalających między gałęziami głównymi i funkcjami w tę i z powrotem. Czy to użycie może być dość proste zmapowane na mercurial, czy też powiedziałbyś, że powinienem zmienić to podejście podczas korzystania z mercurial dla „bardziej natywnego” przepływu pracy?


title: Czy drzewa przyrostków i tablice przyrostków są identyczne? Jakie są różnice?

text: Przeczytałem kilka informacji przez Internet ... odkryłem, że drzewo sufiksów jest w jakiś sposób podobne do tablicy sufiksów, ale jakoś nie są tym samym.. Biorąc pod uwagę ciąg, algorytm budowy drzewa sufiksów wygląda mniej więcej tak (skopiowałem algorytm ze strony internetowej) FOR i ← 1 do n-1 FOR j ← 1 do i+1 znajdź ścieżkę końcową dla S[j…i] rozszerz ścieżkę, jeśli to konieczne, do drzewa sufiksów S[i+1], które może wyświetlić listę w dół wszystkich podciągów uzyskanych z danego łańcucha Czy jednak tablica sufiksów zapewnia taką samą funkcjonalność w celu uzyskania listy podciągów? A może tablice sufiksów to tylko implementacja drzew sufiksów? Lub tablica sufiksów po prostu zapewnia funkcję przechowywania?


title: Czy powinniśmy uwzględnić systemy zewnętrzne w diagramie klas?

text: Chcę narysować diagram klas, który przedstawia dla aplikacji następujące elementy: * Zewnętrzny system zarządzania treścią, który publikuje niektóre elementy wiadomości. * Klasa reprezentująca element wiadomości w mojej aplikacji. Pytanie brzmi, czy powinienem uwzględnić zewnętrzny system zarządzania treścią jako klasę na moim diagramie (i może nadać mu inny kolor lub dodać komentarz, że jest to komponent zewnętrzny) ? jeśli odpowiedź brzmi nie, co powinienem uwzględnić w diagramie klas? tylko klasa wiadomości ? i jak pokazać relację między klasą newsa a zewnętrznym systemem zarządzania treścią?


title: Standardowe sposoby odebrania użytkownikowi dostępu do strony

text: Jestem w trakcie tworzenia witryny sieci Web .NET MVC, w której wymagane jest, aby administratorzy mieli możliwość blokowania kont, aby nie tylko zapobiegać przyszłym logowaniu, ale także natychmiast cofnąć dostęp do witryny dla danego uwierzytelnionego użytkownika. Zablokowanie konta jest łatwe, ale czy istnieje ustalona metoda natychmiastowego uniemożliwienia dostępu w tego typu scenariuszu. Czy chodzi o sprawdzanie przy każdym żądaniu, czy konto żądającego jest zablokowane w bazie danych, a następnie wyczyszczenie pliku cookie uwierzytelniania, jeśli jest to wymagane? Będę wdzięczny za wszelkie wskazówki, które ktoś ma.


title: Jak wyjaśnić potrzebę refaktoryzacji kodu dla szefa nie będącego deweloperem

text: > **Możliwy duplikat:** > Jak wytłumaczyć refaktoryzację osobie nietechnicznej? > Jak uzasadnić czas refaktoryzacji kodu? Mój przełożony jest CTO firmy, w której pracuję, nie jest mistrzem wszystkich zawodów. Odziedziczyłem bazę kodu składającą się z około 400 000 linii PHP od 2 poprzednich programistów. Stan kodu można porównać do śmietnika za włoską restauracją, bałaganu i pełnego spaghetti. Jestem na mojej obecnej pozycji od około 7 miesięcy i staram się uzyskać zgodę na refaktoryzację części kodu, ponieważ otrzymuję błędy/funkcje do pracy. Moje próby uzyskania pozwolenia na poświęcenie czasu na to zadanie spotkały się z niewiele więcej niż przemijającym „nie” w odpowiedzi. Jakie kroki mogę podjąć, aby wyjaśnić mojemu przełożonemu, dlaczego musimy posprzątać ten bałagan w bazie kodu i sprawdzić, czy nie możemy go zrefaktoryzować do łatwego do zarządzania, skalowalnego i bezpiecznego stanu. Szukam bardziej, jak wytłumaczyć potrzebę komuś, kto powie, że rozumie, ale tak naprawdę nie ma pojęcia, więc odstrzeliwuje to, aby później uniknąć kłopotów.


title: Jak wyjaśnić interesariuszom wartość refaktoryzacji?

text: Jak przekonać kierowników projektów, właścicieli produktów, analityków biznesowych, klientów i różnych innych interesariuszy, że refaktoryzacja jest wartościową i produktywną częścią procesu rozwoju? Jako programiści wszyscy wiemy, że wymagania zmieniają się lub nigdy nie są w pełni wyjaśnione od samego początku, dlatego sposób, w jaki napisaliśmy fragment kodu w przeszłości, nie ma teraz sensu i musi się zmienić. Wiemy, że jeśli teraz przeprojektujemy jakiś kod, na dłuższą metę oszczędzi nam to bólu głowy. Wiemy, że jeśli utrzymamy naszą bazę kodu w czystości i porządku, poprawi to łatwość utrzymania i ostatecznie doprowadzi do lepszego kodu. Jednak bez względu na to, jak przedstawiam to interesariuszom, po prostu nie mogę przekazać wartości. Dla nich refaktoryzacja to niekonstruktywna strata czasu (z samej definicji – użytkownik nie powinien widzieć żadnych zmian w aplikacji). Dla nich nie zapewnia to żadnej wartości biznesowej (a przynajmniej żadnej bezpośredniej wartości biznesowej), ponieważ nie zapewnia żadnych nowych funkcji i będą silnie opierać się jakiejkolwiek refaktoryzacji. Nie mogę brać udziału w kodzie, w którym nie dochodzi do refaktoryzacji, ponieważ byłem tam wcześniej i widziałem, jak to się kończy. Więc zamiast tego wkradam się do pracy nad funkcją. Zdecydowanie wolałbym robić to otwarcie, aby interesariusze mogli mieć jaśniejszy obraz procesu rozwoju. Jakieś pomysły, jak to przekazać?


title: Jak uzasadnić czas refaktoryzacji kodu?

text: Mieć bardzo duży projekt ponad 70 000 LOC. Projekt zdecydowanie wymaga refaktoryzacji kodu w Core Framework i innych częściach. Na początku projektu NIE wyznaczono czasu na refaktoryzację. Jednak z czasem i ponad 40 deweloperów dołączyło i opuściło projekt. Z mojej perspektywy jest niezbędny. Jakie byłyby twoje kluczowe punkty w argumentowaniu i obronie właściwej zasady tworzenia oprogramowania?


title: Diagram klas UML: abstrakcja czy interfejs?

text: Modeluję diagram klas i zauważyłem możliwość jego nieznacznego uproszczenia. Chcę wiedzieć, czy lepiej byłoby zaimplementować klasę abstrakcyjną czy interfejs? Scenariusz jest taki, mam klasy: * Artysta * Gatunek * Album * Piosenka Wszystkie mają wspólne metody getName, setName i getCount (to znaczy playcount). Czy najlepiej byłoby utworzyć abstrakcyjną klasę „Muzyka” za pomocą wyżej wymienionych metod abstrakcyjnych, czy powinienem utworzyć interfejs, ponieważ klasy implementujące interfejs muszą zawierać wszystkie metody interfejsu (myślę, popraw mnie, jeśli jestem zło). Mam nadzieję, że podałem wystarczająco dużo szczegółów, proszę zadawać pytania, jeśli nie. Dziękuję!


title: Utrzymujący się problem z sesją po ponownym uruchomieniu systemu

text: Czy istnieje sposób, aby zapobiec przywróceniu identyfikatora sesji podczas uruchamiania/ponownemu uruchomieniu systemu użytkownika? Korzystamy z aplikacji asp.net i mogę się zalogować i uzyskać dostęp do strony. Po raz pierwszy identyfikator sesji jest tworzony i przechowywany w plikach cookie. Problem: Ale jeśli ponownie uruchomię system bez wylogowania, sesja będzie nadal żywa. Jak mogę temu zapobiec? od strony serwera. Mogę spróbować usunąć pliki cookie, ale nie jest to praktyczne, ponieważ każdy użytkownik będzie miał inne preferencje.


title: Jak zaimplementować zaciemnianie kodu dla kodu natywnego?

text: Jestem zainteresowany zaciemnianiem kodu **(kod natywny, żeby było jasne, co rozumiem przez "kod natywny": rzeczywisty kod maszynowy w plikach wykonywalnych x86/x64/arm - PE, ELF, Macho itp., a nie źródła)** jako część procesu budowania. Przychodzi mi na myśl kilka sposobów na zrobienie tego: 1. Napisanie wtyczki kompilatora, która po wszystkich fazach optymalizacji otrzyma wewnętrzną reprezentację, przekształci ją, a następnie wyśle do zaplecza kompilatora. W takim razie, czy mógłbyś mi doradzić jakieś kompilatory, które obsługują takie wtyczki? Język programowania nie ma większego znaczenia, ale chciałbym wypróbować coś innego niż C/C++ (wiem, że zarówno GCC, jak i Clang obsługują wtyczki, ale nigdy nie mogłem go poprawnie uruchomić w systemie Windows). 2. Zrzuć wewnętrzną reprezentację po wszystkich fazach optymalizacji do pliku, przeanalizuj i przetwórz ją za pomocą mojego narzędzia do zaciemniania i przekaż ją z powrotem do kompilatora. Nie mogłem znaleźć, jak to zrobić za pomocą GCC (udało mi się zrzucić różne wewnętrzne reprezentacje, ale nie mogłem znaleźć sposobu, aby kompilator generował z niego kod). I wiem, że Clang jest w stanie wygenerować kod bitowy LLVM, który można przetwarzać i kompilować za pomocą kompilatora LLVM, ale znowu nie mogłem sprawić, by działał poprawnie w systemie Windows. Czy znasz jakiś kompilator, który pozwala na robienie takich rzeczy? 3. Obecnie robię zaciemnianie przez wstępne przetwarzanie źródeł, działa, ale zajmuje to zbyt dużo czasu dla dużej bazy kodu. Więc szukam alternatywnych sposobów na zrobienie tego i chcę przeczytać twoje opinie na temat najlepszego sposobu na zaciemnianie kodu natywnego. PS Proszę pamiętać, że zadaję konkretne pytanie. **Nie pytam, czy potrzebuję zaciemniania na nie**. Zaciemnianie robi się z jakiegoś powodu i mam powód, żeby to robić. **Nie pytam jak przeprowadzić faktyczne zaciemnianie kodu natywnego ani o algorytmy zaciemniania kodu**. Wiem jak to zrobić i jak to złamać. _**Pytam o natywne kompilatory kodu, które albo mają dobrą obsługę wtyczek, albo potrafią zrzucić i ponownie skompilować jakąś wewnętrzną reprezentację niskiego poziomu, taką jak AST (abstrakcyjne drzewo składni), RTL (język transferu rejestru), trzyadresowy kod lub coś innego_ **.


title: Kod wydajności ASP.net za vs kod_aplikacji

text: Zastanawiam się nad wydajnością strony internetowej/aplikacji, gdy w kodzie za plikami znajduje się kod, a nie gdy kod jest przenoszony do oddzielnych plików w folderze App_Code. Rozumiem, że kod jest kompilowany i wykonywany za każdym razem, gdy zażąda tego użytkownik. Jeśli tak nie jest, daj mi znać. Rozumiem również, że kod w pliku App_Code zostanie skompilowany raz. Przy takim zrozumieniu wydawałoby się, że przeniesienie kodu do folderu App_Code przyspieszyłoby żądania. Rozumiem, że nie będzie żadnych znaczących korzyści, dopóki nie będziesz mieć wielu plików i wielu żądań bardzo często. Czy jednak spowoduje to jakąkolwiek wartość wydajności? Również przez wydajność mówię o szybkości. W szczególności prędkość obciążenia po stronie klienta. I wiem, że istnieją inne czynniki, które mogą zwiększyć prędkość po stronie użytkowników, ale pytam konkretnie o powyższą sytuację.


title: Co to jest programista z wbudowanym oprogramowaniem?

text: Widziałem ogłoszenie o pracę z prośbą o „własnych programistów” i prosząc ich o podanie „włączonej stawki” podczas składania wniosku. Jaka jest różnica między deweloperem zarejestrowanym a wykonawcą/freelancerem? Google nie pomaga. Domyślam się, że zarejestrowany deweloper jest po prostu freelancerem/wykonawcą, który zakłada korporację i pracuje jako jedyny pracownik tej korporacji, a nie jest freelancerem pod własnym nazwiskiem. Ale ponieważ (zakładam), że musiałbyś płacić zarówno podatki od osób prawnych, jak i dochodowe, gdybyś to zrobił, a nie tylko podatki dochodowe, jaki byłby sens tego robić? Byłaby pewna ochrona przed odpowiedzialnością prawną, ale generalnie nie stanowi to dużego ryzyka dla twórców oprogramowania.


title: Skalowanie produktywności w funkcji wielkości zespołu

text: Czy istnieją jakieś, nawet przybliżone, szacunki, w jaki sposób produktywność rośnie wraz z liczbą programistów? (I najlepiej poparte liczbami.) Tutaj przez produktywność rozumiem _odwrotność czasu_, która jest potrzebna do ukończenia projektu (biorąc pod uwagę stałe projekty, jak zmienia się obciążenie czasowe), chociaż inne miary mogą być równie interesujące ( ale inne mogą być trudniejsze do obiektywizacji). Standardowa mądrość jest taka, że _"Dziewięć kobiet nie może urodzić dziecka w ciągu jednego miesiąca"_, co w moim języku oznacza, że wydajność jest sublinearna. (Prawo Brooka idzie jeszcze dalej – że całkowita wydajność spada, ale AFAIK wiąże się z pompowaniem ludzi, gdy projekt jest już w toku). Jasne, że istnieje narzut na: komunikację, koordynację, wspólną technologię; i bardzo prawdopodobne, że ostatni programiści mogą nie być tak wykwalifikowani i zmotywowani jak pierwsi. Ale ile? W ogólnym scenariuszu nazywa się to efektem Ringelmanna i przynajmniej - w przypadku prostych zadań, takich jak ciągnięcie liny, przypisuje się to utracie motywacji. * * * Dlaczego pytanie? Głównie akademicko i z ciekawości. Ciekawą rzeczą jest skalowanie praw wydajności. Na przykład, wydajność naukowców rośnie superlinearnie (tutaj: ~n^2) wraz z wielkością zespołu, aż grupa osiągnie maksymalną liczbę efektywnych współpracowników. W przypadku większości zadań poznawczych grupa zazwyczaj radzi sobie lepiej niż jedna osoba, ale nie n-krotnie lepiej (skalowanie bardziej jak pierwiastek kwadratowy, ~n^0,5). W przypadku zarządzania instytucją koszty ogólne mogą być mierzone bezpośrednio, ponieważ proporcja pracowników administracyjnych wzrasta wraz z wielkością instytucji. Zobacz referencje z mojego wystąpienia Czy 2x większy oznacza 2x lepszy? - I Offtopikarium. Trochę związane z moim pytaniem Wykonanie grupy rozwiązującej zadanie poznawcze: Jak to się skaluje? - CogSci.SE. * * * Oczywiście, będzie to zależeć od zadania i techniki współpracy (np. programowanie w parach przez dwie osoby vs siedzenie przy własnym biurku).


title: Jak byś odmówił umieszczenia swojego nazwiska w patencie na oprogramowanie?

text: Twoja firma chce opatentować coś, co wdrożyłeś. Nie zgadzasz się z koncepcją patentowania oprogramowania. Jak postępujesz? * Czy dopuszczalne byłoby zgłoszenie patentu, ale nie ujawniaj swojego nazwiska? * Czy próbowałbyś przekonać swoją firmę, aby NIE złożyła patentu? Czy są jakieś wady posiadania twojego nazwiska na patencie? * Czy potencjalnie możesz zostać zmuszony do stawienia się w sądzie w sprawie patentowej?


title: Czy programista powinien używać domyślnego środowiska?

text: Widzę wielu programistów (i, ogólnie rzecz biorąc, specjalistów od technologii) używających starego „motywu klasycznego” w systemie Windows zamiast Aero (lub Luny w systemie Windows XP) z powodów takich jak „jest szybszy” lub „nie chcę oka- cukierek". Jednak większość użytkowników, którzy nie są programistami, będzie mieć włączony domyślny motyw, więc ci programiści będą pracować (i prawdopodobnie projektować i debugować jego aplikację) w niestandardowym środowisku (chyba że ich celem jest system Windows Server). Na przykład programista, który nigdy nie używa Aero, może nawet nie wiedzieć, że najechanie na przycisk daje efekt „aureoli”. Czy zatem programiści powinni starać się, aby konfiguracja stacji roboczej była jak najbardziej zbliżona do rzeczywistego świata, czy też powinni polegać na czymś/kogoś innym (zespół testowy, zespół projektowy interfejsu użytkownika itp.) w celu „integracji ze światem rzeczywistym”? A co jeśli programista pracuje jako jednoosobowy zespół (jest projektantem, koderem i testerem)?


title: Programowanie Windows - czy pozostawić włączone UAC?

text: Jakie jest zalecane ustawienie Kontrola konta użytkownika (UAC) podczas programowania w systemie Windows? Nawet na Win7 uważam, że jest to wystarczająco denerwujące, aby go wyłączyć (ponieważ dzięki temu jestem bardziej produktywny), ale czasami czuję się źle, ponieważ wiem, że jeśli zostawię to włączone, znajdę więcej problemów w moim kodzie.


title: Programista, nie bloger

text: Potrzebuję porady od ludzi, którzy mogą zrozumieć, skąd pochodzę. Jestem głównym inżynierem oprogramowania. Firma, w której pracuję, wyraziła ostatnio poważne zainteresowanie tym, żebym o tym napisał (ku mojemu przerażeniu). Ktoś nawet założył mi bloga. Mam zespół Aspergera. Jestem naprawdę dobry w rozwiązywaniu złożonych problemów z oprogramowaniem i znajdowaniu cudownie eleganckich rozwiązań. Nie wiem, jak pisać ciekawe i wciągające teksty. Pisanie jest dla mnie trudnym problemem, który nie ma określonego rozwiązania. Naprawdę zmagam się z tym i zabiera mi to dużo czasu, który mógłbym spędzić na załatwianiu spraw. Uwielbiam firmę, dla której pracuję, ale martwię się, co to będzie oznaczać, jeśli powiem im, że nie mogę tego zrobić. Nie wiem, jak powiedzieć mojemu pracodawcy, że to, o co proszą, jest czymś, co całkowicie mnie przerasta. Pomóc lub doradzić komuś? **Aktualizacja** Dziękuję wszystkim! Wow, świetne odpowiedzi, mnóstwo świetnych rad!! To było bardzo trudne i trwało długo, ale udało mi się to zrobić. Zostanę trochę dłużej w nadziei, że będzie łatwiej (pierwszy post jest chyba najtrudniejszy, bo to on nadaje ton i takie tam). Dzięki za miłe słowa, wszystkie rady, a nawet za kopnięcia w spodnie!! =)


title: Czy istnieje struktura testów jednostkowych dla znaczników HTML?

text: Pracuję w sklepie z projektowaniem stron internetowych. Nasz przepływ pracy jest podzielony na dwie części: programiści frontendu tworzą statyczne szablony html i css projektu strony, a następnie programiści backendu łączą szablony w CMS. Mamy zestaw wspólnych funkcji dla naszych witryn i zastanawiam się, czy istnieje struktura testów jednostkowych, której możemy użyć do przetestowania tej funkcji. Na przykład jedna z naszych wspólnych wskazówek dotyczących funkcjonalności mówi, że _wszystkie łącza do pliku PDF muszą otwierać się w nowym oknie_. Chciałbym napisać test jednostkowy, który wygląda mniej więcej tak if(a.class = 'pdf_link') attach(target='_blank) Wygląda na to, że lista platform testowania jednostkowego Wikipedii nie zawiera niczego, co obejmuje tę stosunkowo prostą funkcjonalność ( sprawdzanie ciągów względem szablonu) i skłaniam się ku napisaniu kilku skryptów basha i powiązaniu ich z naszym serwerem CI. Ale czy jest na to lepszy sposób?


title: Blokowanie rekordów bazy danych

text: Co mam w tej chwili: 1. Stół z dużą ilością rekordów. 2. Około 200 użytkowników może wybrać rekord zgodnie z pewnymi regułami na podstawie danych w każdym rekordzie. 3. Istnieje duża szansa, że 2 lub więcej użytkowników wybierze ten sam rekord. 4. Użytkownik aktualizuje rekord, a następnie zapisuje go z powrotem w bazie danych. Ten rekord nie zostanie ponownie wybrany (nietrwale usunięty). 5. Próbowano blokowania optymistycznego i wydajność nie została zaakceptowana przez PO. 6. Nasze rozwiązanie polegało na tym, że gdy użytkownik wybierze rekord, aktualizuje pole „blokada” w rekordzie. Problemy: 1. Kolizja nadal występuje, ponieważ użytkownicy wciąż wybierają ten sam rekord. Muszę uniemożliwić 2 użytkownikom wybranie tego samego rekordu. 2. Musimy zwolnić blokadę ręcznie, jeśli użytkownik nie podejmuje żadnych działań przez dłuższy czas. Szukałem i wygląda na to, że Amazon SQS był dobrym rozwiązaniem, ale miał problem, że nie mogę przeszukać kolejki. Czy istnieje dobra technologia do rozwiązania mojego problemu? Muszę zaimplementować przeszukiwalną kolejkę, w której wiadomości są blokowane po wybraniu, a blokada wygasa po określonym czasie.


title: Pro/con używania dyrektyw Angular do złożonej walidacji formularzy/manipulacji GUI

text: Tworzę nowy frontend SPA, który ma zastąpić przestarzałe i wymagające aktualizacji przestarzałe systemy istniejącej firmy. Jestem nowy w Angularze i chciałem zobaczyć, czy społeczność może dać mi jakąś perspektywę. Przedstawię swój problem, a następnie zadam pytanie. Muszę wygenerować kilka serii pól wyboru na podstawie danych z pliku .js, z takimi danymi: $scope.fieldMappings.investmentObjectiveMap = [ {'id':"ZACHOWANIE KAPITAŁU", 'name':"Zachowanie kapitału"} , {'id':"STABLE", 'name':"Umiarkowany"}, {'id':"BALANCED", 'name':"Umiarkowany wzrost"}, // etc {'id':"NONE", 'nazwa':"Brak"} ]; Pola wyboru są tworzone za pomocą ng-repeat, tak jak to: <div ng-repeat="investmentObjective in fieldMappings.investmentObjectiveMap"> ... </div> Jednak potrzebowałem wartości reprezentowanych przez pola wyboru, aby zmapować do innego modelu (nie tylko dwukierunkowo powiązany z obiektem mapowania pól). Aby to osiągnąć, stworzyłem dyrektywę, która akceptuje destarray tablicy docelowej, która jest ostatecznie mapowana do modelu. Wiem również, że muszę poradzić sobie z bardzo specyficznymi kontrolkami gui, takimi jak odznaczenie „Brak”, jeśli cokolwiek innego zostanie zaznaczone, lub zaznaczenie „Brak”, jeśli wszystko inne zostanie odznaczone. Ponadto „Brak” nie będzie opcją w każdej grupie pól wyboru, więc dyrektywa musi być wystarczająco ogólna, aby zaakceptować funkcję walidacji, która może majstrować przy zaznaczonym stanie danych wejściowych grupy pól wyboru w oparciu o to, co już zostało kliknięte, ale sprytne wystarczy się nie złamać, jeśli nie ma opcji o nazwie „BRAK”. Zacząłem to robić, dodając ng-click, który wywoływał funkcję w kontrolerze, ale rozglądając się po Stack Overflow, czytałem, że źle jest umieszczać kod manipulacji DOM w kontrolerze - powinien być w dyrektywach. Czy potrzebuję więc kolejnej dyrektywy? Do tej pory: (html): <input my-checkbox-group type="checkbox" fieldobj="investmentObjective" ng-click="validationfunc()" validationfunc="clearOnNone()" destarray="investor.investmentObjective" /> kod: .directive("myCheckboxGroup", function () { return { ogranicz: "A", scope: { destarray: "=", // źródło wszystkich wartości pola wyboru fieldobj: "=", // tablica wartości pochodzą z validationfunc: "&" // funkcja, która ma zostać wywołana do walidacji (opcjonalne) }, link: function (scope, elem, attrs) { if (scope.destarray.indexOf(scope.fieldobj.id) !== -1) { elem[0].checked = true; } elem.bind('klik', function() { var index = scope.destarray.indexOf(scope.fieldobj.id); if (elem[0].checked ) { jeśli (indeks === -1) { scope.destarray.push(scope.fieldobj.id); } } else { if (indeks !== -1) { scope.destarray.splice(indeks, 1); } } }); } }; }) Fragment kontrolera .js: .controller( 'SuitabilityCtrl', ['$scope', function ( $scope ) { $scope.clearOnNone = function() { // niegrzeczny kod manipulacji DOM jQuery, który // patrzy na pola wyboru i kontrole /odznacza w razie potrzeby };Powyższy kod jest zrobiony i działa dobrze, z wyjątkiem niegrzecznego kodu jquery w clearOnNone(), dlatego napisałem to pytanie.I oto moje pytanie: po tym WSZYSTKIM myślę sobie - mógłbym być już zrobione, jeśli po prostu ręcznie obsłużę całą tę logikę GUI i śmieci walidacyjne za pomocą jQuery napisanej w moim kontrolerze.W jakim momencie pisanie tych skomplikowanych dyrektyw staje się głupie, nad którymi przyszli programiści będą musieli zastanawiać się więcej, niż gdybym tylko napisał jQuery kod, który 99% z nas zrozumiałoby na pierwszy rzut oka?Jak inni programiści rysują linię?Widzę to w całym Stack Overflow.Na przykład wydaje się, że na to pytanie można odpowiedzieć za pomocą kilkunastu linii prostych jQuery, ale ma optować Aby zrobić to w sposób kątowy, z dyrektywą i częściową… wydaje się, że jest to dużo pracy dla prostego problemu. Konkretnie, przypuszczam, że chciałbym wiedzieć: jak NALEŻY pisać kod, który sprawdza, czy zaznaczono „Brak” (jeśli istnieje jako opcja w tej grupie pól wyboru), a następnie odpowiednio zaznaczyć/odznaczyć pozostałe pola? Bardziej złożona dyrektywa? Nie mogę uwierzyć, że jestem jedynym programistą, który musi zaimplementować kod, który jest bardziej złożony niż jest to potrzebne tylko po to, aby zaspokoić uparty framework.


title: Czy istnieje jakaś alternatywa dla wskaźników funkcji w c++?

text: Jestem początkującym programistą C++, który miał pomysł, że wskaźniki funkcji są rzeczą C, a OOP w C++ nie zaleca ich używania. Wiem, że to, co tu piszę, jest niejasne/szerokie. Ale byłoby świetnie, gdyby ktoś mógł skomentować, czy mój pomysł jest całkowicie błędny, czy może coś sensownego. Dziękuję.


title: Jak zdecydować między wykorzystaniem istniejącego rozwiązania eCommerce a budowaniem własnego?

text: Istnieje wiele gotowych rozwiązań typu open i close source. Na przykład Magento ma imponującą listę witryn, które wykorzystują je w handlu elektronicznym. Istnieją również historie takie jak ta (tylko link do ostatniej sekcji), w których witryna eCommerce jest rozwijana od podstaw z dużym sukcesem. Zastanawiam się, czy istnieje obiektywny sposób podejścia do decyzji dotyczącej kompilacji i dostosowania?


title: ORM: Projekt warstwy usług

text: Obecnie piszę średniej wielkości aplikację internetową i wiele razy zadaję sobie to pytanie. Załóżmy na przykład, że istnieją użytkownicy, którzy mają pliki (jeden do wielu). W jaki sposób interfejs użytkownika powinien uzyskać dostęp do danych? Jednym z „ekstremalnych” byłoby pozwolenie warstwie usług „tylko” na zajęcie się leniwym ładowaniem, tj. interfejs publiczny UserService { public User createUser(String loginName, String hasło); public Set<MediaFile> getFilesOfUser (użytkownik); } lub z drugiej strony nigdy nie zwracaj encji, tylko ich identyfikatory public interface UserService { public long createUser(String loginName, String hasło); public Set<Long> getFilesOfUser(long userId); } Oznacza to, że usługa będzie potrzebowała metod do odpytywania (i ustawiania) wszystkich "podstawowych" atrybutów, także publicznego interfejsu UserService { public long createUser(String loginName, String password); public Set<Long> getFilesOfUser(long userId); public String pobierzNazwęUżytkownika(długi identyfikator użytkownika); public void setNameOfUser(długi identyfikator użytkownika, nazwa ciągu); } Dodaje to sporo kodu (i prawdopodobnie dodatkowe obciążenie bazy danych), ale także chroni przed StaleData- lub LazyInitializationException. Pytanie podrzędne: W jaki sposób - korzystając z pierwszego przypadku - należy wdrożyć aktualizację, pobieranie itp.? Przychodzą mi na myśl dwie metody Po pierwsze, mógłbym spróbować ręcznie zaktualizować oryginalne odniesienie (ponieważ rzeczy takie jak proxy kolekcji, wersja itp. są aktualizowane tylko w zwróconym obiekcie, a nie w oryginalnym odwołaniu). Upraszcza to używanie tych jednostek bezpośrednio w interfejsie użytkownika public Set<MediaFile> getFilesOfUser(User user) { Set<MediaFile> files = user.getFiles(); if(!Hibernate.isInitialized(files)) { user.setFiles(userDao.findOne(user.getId()).getFiles()); // findOne do ponownego dołączenia do sesji return ImmutableSet.<MediaFile> copyOf(files); } ale także public Set<MediaFile> getFilesOfUser(User user) { return ImmutableSet.<MediaFile> copyOf(getUser(user.getId()).getFiles()); } Główna różnica w tych wynikach pojawia się podczas używania wersjonowania. W pierwszym przypadku muszę zaktualizować wersję itp. ręcznie (`user.setVersion(attachedUser.getVersion())`) po każdej aktualizacji, w drugim, wywołanie aktualizacji musi za każdym razem ponownie pobrać encję, aby ustawić wartość: public void update(User user) { User AttachUser = getUser(user.getId()); dołączonyUżytkownik.nazwaZestawu(użytkownik.NazwaZestawu()); AttachUser.setPasswordHash(user.getPasswordHash()); // etc etc userDao.save(attachedUser); } Nie wydaje się to zbyt wydajne/nieintuicyjne. Jaka jest właściwa droga? **EDYTUJ** Właśnie wpadłem na inny pomysł związany z metodą „tylko zwracaj identyfikatory”: Usługi mogą udostępniać publiczną metodę „get___ById(long id)”, której można następnie użyć przynajmniej do odczytania podstawowych wartości encji. Dodatkowo można by zaimplementować "get___ByIdEagerly(long id)" i zwrócić zainicjowaną jednostkę, ale myślę, że to zły pomysł.


title: Jak sformatować tę linię zgodnie z PEP 8?

text: Staram się przestrzegać PEP 8, z limitem 78 znaków na długość moich linii. Mam następującą instrukcję: startTime = time.strptime(request.GET.get('st', (dt.datetime.now() - dt.timedelta(days=1))).strftime("%d/%b/ %Y:%H:%M:%S")), "%d/%b/%Y:%H:%M:%S") Jak mam go sformatować, aby był zgodny z PEP8 (gdzie mam podzielić to na nowe linie?)


title: Czy korzystając z bibliotek GPL bez modyfikacji w komercyjnej witrynie internetowej, muszę udostępniać swój kod źródłowy?

text: Jeśli piszę publicznie dostępną komercyjną witrynę internetową i korzystam z biblioteki JavaScript i/lub plików binarnych na licencji GPL bez ich modyfikowania (np. plupload), czy będę musiał udostępnić źródło mojej witryny? Czy to jest uważane za dystrybucję? Ten komponent to tylko przykład. Wiem, że dostępna jest licencja komercyjna, ale czy potrzebuję licencji komercyjnej, jeśli nie modyfikowałem kodu źródłowego komponentu?


title: Czy serwis korzystający ze zmodyfikowanego oprogramowania na licencji GPL ma obowiązek opublikowania swoich zmian?

text: Jeśli organizacja non-profit uruchamia na swojej stronie internetowej oprogramowanie, które jest zmodyfikowanym oprogramowaniem na licencji GPL, a ta się do tego przyznała, czy ma prawny obowiązek opublikowania jakichkolwiek zmian? Nie oferują plików binarnych, po prostu je uruchamiają i świadczą usługi publiczne. Czy to ma znaczenie, czy oryginalnym oprogramowaniem był JavaScript (dlatego użytkownicy w pewnym momencie nabywają źródła) czy PHP? Przeczytałem już opinię GNU, ale jest ona nieco niejednoznaczna.


title: Definicja dystrybucji w odniesieniu do GPLv3

text: Wydzierżawiamy naszym klientom urządzenie (4 serwery fizyczne z 12 maszynami wirtualnymi). Jeden z serwerów udostępnia witrynę internetową, która z kolei korzysta z innych maszyn wirtualnych. Klienci nie mają dostępu do maszyn wirtualnych ani działającego na nich oprogramowania. Jednym z powodów jest to, że przetwarzamy tajne dokumenty (i chociaż bezpieczeństwo przez ukrywanie nie jest obroną, po co ułatwiać atakującemu coś?). Tak więc urządzenia są naszą własnością i są przez nas utrzymywane, ale klienci mogą uzyskać do nich dostęp przez sieć. Chciałbym skorzystać z funkcjonalności, która znajduje się w bibliotece na licencji GPLv3. W razie potrzeby mogę samodzielnie zaimplementować bibliotekę bez konieczności odwoływania się do danej biblioteki, ale oczywiście wolałbym użyć istniejącego kodu (aby uniknąć ponownego wymyślania kół). Z zastrzeżeniem, że żaden z nas nie jest prawnikiem, czy ktoś może wyjaśnić, czy według ich doświadczenia liczy się to jako dystrybucja zgodnie z definicją GPLv3?


title: Jeśli użyłem kodu GPL w aplikacji po stronie serwera, co jeśli którykolwiek z mojego kodu muszę zwolnić?

text: Rozważ usługę taką jak Netflix… jeśli po stronie serwera Netflix używał kodu z dołączoną licencją GPL, czy muszą udostępnić swój kod po stronie serwera na warunkach GPL? Oczywiście netflix jest tylko przykładem, firma, w której pracowałem, głównie świadczy „usługi”, nie sprzedajemy oprogramowania, które każdy może pobrać na swoje komputery, raczej komputery przez sieć rozmawiają z naszymi komputerami i wszystko się kończy. Czy mogę rozważyć użycie kodu GPL w tym środowisku bez tworzenia całego kodu jako „open source”?


title: Co oznacza „dystrybucja” licencji LGPL v3

text: Rozważam oparcie nowego oprogramowania na aplikacji internetowej LGPL. Chcę wykorzystać to nowe oprogramowanie do stworzenia jednej strony internetowej dla mojego pracodawcy i nie zamierzamy nikomu sprzedawać ani rozpowszechniać samego oprogramowania. Czy publikowanie stron internetowych z oprogramowania LGPL jest „dystrybucją” w licencji, więc musiałbym również opublikować nasze zmiany w kodzie LGPL? Rozumiem, że żaden z was nie jest prawnikiem, więc sugeruje się, że IANAL. Rozumiem również, że mogę skontaktować się z twórcami oprogramowania LGPL i poprosić o inną licencję.


title: Czy rozpoczynając projekt cloud computing, Małpa Chaosu powinna być pierwszą aplikacją?

text: Po przeczytaniu artykułu Jeffa Atwooda „Working with the Chaos Monkey” i rozważeniu implikacji „Fallacies of Distributed Computing” zacząłem się zastanawiać, czy pierwszym zadaniem programistów tworzących aplikację w chmurze powinno być stworzenie Chaos Monkey. W rzeczywistości, biorąc pod uwagę, że nawet całe centrum danych może zostać utracone w chmurze, Chaos Gorilla może być również niezbędny do symulacji poważnej awarii. Netflix z pewnością w to wierzy, ale zastanawiałem się, czy ich wnioski zostały udostępnione przez innych tutaj. Czy zatem, jak mówi tytuł, rozpoczynając projekt cloud computing, Małpa Chaosu powinna być pierwszą aplikacją?


title: Czym są „Leaf Stories” w narzędziu Agilefant dla Scrum?

text: Dopiero zaczynam jako Scrum Master i szukam dobrego narzędzia internetowego do tworzenia storyboardów. Próbuję Agilefant i mają coś, co nazywa się "historiami liści". Zastanawiam się, co przez to rozumieją. Czytałem o historiach użytkowników, historiach technicznych, nieplanowanych przedmiotach, ale nie mogę znaleźć odniesienia do „Historii o liściach”. ¿Czy ktoś może wyjaśnić?


title: Jakich umiejętności spodziewałbyś się i doceniłbyś u Młodszego Inżyniera Oprogramowania?

text: Niedawno ukończyłem studia magisterskie z inżynierii oprogramowania i za kilka tygodni rozpoczynam karierę zawodową. Moją rolą będzie Junior Developer dla firmy, która tworzy oprogramowanie w Javie i technologiach pokrewnych (m.in. Spring i Hibernate). Szczerze mówiąc, jestem naprawdę podekscytowany tym, co nadchodzi, zwłaszcza że chcę rozwijać swoją karierę jako programista Java. Bardzo interesuje mnie również zdobywanie doświadczenia w tej dziedzinie. Dodatkowo będzie to moje pierwsze doświadczenie zawodowe jako profesjonalnego programisty, więc naprawdę chcę dać z siebie wszystko od samego początku. Chciałbym wiedzieć, które umiejętności i umiejętności, zarówno miękkie, jak i techniczne, byłyby najbardziej doceniane w nowym profesjonaliście (Junior Developer), który mógłby być częścią Twojego zespołu i na jakich umiejętnościach powinienem się skupić, aby osiągnąć udaną karierę jako Software Inżynier.


title: eBook edycje książek o programowaniu

text: (Wcześniej zdobędę uzasadnienie, dlaczego jest to temat: książki o programowaniu mają zwykle dość specyficzne potrzeby w zakresie formatowania – próbki kodu, tabele, obrazy i wykresy – które nie są wspólne dla wszystkich typów książek i niekoniecznie są dobrze obsługiwane przez Czytniki e-booków.Podobnie są one używane na różne sposoby – często zanurzasz się i wychodzisz, zamiast czytać od deski do deski). (i przypuszczalnie także dla innych czytelników), które dały mi do myślenia. Czytniki e-booków mają pewne zalety w przypadku książek technicznych – przede wszystkim można łatwo przenosić ogromną bibliotekę ciężkich fizycznych książek. Minusem jest to, że niektórzy czytelnicy e-booków rzekomo nie są szczególnie dobrze przygotowani do radzenia sobie z tabelami, przykładami kodu i tak dalej, a książka taka jak Nie każ mi myśleć prawdopodobnie szeroko wykorzystuje tego rodzaju rzeczy. Tak więc pytanie, **jakie są twoje doświadczenia z czytaniem i używaniem książek o programowaniu na czytniku e-booków i czy poleciłbyś je?** Szczególnie interesuje mnie Kindle najnowszej generacji, ale chętnie słyszę o wszystkich urządzeniach - może się przydać aby określić, którego używasz w odpowiedzi.


title: Jak wdrażana jest polityka tego samego pochodzenia?

text: Patrzyłem na międzydomenowe prośby o projekt i natknąłem się na coś, co mnie zaskoczyło. Z lokalnej witryny uruchamiam żądanie Ajax do innej domeny (za pomocą jQuery i waniliowego XMLHttpRequest). Jasne, żądanie kończy się niepowodzeniem i mogę uzyskać tylko zdarzenie niepowodzenia, co wydaje się całkowicie normalne z powodu zasady tego samego pochodzenia. Ale zauważyłem w Fiddler, że prośba jest faktycznie złożona i się udaje! Wygląda na to, że po prostu nie mogę przetworzyć odpowiedzi. Czy czegoś mi brakuje, czy to dziura w zabezpieczeniach? Jasne, nie masz dostępu do danych, ale jaki jest sens zezwalania na wysyłanie danych i blokowania dostępu do odpowiedzi?


title: Wiele problemów z dokumentacją w jednym błędzie

text: Wyraźnie złą praktyką jest umieszczanie kilku błędów w jednym błędzie. Nie jest to wygodne, trudne w utrzymaniu, trudne do śledzenia, co się robi, a co nie itp. Ale czy to wszystko dotyczy również błędów związanych z dokumentacją? Przez dokumentację rozumiem tylko dokumenty zewnętrzne (podręczniki użytkownika, przeglądy architektury itp.). Osobiście uważam, że wygodniej jest utworzyć jeden błąd dla wielu problemów w tym samym dokumencie. Łatwiej jest śledzić aktualizacje w dokumencie i przeglądać dokument po wprowadzeniu zmian. Jakie są wady łączenia wielu wydań dokumentu w jednym błędzie?


title: Ustawienia aplikacji za pomocą wstrzyknięcia konstruktora lub kontekstu otoczenia

text: Zajmuję się tworzeniem aplikacji zawierającej klasę, która ładuje ustawienia aplikacji z pliku konfiguracyjnego. Klasa ustawień: public zapieczętowana klasa MyAppSettings : IMyAppSettings { private IMyAppSettings DefaultSettingsInstance; public MyAppSettings() { DefaultLanguage = "en"; var config = ConfigurationManager.GetSection("MyAppSettings") as NameValueCollection; if (config != null) { if (!string.IsNullOrEmpty(config["Język domyślny"])) Język domyślny = config["Język domyślny"]; } } public static IMyAppSettings Default { get { return DefaultSettingsInstance ?? (DefaultSettingsInstance = new MyAppSettings()); } set { if (wartość == null) wyrzuć nowy ArgumentNullException("wartość"); DefaultSettingsInstance = wartość; } } ciąg publiczny DefaultLanguage { get; zestaw prywatny; } } Klasa, która używa ustawienia (wersja 1): public Sealed class SomeClass { public SomeFunction() { // Użycie tutaj ustawienia języka if(MyAppSettings.Default.DefaultLanguage == "en") { ... } } } lub wersja 2: public seal class SomeClass { private string only readonly _defaultLanguage; public SomeClass(string defaultLanguage) { if(string.IsNullOrEmpty(defaultLanguage)) wyrzuć nowy ArgumentNullException("defaultLanguage"); _domyślnyJęzyk = domyślnyJęzyk; } public SomeFunction() { // Użycie tutaj ustawienia języka if(_defaultLanguage == "en") { ... } } } Obie klasy i interfejs znajdują się w tym samym zestawie. Jakie podejście jest lepsze dla globalnych ustawień aplikacji, przekaż je przez wstrzyknięcie konstrukcji lub użyj kontekstu otoczenia lub czegoś innego?


title: Zapytania dotyczące witryn outsourcingu projektów online

text: Przyglądałem się RentACoder, Freelancer i eLance od kilku lat, ale zawsze wahałem się, czy zarejestrować się na tych stronach. Wahanie to również niewiele zmartwień. Nasuwają mi się następujące pytania: (1) Czy istnieje umowa prawna między oferentem a koderem? Co się stanie na wypadek, gdyby mój termin dostawy się wydłużył? (2) Po dostawie płatność dociera bez problemów, czy nie. (3) W takim razie w przypadku, gdy klient nie uznał projektu za przydatny? Zapewne powie, że mi to nie przyda, a ty zwracasz pieniądze. Może skopiować kod źródłowy i zwrócić mi kolejną kopię. (4) Jakie są dalsze zalecenia? Jak mam zacząć?