title: Jak decydujesz, ile dokumentacji wymagań biznesowych potrzebujesz i jak ją ustrukturyzować?

text: W ciągu ostatnich kilku lat pracowałem nad dwoma projektami. W pierwszym zastosowaliśmy bardzo zwinną metodologię. To było bardzo zorientowane na programistów. W związku z tym zmiany były bardzo szybkie i szybkie. Jakość kodu była wysoka, ponieważ był to nowy system. Nacisk położono na grupową własność projektu i dzielenie się wiedzą. Większość transferu wiedzy z nowymi pracownikami itp. odbywała się po prostu przez wprowadzenie kogoś przez kod lub system, a większość członków personelu w projekcie wiedziała wystarczająco dużo o projekcie, aby to zrobić. Projekt, który uważałem za udany, ale żałuję, że ilość dokumentacji była prawdopodobnie niewystarczająca na dłuższą metę. Mieliśmy kilka historyjek użytkowników, które były specyfikacjami krótkoterminowymi, które miały znaczenie tylko dla sprintu, oraz kilka głównych specyfikacji opisujących procesy biznesowe, które były długoterminowe, a które chcielibyśmy być na bieżąco. Nie mieliśmy żadnych specyfikacji technicznych poza stroną oneNote z loginami użytkowników i linkami do środowisk testowych/serwerów itp. Problemem było utrzymanie równowagi między umieszczeniem tam wystarczającej ilości, aby było to pomocne, a nie tak bardzo, że nikt nie będzie chciał czytać i być ciężarem do utrzymania. Myślę, że nigdy nie znaleźliśmy takiej równowagi. Specyfikacje główne były prawdopodobnie zbyt ogólne, aby były przydatne dla kogoś, kto chce zrozumieć system. Drugi projekt jest zupełnie odwrotny. To stary system i jest bardzo duży. Stosujemy metodologię wodospadu. Ten projekt jest w dużej mierze oparty na testerach. W związku z tym mamy prawdopodobnie zbyt dużo dokumentacji - są tysiące stron w setkach dokumentów tekstowych i wszędzie są duplikaty. (np. dokumenty z takimi samymi lub bardzo podobnymi tekstami wstępu) Duży nacisk kładzie się na utrzymanie tego ogromnego materiału dokumentacji w perfekcji. Utworzenie prostej zmiany w systemie wymaga zidentyfikowania, których dokumentów dotyczy i wprowadzenia niewielkich zmian we wszystkich z nich. Dokumentujemy rzeczy na poziomach, które prawdopodobnie nie są konieczne (np. Niedawno znalazłem dokument doco, w którym udokumentowano okno dialogowe Zapisz plik w IE) i kładziemy nacisk na poprawność nad czytelnością. Krótko mówiąc, mamy pół tuzina analityków biznesowych, a ich praca polega bardziej na aktualizowaniu dokumentacji niż na rzeczywistej analizie. Myślę, że oba te projekty mają złe praktyki, a to, co byłoby optymalne, jest gdzieś pomiędzy nimi. Ta równowaga prawdopodobnie zależy również od systemu, więc jak decydujesz, ile dokumentacji potrzebujesz, a także jak ją ustrukturyzować, aby utrzymanie nie stało się więcej kosztem niż korzyścią. EDYCJA - Cześć, przepraszam, powinienem o tym wspomnieć, zanim pojawiły się wszystkie odpowiedzi (tylko mogłem to sprawdzić). Skupiam się tutaj przede wszystkim na nietechnicznych wymaganiach biznesowych - tych, które mogą być skonsumowane nie tylko przez programistów (odbiorcami mogą być BA, menedżerowie, testerzy, interesariusze itp.)


title: Modyfikacja kodu licencji BSD-2

text: W swoim projekcie używam kodu licencji BSD-2 i za zgodą autora modyfikuję kod. Teraz używam tego kodu w moim projekcie. Wiem, powinienem wymienić nazwisko autora i informacje o prawach autorskich. Czy powinienem wspomnieć, co modyfikuję w tym kodzie?


title: Chcesz nauczyć się C++ i mieć wcześniejszą wiedzę o programowaniu internetowym

text: Właściwie rozważam naukę C++. Chcę zostać ilościowym analitykiem finansowym i wkrótce będę kontynuować mój CFQ. Java nie jest intensywnie używana w tej dziedzinie, ale C++ jest ze względu na swoją złożoność. Dla kogoś, kto ma już wiedzę z zakresu HTML, CSS, JavaScript (średniozaawansowany) i PHP (średniozaawansowany), jak trudne byłoby przejście na C++ w ciągu roku? Jak długo zajęłoby uzyskanie certyfikatu w C++? A jak trudno jest się nauczyć? Zbudowałem strony CMS i kilka przyzwoitych aplikacji internetowych. Wziąłem również udział w kursie rozpoczynającym programowanie w Javie. Zasadniczo zmiana stanowiska z projektanta stron internetowych na programistę C++ i korzystanie z Matlaba. Słyszałem, że język jest bardzo złożony, ale łatwiejszy do zaprogramowania niż języki takie jak Java.


title: Jak licencjonować skrypt/pakiet, jeśli używa on wielu komponentów innych firm z różnymi licencjami?

text: Już szukałem, ale nie udało mi się znaleźć odpowiedniej odpowiedzi. Mój problem polega na tym: używam różnych pakietów oprogramowania z różnymi licencjami, aby opracować darmowe i otwarte (nie komercyjne) oprogramowanie (prostą aplikację internetową do wizualizacji danych, która odczytuje dane z określonej bazy danych mysql i rysuje wykresy i inne rzeczy), które Chcę również udostępnić publicznie. Wszystko zaczęło się od napisania prostego kodu PHP przy użyciu biblioteki do rysowania wykresów, która jest na licencji GPL. To była początkowa wersja, którą po prostu opublikowałem na blogu bez powiadomienia o licencji. W następnym etapie zintegrowałem wyniki (obrazy wykresów itp.) z darmowym szablonem internetowym z os-templates.com, który jest objęty własną licencją (mówią po prostu, że pozwalają na użycie w niekomercyjnych i komercyjnych projektach z odpowiednim przypisaniem autorstwa dla nich, dobrze przeze mnie), aby mieć dla nich ładną prezentację/interfejs. Wydałem tę zaktualizowaną wersję bez żadnej licencji. Następnie rozszerzyłem skrypt, korzystając z biblioteki API wizualizacji Google, która jest na licencji BSD, aby narysować dodatkowe mapy/wykresy Google. Wciąż brak informacji o licencji na moim nowym wydaniu. Teraz chcę kontynuować pracę nad tym projektem, ale myślę, że nadszedł czas na licencjonowanie go na licencji open-source, ponieważ jest coraz większy. Czy masz jakieś pomysły, jak to zrobić? Moja praca to napisany przeze mnie kod php i wszystkie inne zmiany, które wprowadziłem do szablonu (html/css). Czy muszę licencjonować go jako całość? Czy mogę po prostu powiedzieć, że takie a takie biblioteki i inne elementy zawarte w pakiecie mają swoje takie a to odpowiednie licencje, podczas gdy ja wydaję swój kod i tylko to na wybranej przeze mnie licencji? Wszelkie sugestie byłyby miłe. **Edytuj:** Nawiasem mówiąc, wiem, że „porozmawiaj o tym z prawnikiem” może być powszechną odpowiedzią, ale mówimy o małym projekcie osobistym/hobbystycznym, który ze względu na swój charakter (specyficzny dla aplikacji) już nie niż ~50 osób będzie pobierać/używać (jak sądzę). Więc głównie szukam łatwego rozwiązania, a nie czegoś skomplikowanego, jak konsultacja z profesjonalistą (i za to płacę). **Edycja 2:** Coś jeszcze, o czym chciałbym wspomnieć, żeby nie było zamieszania, to to, że poza szablonem, który z oczywistych powodów zmieniłem, po prostu korzystam z API bibliotek wywołując ich konkretne funkcje itp. nie buduj na nich ani nie zmieniaj ich w żaden sposób. Mówię to, ponieważ jak rozumiem, budowanie i rozszerzanie istniejącego projektu open source jest uważane za pochodną i należy przestrzegać określonych wytycznych dotyczących licencjonowania (np. Wydanie nowego kodu na tej samej licencji). W moim przypadku po prostu używam bibliotek bez zmian, nic więcej.


title: Czy Flash jest odpowiednią platformą dla systemów MLS na poziomie korporacyjnym?

text: Jestem pośrednikiem w handlu nieruchomościami w dużym obszarze metra. Nasz dostawca MLS buduje nową generację swojego oprogramowania MLS na Flashu. Wielu z grupy testerów beta jest temu przeciwnych, powołując się na liczne powody, w tym brak natywnej kompatybilności z iPadem, błędne zachowanie i ogólne twierdzenie, że Flash jest po prostu „niewłaściwą” platformą, na której można zbudować system na poziomie korporacyjnym, taki jak ten. Ostatecznie, jako Pośrednik w Obrocie Nieruchomościami, nadal jestem zaniepokojony niską jakością oprogramowania dostarczanego dostawcom oprogramowania z naszej branży, jednocześnie zastanawiając się, dlaczego witryny takie jak Redfin, Trulia, Realtor.com, Zillow są tak daleko przed nami pod względem użytkowników interfejs i funkcjonalność, przynajmniej z punktu widzenia użytkownika końcowego. Jakieś przemyślenia lub opinie?


title: komunikacja, realistyczne podejście

text: Pracuję dla średniej wielkości firmy architektonicznej i inżynieryjnej, nasza podgrupa koncentruje się na opracowywaniu rozwiązań technicznych dla inżynierów, maperów i menedżerów technicznych. Tak więc jesteśmy ciężko na aplikacjach opartych na komputerach dla GIS i inżynierii lądowej/środowiskowej (niektóre sieci). Firma sprzedaje usługi, które produkują nasi inżynierowie i maperzy, a nasz zespół opracowuje narzędzia, które pomagają im być bardziej produktywnymi, wydajnymi i pomagają w dodawaniu wartości do ich decyzji i produktów, NIE sprzedajemy technologii. Przechodzimy przez rosnące problemy, w których początkowo byliśmy bardzo responsywni i mogliśmy szybko prototypować aplikacje dla inżynierów, co natychmiast przyniosło oszczędności budżetowe. Ten sposób myślenia działał dla nas w przeszłości. Ale w tym roku wygraliśmy ogromny kontrakt, a nasza baza klientów wzrosła w zasadzie pięciokrotnie (5 razy?). Odkryliśmy, że boli nas ta kultura szybkiego prototypowania, ponieważ kierownicy projektów zaczęli oczekiwać krótkich czasów reakcji na rozwój narzędzi i solidnych narzędzi gotowych do produkcji dla wszystkich naszych inżynierów i analityków GIS. Rozrośliśmy się organicznie i teraz wydaje się, że napotykamy te problemy, gdy wydaje się, że musimy zmniejszyć prędkość, aby uzyskać większą stabilność. Czy to uzasadniony kompromis? Czy jest wygrana? Jak można odepchnąć inżyniera, kierownika projektu i analityka, kiedy są naszymi klientami, oni nas finansują, a my musimy być w stanie odepchnąć i powiedzieć im, że jeśli chcą stabilności, muszą realistycznie podchodzić do ram czasowych? To nie jest Microsoft Word, to specjalistyczne oprogramowanie GIS i modele inżynieryjne z mnóstwem komponentów interoperacyjnych dla innych standardowych modeli branżowych, nie są to narzędzia odporne na idiotów, potrzebują świadomych danych wejściowych, a my możemy testować tylko tyle rzeczy. Czy ktoś miał do czynienia z podobnymi bólami wzrostu? Rekomendacje/rady dotyczące stanowiska komunikacyjnego, książek, blogów?


title: Czy luźne połączenie bez przypadków użycia jest antywzorem?

text: Luźne połączenie jest dla niektórych programistów świętym Graalem dobrze zaprojektowanego oprogramowania. Jest to z pewnością dobra rzecz, gdy czyni kod bardziej elastycznym w obliczu zmian, które mogą nastąpić w przewidywalnej przyszłości, lub pozwala uniknąć duplikacji kodu. Z drugiej strony próby luźnego łączenia komponentów zwiększają ilość pośredniości w programie, zwiększając w ten sposób jego złożoność, często utrudniając zrozumienie i często zmniejszając wydajność. Czy uważasz, że skupienie się na luźnym sprzężeniu bez żadnych przypadków użycia luźnego sprzężenia (takiego jak unikanie powielania kodu lub planowanie zmian, które prawdopodobnie nastąpią w przewidywalnej przyszłości) jest antywzorcem? Czy luźne sprzęgło może być objęte parasolem YAGNI?


title: Ile czasu poświęcasz na opracowanie dokumentacji projektowej dla swojego oprogramowania?

text: Oczywiście rozmiar projektu, nad którym pracujesz, będzie ogromnym czynnikiem wpływającym na to, jak długo spędzisz na pisaniu dokumentu projektowego/specyfikacji. Ale czy przechodzisz przez wszystko, wyłapując każdy najmniejszy szczegół? A może stosujesz bardziej zwinne podejście i zaczynasz pisać oprogramowanie dość wcześnie i rozwiązujesz problemy, gdy do Ciebie przychodzą? Zawsze uważałem, że w projektowaniu można zajść tylko do tej pory. Nieuchronnie będzie kilka rzeczy, które zostaną pominięte, a w tym momencie to, jak dobrze potrafisz dostosować się do sytuacji, oznacza więcej niż sama specyfikacja. Czy przyjmuję właściwy punkt widzenia na ten temat? Czy to rzeczywiście opinia, czy też idealna specyfikacja projektowa jest zawsze najlepszą drogą do zrobienia?


title: Jak przekonać pracodawcę do zatrudnienia dodatkowego programisty bez sprzedawania się?

text: Jestem jedynym programistą w małej firmie. Powoli przeniosłem się tutaj do rozwoju; do ~4 miesięcy temu 50-75% mojego czasu spędzałem na operacjach. Teraz 50-75% mojego czasu spędzam na rozwoju, a resztę dzielę na operacje i różne sprawy IT. Regularnie pracuję ponad 50 godzin tygodniowo. Odziedziczyłem kilka dość słabo napisanych aplikacji (wcześniej były one utrzymywane przez dwie osoby), na których opiera się większość biznesu. Utrzymywanie ich w dobrym stanie, praca nad nowymi, mniejszymi aplikacjami i inne moje obowiązki zajmują już cały mój czas. Istniejące oprogramowanie, aby było skalowalne, wymaga znacznej refaktoryzacji i dodatkowej funkcjonalności. Wcześniej nie miałem przyjemności pracować na poprawnie napisanym lub zaprojektowanym oprogramowaniu. Złożoność tego zadania znacznie przekracza wszystko, co robiłem wcześniej (to moja pierwsza praca po studiach). Wiem, że istnieje gorączkowe oddanie samouczeniu się / uczeniu się przez robienie wśród wielu osób, ale to wykracza poza moje kompetencje że nie wyświadczyłbym ani pracodawcy, ani sobie żadnych przysług, próbując poradzić sobie z tym sam. Byłem bardzo bezpośredni w kwestii mojego braku doświadczenia, aw przeszłości wspominałem, że zatrudnienie innego, bardziej doświadczonego programisty będzie prawdopodobnie konieczne… jeśli już, to tylko na czas potrzebny każdemu na wykonanie pracy w miarę rozwoju i mieć więcej oprogramowania do opracowania i utrzymania. Wiem, że bardzo skorzystałbym na zatrudnieniu innego programisty; byłoby świetnie mieć kogoś, od kogo można się uczyć i od którego można by czerpać pomysły. StackOverflow doskonale nadaje się do określania podejść do poszczególnych problemów lub koncepcji kodowania, ale nie zastępuje dyskusji na szerszą lub bardziej znaczącą skalę specyficzną dla określonej domeny biznesowej. Kiedy wspominali ostatnio w luźnej rozmowie o zatrudnieniu innego programisty, nie wydawali się uważać, że jest to ważne lub konieczne. **tl;dr** : Obecne prace związane z poprawkami i inne obowiązki już zajmują cały mój czas w pracy, praca nad istniejącymi aplikacjami, które należy wykonać, przekracza moje umiejętności, mała szansa, że będę miał czas na pracę nad nowymi produktami, które są planowane. Pracodawca początkowo wydaje się niechętny zatrudnianiu innego dewelopera. Jak mogę „sprzedać” zatrudnienie innego programisty, nie brzmiąc, jakbym był leniwy lub niekompetentny (chciałbym myśleć, że nie jestem żadnym!)? **edytuj** : Chciałem tylko wyjaśnić, że nie jestem w żaden sposób zainteresowany podejmowaniem jakichkolwiek wrogich działań, aby udowodnić swoją rację (np. branie urlopu, aby pokazać im, że zostaliby przerżnięci, gdyby mnie nie było w pobliżu). Jestem całkiem zadowolony z pracy tutaj i uważam się za całkiem wynagrodzonego, nawet biorąc pod uwagę nadgodziny, dlatego nie jestem jeszcze w pobliżu rozważania nowej pracy. To powiedziawszy, zaakceptowałem odpowiedź „koniec z nadgodzinami” – nawet jeśli nie mam nic przeciwko nadmiernej pracy, nie wyświadczam nikomu przysługi (skłonność do większej liczby błędów, zmęczenie) i nie jest to do utrzymania w perspektywie krótkoterminowej znacznie mniej długoterminowej. Będę to podkreślał podczas omawiania sprawy z moim przełożonym i prawdopodobnie zasugeruję zatrudnienie wykonawcy w niepełnym wymiarze godzin jako początkowe podejście, które jest bardziej przystępne finansowo. Dzięki za wszystkie świetne odpowiedzi.


title: Jakich wskaźników używasz w swoim projekcie Scrum?

text: Rozpoczynamy nowy projekt, a zarząd/interesariusze proszą o metryki do sprawdzenia wydajności zespołu. Jako młodszy ScrumMaster powiedziałem im: * o Velocity i BurndownChart *, że możemy wybrać dowolny rodzaj metryk, o ile są one oparte na zespole, a nie indywidualne, nie zmuszają ludzi do działania niezgrabnie / nieproduktywnego (jeśli masz co nagroda) Czy jest jeszcze coś, co mogę im zapewnić w tym zakresie? Czy masz inne wskaźniki niż prędkość?


title: Czy wstrzykiwanie zależności jest niezbędne do testowania jednostkowego?

text: Czy używanie iniekcji zależności (DI) jest niezbędne do testowania jednostkowego? Nie mogę wymyślić innej alternatywy dla izolowania kodu, aby można go było przetestować. Również wszystkie przykłady, jakie kiedykolwiek widziałem, używają tego wzorca. Czy to dlatego, że jest to jedyna realna opcja, czy są inne alternatywy?


title: Wzór lub pomysł na komunikację ze sprzętem asynchronicznym

text: To bardziej pytanie teoretyczne niż praktyczne. I choć używam Arduino i Labview, powinno działać niezależnie od platformy. Mam płytkę Arduino kontrolującą zestaw pomp (używają standardowych silników nema). To arduino odczytuje polecenia gcode przez port szeregowy USB i uruchamia pompy i zawory. Ta część działa i mogę przenosić pompy za pomocą portu szeregowego Arduino. To oprogramowanie (w arduino) jest asynchroniczne, więc akceptuje połączenia nieblokujące. Zasadniczo, gdy pompa pracuje, możesz wysłać polecenie, a inna pompa zostanie wykonana. Możesz też wykonać kilka z nich jednocześnie. Każde polecenie ma identyfikator, który jest przesyłany z powrotem do portu szeregowego po zakończeniu pracy. Jest to kodowane za pomocą FSM, w którym każda pompa reprezentuje stan. Zanim moje oprogramowanie się blokowało, każda fizyczna akcja miała duże oczekiwanie między krokami Nemy, już tak nie jest. Ponadto mam działający Labview VI, który akceptuje niektóre parametry od użytkownika (identyfikator pompy, prędkość itd.), tworzy polecenia, wysyła je i uruchamia pompę. To również działa. To moja pierwsza VI. Problem, blokuje. Pozostaje tam do momentu zakończenia pracy pompy. Nie mogę wykonać innych czynności podczas uruchamiania sprzętu. Moje pytanie brzmi, jako nowicjusz w labview (chociaż jest to ogólne pytanie o wzorce oprogramowania), jak mogę to naprawić? Jakiego wzoru lub szablonu mogę użyć, aby nie blokować VI podczas pracy pomp?


title: Który wzór powiadomienia jest preferowany?

text: Pracuję nad modelem widoku dla widoku, który przedstawia okno dialogowe z opcjami eksportu. Użytkownik wybiera opcje, a następnie klika Eksportuj. Gdy model widoku zakończy eksportowanie, model widoku wywołującego otrzyma powiadomienie. Jestem ciekaw, która praktyka jest lepsza przy implementacji powiadomienia: tradycyjne zdarzenie czy wywołanie zwrotne `Action`, które jest przekazywane po otwarciu okna dialogowego. **Zdarzenie tradycyjne** public class ExportDialogViewModel : ViewModelBase { private readonly ICommand _exportCommand; prywatny tylko do odczytu ICommand _cancelCommand; wydarzenie publiczne EventHandler Finished; public ICommand ExportCommand { get { return _exportCommand; } } public ICommand CancelCommand { get { return _cancelCommand; } } public ExportDialogViewModel() { _exportCommand = new RelayCommand(Export); _cancelCommand = new RelayCommand(Anuluj); } public void Initialize() { //ustaw warunki początkowe } public void Export() { //wykonanie eksportu OnFinished(); } public void Anuluj() { Zakończono(); } private void OnFinished() { if (Finished != null) Finished(this, EventArgs.Empty); } } **Callback** public class ExportDialogViewModel2 : ViewModelBase { private readonly ICommand _exportCommand; prywatny tylko do odczytu ICommand _cancelCommand; prywatna Akcja _callback; public ICommand ExportCommand { get { return _exportCommand; } } public ICommand CancelCommand { get { return _cancelCommand; } } public ExportDialogViewModel2() { _exportCommand = new RelayCommand(Export); _cancelCommand = new RelayCommand(Anuluj); } public void Zainicjuj(Działanie zwrotne) { _callback = callback; //ustaw warunki początkowe } public void Export() { //wykonaj export _callback(); } public void Anuluj() { _callback(); } } Moje początkowe przemyślenia są takie, że tradycyjne wydarzenie jest nieco bardziej elastyczne: pozwala na powiadomienie więcej niż jednego subskrybenta, a także pozwala na powiadomienie 0 subskrybentów. Z drugiej strony, wywołanie zwrotne wymusza określony sposób interakcji z oknem dialogowym — wywołanie zwrotne musi zostać przekazane podczas inicjalizacji. Callback jest również prostszy do zaimplementowania i użycia, choć być może mniej znany niż zdarzenia. Który z dwóch wzorców powiadomień polecasz i dlaczego?


title: czym dokładnie jest hipertekst?

text: http://en.wikipedia.org/wiki/Hypertext: > Hipertekst to tekst wyświetlany na komputerze lub innym urządzeniu elektronicznym z > odniesieniami (hiperłączami) do innego tekstu, do którego czytelnik może natychmiast > uzyskać dostęp, zwykle za pomocą kliknięcia myszą lub naciśnięcia klawisza sekwencja. Oprócz biegania > tekstu, hipertekst może zawierać tabele, obrazy i inne urządzenia prezentacyjne. > Hipertekst jest podstawową koncepcją definiującą strukturę World Wide > Web.[1] Jest to łatwy w użyciu i elastyczny format do udostępniania informacji > w Internecie. Czyli każda strona internetowa, która nie zawiera hiperłączy, NIE jest hipertekstem? drugie pytanie: http://en.wikipedia.org/wiki/Hypertext_markup_language: > HTML, co oznacza HyperText Markup Language, jest dominującym językiem znaczników > dla stron internetowych. Zatem HTML nie jest hipertekstem, ponieważ nie jest wyświetlany na urządzeniu elektronicznym, ale HTML wyświetlany na urządzeniu elektronicznym w następujący sposób: <b></b> jest uważany za hipertekst? (Zastanawiałem się, czy opublikować to tutaj, czy po angielsku.StackExchange, ale pomyślałem, że prawdopodobnie tutaj jest bardziej odpowiedni kanał)


title: Czy „open source” staje się kiedykolwiek „moim źródłem”?

text: Gdybym miał pobrać jakiś kod open source, który robi jakąś fajną rzecz, której potrzebuję, ale nie ma prawie tylu opcji lub dzwonków i gwizdów, których potrzebuję ... i wprowadzam TONĘ zmian w miejscach, w których kod bazowy nadal istnieje z projektu open source, ale wiele się zmieniło i wiele zostało dodanych… czy ten kod kiedykolwiek stanie się „moim źródłem” w przeciwieństwie do „open source”? EDIT: BTW, właściwie nie mam projektu na myśli, to tylko ogólne - więc nie znałbym licencji. To pytanie tylko od czasu do czasu przychodzi mi do głowy, gdy widzę projekt, który mógłbym ulepszyć...


title: Chcę wyjaśnić, dlaczego specyfikacja nie może być zmieniana w okresie rozwoju

text: Chcę wyjaśnić nowemu pracownikowi działu planowania, dlaczego specyfikacja nie może być zmieniana w okresie rozwoju. Czy jest jakiś fajny dokument, który to robi?


title: Czy powinienem zatrudnić kogoś do pomocy przy istniejącym projekcie?

text: Mam płatną aplikację na Androida, którą sam stworzyłem zeszłego lata i pracowałem nad nią przez cały rok. Aplikacja jest nastawiona na profesjonalny rynek niszowy (ale na całym świecie są ludzie, którzy by ją kupili), więc jest wysoko wyceniona. Jest to * Głównie C++, trochę Javy * Zbudowany w dużej mierze na Qt (w kodzie C++) * Ponad 15 000 linijek kodu * Dobrze skomentowane w niektórych miejscach, ale nie w innych Lubię pracować nad tym, ale nie mam już czasu na przedzieranie się tym bardziej „podrzędna” praca nad kodowaniem polegająca na utrzymaniu go, a zamiast tego chcę skupić się na budowaniu nowych komponentów i przenoszeniu ich na wyższy poziom, gdzie myślę, że naprawdę uzyskałbym większe zyski. W tym celu zamierzam zlecić komuś pewne prace programistyczne. Moja aplikacja zarabia trochę pieniędzy, ale nie wystarcza, aby zatrudniać kogokolwiek na stałe – zamiast tego będę musiał po prostu zlecać im mniejsze zadania do wykonania na raz. Być może będę musiał zatrudnić kogoś w kraju o niższym statusie ekonomicznym, ponieważ spodziewam się, że stawki, powiedzmy, tutaj w USA nie będą dla mnie przystępne. Moją odruchową reakcją jest przejście do vWorker.com (wcześniej RentACoder), gdzie kilka lat temu wykonałem dużo pracy. Czy to mi pomoże, czy spowoduje więcej bólu głowy niż pomoże? Oto kilka bardziej szczegółowych pytań, które mam – nie wahaj się odpowiedzieć na wszystkie, które masz przemyślenia. Daj też znać, jak mogę poprawić to pytanie. Z góry dziękuję. 1. Jak znaleźć osobę z **odpowiednim zestawem umiejętności**? Czy prośba o korzystanie z **Qt** i **Android SDK** znacznie podniesie cenę? 2. Jak mogę chronić moje **prawa autorskie**? Czy jest to możliwe do wyegzekwowania w krajach mniej rozwiniętych gospodarczo? Czy może komuś łatwo ujdzie ukraść mój kod i sprzedać go samemu? 3. Czy przewidujesz inne problemy związane z zatrudnieniem tej osoby i jak mogę je rozwiązać?


title: Czy CPOL jest kompatybilny z MS-PL?

text: Moje pytanie jest bardzo proste: Czy mogę używać projektu CPOL w projekcie MS-PL? Chciałbym dodać projekt CPOL do mojego rozwiązania MS-PL, zmodyfikować go i wykorzystać jako narzędzie ułatwiające kompilację mojego projektu. Znalazłem to: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/hGqHO.png) Osobiście powiedziałbym, że CPOL powinien być kompatybilny z MS-PL. Ale nie mam prawie żadnego doświadczenia z licencjami i nie jestem warstwą. Byłbym więc naprawdę wdzięczny, gdyby ktoś mógł mi powiedzieć, czy mam rację, że CPOL jest kompatybilny z MS-PL.


title: Wzorce projektowe do koordynowania detektorów zdarzeń zmian

text: Od kilku lat pracuję ze wzorcem Observer w JavaScript korzystając z różnych popularnych bibliotek (YUI i jQuery). Często muszę obserwować zestaw zmian wartości właściwości (np. odpowiadać tylko wtedy, gdy zmieniają się 2 lub więcej określonych wartości). Czy istnieje elegancki sposób na „zasubskrybowanie” programu obsługi tak, aby był wywoływany tylko raz? Czy czegoś brakuje lub robię źle w moim projekcie?


title: Zmutowany język programowania?

text: Dla zabawy myślałem o tym, jak paradygmat programowania może różnić się od OOP i wpadłem na tę koncepcję. Nie mam mocnych podstaw w informatyce, więc może to być powszechne bez mojej wiedzy (bardziej prawdopodobne, że to tylko głupi pomysł :) Z góry przepraszam za to nieco chaotyczne pytanie, w każdym razie tutaj jest: W normalnych metodach OOP i klasy różnią się tylko parametrami, co oznacza, że jeśli dwie różne klasy/metody wywołują tę samą metodę, otrzymują te same dane wyjściowe. Moim, być może szalonym pomysłem, jest to, że wywołująca metoda i klasa mogą być „niewidoczną” częścią jej podpisu, a odpowiedź może się różnić w zależności od tego, kto wywołuje metodę. Powiedzmy, że mamy obiekt Window z metodą Break(), teraz każdy (kto ma dostęp) może wywołać tę metodę w Window z takim samym wynikiem. Teraz powiedzmy, że mamy dwa różne obiekty, Hammer i SledgeHammer. Jeśli Break potrzebuje wygenerować różne wyniki na ich podstawie, przekażemy je jako parametry Break(IBluntObject bluntObject) W przypadku mutacyjnego języka programowania (mpl) obiekty operacyjne w metodzie byłyby widoczne dla metody Break bez jawnie zdefiniowanego początku i mogłoby to opierając się na nich). Więc jeśli SledgeHammer wywoła Window.Break(), wygeneruje to zupełnie inne wyniki niż gdyby zrobił to Hammer. **Jeśli klasy są czarnymi skrzynkami, to klasy mutujące są czarnymi skrzynkami, które wiedzą, kto (próbuje) naciskać ich przyciski i mogą odpowiednio dostosować swoje zachowanie.** Możesz także mieć różne zestawy uprawnień dla metod w zależności od tego, kto je wywołuje, zamiast mieć uprawnienia absolutne jak publiczne i prywatne. Czy ma to jakąś przewagę nad OOP? A może powinienem powiedzieć, czy to coś doda, skoro powinieneś być w stanie po prostu dodać ten aspekt do metod (po prostu daj dostęp do zmiennej CallingMethod i CallingClass w kontekście) Nie jestem pewien, może być zbyt trudne do zawinięcia rozejrzyj się, byłoby ciekawie mieć klasy, które przystosowałyby się do tego, kto ich używa. Wciąż to ciekawa koncepcja, jak myślisz, czy jest wykonalna? Oto potencjalny fikcyjny kod z gry, w której gracz został przez coś uszkodzony. W normalnym OOP większość rzeczy byłaby zamiast tego przekazywana jako parametry do metody, podczas gdy tutaj Damage "wyciąga" właściwości, których używa. Różne? tak lepiej? może nie :) Class Player { [AccessableBy:Terrain,Player] void Damage { if (#CallingClass ma właściwość HitPoints) { this.health -= #CallingClass.HitPoints; } if (this.health < 0 && #CallingClass is Terrain) { ShowMessage("został zabity przez środowisko"); } else if (zdrowie < 0 && #CallingClass to Player && #CallingMethod to RocketLauncher) { ShowMessage("został zabity przez gracza wyrzutnią rakiet" + #CallingClass.PlayerName); } } } Aby zredukować instrukcje if-else, możesz mieć nadpisania metod oparte na metodach i klasach wywołujących


title: Czy muszę umieć rozwiązywać zaawansowane teoretyczne problemy, aby zostać dobrym programistą?

text: Programowaniem zajmuję się od kilku lat. Obecnie jestem na II roku studiów. Na większości uniwersytetów wysoko cenione są rozwiązywanie problemów z witryn takich jak uva.onlinejudge.org i projecteuler.net. Nawet w niektórych rozmowach kwalifikacyjnych przyzwoita liczba rozwiązań UVa jest uważana za dobrą jakość. Ale z jakiegoś powodu uważam je za nudne. Wydaje się, że mają one więcej matematyki niż programowania. Kiedy uczniowie wokół mnie są zajęci rozwiązywaniem problemów UVa, próbuję stworzyć prawdziwy program z manipulacją plikami itp. Kiedy próbują obliczyć złożoność itp. algorytmu w kursie algorytmów, staram się je kodować bezpośrednio spędzać czas na nudnej analizie matematycznej. Kilka dni temu zostałem wybrany do zespołu uniwersyteckiego na międzyuczelniany konkurs programistyczny. Ale tak bardzo znudziły mnie przygotowania 4-5 i próbne konkursy selekcji, że postanowiłem nie brać udziału, a moi nauczyciele byli ze mnie trochę niezadowoleni, a jeden chyba był nawet trochę wściekły. Więc czy idę w złą stronę? To znaczy lubię rozwiązywać problemy, ale nie aż tak bardzo. Bardziej interesują mnie problemy praktyczne niż żądne wydajności, żądne prostoty problemy teoretyczne. Czy naprawdę potrzebna jest bardzo zaawansowana umiejętność teoretycznego rozwiązywania problemów, aby zostać dobrym programistą? I mam na myśli dobrego programistę, a nie dobrego informatyka. Dziękuję.


title: Zobacz najlepsze praktyki dotyczące struktury modelu

text: Jaka jest preferowana konwencja strukturyzowania właściwości modelu widoku? Lepiej używać ogólnych lub bardziej szczegółowych nazw właściwości? Miejmy użytkownika, strona, na której ten użytkownik będzie wyświetlany, powinna zostać zmieniona za zgodą użytkownika. Model widoku może być napisany na dwa różne sposoby: { userName, userEmail, isAdmin // pokaż/ukryj kontrolki zgodnie z wartością tej właściwości } lub { userName, userEmail, enableDeleteBtn, showLogData, // wiele innych właściwości show/enable, które są ustaw zgodnie z uprawnieniami użytkownika } Pierwsze podejście wydaje się mniejsze i łatwiejsze do napisania, ale jest mniej ogólne i logika wyświetlania/ukrywania kontrolek musi zostać zmieniona, jeśli np. zostanie wprowadzony nowy typ roli użytkownika.


title: Czy istnieje już powszechnie znana nazwa „wzoru zapewniania”?

text: Używam wzorca, który nazywam "zapewnianie" szeroko w mojej warstwie repozytorium. Krótko mówiąc, gdy wywołuję metodę `Ensure(...)`, wykonuje następujące czynności: 1. Używa argumentów metody do próby wypełnienia encji określonego typu (ostatecznie z bazy danych), 2. Jeśli znajduje jeden, a następnie go zwraca; Jeśli nie, zapisuje podmiot w bazie danych i zwraca go. Tak więc moja metoda Zapewnienia zapewnia, że zawsze istnieje wypełniona jednostka o określonych właściwościach, niezależnie od tego, czy istniała ona przed wykonaniem wywołania. Czy istnieje już bardziej znana nazwa tego wzoru?


title: Która biblioteka GUI Pythona jest najłatwiejsza w użyciu?

text: Wśród bibliotek GUI dla Pythona, która jest łatwiejsza w obsłudze: PyQt4, wxPython czy jakakolwiek inna? Właśnie napisałem kilka linijek kodu PyQt4, wygląda na to, że z Qt nie jest tak łatwo. Czy są jakieś zalety i wady wydajności również wśród tych bibliotek GUI?


title: Dodatkowe działania w setup.py do instalacji

text: **Tło** Tak więc rozwijam projekt i piszę do niego skrypt setup.py, używając distutils. Używam CPython3.3. Używam kilku bibliotek, które mają niepoprawne dystrybucje w PyPI, więc muszą być instalowane przez klonowanie repozytorium i ręczne uruchomienie setup.py (próbowałem wielu rzeczy, obie biblioteki pomagają powiedzieć, że wystarczy użyć git zamiast PyPI, więc dlaczego Muszę to zrobić w ten sposób, nie ma tu pytania). Użyłem więc magii podprocesów i stworzyłem skrypt, który klonuje repozytoria i uruchamia w nich "setup.py install". Uruchamia również aplikacje setup.py, po upewnieniu się, że uszkodzone biblioteki są już zainstalowane w inny sposób. Łatwo jest przekonwertować na kilka metod i zostanie ulepszony w kilka chwil. W tej chwili moja aplikacja może zostać zainstalowana przez uruchomienie tego skryptu (nazwałem go build.py). **Pytanie** Jak utworzyć hook w moim skrypcie setup.py (dla mojej aplikacji), który będzie uruchamiał metody instalujące rzeczy z github, gdy (i TYLKO wtedy) argument "install" został przekazany do apps setup.py? **Co próbowałem** Wypróbowałem w wyszukiwarce frazy typu „jak przechwycić setup.py” – mniej lub bardziej ogólne, wypróbowałem kilka zapytań. Nic nie znaleziono. Próbowałem też przeanalizować źródło distutils, znaleźć jakiś sposób, ale to też nie doprowadziło mnie do niczego. Jeszcze tego nie próbowałem, ale wiem, że jest to wykonalne - na początku skryptu setup.py sprawdzanie, czy warunki takie jak "jest uruchamiany jako główny skrypt" i "słowo kluczowe 'install' jest w sys.argv" są prawdziwe, oraz jeśli tak - uruchamiam moje metody związane z gitem, ale to jest brzydkie jak diabli.


title: Sugestie dotyczące przydziałów aplikacji na letnie praktyki

text: W ramach naszego procesu aplikacyjnego chcemy, aby przyszli stażyści w college'u samodzielnie wykonali zadanie – programistyczne lub analityczne – aby dać nam coś namacalnego do oceny, takie jak kod lub schemat blokowy. Mam dwa pomysły na te zadania, jeden programistyczny i jeden analityczny, jestem zainteresowany zebraniem informacji zwrotnych na ich temat. # Zadanie programistyczne Wygeneruj miesięczny kalendarz na zadany dzień. W pierwszym wierszu należy wskazać dni tygodnia (np. niedziela - sobota). Każdy kolejny wiersz powinien zawierać dni tygodnia. Podaną datę należy wyróżnić (np. pogrubić). Myślę, że prawdopodobnie zabronimy formatowi wyjściowemu jeszcze bardziej rygorystycznie - prawdopodobnie ze względu na to, jak powinno wyglądać źródło HTML, w tym klasy CSS. Myślenie jest takie, że zmusza to odpowiedzi do wykonania jakiejś pracy, jeśli tylko skopiują rozwiązanie z Internetu. # Przypisanie analityczne Schemat lub opisz prozą system zarządzania zespołem sygnalizacji świetlnej dla ruchu na skrzyżowaniu czterokierunkowym. Każdy kierunek (tj. Północ, Południe, Wschód i Zachód) ma dwa pasy (tj. prawy i lewy). Lewy pas jest przeznaczony tylko do skrętu i ma zieloną strzałkę wskazującą pierwszeństwo przejazdu. System jest w stanie wykryć, czy na pasach znajdują się samochody i odpowiednio zmienić światła. Spodziewałbym się schematu blokowego lub jakiejś prozy opisującej maszynę skończonych stanów, która zajmuje się każdą ewentualnością. Miejmy nadzieję, że dostarczyłoby to pewnych wskazówek na temat zdolności wnioskodawcy do rozumowania poprzez pewnego rodzaju problem logiczny i wyartykułowania podejścia do rozwiązania. # Obszary Szukanie opinii 1. Czy proszenie o to wnioskodawców jest nierozsądne? Jeśli nie, czy lepiej poprosić przed lub po ekranie telefonu? 2. Czy te pytania są zbyt trudne lub łatwe dla słuchaczy z uczelni? 3. Jakieś sugestie dotyczące alternatywnych pytań? 4. Czy wydaje się, że są to dobre narzędzia do analizy ludzi, którzy byliby częścią cyklu życia oprogramowania? 5. Propozycje języków programowania - myślę o Javie, Pythonie i/lub C# (tak naprawdę jesteśmy sklepem ColdFusion).


title: Funkcja zwraca tylko niezmieniony parametr, bezużyteczny?

text: Właśnie znalazłem tę funkcję w projekcie, nad którym pracuję: -- Po prostu zwraca tekst bez zmian. -- Uwaga: <tekst> może wynosić zero, funkcja musi w takim przypadku zwrócić zero! function Widget:wtr(text) return text end Szkoda, że koder już nie działa w firmie. Po co tworzyć funkcję, która nic nie robi, ale zwraca parametr, z którym jest wywoływana? Czy jest jakiś użytek z takiej funkcji, nieopisanej w tym przykładzie, ale ogólnie w każdym przypadku? Z powodu funkcji aFunction(parameter) return parametr end Kończy się w aFunction(parameter) == parametr Dlaczego miałbym napisać coś takiego jak aFunction(parameter) == whatIWantToCheck zamiast parametru == whatIWantToCheck ?


title: Jak mam przejść do testowania tego kodu?

text: Pracuję nad frameworkiem testowym typu open source. 90% mojego kodu ma dobre pokrycie testami. Moim głównym obszarem problemów jest punkt wejścia wiersza poleceń. Ten moduł rozpoczął swoje życie jako bardzo krótki skrypt do wywoływania modelu domeny (zobacz wywołanie `_run_impl()`) i wyjścia z kodem 1, jeśli test się nie powiódł. Nie wydawało się konieczne testowanie tego skryptu w czasie, gdy go pisałem, ale ponieważ projekt wyrósł na nowe funkcje, kilka drobnych zmian w logice w tym pliku sprawiło, że stał się on dość długi: import argparse import os import sys z . importuj _run_impl # funkcję w __init__.py, która wywołuje model domeny z . import report # podpakiet związany z zapisem danych wyjściowych do konsoli import colorama; colorama.init() def cmd(): parser = argparse.ArgumentParser() parser.add_argument('-s', '--no-capture', action='store_false', dest='capture', default=True, help="Wyłącz przechwytywanie stdout podczas testów.") parser.add_argument('-v', '--verbose', action='store_true', dest='verbose', default=False, help="Włącz pełne raportowanie postępu .") parser.add_argument('--teamcity', action='store_true', dest='teamcity', default=False, help="Włącz raportowanie testów teamcity.") parser.add_argument('--no-random' , action='store_false', dest='shuffle', default=True, help="Wyłącz randomizację zlecenia testowego.") parser.add_argument('path', action='store', nargs='?', default=os .getcwd(), help="Ścieżka do pliku testowego lub katalog do uruchomienia. (domyślny bieżący katalog)") args = parser.parse_args() if args.teamcity lub "TEAMCITY_VERSION" w os.environ: reporters = (reporting.teamcity.TeamCityReporter(sys.stdout)) elif args.verbose: reporters = ( reporting.cli.ColouredReporter(sys.stdout),) elif args.capture: reporters = ( reporters.cli.DotsReporter(sys.stdout), type("ColouredCapturingReporter", (reporting.cli.ColouredReporter, reporting.cli.StdOutCapturingReporter) , {})(sys.stdout), report.cli.TimedReporter(sys.stdout) ) else: reporters = ( reporters.cli.DotsReporter(sys.stdout), type("ColouredCapturingReporter", (reporting.cli.ColouredReporter, reporter.cli.SummarisingReporter), {})(sys.stdout), reporter.cli.TimedReporter(sys.stdout) ) reporter = reporter.shared.ReporterManager(*reporters) _run_impl(os.path.realpath(args.path), reporter, args.shuffle) if reporter.failed: sys.exit(1) sys.exit(0) if __name__ == "__main__": cmd() Wiem, że ten kod zawiera błędy (na przykład powinno być możliwe przechwycenie stdout z testów podczas pracy w trybie szczegółowym) i straciłem pewność, że mogę zmienić ten moduł bez zepsucia czegoś. Więc chcę napisać kilka testów - ale tak naprawdę mam tylko doświadczenie z tworzeniem najpierw testów, więc tak naprawdę nie wiem od czego zacząć. Czy testy powinny być na poziomie jednostkowym czy integracyjnym? Czy powinienem kpić z „ArgumentParser”? Czy powinienem zakpić moduł `raportowania`? Czy powinienem kpić z `_run_impl`? Czy powinienem spróbować przetestować cały moduł na początku, czy po prostu dodawać testy podczas dodawania funkcji? Czy muszę dokonać refaktoryzacji, aby ta metoda była bardziej testowalna? _Uzupełnienie_ : Myślę, że część mojego zamieszania wynika z faktu, że jest to stosunkowo cienka warstwa na wierzchu logiki biznesowej - jest po prostu po to, aby umożliwić uruchomienie testera z wiersza poleceń. Czuję się więc zakłopotany tym, co stanowi tutaj granicę usług - w szczególności, z czego powinienem, a czego nie powinienem kpić.


title: Jak dokładnie program (obraz wykonywalny) i biblioteka (wstępnie skompilowany obraz) łączą się ze sobą?

text: Bardzo dobrze znam różnicę między łączeniem statycznym a dynamicznym. To, co chcę wiedzieć, to podczas łączenia statycznego (z biblioteką taką jak Winmm.lib w systemie Windows), w jaki sposób linker "łączy" wstępnie skompilowany format z właśnie skompilowanym plikiem binarnym pliku wykonywalnego? Nie musi odnosić się do żadnej konkretnej platformy, systemu operacyjnego itp. Chcę tylko wiedzieć, w jaki sposób odbywa się linkowanie i jak to statyczne „linkowanie” wiąże ze sobą wykonywalny plik binarny, który po wykonaniu tworzy gałąź z niezbędne wywołania systemowe, procedury i niskopoziomowy dostęp do API. Zasadniczo, w jaki sposób skompilowany plik jest „składany” statycznie z wcześniej skompilowanymi danymi, zwłaszcza jeśli są one inaczej zakodowane? To znaczy, wiem, że biblioteka "ujawnia" procedury, ale gdzie jest pewność, że wywołane procedury zawsze działają i jak można to zapewnić w procesie łączenia? PRZYKŁAD: Kompiluję "Hello world.exe" i jest on statycznie powiązany i uruchamiany z programu ładującego systemu operacyjnego. Czy coś w pliku binarnym, z którym sam program jest połączony, ma wszystkie niezbędne „instrukcje”, „magiczną liczbę”, „suma kontrolna” itp., aby wykonać prawidłowe procedury, lub czy program ładujący system operacyjny w locie znajduje to, co jest potrzebne dostępu, tj. wywołań systemowych, typu nagłówka programu, innych liczb magicznych itp.? Chcę tylko dokładnie zrozumieć pracę mojego linkera i jak to linkowanie sprawia, że system operacyjny może obsłużyć plik binarny, i dostać się do mojego ekranu, w przeciwieństwie do zwykłych instrukcji, których system operacyjny nie może "rozgałęzić" do żadnego innego procesu za pomocą .


title: Wstrzykiwanie konstruktora, pojedyncza odpowiedzialność i inicjalizacja listy

text: Podana klasa: public class Foo : IFoo { private IBarRepository repozytorium public Foo(IBarRepository repozytorium) { this.repository = repozytorium } public IList<IBar> Bars { get; zestaw prywatny; } } Moim długoletnim instynktem jest inicjalizacja listy IBar w konstruktorze: `this.Bars = new List<IBar>();` ale używając _Constructor Injection_ , _Single Responsibility_ konstruktora polega na ustawianiu zależności dla klasa. Jak najlepiej sobie z tym poradzić? Czy powinienem mieć inicjator kolekcji, który wywołuję w dowolnej metodzie przed użyciem kolekcji? private void InitialiseCollection() { if (this.Bars == null) { this.Bars = new List<IBar>(); } } public void Dodaj(IBar bar) { this.InitialiseCollection(); this.Bars.Add(bar) }


title: Najlepsze praktyki dotyczące separacji kontrolera ASP.NET MVC

text: Jestem bardzo nowy w ASP.NET MVC i Web stuff. Chcę wiedzieć, jak powinienem podzielić logikę mojej strony na różne kontrolery. Tak jak na przykład powinienem użyć `Home\BuyProduct` lub `Product\Buy`. Kiedy pojawia się znak, aby przenieść logikę do nowego oddzielnego kontrolera? Czy powinien to być jeden kontroler na stronę? Jakie są podstawowe zasady?


title: Smak wyrażeń regularnych w Pythonie — z jakimi?

text: Właśnie dotarła do mnie moja kopia klasycznej książki, Opanowywanie wyrażeń regularnych i przeglądam ją. Okładka (trzecie wydanie) mówi: "dla Perla, PHP, Java, .NET, Ruby i innych!" Cóż, ma pełny rozdział dla każdego z Perl, PHP, Java i .NET - ale nie ma rozdziału o Ruby lub, co dla mnie ważniejsze, o Pythonie. Chociaż indeks wymienia kilka punktów różnic w Pythonie (takich jak sposób obsługi znaków nowej linii), nie ma nawet ich tabeli, a tym bardziej całego rozdziału. Do którego z czterech omówionych języków silnik regex Pythona jest najbardziej podobny? Co ważniejsze, _jak_ jest podobny i jakie są główne różnice? Uwaga - nie mam na myśli tego, jak _używane_ są wyrażenia regularne w Pythonie (w przeciwieństwie do Perla) - znam i używam modułu `re`. Interesują mnie tylko różnice składni _rzeczywistych_ wyrażeń regularnych.


title: Istnieje (społeczna) sieć/strona internetowa dla programistów, którzy dzielą się pomysłami i znajdują zespół do rozwoju?

text: Przypuśćmy, że chcę zrobić jakiś projekt, ale chcę znaleźć więcej osób zainteresowanych tą dziedziną, które mogą rozwijać ze mną jakiś projekt, jest jakaś strona internetowa poświęcona temu? Przykład: „Chcę tworzyć gry akcji na telefony komórkowe” lub „Chcę znaleźć programistów internetowych dla nowej sieci społecznościowej skupionej na bla bla bla”. To już istnieje?


title: Jak znaleźć czas działania algorytmu wykorzystującego heurystykę?

text: Pracuję z algorytmem A*, w którym mam siatkę 2D i mając podane dwa punkty, znajduję najkrótszą odległość między nimi, nie wpadając na żadną przeszkodę. Teraz dla każdej komórki znajduję odległość od źródła i obliczam odległość od celu. Dodaj dwie ilości i tę, która ma minimalną wartość, ta komórka jest rozważana jako następna. Teraz, jak mam obliczyć czas działania takiego algorytmu, skoro nigdy nie dowiem się, ile razy ten proces się powtórzy. tj. z iloma komórkami będę musiał pracować, zanim dotrę do celu. Życzliwa pomoc. Szukam górnej granicy czasu biegu. Pod względem długości boku siatki, czyli N. Dzięki.


title: Projektowanie funkcji z wieloma opcjonalnymi komponentami

text: Próbuję wymyślić dobre praktyki projektowania funkcji z (wieloma) opcjonalnymi składnikami. Dla konkretnego przykładu, powiedzmy, że jestem zainteresowany zaprojektowaniem funkcji _wyodrębniania cech_, która pobiera jako dane wejściowe dokument i zwraca listę funkcji wyodrębnionych z dokumentu. ### Pytanie Jeśli istnieje wiele opcjonalnych komponentów, jakie podejście byłoby uważane za dobrą praktykę i skalowalne? Poniżej znajduje się kilka opcji, o których mogłem pomyśleć, chociaż mogą istnieć inne podejścia, których nie brałem pod uwagę. ### Podejście 1: klasa oparta na klasie FeatureExtractor(object): """Wyodrębnij cechy z tekstu do użycia w klasyfikacji.""" def __init__(self, term_frequency=False, include_negation=False, pos_tags=False): self.term_frequency = term_frequency self.consider_negation = rozważyć_negację self.pos_tags = pos_tags # Może być ich o wiele więcej... def extract(self, document): """Wyodrębnij cechy z dokumentu.""" features = [] if self.term_frequency: features .extend(self.extract_term_frequency(dokument)) if self.consider_negation: features.extend(self.extract_negation(document)) if self.pos_tags: features.extend(self.extract_pos_tags(dokument)) zwróć funkcje def extract_term_frequency(self, document) ): pass def extract_negation(self, document): pass def extract_pos_tags(self, document): pass extractor = FeatureExtractor(term_frequency=Prawda, rozważ_negacja=Prawda, pos_tags=Prawda) extractor.extract(dokument) ### Podejście 2: argumenty funkcji def ekstrakt(dokument, *funkcje) ): """Wyodrębnij cechy z dokumentu.""" features = [] dla funkcji w funkcjach: features.extend(function(document)) return features def extract_term_frequency(document): pass def extract_negation(document): pass def extract_pos_tags (dokument): pass extract(document, extract_term_frequency, extract_negation, extract_pos_tags) ### Podejście 3: klasa z domieszkami lub wielokrotne dziedziczenie Coś będącego kombinacją pierwszego i drugiego podejścia, chociaż nie jestem pewien, jak to zrobić. Wszelkie pomysły na kierunek do głowy byłyby bardzo mile widziane!


title: Dlaczego większość klas Java kończy się na „ers”?

text: * ...Dostawca * ...Wyszukiwarka * ...Resolver * ...Builder * ...Menedżer * ...Importer * ...Descriptor * ...Helper * ...Indexer Czy jest to konwencja globalna odnosić się do rzeczy za pomocą „..ers” lub „..ors”. W przeciwieństwie do tego „rzecz”, która składa się z zachowań (nawyków) lub atrybutów (właściwości), nie pasuje do takiej konwencji nazewnictwa. Fajnie jest pomyśleć, że nazwaliśmy klasy na podstawie ich zachowań. Klasy "Manager" są zawsze podobne do mojego Project Managera.


title: Affero GPL (AGPL3) Szybkie pytanie

text: Nasz projekt jest w pełni open source - jest to usługa internetowa, korzystamy z licencji AGPL3. Czy korzystanie z tej licencji oznacza, że nigdy nie możemy oferować jej jako usługi płatnej?


title: Nazwane argumenty (parametry) jako pomoc w czytelności

text: Dawno temu dużo programowałem w ADA i normalne było nazywanie argumentów podczas wywoływania funkcji - SomeObject.DoSomething(SomeParameterName => someValue); Teraz, gdy C# obsługuje nazwane argumenty, myślę o powrocie do tego nawyku w sytuacjach, w których może nie być oczywiste, co oznacza argument. Możesz argumentować, że zawsze powinno być oczywiste, co oznacza argument, ale jeśli masz argument logiczny, a wywołujący przekazują „prawda” lub „fałsz”, to zakwalifikowanie wartości za pomocą nazwy sprawi, że witryna wywołania będzie bardziej czytelna. contentFetcher.DownloadNote(uwaga, instrukcja : true); Myślę, że mógłbym utworzyć Enums zamiast używać prawdy lub fałszu (w tym przypadku Manual, Automatic). Co myślisz o sporadycznym użyciu nazwanych argumentów, aby kod był łatwiejszy do odczytania?


title: czy podwykonawcy mogą ubiegać się o pracę wykonawców?

text: Jeśli zlecam podwykonawstwo w firmie. Czy jestem w stanie zadeklarować pracę tak, jakbym wykonywała dla siebie samego klienta. Innymi słowy.... jeśli Klient A poprosi Firmę A o wykonanie pewnych prac związanych z tworzeniem stron internetowych. i podwykonawstwa Firmy A z Firmą B. Czy Firma B może twierdzić, że pracowała dla Klienta A. A może musi powiedzieć, że pracowała dla Firmy A? Buduję swoją witrynę i chcę udostępnić całą pracę, którą wykonałem dla 1 firmy, która zleciła mi podwykonawstwo. ale nie chcę wchodzić w żadne kwestie prawne.


title: Nauka implementacji kompilatora języka dynamicznie typowanego

text: Interesuje mnie nauka tworzenia kompilatora dla dynamicznie wpisywanego języka. Większość kompilatorów, kursów i artykułów/poradników, z którymi się zetknąłem, dotyczy języków statycznie wpisanych. Wymyśliłem kilka sposobów na zrobienie tego, ale chciałbym wiedzieć, jak to się zwykle robi. Wiem, że wnioskowanie o typie jest dość powszechną strategią, ale co z innymi? Gdzie mogę dowiedzieć się więcej o tworzeniu języka pisanego dynamicznie? Edycja 1: Miałem na myśli dynamicznie wpisywane. Przepraszam za zamieszanie. Napisałem kompilatory zabawek dla języków typowanych statycznie i napisałem kilka interpreterów dla języków typowanych dynamicznie. Teraz chcę dowiedzieć się więcej o tworzeniu kompilatorów dla dynamicznie wpisywanego języka. W szczególności eksperymentuję z LLVM, a ponieważ muszę określić typ każdej metody i argumentu, zastanawiam się nad sposobami zaimplementowania dynamicznie typowanego języka na czymś takim jak LLVM.


title: Jak napisać dobrą propozycję prelekcji na konferencję programistyczną FOSS?

text: Mam nadzieję, że w tym roku wygłoszę prelekcję na RubyKaigi i chciałbym wiedzieć, co jest dobrą propozycją wystąpienia. RubyKaigi to konferencja prowadzona przez entuzjastów Rubiego (w przeciwieństwie do konferencji branżowej czy akademickiej). Formularz wniosku można zobaczyć tutaj. Jak dotąd moja wstępna propozycja dotycząca programu, nad którym pracuję, wspomina: 1. Do czego ten program jest przydatny i dlaczego jest odpowiedni. 2. Jak to działa. 3. Jakich tematów porusza (takich jak metaprogramowanie i testowanie) Czy jest coś, o czym powinienem wspomnieć w mojej propozycji? Ponadto, jak dokładnie powinienem być w sekcji „Szczegóły twojego wykładu”? Czy powinienem być wyczerpujący, czy mieć tylko kilka krótkich akapitów?


title: Jaki jest najlepszy sposób, aby umożliwić projektantowi niekodującemu projektowanie intranetowych stron internetowych?

text: Mamy witrynę intranetową wykonaną w .net z dużą ilością funkcji, ale kierownictwo chce, aby wyglądała bardziej atrakcyjnie wizualnie i zaangażowała projektanta graficznego. Grafik NIE jest programistą ani nie ma ochoty uczyć się kodować. Będzie aktualizować tylko stronę główną. Próbowałem wymyślić, jak ułatwić jej aktualizację strony. Szukałem Joomla, ale wymaga PHP, MySQL i Apache. Nasze pudełko to .net/iis/sql. Czy ktoś ma z tym doświadczenie? Po prostu trochę zaniepokojony problemami ze zgodnością. a może jest prostszy sposób. Jestem bardziej facetem od back-endu niż grafikiem.


title: Czy używanie ikon z innej aplikacji podczas programowania jest legalne?

text: Na moim komputerze _podczas programowania_ używam ikon z innych aplikacji (w szczególności MS Paint i Paint.NET) jako znaku dla użytkownika, że jeśli zdecyduje się otworzyć ten plik (za pomocą naszego wewnętrznego polecenia), otworzy się on w tych aplikacjach. Czy legalne jest wyodrębnianie ikon z tych aplikacji i używanie ich? Zlecić je do repozytorium, a następnie używać na wszystkich maszynach programistów (nawet tych, które nie mają zainstalowanego Paint.NET)? Pozwól, że wyjaśnię raz jeszcze. Nie mówię o dołączaniu tych ikon do wersji wydawniczej. Zapewnienie odpowiednich ikon zależy od projektanta grafiki/skórki. Mówię tylko o procesie tworzenia. Czy wyodrębnianie ikon w czasie wykonywania bezpośrednio lub na podstawie typów plików coś zmieni? * * * Ostatnio pojawiło się podobne pytanie: Czy mogę legalnie używać ikony innego oprogramowania? Jednak moja różni się tym, że nie chcę publikować tych ikon w mojej aplikacji. * * * **EDYTUJ** Pozwolę sobie podkreślić kwestię, która (sądząc po dotychczasowych odpowiedziach) została pominięta. Jeśli użycie ikon w wyżej opisanych okolicznościach było niezgodne z licencją/prawem (znowu sądząc po odpowiedziach), to co powiesz na pytanie systemu operacyjnego o ikonę aplikacji lub ikonę powiązaną z plikiem. Prawdopodobnie skończy się to wyświetleniem tej samej ikony ... A co z aplikacjami do przeglądania plików, dla których wyświetlanie tych ikon jest kluczową częścią ich pracy, a nie miłą, ale niewielką funkcją? Czym (z punktu widzenia licencji/prawa) różni się system operacyjny/przeglądarka plików/... od mojej własnej opracowanej aplikacji, że mogą (tak jak zakładam) odpytywać te ikony i pokazywać je, kiedy ja nie jestem. W końcu można by twierdzić, że patrzenie na jego piękne ikony w przeglądarce plików pomogło mi w rozwoju, tak jak robią to testy jednostkowe, więc powinienem dodatkowo zapłacić za korzystanie z tych testów jednostkowych... _(Również jeśli ikona byłaby odpytywana w czasie wykonywania z systemu operacyjnego może być nieistotne, czy jest na moim komputerze deweloperskim, czy na wydanej wersji na komputerze klienckim...)_


title: Konwencje nazewnictwa dla jedynej przewidywanej implementacji interfejsu

text: Jeśli zdecydujesz, że "Program to An Interface" przebije YAGNI i zdecydujesz się stworzyć nadtyp, w którym nie wyobrażasz sobie niczego innego niż jedną oczywistą implementację - czy istnieje konwencja nazywania oczywistego konkretnego typu? Np. dziś rano napisałem klasę o nazwie PlainOldConversionReport i zastanawiam się, czy nazwa ta zdradza nieznajomość konwencji. Czy istniałaby bardziej normalna nazwa, ogólnie w programowaniu zorientowanym obiektowo lub konkretnie .Net lub C#, aby nadać niespecjalistycznemu podtypowi IConversionReport?


title: Bezpieczeństwo automatycznego logowania osób z innej aplikacji?

text: Mam 2 aplikacje. Obaj mają konta, a każde konto ma użytkowników. Te aplikacje będą współdzielić tych samych użytkowników i konta i zawsze będą zsynchronizowane. Chcę mieć możliwość automatycznego logowania się z jednej aplikacji do drugiej. Więc moim rozwiązaniem jest wygenerowanie klucza logowania, na przykład: `2sa7439e-a570-ac21-a2ao-z1qia9ca6g25` raz dziennie. I podaj automatyczny link logowania do innej aplikacji... na przykład, jeśli użytkownik kliknie: `https://account_name.securityhole.io/login/2sa7439e-a570-ac21-a2ao-z1qia9ca6g25/user/123` Są zalogowany automatycznie, sesja utworzona. Więc tutaj mamy 3 rzeczy, które intruz musi zrobić dobrze, aby uzyskać dostęp; nazwa konta, klucz logowania i identyfikator użytkownika. Kiepski pomysł? A może powinienem podążyć ścieżką, aby jedna aplikacja stała się dostawcą OAuth? Czy jest jakiś lepszy sposób?


title: Mikroekonomia dla studentów CS

text: Niedawno przeczytałem artykuł Joela Spolsky'ego na temat „Porad dla studentów Computer Science College” – http://www.joelonsoftware.com/articles/CollegeAdvice.html . W tym Joel mówi, że programista, który rozumie podstawy biznesu, będzie dla biznesu bardziej wartościowym programistą niż programista, który tego nie robi. Wiele pomysłów ma sens w kodzie, ale nie w biznesie. Chciałbym wiedzieć, czy istnieją krótkie podręczniki dla studentów CS do nauki mikroekonomii. Chciałbym poznać ebooki, które pomogłyby zrozumieć podstawy tego.


title: MVC : Czy kod do zapisywania danych w pamięci podręcznej lub sesji należy do kontrolera?

text: Jestem trochę zdezorientowany, jeśli zapis informacji w kodzie sesji poniżej, należy do akcji kontrolera, jak pokazano poniżej, czy też powinien być częścią mojego modelu? Dodam, że mam inne metody kontrolera, które później odczytają tę wartość sesji. public ActionResult AddFriend(FriendsContext viewModel) { if (!ModelState.IsValid) { return View(viewModel); } // Start — mylisz się, jeśli poniższy blok kodu należy do kontrolera? znajomy przyjaciel = nowy znajomy(); friend.Imię = viewModel.Imię; friend.LastName = viewModel.LastName; przyjaciel.Email = viewModel.UserEmail; httpContext.Session["najnowszy-znajomy"] = przyjaciel; // Zakończ zamieszanie return RedirectToAction("Home"); } Myślałem o dodaniu statycznej klasy użytkowej w moim modelu, która robi coś takiego jak poniżej, ale dodanie 2 linijek kodu w innym pliku wydaje się po prostu głupie. public static void SaveLatestFriend(Przyjaciel przyjaciel, HttpContextBase httpContext) { httpContext.Session["najnowszy-znajomy"] = przyjaciel; } public static Przyjaciel GetLatestFriend(HttpContextBase httpContext) { return httpContext.Session["najnowszy-znajomy"] jako znajomy; }


title: Stylizacja/formatowanie pliku dla programistów, czy zostało to zrobione?

text: czy kiedykolwiek pojawiła się propozycja ustanowienia pliku stylu formatowania dla programistów? W programowaniu internetowym mamy pliki CSS, które pomagają oddzielić styl od „kodu”, dzięki czemu dwie osoby mogą zobaczyć ten sam kod, podczas gdy każda może go zobaczyć w preferowany przez siebie sposób. Myślałem, że coś takiego można teoretycznie osiągnąć w programowaniu. Ile razy czytałeś kod od innego programisty z formatowaniem, którego nie możesz znieść? Jeśli zmienisz formatowanie, zmienisz plik źródłowy, więc każdy, kto przyjdzie po tobie, aby przeczytać ten sam plik, może mieć ten sam problem z formatowaniem, które miałeś. Można powiedzieć „zdefiniuj standardy kodowania”, ale zwykle nie robi się tego w małych lub pojedynczych zespołach, zanim firma się rozwinie. Dlaczego nie oddzielić formatowania od kodu? Możesz określić, w jaki sposób chcesz sformatować kod (tu nawiasy, po tym nowa linia itp.), a IDE przyjmie kod źródłowy i automatycznie sformatuje go zgodnie z twoimi upodobaniami (bez zmiany kodu źródłowego). Myślę, że nie byłaby to trywialna rzecz, ale jestem ciekawa, czy istnieją języki lub IDE, w których zostało to zrobione. Czy coś takiego zostało zrobione lub kiedykolwiek próbowało? Czy to wykonalne? Czy coś takiego można włączyć, powiedzmy, do programu Visual Studio?


title: Jak powstał termin „hiperwizor”?

text: Czytałem o „hiperwizorze” w wirtualizacji sprzętu. Maszyny wirtualne to nie moja dziedzina, więc nie do końca rozumiem, skąd pochodzi ten termin. Artykuł w Wikipedii mówi o tym, jak „zwirtualizowany został również stan nadzorcy sprzętu, umożliwiając jednoczesne działanie wielu systemów operacyjnych w oddzielnych kontekstach maszyn wirtualnych”. Oznacza to, że wirtualizowany został proces _nadzorcy_, z którego prawdopodobnie powstał 'hiper'-wizjer. Czy to prawda?


title: Co jest nie tak z JavaScript

text: Ostatnio wokół Darta jest dużo szumu, często kwestionującego motywacje Google i użyteczność Darta jako zamiennika JavaScript. Szukałem uzasadnienia stworzenia Darta, zamiast inwestować więcej wysiłku w ECMAScript. W dobrze znanej, przeciekającej poczcie jej autor twierdzi, że > Javascript ma historyczny bagaż, którego nie da się rozwiązać bez > przerwy. Ale jest tylko jeden konkretny przykład (oprócz problemów z wydajnością) „podstawowych problemów językowych”, który jest > istnieniem jednego prymitywu Liczby Tak więc moje pytania brzmią: 1. Jak istnienie jednego prymitywu Liczby może być „podstawowy problem”? 2. Czy istnieją inne znane "podstawowe problemy" w JavaScript?


title: Jakie są najczęstsze problemy z rekrutacją programistów?

text: To pytanie zostało zainspirowane tym zamkniętym. Odpowiadaj tylko wtedy, gdy masz doświadczenie w rekrutacji programistów i trzymaj się ogólnych zagadnień, a nie historii w stylu Daily WTF. Zasadniczo, jakie są główne problemy, które utrudniają znalezienie dobrych programistów - albo utrudniają ludziom w pierwszej kolejności aplikowanie, albo prowadzą do odrzucenia dużej liczby kandydatów lub odrzucenia oferty. Ogólne umiejętności techniczne, specyficzne umiejętności techniczne, umiejętności interpersonalne, wymagania płacowe a ograniczenia budżetowe, zbyt nudna praca, cokolwiek - jakie są największe problemy rekrutacyjne w rozwoju?


title: Porównanie dwóch wersji oprogramowania w C#

text: Pracuję nad narzędziem do sprawdzania aktualizacji dla Minecrafta, ale jest duży problem: moddery i baza danych online, których używam do sprawdzania aktualizacji, nie mają standardowych wersji oprogramowania, np.: Lokalne: rv0-stable-10 Online: rv1- alpha-13 Lokalnie: R1.1-83 Online: r1.1-81 Lokalnie: 1.7.10-0.2.250 (1.7.10 wskazuje wersję Minecrafta) Online: 0.2.274 Lokalnie: 1.1.0c Online: 1.1. 0e Lokalnie: 2.2.526 Online: 2.2.526-experimental Czy istnieje algorytm lub coś takiego, który jest w stanie porównać tak różne wersje?


title: Jeśli nauczę się ASP.NET za pomocą C#, czy pomoże mi to nauczyć się tworzyć programy inne niż webowe Windows .Net w C#?

text: Jeśli nauczę się tworzyć aplikacje internetowe ze stosem .NET w C#, powiedzmy MVC, framework encji, linq itp., czy przyniesie mi to jakąś korzyść w tworzeniu natywnych plików wykonywalnych programów Windows? Widzę korzyści z używania Visual Studio, języka takiego jak C#, tylko ogólne doświadczenie w programowaniu. Ale nie wiem, czy istnieje bezpośredni związek między asp.net a programowaniem natywnym.


title: Czy jako młodszy programista powinienem brać udział w kursie C#, mimo że robiłem Javę?

text: Jestem młodszym programistą, a obecnie prowadzę kurs informatyki. co wiąże się z poznaniem Javy i JavaScriptu. Czy powinienem też prowadzić kurs w C#? Bardzo lubię programować, ale na początku miałem kiepskiego wykładowcę... Ale teraz zmieniłem wykładowcę i zaczynam dostrzegać światło, ale on ogranicza się do nauczania tylko Javy. Chciałbym zostać znacznie lepszym programistą, czy powinienem to zrobić (C#)?


title: Jaki jest związek między Java EE a Glassfish?

text: Jestem zmieszany. Czy Glassfish jest częścią platformy Java EE? Czy można dostać Glassfish, ale nie Java EE?


title: Niezgoda między liderem programu a mną, co mam zrobić?

text: > **Możliwy duplikat:** > Jak poradzić sobie z szefem, który uważa, że wszyscy na tym świecie się mylą oprócz > niego? Jestem programistą MMORPG od dwóch lat. Mam pewne doświadczenia na ograniczonych platformach, takich jak telefony komórkowe, więc mam silną świadomość optymalizacji pamięci. Ale programy mojej obecnej firmy pochłaniają dużo pamięci, ani koledzy po stronie serwera, ani po stronie klienta nie przejmują się tą sprawą, być może zepsutą przez rozwój branży pamięci. Zgłosiłem ten problem naszemu liderowi programu, ale nie miał nic poza pogardą dla moich pomysłów i powiedział mi, że powinniśmy przeprowadzić optymalizację pamięci klienta, gdy projekt jest już prawie gotowy, a zajmowanie pamięci po stronie serwera nie stanowi problemu na wszystkie, układy pamięci są tanie, więc moglibyśmy podłączyć więcej, jeśli to nie wystarczy. Jestem naprawdę zaniepokojony tym językiem. Możemy wszędzie marnować pamięć, jeśli lider nie będzie opowiadał się za taką optymalizacją. Ten problem jest rzeczywiście problemem w naszym wydanym projekcie, ponieważ powodował niski FPS serwera i lagi klienta. Mój projekt wciąż się rozwija. Co powinienem zrobić? Wszelkie sugestie są mile widziane.


title: Jak oszacować koszt przy bardzo małej ilości informacji?

text: Mam klienta, który chce mieć aplikację internetową, która umożliwi mu (jak mi powiedział słowo w słowo): * rejestrację użytkownika * płatności cykliczne dla użytkowników * rezerwację sali konferencyjnej online Mam mu bardzo szybko podać kosztorys i nie mam czasu na głębszą analizę wymagań! Jak poradziłbyś sobie w takiej sytuacji? Czy powinienem podać bardzo ogólne oszacowanie i wypracować dokładne wymagania po zaakceptowaniu oszacowania? W którym momencie zazwyczaj zbierasz wymagania, po lub przed otrzymaniem kontraktu?


title: Pytania do rozmowy kwalifikacyjnej w Pythonie

text: Za dwa tygodnie mam zamiar przeprowadzić rozmowę kwalifikacyjną na staż, który będzie obejmował programowanie w Pythonie. Czy ktoś może zasugerować, jakie możliwe obszary powinienem polerować? Szukam najczęściej zadawanych rzeczy w wywiadach na wernisaże w Pythonie. Poza tym, że zajmuję się językiem już od ponad roku, nie dostrzegam, o co mogą mnie zapytać. Podobnie jak w przypadku rozmowy kwalifikacyjnej w języku C lub C++, jest wiele pytań, od odwracania ciągów znaków po tworzenie połączonych list, ale w przypadku rozmowy kwalifikacyjnej w Pythonie nie mam pojęcia. Mile widziane są osobiste doświadczenia i/lub sugestie.


title: Czy użycie mongodb poprawia rozszerzanie/zmianę aplikacji opartych na bazie danych?

text: Kiedy tworzona jest aplikacja wymagająca przechowywania danych, bardzo często wykorzystywana jest baza danych SQL. Tak samo zrobiłem w wielu aplikacjach asp.net. Powstałe aplikacje często mają ORM, taki jak struktura encji i być może warstwę biznesową. Kiedy więc taka aplikacja musi zostać rozszerzona (powiedzmy, że musisz dodać właściwość komentarza do obiektu), musisz zmienić/rozszerzyć bazę danych, następnie ORM i warstwę biznesową i tak dalej. Aby wdrożyć zmiany, musisz zaktualizować docelową bazę danych i aplikację. Wiem, że rzeczy takie jak kodowanie najpierw i płynność mogą ułatwić to podejście. Wypróbowałem mongodb, użyłem tylko standardowego sterownika i musiałem rozszerzyć niektóre obiekty i jedyne, co musiałem zrobić, to zmienić kod. Wydaje się więc, że takie podejścia są znacznie łatwiejsze do zrealizowania podczas korzystania z mongodb. Nie mam dużego doświadczenia z większymi aplikacjami mongodb. Wiem, że baza danych SQL lub mongodb nie pasuje do wszystkich potrzeb i obie mają swoje wady i zalety. Chcę wiedzieć, czy mam rację, jeśli tak, to wybrałbym raczej mongodb niż bazę danych SQL.


title: Znaczenie projektów hobbystycznych

text: Chcę wiedzieć, jak ważne jest programowanie w wolnym czasie? Czy trzeba popracować w wieku 9-5 lat jako programista, a potem wrócić do domu i popracować nad swoim hobby, aby stać się lepszym programistą? To powiedziawszy, wiem, że jesteś lepszy w programowaniu tylko przez, cóż, programowanie. Czy przyszli pracodawcy biorą pod uwagę programowanie hobby podczas rozmowy kwalifikacyjnej, czy pytają o to tylko z ciekawości? Czuję się winny, że nie mam projektu hobbystycznego, ale wszystko, co przychodzi mi do głowy, zostało już zrobione. Więc mam dwa zdania, zacząć coś, co już zostało zrobione, czy zostawić to, dopóki nie wymyślę czegoś oryginalnego?


title: Czy sesje po stronie serwera naruszają REST?

text: Według Roya Fieldinga (jednego z głównych autorów specyfikacji HTTP) w swojej przełomowej rozprawie _Style architektoniczne_ omawiając REST, wspomina on: > [K]ażde żądanie od klienta do serwera musi zawierać wszystkie informacje > niezbędne do zrozumienia żądania i nie może korzystać z żadnego zapisanego kontekstu > na serwerze. Przez „kontekst przechowywany” odnosi się do _stanu aplikacji_ np. jaki jest numer strony dla następnej strony a _stan zasobu_ np. dowolny magazyn danych, obraz itp. - co jest prawdopodobnie _całym punktem_ REST. Czy można uczciwie powiedzieć, że większość prób _czystego_ odpoczynku (zdefiniowanych tutaj jako implementacja zgodna z powyższą tezą) musi zakończyć się niepowodzeniem z powodu ich uzależnienia od przechowywania danych sesji na **serwerze** (trwałym lub innym)? Pojęcie sesji jest wspólne - w szczególności dla twórców stron internetowych - ale czy zgodnie z powyższą definicją jest zgodne z REST?


title: Dopuszczalne wykorzystanie pamięci jako funkcja rozmiaru wejściowego

text: Wiem, że jeśli obliczenie zajmuje liniowy lub liniowo-rytmiczny czas w oparciu o wielkość danych wejściowych, to dobrze, a jeśli zajmuje czas kwadratowy, to nie jest tak dobre. A co z wykorzystaniem pamięci? Załóżmy, że program pobiera plik jako dane wejściowe i robi coś z tym plikiem. Czy użycie pamięci może być liniowe względem rozmiaru pliku, czy też powinno być stałe?


title: Ograniczenia podczas projektowania generyków Java

text: Generyki Java wyglądają zupełnie inaczej niż te dostępne w Scali, chociaż oba zostały zaprojektowane przez Martina Odersky'ego. Z mojego punktu widzenia projektowanie generyków w Javie jest gorsze, na przykład: * nie ma możliwości określenia wariancji * można ominąć poprzednie ograniczenie za pomocą symboli wieloznacznych, ale oznacza to, że ciężar określania wariancji spada na wywołującego zamiast projektanta bibliotek * nie można używać konstruktora typów w generykach Jakie ograniczenia w Javie zmusiły Odersky'ego do zaprojektowania tego mechanizmu dla generyków zamiast bardziej elastycznego, który opracował dla Scali? Czy po prostu był sprytny kilka lat później, czy też istniały rzeczywiste ograniczenia z powodu Javy?


title: znajdowanie wzorców w dziennikach

text: Próbuję znaleźć sposób, aby dowiedzieć się, czy doszło do incydentów, na podstawie zawartości dziennika. Zazwyczaj w dzienniku (lub w tabeli db) znajduje się lista transakcji złożona w następujący sposób: {Timestamp} {TransactionID} {Message} Jako przykładowy problem, na który natknąłem się, użyłem tego do wykrycia, czy wystąpiły „incydenty” poprzez uruchomienie niektórych bardzo podstawowe zapytania, takie jak: SELECT Timestamp, count(*) FROM table GROUP BY Timestamp HAVING COUNT(*) > 5 ORDER BY Timestamp Działa to dobrze, ale ma bardzo mocne zastrzeżenia: * W czasach dużej aktywności zwróci rekordy za nic ( a podniesienie poprzeczki spowoduje ukrycie wierszy, które powinny zostać zwrócone) * Załóżmy, że mam 4 zdarzenia w sygnaturze czasowej t i 2 zdarzenia w sygnaturze czasowej (t+1), moje zapytanie nie zwróci niczego, nawet jeśli powinny być brane pod uwagę. Niestety agregowanie znaczników czasu według zakresów czasowych doprowadzi mnie do poprzedniego punktu o wysokim czasie aktywności. Czy ktoś miałby wgląd w to, jak poradzić sobie z szerszym problemem wykrywania incydentów w logach?


title: Czy konstrukcje pętli staną się przestarzałe?

text: Przez konstrukcje pętli mam na myśli konstrukcje for… i while… z zagnieżdżonymi instrukcjami. Obecnie koduję narzędzie w Pythonie i z ciekawości zdecydowałem się nie używać zwykłych pętli – i zamiast tego polegać na filtrze/mapowaniu/redukowaniu. Np. teraz mam kod typu: fields = filter(None, map(parse_field, struct_decl.get_children())) Jak na razie działa to całkiem dobrze i podoba mi się sposób, w jaki teraz projektuję kod - mam funkcje clean-cut ( chociaż czasami muszę użyć lambdy) i myślę, że wynikowy kod może być bardziej wydajny (np. iteracje są bardziej naturalnie niezależne, co czyni je bardziej równoległymi). I muszę tylko zwiększyć wcięcie dla warunków warunkowych (choć myślę o ich unikaniu) Te nowe funkcje nie są unikalne dla Pythona - np. C++ miał std::foreach od wieków. Zastanawiam się, czy tradycyjne pętle będą w końcu niemile widziane w językach głównego nurtu, podobnie jak `goto`?


title: Czy lepiej jest użyć dyrektywy preprocesora czy instrukcji if(constant)?

text: Załóżmy, że mamy bazę kodu, która jest używana dla wielu różnych klientów i mamy w niej pewien kod, który ma znaczenie tylko dla klientów typu X. Czy lepiej jest użyć dyrektyw preprocesora, aby uwzględnić ten kod tylko w kliencie typu X, czy użyj instrukcji if, aby była bardziej przejrzysta: // jakiś kod #if TYPE_X_COSTUMER = 1 // zrób kilka rzeczy #endif // resztę kodu lub if(TYPE_X_COSTUMER) { // zrób kilka rzeczy } Argumenty, o których mogę pomyśleć to : * Dyrektywa preprocesora powoduje mniejszy rozmiar kodu i mniej gałęzi (na nieoptymalizujących kompilatorach) * Jeśli instrukcje skutkują kodem, który zawsze się kompiluje, np. jeśli ktoś popełni błąd, który zaszkodzi nieistotnemu kodowi dla projektu, nad którym pracuje, błąd nadal będzie się pojawiał, a on nie uszkodzi bazy kodu. W przeciwnym razie nie będzie świadomy korupcji. * Zawsze mówiono mi, żebym wolał użycie procesora niż użycie preprocesora (jeśli to w ogóle jest argumentem...) Co jest lepsze - gdy mówimy o bazie kodu dla wielu różnych klientów?


title: Gdzie jest najlepsze miejsce do nauki języka, a który?

text: W ogóle nie znam języków programowania. Sam się uczę i muszę znać najlepsze miejsce do tego, gdzie mogę uczyć się na najbardziej podstawowym poziomie. Gdzie jest świetne miejsce do rozpoczęcia nauki języka? Jakiego języka najlepiej nauczyć się najpierw? Czy to głupie, żeby najpierw nauczyć się Rubiego? Tutaj natknąłem się na kogoś, kto powiedział, że nauka niektórych wyższych języków może sprawić, że będziesz „leniwy”, jeśli nauczysz się ich najpierw. Jak między innymi Ruby. Jeśli chodzi o mój pierwszy język, mój mąż radzi mi, abym nauczyła się Ruby (dla jego osobistych zainteresowań). Potrzebuję jednak niezależnych porad, jak zacząć i jakiego języka powinienem się najpierw nauczyć. W końcu nauczę się Rubiego, a potem Railsów. Cztery miesiące temu mój mąż zamówił tekst z celem C, ponieważ myślał, że się go przyjmie. Przewróciłem i wyraźnie zaczynało się w miejscu bardziej zaawansowanym niż to, z którego pochodzę. Bawiłem się samouczkiem Ruby i nie rozumiem. Dostaję to, co wkładam, jest tym, co dostaję, ale nie rozumiem, co do tego prowadzi. Najpierw muszę poznać WSZYSTKIE zasady. Następnie wyszukałem języki komputerowe i zacząłem badać kod binarny, który bardzo pomógł, ale nie od tego, od czego chcę zacząć. Nie mam teraz zbyt wiele czasu w moim życiu (z czwórką dzieci), aby cofnąć się tak daleko. Gdybym chodził do szkoły, byłoby inaczej. Jakakolwiek rada, której możesz udzielić, jest mile widziana.


title: Szukasz dobrych książek o teorii wyszukiwarek

text: Pracuję nad projektem, który wymaga zrozumienia różnych technik używanych przez wyszukiwarki internetowe. Mam silne zaplecze naukowe i rozwojowe, więc nie boję się informacji wysoce technicznych. Poszukuję wszelkich form informacji technicznych, w tym informacji o robotach sieciowych, innych technikach pozyskiwania danych, sposobach przechowywania danych i sposobie ich odpytywania itp., itp. Jestem zupełnie nowy w temacie i szukam przydatnych zasoby i książki na ten temat. Wszelkie sugestie są mile widziane.


title: Jak określić źródło żądania w systemie usług rozproszonych?

text: Map/Reduce to świetny pomysł na jednoczesne sortowanie dużych ilości danych. Co zrobić, jeśli masz małe fragmenty danych i musisz je cały czas redukować? Prosty przykład - wybór usługi na żądanie. Wyobraź sobie, że mamy „10” usług. Każdy z nich dostarcza hosta usług z zestawami `nagłówków` żądań i argumentów post/get. Każda usługa deklaruje, że ma „30” unikalnych kluczy – „10” na zestaw. service A: name id ... Teraz wyobraź sobie, że mamy hosta usług rozproszonych. Posiadamy `200` maszyn z `10` usługami na każdej. Każda usługa ma w sobie `30` unikalnych kluczy. ale teraz, aby dowiedzieć się, do której usługi mapować przychodzące żądanie, nasze usługi publikują unikalne wartości, które są mapowane na te zestawy. Możemy mieć do lub więcej niż `10 000` takich wartości ustawionych na każdym komputerze na każdą usługę. service A machine 1 name = Sam id = 13245 ... service A machine 1 name = Ben id = 33232 ... ... service A machine 100 name = Ron id = 777888 ... Czyli otrzymujemy `200 * 10 * 30 * 30 * 10 000 == 18 000 000 000` i otrzymujemy `500` żądań na sekundę na naszej bramie, z których każde zawiera `45` elementów `15` z których to tylko `szum`. A naszym zadaniem jest znalezienie usługi na żądanie (przynajmniej maszyny, na której działa). Na wszystkich maszynach w całym klastrze dla tych samych usług mamy te same reguły. Możemy najpierw wybrać, do której usługi przyszło nasze żądanie poprzez filtr reguł `10 * 30`. i będziemy mieli `200 * 30 * 10 000 == 60 000 000`. Więc... `60` mil jest zdecydowanie problemem... Mam nadzieję, że wpadnę na pomysł mapowania `30 * 10 000` na jakąś sztuczną sieć neuronową, taką jak Perceptron, która wypisuje `1` jeśli `30` słów (niektóre skróty z słowa) z żądania są poprawne lub jeśli mniej niż Perceptron powinien zwrócić 0. I wyślę każdy taki Perceptron dla każdej usługi z każdej maszyny do bramy. Więc miałbym mapę `Perceptron <-> machine` dla każdej usługi. Czy ktoś może mnie podnieść, jeśli mój pomysł z Perceptronem jest przynajmniej „rozsądny”? Czy normalni ludzie robią to w inny sposób? A może są lepsze SSN do takich celów?


title: Wskaźniki kodu źródłowego do pomiaru stabilności kodu?

text: Biorąc pod uwagę sposób tworzenia oprogramowania w cyklu wydawniczym (implementacja, testowanie, naprawianie błędów, wydanie) myślałem, że powinno być możliwe dostrzeżenie jakiegoś wzorca w liniach kodu, które są zmieniane w bazie kodu; np. pod koniec projektu, jeśli kod staje się bardziej stabilny, należy zauważyć, że mniej linii kodu jest modyfikowanych na jednostkę czasu. Na przykład można było zauważyć, że w ciągu pierwszych sześciu miesięcy projektu średnia wynosiła 200 linijek kodu dziennie, podczas gdy w ostatnim miesiącu 50 linijek kodu dziennie, a w ostatnim tygodniu (tuż przed wydaniem produktu na DVD). zostały wysłane), żadne wiersze kodu nie zostały w ogóle zmienione (kod zamrożony). To tylko przykład, a różne wzorce mogą powstać w zależności od procesu rozwoju przyjętego przez dany zespół. W każdym razie, czy są jakieś metryki kodu (jakakolwiek literatura na ich temat?), które wykorzystują liczbę zmodyfikowanych linii kodu na jednostkę czasu do pomiaru stabilności bazy kodu? Czy są przydatne, aby wyczuć, że projekt gdzieś się rozwija, czy też jest jeszcze daleki od gotowości do wydania? Czy istnieją narzędzia, które mogą wydobyć te informacje z systemu kontroli wersji i wygenerować statystyki?


title: Dlaczego SSL/TLS nie jest wbudowany w nowoczesne systemy operacyjne?

text: Wiele podstawowych protokołów sieciowych składających się na infrastrukturę Internetu jest wbudowanych w większość głównych systemów operacyjnych. Na przykład protokoły TCP, UDP i DNS są wbudowane w systemy Linux, UNIX i Windows i są udostępniane programiście za pośrednictwem systemowych interfejsów API niskiego poziomu. Ale jeśli chodzi o SSL lub TLS, należy zwrócić się do biblioteki innej firmy, takiej jak OpenSSL lub Mozilla NSS. SSL jest stosunkowo starym protokołem i jest w zasadzie standardem branżowym tak wszechobecnym jak TCP/IP, dlaczego więc nie jest wbudowany w większość systemów operacyjnych?


title: Zrozumienie problemu, gdy coś się psuje podczas produkcji

text: **Scenariusz:** * Wypychasz do produkcji * Wypychanie zepsuło wiele rzeczy * Ta sama kompilacja nie złamała qa ani dev * Jako programista nie masz dostępu do prod. * Istnieje duża presja z _powyżej_, aby wszystko działało na nowo. **Specyfika:** * Aplikacja PHP/MVC oparta na API w Zend. * Wdrożony na kilku serwerach. **Moje pytanie:** Podczas dochodzenia załóżmy, że mam przeczucie, że coś jest nie tak. Ale nie wiem na pewno. I oczywiście nie mogę testować rzeczy na produkcji. Jeśli mam sugerowaną poprawkę opartą na tym przeczuciu, czy rozsądnie byłoby spróbować ją zastosować i sprawdzić, czy działa, zanim zrozumiemy, na czym polega problem?


title: Jak poradzić sobie z członkiem zespołu, który nie lubi dodawać komentarzy w kodzie?

text: Jeden z członków mojego zespołu konsekwentnie unika komentarzy w swoim kodzie. Jego kod nie jest samodokumentujący się, a inni programiści mają trudności ze zrozumieniem jego kodu. Kilka razy prosiłem go o skomentowanie swojego kodu, ale on tylko usprawiedliwia się lub twierdzi, że zrobi to później. Obawia się, że dodawanie komentarzy zajmie zbyt dużo czasu i opóźni projekty. Jaki argument mogę mu przedstawić, aby przekonać go do prawidłowego udokumentowania swojego kodu? W tej notatce, czy mylę się, skupiając się na komentarzach do kodu, czy też wskazuje to na większy problem, który należy rozwiązać?


title: Jakiego właściwego wzoru użyć tutaj

text: scenariusz: Mam podmiot o nazwie „Członek”. Członkowie dzielą się na wiele typów. Niektóre typy są poniżej. * `Supporter` * `Wolontariusz` * `Sponsor` * `Player` Mogę stworzyć klasę dla każdego typu i dziedziczyć po podstawowej jednostce `Member`. Ale gdy „Członek” ma więcej niż 1 typ w danym czasie, nie jest to właściwy sposób. czy mogę użyć **wzór dekoratora**, aby osiągnąć ten cel? Lub jaki jest najlepszy wzór, aby uzyskać tę pracę? **EDYTUJ :** Język, którego używam to C# Również różne typy członków mogą mieć dodatkowe metody, na przykład `Sponsor` może mieć własne metody jak `Donate()`, lub `Wolontariat` może mieć metodę `Subscribe( )” i tak dalej. te rzeczy muszą być brane pod uwagę.


title: Słowo do przechowywania wstępnie obliczonych i skonstruowanych danych

text: Wstępnie obliczam dane i przechowuję je w statycznej tabeli i nazywam ten proces „buforowaniem”, ale to nie wydaje się poprawne w oparciu o szybkie wyszukiwanie w słowniku (ukrywanie, ukrywanie) Po prostu zapisuję dane statycznie, aby uniknąć czasu procesu. kalkulacja. Czy istnieje bardziej odpowiedni termin/słowo? Myślę, że tutaj słowa kluczowe to „statyczny” i „obliczony” ## Prawdopodobne odpowiedzi: ## Jako rzeczownik (rzeczywiste dane wyjściowe z takiego procesu): Tabela przeglądowa ## Jako czasownik (proces dotarcia do tego celu): Tablowanie


title: Jak programista może sprawdzić się, aby samodzielnie założyć firmę deweloperską?

text: Tak !! można powiedzieć „bez pracy” ludzie mają takie myśli, ale co można zrobić :-P . Moje pytanie jest dość głębokie. Jak ktoś może ocenić siebie jako dewelopera i menedżera, aby zrozumieć, czy nadaje się do samodzielnego rozpoczęcia komercyjnego przedsięwzięcia. Założenie firmy deweloperskiej nie wymaga dużych nakładów inwestycyjnych ani dużego zespołu. Jeśli ktoś jest zdolnym programistą, to z pewnością może zacząć działać już pierwszego dnia. I może właśnie dlatego jest tak wielu freelancerów na całym świecie. Wątpliwości są poważne, a kiedy się wkradną, utrudniają podróż. Czy zatem mogą istnieć pewne rzeczy lub sprawdzian samooceny, które trzeba ocenić i zdać, aby rozwinąć swój pomysł na przedsięwzięcie rozwojowe.


title: Korzystanie z czcionek w aplikacjach

text: Czy podczas pisania aplikacji na oprogramowanie, a konkretnie na urządzenia mobilne, wystąpi problem z użyciem określonego rodzaju czcionek (problemy z prawem autorskim/patentami)? Jeśli tak, jak możemy uniknąć tych ewentualnych problemów? Czy wtedy będzie miało znaczenie, czy aplikacja była wersją płatną, czy darmową?


title: Czy całą logikę biznesową można zdekomponować jako (deklaratywny) diagram stanów na prostych operacjach crud i warunkach warunkowych?

text: Wydaje się to prawdopodobnie skrajnym pytaniem, ale i tak się zastanawiam: czy całą logikę biznesową można zdekomponować jako (deklaratywny) diagram stanów na prostych operacjach crud i warunkach warunkowych? Już _dużo_ logiki domeny niższego poziomu _może__ i często _jest_ deklaratywnie zdefiniowane za pomocą mapowania ORM, na przykład, obsługując takie rzeczy jak: * schemat modelu domeny * walidacja * ograniczenia unikatowości * ACL/ autoryzacja oparta na rolach itp. Oczywiście wyższy Istnieje logika domeny poziomu, która często obejmuje koordynację między wieloma obiektami domeny. Wydaje się jednak, że ostatecznie: * Ta wysokopoziomowa logika biznesowa jest tak naprawdę tylko przepływem pracy, który może być modelowany jako maszyna stanów (lub prawdopodobnie bardziej rozbudowana jako rozszerzona petrinet) * w którym wszystkie rozgałęzienia są oparte na logice warunkowej pewnego stanu ( tj.: atrybuty obiektu domeny) * wynikiem byłaby zmiana stanu, tj.: zmiana atrybutów obiektu domeny (proste operacje crud). Jeśli tak jest, czy cała logika domeny może być zdefiniowana deklaratywnie, biorąc pod uwagę DSL, który obsługuje powyższe konstrukcje przepływu pracy, warunkowe i CRUD? Jeśli odrzucisz ten braindump, bądź wnikliwy podczas robienia tego :)


title: Pisanie Javy o niskim opóźnieniu

text: Czy są jakieś techniki specyficzne dla Javy (rzeczy, które nie mają zastosowania do C++) do pisania kodu o niskim opóźnieniu w Javie? Często widzę role o niskim opóźnieniu w Javie i proszą o doświadczenie w pisaniu Javy o niskim opóźnieniu - co czasami wydaje się trochę oksymoronem. Jedyne, o czym mogłem pomyśleć, to doświadczenie z JNI, outsourcing wywołań I/O do kodu natywnego. Możliwe też, że użyje wzorca zakłócającego, ale to nie jest rzeczywista technologia. Czy są jakieś wskazówki dotyczące Javy dotyczące pisania kodu o niskim opóźnieniu? Zdaję sobie sprawę, że istnieje specyfikacja Java w czasie rzeczywistym, ale ostrzegano mnie, że czas rzeczywisty to nie to samo, co niskie opóźnienie....


title: W jaki sposób można przechowywać stronę wstrzymania/konserwacji witryny w Git?

text: Próbuję uporządkować repozytoria Git dla kilku witryn, które prowadzę. Dla każdej witryny zwykle tworzę osobny oddział w repozytorium, który zawiera „stronę konserwacyjną” lub „stronę przechowującą”, którą sprawdzam, jeśli z jakiegoś powodu muszę wyłączyć witrynę. Ta gałąź jest zwykle nazywana `maintenance_page`. Normalny rozwój odbywa się na `master` i stamtąd jest również wdrażana witryna na żywo. Podczas gdy kod strony w gałęzi `maintenance_page` ma taką samą stylizację jak główna (aktywna) strona w `master`, tak naprawdę nie dzieli żadnej _historii_ z gałęzią master - pomyśl o tym jak o mini wersji działającej strony , ale z własną, zasadniczo niepowiązaną bazą kodu. Od czasu do czasu zmiany, które wprowadzam do stylizacji, obrazów itp. w `master` przydałyby się mieć w gałęzi `maintenance_page` i w takich sytuacjach zwykle `git cherry-pick` z `master` do `strona_utrzymania`. Pracuję z tą konfiguracją już od jakiegoś czasu, jednak zdaję sobie sprawę, że cała idea posiadania dwóch gałęzi (`master` i `maintenance_page`) współistniejących w tym samym repozytorium, ale nie mających nic _naprawdę_ wspólnego ze sobą nie jest tak naprawdę "sposób robienia rzeczy w Git". Myślałem o przechowywaniu gałęzi `maintenance_page` w jej własnym repozytorium (ponieważ ma bardzo niewiele wspólnego z gałęzią master), jednak wydaje się to tylko komplikować administrację repozytoriami, a także umniejsza prostotę możliwości po prostu zajrzyj do gałęzi `maintenance_page`, gdy muszę elegancko usunąć witrynę. Miałem dobrą lekturę (patrz tutaj) (i tutaj), aby spróbować dowiedzieć się, jak inni radzą sobie z tego rodzaju sprawami, ale dziwnie nie jestem w stanie wymyślić żadnych wskazówek, jak inni to osiągają. Czy ktoś ma jakieś sugestie dotyczące lepszych sposobów osiągnięcia tego?


title: Objaśnienie wskaźnika ramki

text: W asemblerze MIPS istnieje rejestr dla wskaźnika stosu i kolejny rejestr dla wskaźnika ramki. Czym jest frame ponter i jaki jest jego cel. Czym różni się od wskaźnika stosu?


title: Dlaczego spójność sekwencyjna operacji w metodzie nie jest dobrym pomysłem?

text: Czytałem z przełomowej książki Code Complete, że instrukcje metod, które muszą być wykonane w kolejności przekazywania parametrów z jednego do drugiego, są zapachem kodu i są przykładem _sekwencyjnej spójności_. Dlaczego to nie jest dobry pomysł? Wymyślony przykład kohezji sekwencyjnej: public Part createPart(input) { PartOne partOne = computePartOne(input); CzęśćTwo częśćTwo = obliczanieCzęśćTwo(część pierwsza); PartThree partThree = computePartThree(partTwo); PartsBuilder partsBuilder = new PartsBuilder(); zwróć partBuilder.add(partOne).add(partTwo).add(partThree).build(); } Oto nacisk: > Kilka innych rodzajów spójności jest zwykle uważanych za mniej niż > idealne: > > _Sekwencyjna spójność_ występuje, gdy podprogram zawiera operacje, które muszą być > wykonywane w określonej kolejności, które współdzielą dane z kroku na krok, i że > nie tworzą kompletnej funkcji, gdy są wykonywane razem. > > Przykładem sekwencyjnej spójności jest rutyna, która, biorąc pod uwagę datę urodzenia, > oblicza wiek pracownika i czas do przejścia na emeryturę. Jeśli rutyna > oblicza wiek, a następnie wykorzystuje ten wynik do obliczenia > czasu pracownika do przejścia na emeryturę, ma spójność sekwencyjną. Jeśli rutyna oblicza > wiek, a następnie oblicza czas do przejścia na emeryturę w całkowicie oddzielnym > obliczeniu, które wykorzystuje te same dane dotyczące daty urodzenia, to ma tylko > spójność komunikacyjną. > > Jak sprawić, by rutyna była funkcjonalnie spójna? Utworzyłbyś oddzielne procedury > obliczania wieku pracownika na podstawie daty urodzenia i obliczania czasu do > przejścia na emeryturę na podstawie daty urodzenia. Procedurę przejścia na emeryturę można nazwać rutyną > wieku. Obie miałyby funkcjonalną spójność. Inne podprogramy mogą wywoływać > albo podprogram, albo obie podprogramy.


title: Co się stanie, jeśli moja klasa zagnieżdżona rozszerzy inną klasę z innego pakietu?

text: Mam wątpliwości, że ten projekt jest OK, może jest sposób, żeby zrobić to lepiej? Chodzi o to, że potrzebuję klasy, która byłaby używana w jednej jedynej klasie i tyle. Ale ta klasa musi dziedziczyć po innej, która znajduje się w innym pakiecie. To nie brzmi jak dla mnie. public class User { private class SpecificParser extends BaseParser {} // BaseParser.java znajduje się w innym pakiecie } Po prostu utworzyłbym `SpecificParser` jako oddzielną klasę, ale nie chcę tego robić również dlatego, że jedynym jej odbiorcą jest Klasa `Użytkownika`.


title: Dodawanie złożoności przez uogólnianie: jak daleko powinieneś się posunąć?

text: Pytanie referencyjne: http://stackoverflow.com/questions/4303813/help-with-wywiad-question Powyższe pytanie dotyczyło rozwiązania problemu dla macierzy NxN. Chociaż było łatwe rozwiązanie, podałem bardziej ogólne rozwiązanie, aby rozwiązać bardziej ogólny problem dotyczący macierzy NxM. Kilka osób stwierdziło, że to uogólnienie jest złe, ponieważ sprawia, że rozwiązanie jest bardziej złożone. Jeden taki komentarz otrzymuje głos +8. Pomijając trudny do wyjaśnienia wpływ głosowania na SO, należy wziąć pod uwagę dwa rodzaje złożoności: 1. Złożoność środowiska wykonawczego, tj. jak szybko działa kod 2. Złożoność kodu, tj. jak trudny jest kod do odczytania i zrozumieć Kwestia złożoności środowiska wykonawczego jest czymś, co wymaga lepszego zrozumienia danych wejściowych dzisiaj i tego, jak mogą one wyglądać w przyszłości, biorąc pod uwagę różne czynniki wzrostu w razie potrzeby. Interesuje mnie tutaj kwestia złożoności kodu. Uogólniając rozwiązanie, unikamy konieczności przepisywania go w przypadku zmiany ograniczeń. Jednocześnie jednak często może to skutkować komplikacją kodu. W pytaniu referencyjnym kod dla NxN jest łatwy do zrozumienia dla każdego kompetentnego programisty, ale przypadek NxM (chyba że jest dobrze udokumentowany) może łatwo zmylić kogoś, kto pierwszy raz natknie się na kod. Tak więc moje pytanie brzmi: gdzie należy postawić granicę między uogólnianiem a utrzymywaniem kodu w łatwym do zrozumienia?


title: Zewnętrzny plik db sqlite z karty sdcard w systemie Android

text: Właśnie szukałem tego samego, ale nie otrzymałem odpowiedzi. To, co mam, to plik `db`, który ma około 100 MB. Zapisałem plik `db` w `sdcard` . Za pomocą tego pliku `db` zamierzam wypełnić zawartość aplikacji na Androida. Mogę odczytać plik db używając jak poniżej. Plik dbfile = nowy plik("/sdcard/Twój_plik_db_plik.db" ); SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); Martwię się o pamięć. Przeczytałem jak w „zasobach” ma pewne ograniczenia pamięci. Martwię się, czy `100MB` pliku db na karcie sdcard lub pamięci zewnętrznej jest szkodą, czy też jest w porządku, aby mieć plik `100MB` db? Czy są jakieś ograniczenia dotyczące pliku db sqlite również w pamięci zewnętrznej? Sugestie są mile widziane.


title: Czy programiści, którzy czytają książki związane z programowaniem, wciąż są rzadkością?

text: Zarówno w _Code Complete_ Steve'a McConnella, jak iw _The Pragmatic Programmer_ Andrew Hunta i Davida Thomasa twierdzą, że większość programistów nie czyta książek związanych z programowaniem z przyzwyczajenia, a przynajmniej nie dość często. Czy to nadal obowiązuje? Czy programiści, którzy czytają takie książki, wciąż są rzadkością? Muszę przyznać, że dopiero niedawno zacząłem czytać (a teraz nie mogę przestać; pali mi to w portfelu!). Wcześniej byłem temu przeciwny i twierdziłem, że lepiej jest pisać programy, niż tracić czas na czytanie o tym. Teraz zdaję sobie sprawę, że najlepszym rezultatem, przynajmniej dla mnie, jest zrobienie obu tych rzeczy. **EDYTUJ:** Właściwie miałem na myśli _dowolne_ książki, które w jakiś sposób były związane z programowaniem; czy to na konkretnym języku, technologii, wzorcu, paradygmacie - _cokolwiek_ tak długo, jak może to być korzystne dla Ciebie jako programisty. Właśnie odnosiłem się do _Kod kompletny_ i _Pragmatic Programmer_, ponieważ tam przeczytałem, że programiści zwykle nie czytają takich książek. Wyglądałoby to dziwnie, gdyby tytuł brzmiał „Czy programiści, którzy czytają książki, nadal są rzadkością?”


title: Najlepszy sposób na leniwe ładowanie obiektu BLOB z bazy danych w Javie?

text: Mam tabelę bazy danych, która przechowuje przesłane pliki (pliki programu Excel) w polu obiektu BLOB. Każdy rekord zawiera przesyłającego, czas przesyłania, identyfikator przesyłania (klucz podstawowy) i oczywiście sam obiekt BLOB. W pewnym momencie muszę uzyskać te dane z bazy danych, aby coś z nimi zrobić. Obecnie mam POJO, które po prostu odzwierciedla strukturę tabeli i przechowuje plik w tablicy bajtów, tj.; class Upload { prywatny String ID; prywatne dane ByteArray[]; //Inne pola i metody pominięte ze względu na zwięzłość } Jak na pewno się zgodzicie, to pozostawia aplikację otwartą na problemy z pamięcią, jeśli plik jest szczególnie duży. W rzeczywistości jest mało prawdopodobne, aby ten plik był tak duży, aby powodować problem, ale zdecydowanie nie można tego uznać za dobry projekt. Próbowałem znaleźć najlepsze praktyki dotyczące leniwego ładowania danych obiektów blob, ale mam problem ze znalezieniem materiału, który nie dotyczy korzystania z określonych frameworków aplikacji. Myślę, że muszę stracić pole „dane” i po prostu mieć metodę, tj. getData(), która uruchamia nową transakcję DB w celu pobrania obiektu blob, zwraca do niego InputStream? Zobacz na przykład poniżej, proszę daj mi znać, czy jest lepszy sposób, aby to zrobić. public InputStream getData(){ //Zbuduj i wykonaj zapytanie SQL. BLOB BLOB = rs.getBlob(1); return blob.getBinaryStream(); }


title: Jakie są najbardziej imponujące sztuczki, które IDE może wykonać z kodem?

text: Nowoczesne IDE mają w zanadrzu wiele sztuczek, które pomagają w pisaniu kodu, refaktoryzacji, wyszukiwaniu. Wszystko to jest bardzo pomocne, ale rzadko którykolwiek z nich wygląda jak prawdziwa „magia” i sprawia, że myślę „Wow! Jak to się rozgryzło?” Czy potrafisz wymienić jakieś imponujące funkcje automatyzacji kodu IDE (lub inne), które zaskoczyły Twój umysł, gdy pierwszy raz je zobaczyłeś?


Nasz programista T-SQL właśnie poinformował o tym z dwutygodniowym wyprzedzeniem. Zapytano nas, czy nasz zespół czterech programistów chciałby mieć dodatkowego programistę. Proponujemy nam wykonanie własnego rozwoju T-SQL / Entitiy Framework lub możemy pozyskać innego dedykowanego programistę T-SQL. Jakie są zalety i wady posiadania w zespole dedykowanego programisty T-SQL? Który wolisz i dlaczego?


title: Pomoc dotycząca projektowania Entity Framework

text: Potrzebuję kilku rad, czy jestem na dobrej drodze z tym, co robię. Opracowuję aplikację WPF, w której muszę pobrać duży wykres jednostek, pracować nad tym wykresem w interfejsie użytkownika (wyświetlanie, CRUD), a następnie utrwalić wszystko z powrotem do bazy danych, gdy użytkownik w końcu kliknie przycisk Zapisz. Użyłem szablonu kodu DbContext POCO dla moich jednostek. Dodatkową komplikacją jest to, że interfejs użytkownika musi zapewniać funkcję cofania / ponawiania i tutaj zacząłem się trochę odczepiać. Jednym z problemów z POCO jest to, że nie otrzymujesz „poprawki powiązania”, więc kiedy dodajesz nową jednostkę, musisz pamiętać o skonfigurowaniu relacji po obu stronach (tj. `customer.Orders.Add(myOrder); ` i `mojeZamówienie.Klient = klient;`). Alternatywnie mógłbym po prostu dodać nową jednostkę do jej kolekcji nadrzędnej, a następnie wywołać DetectChanges(), co spowoduje naprawienie drugiej strony. Tak czy inaczej, jest kilka rzeczy do zrobienia podczas tworzenia nowej jednostki. Usunięcie jest również trudne w obsłudze, nie tylko w POCO, ale ogólnie w EF. Aby usunąć encję, muszę wywołać DbContext.Set<>.Remove(entity), ale nie wydaje się właściwe posiadanie wywołania interfejsu użytkownika do LOGIKI LOGICZNEJ (mój model widoku interfejsu użytkownika zawiera odwołanie do klasy LOGIKI LOGICZNEJ, która z kolei przechowuje wystąpienie DbContext, zapewniające, że kontekst jest żywy od początkowego pobrania do późniejszego zapisania, co umożliwia śledzenie zmian). Alternatywnie mógłbym zaimplementować flagę „IsDeleted” na moich encjach, ale skomplikuje to wiele obszarów mojej aplikacji — musiałbym pamiętać o odfiltrowaniu encji oczekujących na usunięcie i ręcznej obsłudze usunięcia w warstwie biznesowej. Wracając do cofania/ponawiania — jeśli muszę cofnąć tworzenie, myślę, że wystarczy usunąć jednostkę z jej elementu nadrzędnego i ustawić właściwość rodzica na null. Jeśli chodzi o cofnięcie usunięcia, nie jestem pewien, co mam tutaj zrobić. Zgaduję, że muszę przywrócić stan jednostki do stanu sprzed usunięcia _i_ ponownie naprawić obie strony relacji? **Edytuj** \- Od tego czasu odkryłem, że cofanie kreacji nie jest proste. Chociaż usunąłem obie strony relacji, kontekst nadal „wie” o nowej istocie. Myślę, że musiałbym go odłączyć, ale znowu nie czuje się dobrze, gdy muszę dzwonić do LOGIKI biznesowej, aby wykonać takie operacje. Jedynym innym rozwiązaniem, o którym mogę pomyśleć, jest zarządzanie wykresem w stanie „odłączonym” i zaimplementowanie flagi na moich jednostkach, aby śledzić jego stan (nowy/zaktualizowany/usunięty). Musiałbym wtedy ręcznie zarządzać dodawaniem/dołączaniem wszystkiego do kontekstu, gdy wykres jest przekazywany z powrotem do LOGIKI biznesowej podczas zapisywania.