title: Jak zapisać przydatne fragmenty kodu?

text: Dużo zajmuję się tworzeniem stron internetowych i jest wiele fragmentów kodu, które pojawiają się raz po raz, więc wracam do najnowszego projektu, w którym go używałem, co nie jest zbyt wydajne. Jak przechowywać wszystkie przydatne i często używane fragmenty kodu? Czy są do tego jakieś produkty?


title: Zajęcia i archiwum biblioteczne

text: Jesteśmy grupą 5 programistów (naukowców i inżynierów), którzy piszą kod w C++. Chcielibyśmy, aby cały kod był łatwo dostępny dla wszystkich programistów. Pierwszym krokiem w tym procesie było skonfigurowanie serwera SVN i wszystko działało dobrze. Teraz stoimy przed kolejną potrzebą: chcielibyśmy mieć system, w którym wszystkie klasy bazowe, biblioteki matematyczne, algorytmy byłyby publiczne i dostępne dla każdego dewelopera. Coś jak Wiki lub jak dokumentacja root http://root.cern.ch/root/html/TH1.html. Rodzaj witryny, na której można wgrać kod, opisać go i wskazać, jak z niego korzystać. Czy masz jakieś sugestie?


title: Jak zabrać się za zapisanie fragmentu/bloku kodu?

text: Obecnie uczę się C#, jestem dość biegły w Javie. Projekt, nad którym pracuję od jakiegoś czasu, to w zasadzie aplikacja, która umożliwia wprowadzanie „fragmentów” kodu lub bloków często używanego kodu i umożliwia oznaczanie ich konkretnymi tematami w celu łatwego sortowania. Jak mam zapisać wprowadzony kod, aby móc później uzyskać do niego dostęp i ewentualnie go sformatować lub zachować w formacie, w którym został wklejony? Chciałbym umieścić więcej informacji w pliku, który jest przechowywany, oprócz rzeczywistego kodu, takich jak tagi i daty/godziny, więc przyszły mi do głowy takie rzeczy jak XML, ale naprawdę nie jestem pewien. Dla wyjaśnienia znam funkcję snippet w Visual Basic. Pytam o stworzenie własnej aplikacji autonomicznej C# i samodzielne przechowywanie kodu.


title: Jak uniknąć powielania kodu w niepowiązanych projektach

text: Jestem wykonawcą w dużej firmie telekomunikacyjnej, gdzie zwykle pracuję nad kilkoma różnymi projektami jednocześnie. Systemy VCS, których używam (głównie git i mercurial) sprawiają, że trzymam bazy kodu dla niepowiązanych projektów w osobnych repozytoriach i zdaję sobie sprawę z wielu korzyści płynących z tego podejścia. Jest jednak wiele małych fragmentów kodu narzędziowego i funkcji pomocniczych, które napisałem, które są przydatne w dwóch lub więcej projektach, i dobrze zdaję sobie sprawę z korzyści, jakie daje utrzymywanie mojego kodu w stanie suchym — na przykład czasami znajduję lepszy sposób na zaimplementować jakiś kawałek kodu i nie chcę go aktualizować w każdym miejscu, w którym powieliłem ten sam pomysł. Jaki jest najlepszy sposób na refaktoryzację tej wspólnej funkcjonalności (nie zawsze jest to tak proste jak kopiowanie i wklejanie, ale czasami jest…) bez tworzenia niepotrzebnych zależności między niepowiązanymi projektami i bez zbędnej złożoności?


title: Automatyczne fragmenty kodu w VS 12

text: Zdecydowałem się dostosować mój VS12, aby idealnie odzwierciedlał moje życzenia. Jednak ze względu na brak czasu chciałbym zacząć od po prostu dodania najpierw fragmentów kodu. Dodatki i takie będą musiały poczekać do jesieni. :( Zasadniczo chciałbym wpisać _hazaa_ i uzyskać (najlepiej, ale niekoniecznie) tekst z przeskakiwaniem tabulacji, mówiący _yo, koleś_. Coś w rodzaju _prop_ wypluwa skrót dla właściwości (z częściami jest to opcjonalne).Znalazłem ten samouczek i zastanawiam się, czy jest to najszybszy sposób na rozpoczęcie tworzenia własnych fragmentów kodu.Jeśli tak, mogę to zrobić od razu, ale byłoby miło mieć coś Q&D na początek.Nie mogę też naprawdę ocenić, jak dobrze ten artykuł dostosowuje się do nowoczesnych możliwości VS12 (i nadchodzącego VS13).Byłoby super, gdyby ktoś z doświadczeniem rzucił trochę światła na tę sprawę.1 .Czy artykuł to najszybszy sposób na automatyczne generowanie kodu?2.Czy artykuł jest niezawodnym i zaktualizowanym sposobem dostosowywania VS12/13?3.Czy jest lepszy zasób dla moich planów i w takim razie gdzie?


title: Jakiego wzorca projektowego należy użyć do implementacji skomplikowanych okien dialogowych, które można konserwować?

text: Od czasu do czasu wdrażam funkcjonalność, która wymaga sekwencyjnego zadawania pytań użytkownikom. Pytania są warunkowe, czyli odpowiedź definiuje zestaw następujących pytań. Jasne, jest to wzorzec projektowy Wizzard UI, ale na razie nie mam jasnego zrozumienia, jak jest zaimplementowany z punktu widzenia architektury oprogramowania. Ekran/pytanie może być nieco skomplikowanym interfejsem, ale przez większość czasu jest to tylko wybór kilku opcji. Niemniej jednak po każdym kroku mogą być wymagane pewne obliczenia, nie tylko w celu uzyskania dodatkowych danych, ale także zdefiniowania zestawu pytań. Wydaje mi się, że ma z tym coś wspólnego wzorzec Strategy, ale czuję, że z tym wzorcem kod budujący „przepływ wykonania” może stać się brzydki. Z góry dziękuję.


title: Klasa Service w MVC

text: Od czasu do czasu stwierdzam, że istnieje potrzeba zbudowania klasy serwisowej. Coś, czego tak naprawdę nie mogę dołączyć do modelu, aby szanować GRASP i SOLID. Stworzyłem więc klasę o nazwie AccountTransferService. * Czy zajęcia z usług są dobrą praktyką projektową? * Czy reprezentują Modelkę? * Jeśli usługa nie jest modelem, czym one są w architekturze MVC?


title: Przebieg pracy podczas edycji plików w /var/www. Ciągła potrzeba wprowadzania poleceń „sudo”

text: Wczoraj zainstalowałem Apache2 i PHP5 na moim nowym komputerze Linux Mint. Stworzyłem folder i stworzyłem prosty plik `index.php` z wywołaniem `phpinfo()`, aby przetestować instalację i wszystko działa poprawnie. Jednak kiedy otwieram plik za pomocą Sublime Text 2 lub innego edytora, nie mogę zapisać moich zmian. Mogę użyć polecenia `sudo nano`, aby otworzyć go z uprawnieniami superużytkownika i mogę zaoszczędzić dobrze. To samo dotyczy Mercurial. Nie mogę `hg commit` z powodu uprawnień. Mogę tylko `zatwierdzenie sudo hg`. Czy taki powinien być podstawowy przepływ pracy? Jeśli uruchomię polecenie `chmod` i rekursywnie nadaję uprawnienia `777` do folderów i plików w Apache, mogę go uruchomić w porządku, ale jeśli jest to plik tworzony dynamicznie ( _utworzony przez moją aplikację internetową_ ), wygląda na to, że Apache nie może uzyskać dostępu lub uruchomić to. Muszę uruchomić komendę `chmod` **znowu**! Jakieś sugestie, co powinienem zrobić? Czuję, że 30% mojego czasu spędzam na zbędnych procesach, których w ogóle nie powinno się wykonywać.


title: Lisp jako język dla początkujących?

text: Czy powinienem nauczyć się Lisp jako mojego pierwszego języka programowania? Nie mam wcześniejszego doświadczenia, ale słyszałem o tym świetne rzeczy od znajomych programistów.


title: czy można sprzedać stronę internetową?

text: Może zaistnieć sytuacja, w której jeden z moich klientów nie zapłaci za wykonaną przeze mnie stronę internetową. Zastanawiam się więc, czy można sprzedać stronę internetową? Jest to sklep internetowy, więc nie ma w nim treści, ale kod źródłowy jest w pełni dostępny i ma przyzwoity design. Widziałem ludzi próbujących sprzedać szablony witryn internetowych i ludzi, którzy próbują sprzedawać już działające witryny internetowe, a istnieje wiele komercyjnych silników witryn internetowych. Ale co z surowymi, pustymi witrynami internetowymi, czy jest na nie rynek?


title: Czy obsługa protokołu IPv6 jest już funkcją „miło mieć”?

text: Pracuję nad aplikacją, która dużo komunikuje się w sieci. Wiem, że adresy IPv4 są na wyczerpaniu. Jednocześnie żaden z naszych klientów nie pyta jeszcze o IPv6. Sprawdzamy, które nowe funkcje dodać do następnej wersji, więc pytam: czy obsługa protokołu IPv6 jest w tym momencie funkcją „must have” czy „fajnie mieć”?


title: Gdzie programista powinien wyjaśnić rozszerzoną logikę kodu?

text: Opracowałem kilka bibliotek ilościowych w C#, w których ważne jest zrozumienie nie tylko klasycznych informacji dołączonych do komentarzy XMLDoc (zawierających podstawowe informacje z sygnaturą metody), ale także formuł matematycznych używanych w ramach metod. Dlatego chciałbym móc dołączyć do kodu rozbudowaną dokumentację, która mogłaby zawierać np. formuły lateksowe, wykresy i tak dalej. Czy uważasz, że takie informacje powinny znaleźć się w dokumentacji API? A może powinien znaleźć się na blogu deweloperów, aby uzyskać przykłady? Czy istnieją wspólne narzędzia, które są zwykle używane do tego rodzaju celów?


title: Metodologia dokumentowania istniejącej bazy kodu

text: Pracuję jako część zespołu nad istniejącą aplikacją, która nie posiada dokumentacji wbudowanej ani dokumentacji technicznej. Ponieważ pracowałem nad różnymi raportami o błędach w aplikacji, napisałem dla siebie coś w rodzaju ścieżki nawigacyjnej - numery błędów w różnych miejscach, aby następny programista mógł odnieść się do tego numeru błędu, aby zobaczyć, co się dzieje. Moje pytanie brzmi zatem: Jaka jest najskuteczniejsza metoda dokumentowania tego kodu? Czy powinienem dokumentować, gdy dotykam obszaru (metoda wirusa, jeśli wolisz), czy powinienem dokumentować z każdej sekcji osobno, a nie podążać ścieżkami, które rozgałęziają się na inne obszary aplikacji? Czy powinienem wstawiać komentarze w tekście tam, gdzie wcześniej ich nie było (z obawą, że mogę błędnie zidentyfikować, co robi kod)? Jakiej metody użyjesz, aby dokładnie i szybko udokumentować dość dużą aplikację, która nie ma istniejącej dokumentacji wbudowanej ani wbudowanych odniesień do dokumentacji zewnętrznej?


title: Kiedy zaczynasz dokumentować kod?

text: Niedawno wraz z przyjaciółmi rozpoczęliśmy projekt średniej wielkości. Omówiliśmy już część projektową (przynajmniej pierwszą próbę), a teraz przechodzimy do kodowania. Zaimplementowaliśmy już niektóre obiekty projektu, aby sprawdzić, czy wszystko idzie zgodnie z oczekiwaniami (jesteśmy początkującymi, więc tak naprawdę nie ufamy naszym umiejętnościom programowania). Projekt rozwija się bardzo szybko, ale tak naprawdę nie wiem, kiedy zacząć dokumentować kod. Jeśli zrobię to za wcześnie, prawdopodobnie zmieni się kod, a więc i dokumentacja. Czy istnieje jakaś „złota zasada” określająca, kiedy należy rozpocząć dokumentowanie kodu? Czy jest jakaś optymalna pora na rozpoczęcie? czy to po prostu nie ma znaczenia? Dziękuję! **EDYTUJ** : Zmieniłem „komentowanie” na „dokumentowanie”, ponieważ zdałem sobie sprawę, że to nie to samo. Przepraszam. * * * **ODPOWIEDŹ** Dziękuję wszystkim za wkład. Postaram się zamieścić tutaj rozwiązanie, które otrzymałem po przeczytaniu wszystkich twoich odpowiedzi. **Kiedy zaczniesz komentować?** * Komentuj kod w trakcie pisania, ponieważ... 1. nie wrócisz później do komentowania 2. nigdy nie będzie to bardziej przejrzyste w twojej głowie * Udokumentuj API. Utwórz dokument projektu oddzielony od oryginalnego kodu i/lub skomentuj nagłówek interfejsów, aby: 1. Wszyscy byli na tej samej stronie 2. Pomagają wszystkim pozostać na tej samej stronie (bez niepożądanego morfingu) 3. Może ewoluować w przyszłości w bardziej rozbudowany dokument Wybrałem odpowiedź @Octávio jako właściwą, ponieważ dotyczy ona ważnego faktu: komentarza, zanim będzie za późno. Jeszcze raz dziękuję wszystkim za wnikliwe odpowiedzi!


title: Jak udokumentować swój kod?

text: Jestem programistą-hobbystą (bez formalnego wykształcenia), który chce zacząć wykonywać drobne prace jako freelancer. Jedną z rzeczy, na które programiści-hobbyści mogą ujść na sucho, a nie dla tych, którzy mają „prawdziwą” pracę, jest brak dokumentacji. W końcu to napisałeś, żeby wiedzieć, jak to działa. Czuję się trochę głupio pytając, ponieważ wydaje mi się, że to taka podstawowa rzecz, ale jak mam udokumentować mój kod? * Jak powinien być sformatowany? * Jak powinna być prezentowana? (strony HTML? LaTeX?) * Co należy/nie trzeba dokumentować? ...I może więcej szczegółów, o których nie pomyślałem. Programuję głównie w PHP, ale także w C#.


title: Jak wygląda Twoja dokumentacja techniczna?

text: Pracuję nad dużym projektem i chciałbym skompletować dokumentację techniczną dla innych członków zespołu oraz dla nowych programistów dołączających do projektu. Jaką dokumentację powinienem mieć? Tylko `///` komentarze do kodu lub inne pliki wyjaśniające architekturę i projekt klasy? Nigdy tak naprawdę nie robiłem dokumentacji, z wyjątkiem okazjonalnych dokumentów Word, które można by zastosować w mniejszych aplikacjach, i myślę, że ten projekt jest zbyt duży, aby dokumentować w pojedynczym pliku Word.


title: Jakie są najlepsze wzorce dokumentacji?

text: Widziałem wiele różnych sposobów [lub nie] komentowania kodu, szczególnie wzorców opisów szczegółów funkcji i celów plików. Chciałbym wiedzieć, jaki wzorzec jest najczęściej używany do tego [szczególnie interesują mnie generatory dokumentacji i ich wzorce]


title: Kiedy pisać dokumentację projektu oprogramowania na kodzie?

text: Zazwyczaj piszę swoje projekty oprogramowania w javie i nadal jestem trochę zdezorientowany, kiedy dokumentować moje klasy, interfejsy i metody. Są dwa sposoby: **1)** Napisz dokumentację po zadeklarowaniu lub zakodowaniu klasy/interfejsu/metody/konstruktora. W ten sposób mam pewność, że dokumentacja jest obsługiwana natychmiast. **Wada:** Mogę zmodyfikować argumenty metody/konstruktora lub zmodyfikować funkcjonalność klasy lub interfejsu i zapomnieć o edycji dokumentacji. **2)** Po skończeniu projektu pisz dokumentację (lub główne wykończenie/wersję projektu), w ten sposób mam pewność, że udokumentuję pełną funkcjonalność/argumenty metod/konstruktorów oraz wszystkie zgłoszone wyjątki. **Wada:** Zwykle kolejnym wielkim przytłaczającym zadaniem jest przejrzenie setek klas i metod pod koniec projektu, próbując napisać kod dokumentacji. Jak widać oba scenariusze mają swoje wady, ale myślę, że jeden jest korzystniejszy od drugiego. Jestem zdziwiony co. Nie sugeruję tego również w samej Javie, można to zastosować do dowolnego języka programowania, który wymaga dokumentacji.


title: Jak tworzysz dokumentację, gdy jej nie ma?

text: Niedawno odziedziczyłem duży, przestarzały system ze złożoną bazą kodu, w którym brakuje dokumentacji. Jestem jedynym wewnętrznym programistą osadzonym z głównymi użytkownikami i przejmuję część odpowiedzialności od zewnętrznego wykonawcy. Chociaż moduły i funkcje są wystarczająco dobrze udokumentowane, nie ma dokumentacji dotyczącej samego systemu. Co to jest, dlaczego istnieje, jak wszystkie moduły do siebie pasują. Jest to aplikacja internetowa, a przykładem tego jest sposób tworzenia strony. Wymaga to wykonania PHP, który wykonuje wywołanie do bazy danych, która pobiera niektóre XSLT z niestandardowymi rozszerzeniami, która jest przekształcana (ten proces może się zdarzyć wiele razy), może pobrać PHP _z bazy danych_ , jednak czasami podczas pobierania PHP pobierze PHP stub, co wskazuje, że faktycznie musi pobrać plik PHP z systemu plików. Chociaż przechwytywane są poszczególne fragmenty tego procesu, nie ma dokumentacji, która przedstawiałaby światowy widok systemowy lub makro. Więc wszedłem i zacząłem pisać to, co udało mi się wywnioskować z e-maili do obecnego konsultanta, co udało mi się wywnioskować z kodu i po prostu czystą determinację. Ze względu na wagę tego systemu, ludzie, z którymi pracuję, mają duże znaczenie, aby system był zrozumiały, więc są mniej zależni od jednej osoby - czy to ja, oryginalny programista, czy ktokolwiek inny. Szczerze mówiąc, jestem z tego zadowolony, jestem pewny swoich możliwości i jeśli częścią mojego zadania jest pomoc w ograniczeniu ryzyka organizacyjnego, gdybym miał zniknąć, to jest to sprawiedliwe. Podoba mi się również zadanie rozwikłania gigantycznego systemu dziedzictwa - to gigantyczna łamigłówka. Wyzwanie polega jednak na tym, że muszę stworzyć solidną dokumentację dotyczącą tego, jak działa system, zarówno dla mnie, jak i dla każdego, kto podąża. Chociaż zacząłem jasno rozumieć, chciałbym się dowiedzieć **jakie rzeczy musiałby zobaczyć nowy programista, aby nadać sens starszemu systemowi, który był dla nich nowy?** co należy napisać **jak poradziłbyś sobie z nurkowaniem, analizowaniem i dokumentowaniem dużej, starszej bazy kodu?**


title: Co uzasadnia użycie IDE w porównaniu ze standardowym edytorem?

text: Używam wybranego przeze mnie edytora tekstu (vim, nano, gedit, wybierz swoją truciznę) znacznie częściej niż jakiekolwiek ostatnio IDE. Po zauważeniu, że moje skróty do ide stają się zakurzone, zacząłem się nad tym zastanawiać i zastanawiać: **co uzasadnia użycie IDE w przeciwieństwie do edytora tekstu**? Z tego względu, jakie masz uzasadnienie, aby **nie** używać IDE i polegać jedynie na edytorze?


title: Czas porzucić Emacsa i vi?

text: Za każdym razem, gdy szukasz edytora tekstu, bez względu na język, którego używasz, vi i Emacs są halami sław. Jednak są stare i mamy lepsze alternatywy (przynajmniej mam nadzieję, że tak). Dlaczego programiści utknęli na tych dwóch edytorach? Czy nie powinniśmy ich porzucić i spróbować wymyślić lub poszukać czegoś nowego? _(Mam pełen szacunek dla fanów Emacsa i vi)._


title: Dlaczego ludzie używają terminalowych edytorów tekstu?

text: Czy istnieją jakieś nieodłączne zalety terminalowego edytora tekstu w porównaniu z wersją gui tego samego edytora (na przykład vim i gvim), czy też ludzie używający terminalowych edytorów tekstu po prostu ich używają, ponieważ do tego są przyzwyczajeni? Nie pytam w szczególności o vima. Pytam, czy przy wszystkich pozostałych równych, terminalowy edytor tekstu ma przewagę nad edytorem tekstu gui.


title: Czy programista musi nauczyć się edytorów tekstu, takich jak Emacs i Vim? Jak ważne są?

text: Do tej pory pisałem kod w konwencjonalnych edytorach tekstu, które są do tej pory dostarczane z systemem operacyjnym lub w niektórych przypadkach używają IDE. Wiem, że istnieje kilka zaawansowanych edytorów tekstu, takich jak `Emacs` i `Vim`, które są dostępne wyłącznie dla programistów. Jak naprawdę są ważne? Czy programista zajmujący się `PHP`, `Pythonem` itp. powinien nauczyć się tych edytorów? Jakie są zalety, które zapewniają w porównaniu z konwencjonalnymi edytorami, takimi jak `Notepad++`, `Scribes` itp.?


title: Dlaczego miałbyś używać vi/vim

text: Często widzę, że ludzie preferują vi lub vim do edycji tekstu, a nawet programowania. Próbowałem tego i nie widzę, jak mogłoby to być szybsze lub łatwiejsze. Jeśli używasz jednego z nich, dlaczego?


title: Jak rozpocząć projekt deweloperski, gdy jest zbyt wielu potencjalnych interesariuszy

text: Właśnie podjąłem nową pracę na uczelni jako (jedyny) programista aplikacji internetowych. Uczelnia ma wiele różnych, ale wszystkie dość źle zakodowane starsze systemy. W większości zbudowane w PHP, zajmują się takimi rzeczami jak frekwencja, wyniki egzaminów, ocena itp. Moim pierwszym zadaniem jest zbudowanie systemu, który zawiera wiele tych danych, które są obecnie przechowywane w różnych bazach danych bez żadnego przyjaznego interfejsu API, który mógłby je wyciągnąć (istniejące systemy są kodowane w waniliowym PHP bez separacji danych i widoku) z nową platformą do rejestrowania informacji duszpasterskich o uczniach i przedstawiania ich nauczycielom i kadrze kierowniczej w użyteczny sposób, aby mogli szybko reagować na problemy z uczniami. Na naszym pierwszym spotkaniu było 18 osób! Nie było wyraźnego lidera ani głosu reprezentującego większość. Brak identyfikowalnego _klienta_. Spotkanie przesunęło się od szczegółowych pomysłów wdrożeniowych dotyczących drobnych funkcji od kierowników wydziałów do argumentów o tym, czy powinniśmy używać arkuszy kalkulacyjnych Excel do wprowadzania danych! Jak możesz sobie wyobrazić, pod koniec kręciło mi się w głowie. Właściwie miałem wiele dobrych pomysłów, ale nie mogłem ich usłyszeć. To dla mnie bardzo nowa rola, zanim byłam częścią zespołu programistycznego w agencji marketingowej. Mieliśmy bardzo dobrze określone role: Project Manager, Client, Designer, Developer. Chciałbym wiedzieć, czy jacyś doświadczeni programiści lub menedżerowie mogą dać mi wskazówki, jak mogę wciągnąć moich kolegów w coś, co przypomina zespół projektowy. Czy agile jest drogą do zrobienia? Jak byś podszedł do radzenia sobie ze wszystkimi odmiennymi głosami? Oczywiste jest, że jakiś proces musi zostać wprowadzony bardzo szybko, po prostu nie jestem pewien, co to jest.


title: C++ dla programistów C#

text: Znam C# całkiem dobrze (samoukiem, niestety) i muszę napisać trochę C++ dla aplikacji Windows. Udało mi się znaleźć mnóstwo informacji dla programistów C++ uczących się C#, ale nie udało mi się znaleźć wiele na temat uczenia się C++, gdy już znasz C#. Czy ktoś natknął się na dobry przegląd podstaw? MSDN ma porównanie, ale nie jest zbyt szczegółowe. Potrafię połączyć kilka źródeł, ale stwierdziłem, że coś tam jest - po prostu nie mogę tego znaleźć. Dzięki za pomoc.


title: Dobre zasoby do nauki o rekurencji

text: > **Możliwy duplikat:** > Zasoby, które pomogą ci poprawić zrozumienie rekurencji? Jestem programistą z 2-letnim doświadczeniem i czasami wydaje mi się, że mógłbym rozwiązać konkretny problem za pomocą rekurencji, ale w większości przypadków mi się nie udaje. Proszę o radę na temat środków do nauki, odświeżenia i pogłębienia wiedzy na temat rekurencji, najlepiej: * pomocy w określeniu, kiedy można zastosować rekurencję. * praktyczne przykłady (dotyczy współczesnych języków programowania). * podręcznik referencyjny. * kod źródłowy.


title: Czy nowa klasa zrefaktorowana z istniejącej ma historię wskazującą na jej przodka?

text: Jeśli podzielę jedną klasę na dwie klasy, obie klasy powinny mieć historię w kontroli źródła, śledzącą oryginalną klasę, która zawierała obie; czy też nowa klasa powinna zostać dodana jako nowy plik bez śledzenia historii? Dzielenie dużej klasy na dwie części o podobnej wielkości wydaje się naturalnym podejściem, ponieważ starsze wersje połączonej klasy będą miały dużą ilość odpowiedniej historii dla obu potomków. Kiedy po prostu wyciągam jedną lub dwie metody, aby utworzyć klasę pomocniczą, posiadanie pełnej historii dla nowej klasy zawierającej >90% zmian w rodzicu, które wpłynęły na kod, który nie został podzielony, wydaje się być receptą na zamieszanie w przyszły.


title: Sprawdzam, czy moja aplikacja korzysta z nieudokumentowanych części API

text: Właśnie przeczytałem to pytanie, ale nadal jestem zdezorientowany. Skąd mam wiedzieć, czy moja aplikacja korzysta z nieudokumentowanych wywołań interfejsu API przed przesłaniem jej do sklepu z aplikacjami? Czy są jakieś narzędzia, których mogę użyć?


title: Zmniejszanie vars w programach Scala

text: Od około tygodnia studiuję scalę i związane z nią ideologie oraz ogólnie programowanie funkcjonalne. Zgodnie z oczekiwaniami, przeskok od programowania imperatywnego do funkcjonalnego nie jest tak łatwy, jak się spodziewałem. Na przykład przekonwertowałem ćwiczenie programistyczne, które wykonałem w Javie, na Scala. Odkryłem, że przejście od zmiennych zmiennych do stylu niezmiennych wartości Scala było prawie niemożliwe. Dla ludzi TL;DR moje główne pytanie brzmi: jak zmniejszyć użycie var w programie funkcjonalnym? Dla przykładu, podam przykładowy kod: import scala.io._ object Bowling { def main(args: Array[String]): Unit = { val input = Source.fromFile("bowling.in ").getLines for(testCase <- input) { val numberOfRows = augmentString(testCase).toInt var index = 0 var a = 1 var sum = 0 while(index < numberOfRows) { sum += a a += 4 index += 1 } println(sum) } } } EDIT: Akceptuję odpowiedź Karla ze względu na jej zwięzłość, chociaż naprawdę doceniam przykład kodu Pthariena i wyjaśnienie Dovala dotyczące pojęć funkcjonalnych jako całości.


title: Nie pamiętam programowania 5 minut po nauce?

text: Uczę się Javy i znalazłem świetnego nauczyciela. Wszystko doskonale wyjaśnia. Rozumiem to _wszystko_. Mój problem polega na tym, że po nauczeniu się krótkiej sekcji, na przykład „Zagnieżdżone instrukcje if” lub „Wiele metod i instancji”, mogę to wszystko napisać świetnie, ale w 5 minut, po przejściu do nowej sekcji (kiedy jestem wygodne z ostatnią sekcją) Zapomniałem kodu do wpisania w ostatniej sekcji. Jakieś wskazówki lub techniki, których używacie do zapamiętania kodu????


title: Jak zachować spokój, gdy system produkcyjny przestaje działać?

text: To przydarzyło się większości z nas... Pewnego dnia przychodzisz do pracy. Wszystko wydaje się normalne - słońce świeci, ptaki ćwierkają, ale w drodze do pracy zauważasz kilka dziwnych rzeczy, które przypominają kota déjà vu w Matrixie. Wchodzisz do biura i dzwoni wiele telefonów – ale może to być po prostu nowa promocja sprzedaży. Przystosowujesz się, gdy zauważasz unoszącą się nad tobą ciemną chmurę. Zajmuje ci to kilka chwil, ale zdajesz sobie sprawę, że chmura jest twoim szefem. Zwykle sprawdza cię każdego ranka swoim „Soooo Peeeeter, a co z tymi raportami TCP/IP?” rutyna, ale dzisiaj zapomniał o zwyczajnych manierach i brutalnie wtargnął w twoją osobistą przestrzeń. Żadnego "Dzień dobry", tylko trochę ślinienia się, pomruków i przekleństw. Przypomina ci trochę neandertalczyka, który próbuje uciec przed tygrysem cyberzębnym, strachem i paniką sprasowanymi w ciasną kulkę. Próbujesz rozszyfrować nowy język, który stworzył od wczoraj i zaczynasz rozumieć, że z dnia na dzień wydarzyło się coś złego - system produkcyjny zepsuł się. Teraz twój system jest zwykle używany przez klientów w normalnych godzinach pracy od 9 do 5, ale z jakiegoś powodu nie otrzymałeś żadnych powiadomień na swoim sygnalizatorze (dla osób poniżej 30 roku życia - sygnalizator był jak telefon komórkowy, który może tylko dzwonić i powiedz, kto cię zasygnalizował). Musisz pamiętać, aby następnym razem go naładować. Teraz jest 8:45, a system MUSI być włączony o 9 rano. Co 10 sekund Twój szef wypuszcza kolejną klątwę, która informuje Cię, że inny klient ma problem z wejściem do systemu. Ponadto, kilku menedżerów konta unosi się teraz nad twoim szefem, próbując pokazać mu, jak NAPRAWDĘ NAPRAWDĘ cierpią klienci. Wszyscy polegają na Tobie, aby uruchomić system JAK NAJSZYBCIEJ, a jednocześnie utrudniają Twoje postępy, stale rozpraszając Cię. Jak zachować spokój w takiej sytuacji?


title: Wskazówki dotyczące kodowania dla bezproblemowego łączenia

text: Poszukuję wytycznych dotyczących kodowania, które programiści powinni przestrzegać podczas pisania kodu C#/ASPX/SQL, aby łączenie z innymi gałęziami było płynne, jeśli nie bezproblemowe.


title: Czy każdy programista powinien prowadzić dziennik „Wyciągniętych lekcji”?

text: Za każdym razem, gdy kończę projekt, zawsze jest coś, czego się nauczyłem (w przeciwnym razie nie wydaje mi się to zbyt motywujące). Ale nie pamiętam wszystkiego, a dużo później mogę natknąć się na ten sam problem, który napotkałem w poprzednim projekcie, ale już nie, jak go rozwiązałem (a przynajmniej jakie podjąłem próby). Czy więc dobrym pomysłem byłoby zapisanie tego w jakimś dzienniku? Wiem, że zapisywanie rzeczy jest jak pisanie dokumentacji (co nie wszystkim się podoba) i mam nadzieję, że nasza pamięć będzie nam służyć, gdy zajdzie taka potrzeba. Ale mając to udokumentowane, można go udostępnić innym programistom i dowiedzieć się, czego się nauczyli. Więc co o tym myślisz?


title: Co zrobić, gdy projekt opensource zaczyna się rozpadać? (lub menedżer próbuje napisać kod, a następnie krzyczy na zespół)

text: Pracuję nad aplikacją klient/serwer o otwartym kodzie źródłowym. Jest dość złożony i grupie programistów zajęło miesiące, aby dostać się tam, gdzie jest teraz. W pewnym momencie kierownik zespołu postanowił samodzielnie wdrożyć funkcję. Miał pewne doświadczenie programistyczne, ale niezbyt duże. Nie udało mu się, a inni programiści dokończyli za niego pracę. Od tego czasu jego postawa stała się znacznie bardziej negatywna. Próbuje powiedzieć programistom, że ich prace są słabej jakości i że wszystkie prace powinny być najpierw z nim przedyskutowane. Obecna konfiguracja polega na tym, że wszyscy członkowie zespołu są oznaczeni jako „właściciele projektu”, a zatem mają równe prawa w projekcie. Lider zespołu oferuje teraz programistom wybór między zawsze najpierw z nim rozmawia lub degradacją z właścicieli projektów do współtwórców. Więc jakie są nasze opcje jako programistów? Jakie argumenty możemy dostarczyć liderowi zespołu, aby go uspokoić? Czy można zapisać projekt, czy lepiej teraz rozwidleć? Ważną kwestią jest to, że ostatnio nie mieliśmy aktywnego systemu biletowego i osobiście uważam, że z tego powodu powstał bałagan. Więc... jakieś pomysły?


title: Czy dobrym pomysłem jest wymaganie zatwierdzenia tylko działającego kodu?

text: Czasami słyszę, jak ludzie mówią coś w stylu „Cały kod musi działać”. W niektórych artykułach ludzie piszą nawet opisy tworzenia haków svn lub git, które kompilują i testują kod przed zatwierdzeniem. W mojej firmie zazwyczaj tworzymy jedną gałąź dla funkcji i zazwyczaj jeden programista pracuje w tej gałęzi. Często (1 na 100, myślę i nie bez powodu) wykonuję niekompilowalne commity. Wydaje mi się, że wymóg "zawsze kompilowalnych/stabilnych" commitów koliduje z ideą częstych commitów. Programista wolałby wykonać jedno zatwierdzenie w ciągu tygodnia, niż testować stabilność/kompilowalność całego projektu dziesięć razy dziennie. Tylko dla kodu kompilowalnego używam tagów i wybranych gałęzi (trunk itp.). Widzę następujące powody, aby commit nie działał w pełni lub nie dawał się skompilować: 1. Jeśli opracowuję nową funkcję, trudno jest zmusić ją do działania, pisząc kilka linijek kodu. 2. Jeśli edytuję funkcję, czasami trudno jest utrzymać kod działający za każdym razem. 3. Jeśli zmieniam prototyp lub interfejs jakiejś funkcji, dokonałbym również setek zmian, nie mechanicznych, ale intelektualnych. Czasami jeden z nich może spowodować, że wykonam setki zatwierdzeń (ale jeśli chcę, aby wszystkie zmiany były stabilne, powinienem zatwierdzić 1 raz zamiast 100). We wszystkich tych przypadkach, aby wykonać stabilne zatwierdzenia, wykonałbym zatwierdzenia zawierające wiele-wiele-wiele zmian i będzie bardzo-bardzo-bardzo trudno dowiedzieć się "Co się stało w tym zatwierdzeniu?". Innym aspektem tego problemu jest to, że kompilacja kodu nie daje żadnej gwarancji poprawnego działania. Czy więc dobrym pomysłem jest wymaganie, aby każde zatwierdzenie było stabilne/kompilowalne? Czy to zależy od modelu rozgałęzienia czy CVS? Czy w Twojej firmie zabronione jest wykonywanie niekompilowanych zatwierdzeń? Czy (i dlaczego) nie warto używać tylko wybranych gałęzi (w tym trunk) i tagów dla wersji stabilnych?


title: Dlaczego narzędzia do audytu kodu, takie jak FindBugs, do poprawnego działania wymagają kroku kompilacji?

text: Zasadniczo uruchomiłem wtyczkę Intellij Idea o nazwie FindBugs-Idea, aby przeanalizować mój kod. Poprawiłem każdy wykryty błąd, a następnie ponownie uruchomiłem narzędzie, ale nadal narzekało na ten sam błąd, mimo że został naprawiony w pliku źródłowym. Przestał narzekać dopiero po przekompilowaniu moich zajęć. Dlaczego wymaga to etapu kompilacji? Czy nie powinien po prostu zajrzeć do pliku źródłowego i wykryć możliwego błędu? Jak ogólnie działają te narzędzia?


title: Jak nazywa się ten wzorzec obejmujący wiele danych wejściowych i co zrobić na podstawie danych wejściowych?

text: Jeśli mam kod podobny do tego (choć może nie tak ograniczony jak poziomy ostrzegawcze): switch(item.StatusCode) { case StatusCode.SUCCESS: CallSuccess(item); przerwanie; case StatusCode.WARNING: CallWarning(item); przerwanie; case StatusCode.ERROR: CallError(item); przerwanie; } Często zauważam, że konwertuję go na coś bardziej takiego: var zachowania = new Dictionary<StatusCode, Action<Item>> { {StatusCode.SUCCESS, (item) => CallSuccess(item)}, {StatusCode.WARNING, (item) => CallWarning(item)}, {StatusCode.ERROR, (item) => CallError(item)}, } zachowania[item.StatusCode](item); Uważam, że w wielu przypadkach sprawia to, że kod jest łatwiejszy w utrzymaniu. Czy to jest wzór, czy rzeczywiście pomaga tak, jak myślę, i jak się nazywa?


title: Co oznacza „etap” w git?

text: Trudno mi zrozumieć, ponieważ nie mogłem znaleźć znaczenia słów użytych do działań. Sprawdziłem w słowniku znaczenie słowa „etap” i żadne ze znaczeń nie było związane z pojęciami kontroli źródła. Co oznacza „etap” w kontekście git?


title: Rachunek różniczkowy i całkowy dla programisty

text: > **Możliwe duplikowanie:** > Gdzie jest zastosowanie rachunku różniczkowego (wielkości ciągłych) w informatyce > Nauka lub programowanie > W jaki sposób rachunek różniczkowy i algebra liniowa mogą być przydatne dla programisty systemowego? Rachunek różniczkowy i całkowy jest częścią mojego dyplomu, ale nie rozumiem dlaczego. Gdzie wchodzi w grę, gdzie jest używany?


title: Gdzie jest zastosowanie rachunku różniczkowego (wielkości ciągłych) w informatyce lub programowaniu?

text: Jestem zawodowym inżynierem oprogramowania. Uczyłem się rachunku różniczkowego jako przedmiotu podstawowego na moich studiach magisterskich. Chcę zadać pytanie, co/gdzie jest zastosowanie rachunku różniczkowego w informatyce?


title: projekt tabeli wyszukiwania pełnotekstowego mysql

text: Pracowałem nad projektem bazy danych Mysql, którego wyszukiwanie oparte na słowach kluczowych wydaje się być konieczne. Główna tabela ma dwie kolumny: id | Tytuł Dla każdego wpisu użytkownicy będą musieli wprowadzić 4 lub 5 słów kluczowych. Myślę, że użycie oddzielnej tabeli dla słów kluczowych byłoby lepsze. Chciałbym się dowiedzieć, czy jest jakaś różnica między tymi dwoma projektami pod względem wydajności, skalowalności i zarządzania. W głównej tabeli będą miliony wierszy. identyfikator | słowa kluczowe 1 | 1ksłowo1, 1ksłowo2, 1ksłowo3 2 | 2ksłowo1, 2ksłowo2, 2ksłowo3 Lub id | słowo kluczowe 1 | 1ksłowo1 2 | 1ksłowo2 3 | 1ksłowo3 4 | 2ksłowo1 5 | 2ksłowo2 6 | 2ksłowo3


title: Gdzie mogę uzyskać informacje zwrotne i wsparcie od innych programistów w czasie rzeczywistym?

text: Kiedyś pracowałem w biurze otoczonym przez duży zespół programistów, gdzie wszyscy używaliśmy tych samych języków i mieliśmy różne kompetencje. Teraz, gdy sam zakładam startup w domu, moja produktywność spada, ponieważ brakuje mi ludzi, z którymi mogę porozmawiać, aby uzyskać konkretną pomoc, inspirację i weryfikację rzeczywistości podczas pracy nad problemem kodowania. Nie mam dostępu do inkubatorów przedsiębiorczości ani współdzielonych (coworkingowych) przestrzeni biurowych dla startupów, więc muszę rozmawiać z ludźmi wirtualnie. Gdzie mogę się udać na czat w czasie rzeczywistym z innymi programistami i programistami (obecnie szukam osób rozwijających web, javascript i python) w celu debugowania na żywo i rozwiązywania problemów z zadaniami, nad którymi pracuję? A jakich innych zasobów mogę użyć, aby uzyskać wsparcie dla innych programistów?


Flow to pojęcie wprowadzone przez Mihaly Csikszentmihalyi; w skrócie oznacza to wejście do „strefy”. Czujesz się pochłonięty swoim zadaniem, skupiony; zadanie może być trudne, ale jednocześnie trudne. Kiedy ludzie osiągają przepływ, ich produktywność rośnie. Programowanie wymaga dużego skupienia, ponieważ często musimy żonglować kilkoma rzeczami naraz. Wiele osób lubi pracować w cichym otoczeniu, w którym mogą skupić całą swoją uwagę na zadaniu. Jeśli zostaną przerwane, powrót do obiegu może zająć kilka minut, a nawet godzin. Rozumiem, że w programowaniu zwinnym i programowaniu ekstremalnym istnieje praktyka zwana programowaniem w parach. Oznacza to, że cały zespół programistów umieszczasz w jednym pomieszczeniu, dzięki czemu komunikacja jest płynna. Piszesz kod ze swoją parą, ponieważ w ten sposób otrzymujesz natychmiastowe przeglądy kodu i mniej błędów. Zawsze miałem problemy z osiągnięciem przepływu podczas programowania w parach z powodu ciągłych przerw. Zastanawiam się głęboko nad problemem, a nagle ktoś zadaje mi pytanie z innej pary. Mój tok myśli zgubił się. Jak osiągnąć i utrzymać przepływ podczas programowania w parach?


title: MVC/P w aplikacji komputerowej

text: Zajmuję się tworzeniem aplikacji desktopowej w C# i oddzieliłem różne warstwy w architekturze MVC. Ponieważ przeszedłem z GTK# na XWT, tylko widoki musiały zostać dostosowane, więc separacja warstw została wykonana całkiem OK. Ponieważ XWT nie ma projektanta układu, wszystko musi być ustawione w kodzie, co z kolei doprowadziło do problemu architektonicznego: mam jeden kontroler do wyświetlania wylotów, wlotów i połączeń. Ten kontroler wysyła dane do jednego widoku (zaznaczonego na czerwono). Ten widok z kolei ma podwidoki (zielony i niebieski), które komunikują się tylko z widokiem w kolorze czerwonym. ![Układ widoku](http://i.stack.imgur.com/sQ2RT.png) Przy przewijaniu/zwijaniu/rozwijaniu widoków drzewa zielony widok wysyła zdarzenia, które są odbierane przez czerwony widok, który z kolei wyzwala przerysowanie w niebieskim widoku. Sterownik nie widzi zielonego ani niebieskiego widoku, każda zmiana przyłączy/wylotów/wlotów wysyłana jest tylko do widoku czerwonego. Mój problem: jak rozumiem MVC, widoki nie powinny mieć dużej logiki. Ale zielone widoki to klasa 300 linii, klasa czerwonego widoku ma 200 linii, czyli za dużo. Jaki problem architektoniczny może z tego wyniknąć? Czy przeoczam błąd w mojej logice MVC?


title: Jak zwiększyć współczynnik autobusowy i jednocześnie się specjalizować?

text: W programowaniu zwinnych par zaleca się co jakiś czas przełączać pary, aby zwiększyć współczynnik magistrali zespołu. Oznacza to, że większość osób w zespole powinna pracować nad różnymi częściami systemu w różnym czasie, aby każdy mógł to zrozumieć. Teraz jest niemożliwe, aby każdy miał ekspertyzy zrozumienie każdej części systemu. To dlatego, że ludzie są zachęcani do specjalizowania się w jednej dziedzinie wiedzy. Jeśli jesteś doświadczonym administratorem baz danych, jaki jest sens pracy nad interfejsem użytkownika systemu podczas przełączania par? Nie będziesz w stanie wykonać tak wysokiej jakości pracy, jak ktoś, kto ma duże doświadczenie w projektowaniu UI. Jak możesz zwiększyć współczynnik busów i upewnić się, że masz specjalizację w swoim zespole?


title: Czy korzystanie z wbudowanych funkcji GCC kwalifikuje się jako włączenie do projektu?

text: Rozumiem, że linkowanie do programu na licencji GPL wymaga wydania źródła programu również na GPL, podczas gdy LGPL tego nie wymaga. Terminologia (L)GPL jest bardzo jasna. #include "gpl_program.h" oznacza, że musisz mieć licencję na GPL, ponieważ łączysz się z kodem na licencji GPL. A #include "lgpl_program.h" oznacza, że możesz dowolnie licencjonować, co nie zabrania jawnie linkowania do źródła LGPL. Teraz moje pytanie o to, co nie jest jasne, brzmi: [zacznij pytanie] **GCC jest na licencji GPL, kompilacja z GCC, nie stanowi „integracji” z twoim programem, jak to określa GPL; czy używanie funkcji wbudowanych (które są specyficzne dla GCC) stanowi „włączenie”, nawet jeśli nie połączyłeś się wyraźnie z tym kodem na licencji GPL? Intuicja podpowiada mi, że to nie jest intencja, ale legalność nie zawsze jest intuicyjna. Właściwie nie martwię się, ale jestem ciekawy, czy można to rozważyć.** [koniec pytania] [zacznij na bok] Powodem mojego dwuznaczności jest to, że wbudowane GCC, takie jak `__builtin_clzl()` lub `__builtin_expect() ` są API _technicznie_ i _można_ zaimplementować w inny sposób. Na przykład wiele poleceń wbudowanych zostało zreplikowanych przez LLVM i można argumentować, że nie jest to implementacja specyficzna dla GCC. Jednak wiele programów wbudowanych nie działa równolegle i po skompilowaniu łączy kod na licencji GPL w GCC i nie kompiluje się na innych kompilatorach. Jeśli przedstawisz tutaj argument, że API _mogłoby_ być zreplikowane przez inny kompilator, czy nie mógłbyś złożyć identycznego twierdzenia o jakimkolwiek programie, do którego się łączysz, o ile nie rozpowszechniasz tego źródła? Rozumiem, że jestem prawnym wężem w tej sprawie, ale wydaje mi się dziwne, że GPL nie jest bardziej szczegółowa. Nie uważam tego za rozsądną sztuczkę dla twórców oprogramowania prawnie zastrzeżonego, aby ominąć GPL, ponieważ musieliby dołączyć oprogramowanie GPL, aby to działało, usuwając ich prawdopodobną możliwość zaprzeczenia. Czy nie jest jednak możliwe, że jeśli wbudowane nie stanowią linkowania, zwolennicy open source, którzy sprzeciwiają się GPL, mogliby po prostu napisać produkt na licencji BSD/MIT/Apache/Apple, który łączyłby się z programem na GPL i twierdzić, że zamierzają napisać interfejs bez licencji GPL, który jest identyczny z interfejsem GPL, zachowując swoją licencję BSD, dopóki nie zostanie skompilowany? [koniec na bok] Przepraszam za na bok, nie sądziłem, że wiele osób podąży za tym, dlaczego mnie to obchodzi, jeśli nie mam do czynienia z żadnymi problemami prawnymi lub implikacjami. Nie przejmuj się zbytnio hipotetycznymi, po prostu ekstrapoluję, co może sugerować każda odpowiedź na moje rzeczywiste pytanie.


title: Wybór platformy testowej: teoria rodziny xUnit

text: **Tło:** Jestem zaznajomiony z frameworkami rodziny xUnit i mam doświadczenie z (shunit2, PhpUnit i simpletest). Obecnie próbuję znaleźć ramy testowania dla C++. Zrobiłem szybkie wyszukiwanie frameworków, korzystając z listy udokumentowanych frameworków Wikipedii; jednak framework, którego chciałbym użyć, jest bardzo trudny do skonfigurowania i jest słabo udokumentowany. Istnieje inny framework, który wypróbowałem, który był (IMHO) niezwykle łatwy do skonfigurowania i zintegrowania z moim przepływem pracy produkcyjnej. Różnica pomiędzy wybranym przeze mnie frameworkiem (tym, który jest trudny do skonfigurowania) a tym, którego obecnie używam (tym, który był łatwy do skonfigurowania) jest zgodność z metodologią xUnit. **Pytania:** 1\. Przeczytałem sporo artykułów o frameworkach testowych xUnit. Uważam, że w swoich testach stosują podobne konwencje nazewnictwa i metody testowania. Czy to prawda i jakie są stosowane metody nazewnictwa? 2\. Czy pozostawanie przy frameworkach testowych xUnit ułatwia uruchamianie testów integracyjnych w przypadku korzystania z wielu języków? 3\. Czy z perspektywy szkoleniowej bardziej opłacalne jest nauczenie nowych programistów zestawu narzędzi opartych na tej samej koncepcji, czy też różnych indywidualnych narzędzi, które robią to samo? _Utrzymałem anonimowość frameworków, na które patrzę, ponieważ bardziej interesują mnie najlepsze praktyki branżowe niż porównanie dwóch wspomnianych frameworków_


title: Licencjonowana biblioteka EPL z komercyjnym produktem zamkniętym

text: Licencja publiczna Eclipse nie jest dla mnie do końca jasna. Jak rozumiem, każdy, kto redystrybuuje Bibliotekę, której kod jest objęty licencją EPL, jest uważany za Współtwórcę. Następnie stwierdza, że nie musisz redystrybuować kodu źródłowego, ale musisz wspomnieć, gdzie go uzyskać. Inne strony internetowe twierdzą, że nie musisz publikować kodu źródłowego swojego projektu, chyba że specjalnie zmodyfikujesz części programu na licencji EPL, ale po przeczytaniu licencji wydaje się wskazywać na coś innego. Jeśli chciałbym używać biblioteki X w moim programie Java, w którym łączę bibliotekę z moim projektem za pomocą ścieżki budowania, a następnie rozpowszechniam bibliotekę X z moim programem, czy muszę zezwolić na uzyskanie kodu źródłowego, czy nie, "Zapytaj A Porada prawnika na bok.


title: Podział kodu z operacji na formularzach w C#

text: Mam duży (przynajmniej dla mnie - około 10 tys. linii) projekt napisany w C#. Mam obiekt widoku drzewa po lewej stronie formularza i mam wiele węzłów w widoku drzewa. Kiedy klikam węzeł, wyświetlam panel po prawej stronie formularza. Ponieważ wykonuję tylko operacje na elementach GUI (wypełnianie pól tekstowych, klikanie przycisków, pokazywanie obrazków na ramkach z obrazkami itp.), cały kod piszę do klasy MainForm. Wydaje się to niezbyt dobre, ale z drugiej strony myślę, że muszę pisać do klasy MainForm, ponieważ moim zadaniem jest ocenianie elementów formularza na panelach. Co powinienem zrobić, aby napisać bardziej przenośny lub zrozumiały kod? Czy muszę pisać do klasy MainForm, czy mam jakieś opcje lub metody do zaimplementowania?


title: Gdzie umieścić wyciągi logowania

text: Mam następujące klasy: class Task { public void DoSomething() { var s = new Service(); s.Pierwszy(); s.Drugi(); s.Trzecia(); } } class Service { public void First() {}; public void Drugi () {}; public void Trzeci () {}; } Jeśli chcę dodać rejestrowanie, czy powinienem umieścić takie instrukcje rejestrowania: public void DoSomething() { Log("new"); var s = nowa usługa(); Dziennik("Pierwszy"); s.Pierwszy(); Dziennik("Drugi"); s.Drugi(); Dziennik("Trzeci"); s.Trzecia(); } Czy powinienem umieścić każdą instrukcję wewnątrz wywoływanych metod klasy Service? Wiem, że jest to dość subiektywne i wiele rzeczy nie zmieni, ale jestem ciekawa plusów i minusów każdego podejścia. Aktualizacja : nie pytam o szczegółowość ani poziom, tylko o umieszczenie instrukcji logowania.


title: Korzyści ze stawki godzinowej dla klienta

text: Dobrze jest, aby programista pracował na godziny, ale trudno wytłumaczyć klientowi zalety stawki godzinowej. Jakie są Twoje argumenty dotyczące stawki godzinowej dla klienta? Jak wytłumaczysz mu jego zalety i jak argumentujesz „Chcę poznać dokładny koszt projektu”?


title: Plusy i minusy niestandardowych wyjątków

text: To może być bezsensowne pytanie oparte na opinii, stylu i kontekście, ale męczyłem się, próbując zdecydować, czy skorzystać z niestandardowych wyjątków i chciałbym usłyszeć kilka zalet i wad od każdego, kto ma doświadczenie w obu podejściach . Na przykład próbuję zdecydować między niestandardowym ObjectNotFoundException a IllegalArgumentException/IllegalStateException. (Proszę zauważyć, że nie zamierzam zgłaszać wyjątku, gdy usługa nie może znaleźć obiektu o podanym identyfikatorze. W takim przypadku po prostu zwracamy wartość null. Mówię o tym, kiedy akcja ma być wykonana na obiekcie z W takim przypadku obiekt, o którym mowa, powinien istnieć, więc jeśli tak nie jest, chcemy zgłosić wyjątek.) Z jednej strony „GiraffeNotFoundException” jest jawny i może być obsłużony inaczej niż ogólny IllegalStateException, ale z drugiej strony przypuszczam, że miałoby to znaczenie tylko wtedy, gdyby takie rozróżnienie było rzeczywiście wymagane. Inną zaletą jest to, że niestandardową wiadomość dla takiego wyjątku można ustawić jako domyślną wiadomość dla tego wyjątku (zmniejszając nieco nadmiarowość). Z drugiej strony może nie być dobrym pomysłem zaśmiecanie kodu źródłowego niestandardowymi wyjątkami. Również ze standardowymi wyjątkami, klasę Assert od wiosny można dość sprawnie wykorzystać. Nie ma zamiaru publikowania naszego kodu jako biblioteki strony trzeciej, więc nie ma presji na używanie standardowych wyjątków z tego powodu. Jakieś inne myśli?


title: Jakie są możliwe/przydatne implementacje przy rozszerzaniu wyjątków?

text: Widziałem wiele wyjątków - niestandardowych lub zintegrowanych w samym języku (PHP), które nie mają różnic poza nazwą klasy. Czy podczas rozszerzania domyślnych wyjątków do użycia we własnym kodzie są jakieś inne rzeczy, które można zaimplementować, które są przydatne oprócz bardziej szczegółowej nazwy wyjątku, która nie narusza takich rzeczy, jak pojedyncza odpowiedzialność?


title: Wzorce projektowe GoF — których faktycznie używasz?

text: Staram się edukować moich kolegów w zakresie wzorców projektowych. Niektóre z oryginalnych wzorców Gang of Four są trochę ezoteryczne, więc zastanawiam się, czy istnieje podgrupa „istotnych” wzorców, które powinni znać wszyscy programiści. Przeglądając listę, myślę, że prawdopodobnie użyłem - * Fabryka abstrakcyjna * Metoda fabryczna * Singleton * Most * Fasada * Polecenie Które z nich faktycznie używasz w praktyce i do czego ich używasz? Link dla tych, którzy chcą listę wzorów


title: Dlaczego nie ma refleksji na temat SCJP / OCJP?

text: Przeczytałem przewodnik Kathy Sierra SCJP i przeczytam go jeszcze raz dokładniej, aby poprawić się jako programista Java i móc przystąpić do certyfikacji Java 6 lub czekać na egzamin Java 7 (jestem już zatrudniony jako programista Java, więc Nie spieszę się do egzaminu.) Teraz zastanawiam się, dlaczego na egzaminie nie ma refleksji? Wydaje się, że książka obejmuje wszystko, co powinno być na egzaminie, a refleksja AFAIK jest co najmniej tak samo ważna jak wątki, jeśli nie częściej używane w praktyce, ponieważ wiele frameworków używa refleksji. Czy wiesz, dlaczego refleksja nie jest częścią SCJP? Czy zgadzasz się, że przynajmniej ważne jest, aby odbić się jako wątki? Dzięki za każdą odpowiedź


title: Czy istnieją języki szablonów wprowadzania?

text: Kiedy muszę stworzyć jakąś tekstową reprezentację danych, mogę użyć języka szablonów, aby mój kod nie musiał martwić się o strukturę pliku wyjściowego - czasami mogę nawet napisać kod, który jest niezależny od tego, czy wyjście jest XML, LaTeX lub dowolny inny zwykły tekst. Prosty przykład: Szablon (w osobnym pliku): <someXmlTag> $variableName </someXmlTag> Kod: Template(temstring).substitute(variableName="value") Wynik (zapisany do pliku wyjściowego): <someXmlTag> value </someXmlTag > Chcę zrobić to samo, ale w przeciwnym kierunku. Mam XML lub zwykły tekst lub jakiekolwiek pliki do wprowadzenia. Chcę opisać strukturę wejściową w osobnym pliku, który wygląda jak dane wejściowe, ale zawiera te deklaracje zmiennych, i chcę obsłużyć go za pomocą kodu, który jest niezależny od struktury. **Czy zostało to zrobione wcześniej? Jakie podejście zostało zastosowane i jak to zadziałało?** (Zazwyczaj obsługujemy dane wejściowe XML za pomocą biblioteki parsera XML do opisywania struktury wejściowej w kodzie programu, obsługujemy wprowadzanie zwykłego tekstu poprzez pisanie wyrażeń regularnych w kodzie i nie obsługujemy danych wejściowych LaTeX ponieważ LaTeX nie może być tak naprawdę analizowany.)


title: Jakie są precedensy określające, jak istotny musi być fragment, aby podlegał prawu autorskiemu?

text: Czasami martwię się, że kiedy pożyczam fragmenty kodu ze stron internetowych itp. istnieje przynajmniej teoretyczna możliwość, że będzie to naruszenie praw autorskich. Jednak małe fragmenty kodu służące do wykonywania typowych zadań mogą być zbyt mało oryginalne dla prawa autorskiego i w praktyce tego rodzaju udostępnianie zdarza się cały czas. Jakie są niektóre **zasady praktyczne** , najlepiej poparte precedensem prawnym, dotyczące tego, jak istotny i oryginalny musi być fragment kodu, aby podlegał prawu autorskiemu? PS **Wiem**, że nie ma na to sztywnych i szybkich reguł i że ostateczna odpowiedź na konkretną sprawę wymaga prawnika. Ponieważ jednak szukam tutaj tylko praktycznych zasad, odpowiedzi na ten efekt będą przegłosowane.


title: Pytanie badawcze dotyczące oprogramowania ETL

text: Tam, gdzie pracuję, używamy własnego rozwiązania ETL, które jest rodzime i działa od 5-10 lat. Nadal jestem nowy w mojej pracy związanej z analizą danych, ale zastanawiałem się nad dostępnymi narzędziami ETL. To dla mnie nowy obszar. Moja sytuacja i praca to w zasadzie * kopanie w zestawie baz danych (DB2, SQL2005, Citrix, Ancient Cobol Database z nakładką SQL na wierzchu, MySQL itp.). * Zbierz żądane informacje. * połącz różne zestawy danych w jeden zestaw. * wyjście do wybranego pliku (CSV, Tab Separated, Pipe Separated, XLS itp.). * FTP do klienta. Domyślam się, jakie jest moje prawdziwe pytanie, biorąc pod uwagę moją pracę, jakie są dobre pakiety ETL, na które mogę spojrzeć i porównać z moimi narzędziami wewnętrznymi? To więcej, aby zbadać inne opcje. Ostatecznie zasugerowałbym albo nowe rozwiązanie, albo uzyskałem opcje/pomysły na ulepszenie naszej obecnej aplikacji.


Czy powinieneś poświęcić czytelność kodu z wydajnością kodu? np. 3 wiersze kodu w 1 wierszu. Przeczytałem w _Code Craft_ Pete'a Goodliffe'a, że czytelność jest kluczowa. Twoje myśli?


title: Inspekcja zmian w bazie danych — część lub wydzielona z warstwy ORM/aplikacji?

text: Wraz z moimi kolegami programistami znajdujemy się na rozdrożu, jeśli chodzi o kontynuację audytu zmian w bazie danych. Większość naszych aplikacji rejestruje zmiany za pomocą wyzwalaczy `INSERT`, `UPDATE` i `DELETE`. Kilka z naszych nowszych aplikacji audytuje w warstwie ORM; w szczególności przy użyciu Hibernate Envers. Chociaż inspekcja warstw ORM zapewnia znacznie czystszy interfejs i jest znacznie łatwiejsza w utrzymaniu, nie przechwytuje żadnych ręcznych zmian w bazie danych. Audyt warstwy ORM oznacza również, że nasze biblioteki będą obecnie wymagały zależności od naszej implementacji ORM, chyba że, szczególnie w naszym przypadku, na przykład JPA planuje udostępnić coś w najbliższej przyszłości. Czy istnieje wspólny paradygmat, który się tym zajmuje?


title: Co to jest REST (w prostym języku angielskim)

text: Ostatnio zainteresowałem się zapoznaniem z REST. Próbowałem przeczytać wpis wiki na temat REST, ale to nie pomogło. Byłbym bardzo wdzięczny, gdyby ktoś potrafił wyjaśnić prostym angielskim (czyli bez **niepotrzebnego** technicznego żargonu) 1. Czym jest REST 2. Jaką pozycję zajmuje w ekosystemie architektury internetowej 3. Jak mocno (lub luźno) jest powiązany z protokołem. 4. Jakie są alternatywy dla REST i jak REST się z nimi porównuje. Rozumiem, że odpowiedź na to pytanie w jednym lub dwóch akapitach może nie być możliwa, w takim przypadku odpowiednie linki będą bardzo mile widziane.


title: Jak można napisać pierwszy kompilator C++ w C++?

text: Stroustrup twierdzi, że Cfront, pierwszy kompilator C++, został napisany w C++ (Strustrup FAQ). Jak to jednak możliwe, że pierwszy kompilator C++ zostanie napisany w C++? Kod tworzący kompilator również musi być skompilowany, a zatem pierwszy kompilator C++ nie mógł zostać napisany w C++, prawda?


title: Jak można napisać CoffeeScript w CoffeeScript?

text: Jak to możliwe, że napisany język programowania taki jak CoffeeScript sam w sobie jest taki jak CoffeeScript? Po pierwsze, nie istnieje CoffeeScript, który czyta skrypty CoffeeScript i je interpretuje?


title: C jest napisane w C, jak to możliwe?

text: > **Possible Duplicate:** > Jak można napisać pierwszy kompilator C++ w C++? Wiem, że moje pytanie dotyczy podziemnej jaskini galaktycznej, w której rodzą się języki i wymaga trochę matematyki lambda i lat świetlnych nauki w Google. Ale jaka wiedza jest niezbędna do stworzenia języka?


title: Jak powinna wyglądać moja „duża próbka kodu”?

text: Jeśli pracodawca prosi o dużą próbkę kodu, jedną dla całego projektu, jakie cechy powinien mieć projekt, aby pokazać umiejętności architektoniczne i zdolność do zarządzania dużą bazą kodu? Na przykład, czy powinienem pochwalić się zarządzaniem modułami/zależnościami? pisanie skryptów testowych/kompilacyjnych? wzorce projektowe? itp.


title: Jakie konsekwencje licencyjne (jeśli w ogóle) są związane z przenoszeniem kodu z jednego języka na inny?

text: Rozważam podjęcie starej aplikacji sieci web PHP4 i ponowne jej pisanie przy użyciu ASP.Net MVC4 w C#. Stara aplikacja była licencjonowana na licencji GPL2. Nie jestem pewien, jak to wpłynie na moją nową aplikację, jeśli w ogóle. Oczywiście nie mogę bezpośrednio skopiować żadnego kodu ze starej aplikacji PHP do mojej aplikacji .Net, ponieważ te dwa języki są całkowicie różne. Podobnie stara aplikacja nie miała nawet charakteru OO, ani nie była zgodna z żadnym wzorcem projektowym (np. MVC). Zasadniczo moja nowa aplikacja będzie wykorzystywać tylko „pomysły i funkcje” oryginalnej aplikacji. Nawet schemat bazy danych będzie się znacząco różnić. Czy nadal będę musiał wykupić GPL moją nową aplikację, czy jest to uważane za nowe dzieło, w którym sam wybieram licencję?


title: Przenoszenie biblioteki LGPLv3 na inny język w ramach licencji Apache v2

text: Czy przeniesienie biblioteki napisanej w C na LGPLv3 na (czystą) licencję na Apache v2 jest legalne/etyczne? Należy pamiętać, że port będzie w 100% zgodny z pełnym przypisaniem do oryginalnego autora i będzie to całkowite przepisanie w innym języku i tak dalej.


title: Różnica między wzorem a zasadą

text: Jaka jest różnica między wzorcami projektowymi zorientowanymi obiektowo a zasadami? Czy to różne rzeczy? O ile zrozumiałem, obaj starają się osiągnąć jakiś wspólny cel (np. elastyczność). Czy mogę więc powiedzieć, że wzór jest zasadą i odwrotnie? Zasada projektowa = SOLID (tj. zasada odwrócenia zależności) Wzorzec projektowy = Gof (tj. wzorzec fabryki abstrakcyjnej)


title: Czy od programisty po stronie klienta zwykle oczekuje się, że będzie również zajmował się projektowaniem, czy też zna się na projektowaniu i CSS?

text: Jeśli staram się o pracę programisty po stronie klienta, czy zwykle oczekuje się ode mnie znajomości projektowania? Takich jak CSS? Posiadam wiedzę na temat podstaw JavaScript, JQuery, Ajax i HTML5 oraz HTML DOM. Czy to wystarczy, czy też powinienem być w stanie ładnie stylizować w CSS? Mam podstawową wiedzę na temat CSS, ale na pewno nie umiem niczego stylizować. I naprawdę nie lubię zadań związanych z CSS i stylizacją


title: XML vs SQL dla małych projektów?

text: Pracuję nad małym projektem, który będzie miał tylko jednego użytkownika na raz, ponieważ jest to aplikacja lokalna (opracowana w WPF i C#). Do przechowywania danych myślałem o użyciu pliku XML, ale zastanawiam się, czy byłoby to najlepsze podejście. Do czego służą dane: * Harmonogramy * Biblioteka plików w folderach (z nazwą wykonawcy, tytułem, lokalizacją na dysku twardym) * Ewentualnie statystyki oparte na danych harmonogramu * ... Informacje dotyczące biblioteki byłyby w porządku w XML, jak sobie wyobrażam, ale o cała reszta nie jestem taka pewna. Również LINQ to SQL wydaje się być o wiele bardziej opłacalny pod względem szybkości rozwoju niż LINQ to XML. Czy to prawda, czy się mylę? Nie byłem pewien, czy powinienem opublikować to na SO, czy tutaj, ale tutaj wydawało mi się to bardziej odpowiednie! Z góry dziękuję


title: Jak stworzyć różne ścieżki dla użytkowników przechodzących przez strony w mojej witrynie?

text: Mam witrynę internetową, na której użytkownicy są kierowani do przechodzenia przez sekwencję stron w celu wykonania sekwencji zadań roboczych (przepisywanie akapitu, odpowiedzi na ankietę, interakcję z innym użytkownikiem itp.). W skrócie nazwijmy te zadania A, B, C itd. Używam Django, a każde zadanie jest aktualnie zaimplementowane jako funkcja (lub metoda) widoku, np. `def A(żądanie)`. Obecnie każda funkcja widoku ma zakodowany kolejny krok w przekierowaniu HTTP, np. `HttpResponseRedirect(reverse(B))`. Moim wyzwaniem jest to, że wkrótce będę musiał tworzyć różne permutacje sekwencji zadań. Czasami będę chciał, aby użytkownicy zrobili A, B, C; dla pozostałych B, C, D; dla innych A, B, D, F. Jak mogę to zaprojektować, aby móc elegancko i zwięźle zdefiniować te permutacje w moim kodzie? Intuicyjnie czuję, że muszę uogólnić wywołania przekierowań HTTP za pomocą zmiennej, takiej jak: `HttpResponseRedirect(reverse(next_view_function))`, ale mam trudności z ustaleniem, gdzie należy zdefiniować `next_view_function` i jak zdefiniować sekwencję (np. A, B, D) powinny być utrwalane we wszystkich żądaniach. Czy ktoś może poprowadzić mnie właściwą ścieżką za pomocą sugestii lub pomysłu? Chętnie udzielę więcej szczegółów. **Edytuj** w odpowiedzi na pytania Barta: * Kolejność zadań jest z góry ustalona. Po jej zdefiniowaniu wysyłamy użytkownikom adres URL, który przenosi ich na pierwszą stronę. Powinny być następnie kierowane przez zadania. Jedna grupa użytkowników może otrzymać adres URL, który prowadzi ich przez kroki A, B, C, podczas gdy inna grupa użytkowników otrzymuje adres URL, który prowadzi ich przez kroki A, B, D. Z góry decydujemy, którzy użytkownicy powinni otrzymać jaki adres URL. * Ponieważ kolejność jest z góry ustalona, kolejny krok nie zależy od wyników bieżącego zadania. Jedynym wymaganiem jest, aby wykonali zadanie (oczywiście weryfikujemy dane POST, które przesyłają jako warunek wstępny przekierowania HTTP). **Edytuj 2** , moje dotychczasowe rozwiązanie: Centralną koncepcją w mojej architekturze kodu jest „Leczenie” (zdefiniowane w moim models.py). Obróbka to specyfikacja doświadczeń użytkownika podczas korzystania z mojej witryny, np. prezentowany mu interfejs użytkownika. Dzielę moich użytkowników na grupy i przypisuję każdą grupę do innego leczenia, wysyłając im e-mailem adres URL zawierający PK ich leczenia. (Istnieją również różne podklasy Zabiegów, ponieważ niektóre Zabiegi różnią się całkowicie od innych. SoccerTreatment i HockeyTreatment mają niewiele wspólnego, więc sensowne jest ich podklasy.) Tak więc definicja klasy dla Zabiegu wydaje się rozsądnym miejscem do przechowywania sekwencja widoków jako lista Pythona, jak następuje: # in soccer/models.py class SoccerTreatment(BaseTreatment): world_cup = models.BooleanField() .... def views(self, request): seq = [soccer.views .ViewClassA] if self.world_cup: seq.append(soccer.views.ViewClassWorldCup) return seq # in shared/models.py class BaseTreatment(models.Model): def next_view(self, request): seq = self.views() # Metoda views() zaimplementowana przez klasy potomne if request.session.get('current_view_index'): request.session['current_view_index'] += 1 el se: request.session['current_view_index'] = 0 # [obsługa przypadków granicznych, fragment kodu...] # ... return seq[request.session['current_view_index']] # ... # w views.py, na końcu funkcji widoku # ... HttpResponseRedirect(reverse(user.treatment.next_view())) Jednak powyższy projekt nie zadziałałby, ponieważ od tego czasu models.py musiałyby zaimportować views.py, tworząc cykliczny import. Tak więc elementy listy musiałyby być ciągami (albo adresami URL, albo nazwą klasy widoku jako ciągiem), co może być kruche, ponieważ zmiana nazwy moich klas lub adresów URL nie spowoduje automatycznej zmiany nazw tych ciągów. Może jestem zbyt wybredny, ale zastanawiam się, czy istnieje lepszy projekt.


title: Zachowanie klasy łańcucha

text: Mam klasę Bird. Ptak może się uczyć, a ptak może latać (metody). Ptak może latać tylko wtedy, gdy się nauczy. Biorąc pod uwagę, że obie metody są publiczne. Jak możesz to wyjaśnić innemu programiście. Zwykle powinni przyjrzeć się publicznym nazwom metod i zrozumieć, co robią. Ale jak może zrozumieć bez czytania komentarzy lub zrozumienia zaszyfrowanego kodu, że metoda2 może być wywołana dopiero po metodzie1?


title: Masz 25 lat i rozważasz zmianę kariery...możliwą? praktyczny?

text: Jestem nowy na tej stronie, a także nowy w programowaniu. Spędziłem trochę czasu przeglądając książkę wprowadzającą do cs, która używa Pythona jako wybranego języka. Ćwiczenia są dla mnie interesujące i wciągające i ogólnie mam do tej pory korzystne doświadczenie w programowaniu. Przeszedłem przez niektóre podstawy z pythonem, takie jak pisanie prostych programów, podstawy GUI, manipulowanie ciągami, listami, definiowanie funkcji itp. I zawsze kochałem technologię. Chociaż nigdy nie zajmowałem się jeszcze prawdziwym hardcorowym programowaniem, od najmłodszych lat skłaniałem się do tworzenia stron internetowych, ale nigdy tak naprawdę nie rozwinąłem swoich umiejętności. Teraz chodzi o to, że mam 25 lat, mam licencjat z ochrony środowiska i dwa tytuły magisterskie odpowiednio z urbanistyki i architektury krajobrazu. Wiem, że w tym momencie kariera programisty byłaby niezła. Obecnie pracuję jako stażysta systemów informacji geograficznej. Wziąłem kilka zajęć z GIS i mam duże doświadczenie w tworzeniu map, robieniu analiz przestrzennych itp. Więc myślę, że może mogę nauczyć się solidnych umiejętności programowania i zastosować te umiejętności w dziedzinie GIS. Z tego, co widziałem, języki .net są normą na tej arenie. Czy mógłbyś udzielić mi wskazówek, na jakich językach powinienem się skoncentrować lub jakie kursy powinienem wziąć w tym momencie? A co z tworzeniem aplikacji do tworzenia map internetowych? Myślałem też o zdobyciu certyfikatu z programowania na uniwersyteckim programie rozszerzającym. Czy uważasz, że byłoby warto? Co więcej, czy uważasz, że potencjalni pracodawcy byliby zainteresowani zatrudnieniem kogoś takiego jak ja (kiedy już całkiem dobrze poznam kilka języków) jako stażystę lub stanowisko na poziomie podstawowym? Będę mieszkał w rejonie zatoki, więc uważam, że powinny być przyzwoite możliwości, mimo że nie mam b.s. w uw.


title: Żargon opisujący niepotrzebne uruchamianie kodu?

text: Niektóre kody działają, ale w wielu przypadkach uruchamiają niepotrzebnie dużą część kodu, chociaż czasami ten dodatkowy kod jest nadal wymagany. Lepsze przetwarzanie wstępne, proste stopery i warunkowe sprawdzanie pozwoliłyby zaoszczędzić ogromną ilość czasu pracy. Jaki jest techniczny żargon na opisanie niepotrzebnego uruchamiania, w którym programista mógłby po prostu postawić warunek lub lepiej wykonać wstępne przetwarzanie?


title: Czy lepiej samemu znaleźć problemy, czy pozwolić komputerowi to rozgryźć?

text: Mam zamiar rozpocząć proces migracji programu z jednego komponentu do drugiego. Większość podstawowych funkcji będzie taka sama, ale będę musiał zmienić wywołania bazy danych itp. Jestem pewien, że gdzieś będzie kilka dziwactw. Oczywiście będzie wiele błędów, z których część całkowicie przeoczę. Czy lepiej byłoby dokładnie przejrzeć kod, sprawdzając, czy nie ma błędów linia po linii, czy po prostu napisać kod i zobaczyć, jakie błędy się pojawiają?


title: Jak pisać scenariusze historyjek użytkownika jako programista?

text: Piszę system, w którym zarówno właściciel systemu, jak i ja jesteśmy programistami i obecnie jesteśmy jedynym źródłem „żądań” lub wymagań dotyczących systemu, które chciałbym uchwycić w historyjkach użytkowników powiązanych z funkcjami{1}. Moim pilnym priorytetem jest teraz przechwycenie łatwego do opanowania zaległości. Jak powinienem zabrać się za uchwycenie poziomu specyfikacji technicznej, do której przywykłem pracować w historyjkach użytkowników, które nie powinny być zbyt techniczne. {1} Oceniam zwinną usługę zarządzania projektami TargetProcess, a każda historyjka użytkownika musi być powiązana z funkcją nadrzędną. System wydaje się dobrze pasować, więc to małe ograniczenie jest czymś, z czym wolę pracować niż obejść.


title: Co sprawia, że projekt jest duży?

text: Z ciekawości jaka jest różnica między małym, średnim i dużym projektem? Czy mierzy się to wierszami kodu, złożonością, czy co? Buduję system handlu wymiennego i do tej pory mam około 1000 linijek kodu do logowania/rejestracji. Mimo że jest wiele LOC, nie uważałbym tego za duży projekt, ponieważ nie jest tak skomplikowany, chociaż jest to mój pierwszy projekt, więc nie jestem pewien. Jak to się mierzy?


title: Czy spędzasz godziny pracy na nauce?

text: Czy spędzasz swoje godziny pracy na uczeniu się nowych rzeczy, czytaniu blogów technicznych, książek o programowaniu itp.? Jaka jest twoja opinia na ten temat? Czy pracodawca może mieć korzyści pozwalające programistom spędzać około 1-1,5 godziny dziennie na nauce? Czy zostanie spłacony w przyszłości (z lepszą wydajnością itp.)?


title: Najbardziej logicznie spójny sposób tworzenia metod postaci a wpływa na b?

text: Mam typowy scenariusz, w którym mam obiekt (a), który logicznie wpływa na inny obiekt (b), na przykład a robi notatkę na b lub oznacza b jako wyłączony (zwykle a jest obiektem użytkownika systemu, a b jest pewnym rodzaj obiektu biznesowego, takiego jak klient lub spotkanie). W przeszłości metoda była na zaatakowanym obiekcie, takim jak: customer.Disable(user); // użytkownik oznacza klienta jako wyłączonego ... ale nie czyta dobrze (wyświetla się od tyłu). Przeciwnie: user.Disable(customer); ... czyta się lepiej, ale jest w tym coś, czego nie mogę dotknąć, co po prostu wydaje się nie w porządku. Jedyną inną opcją jest posiadanie pośrednika statycznego: ThirdPartyClass.DisableCustomer(klient, użytkownik); ... ale obiekty domeny stają się bardziej podobne do DTO i wolę podejście oparte na modelu domeny, ponieważ ma to więcej sensu. Więc pytanie brzmi: co ma największy sens? Czy istnieje opcja, której nie brałem pod uwagę? Kto właściwie jest właścicielem takiej operacji? **Edytuj** W przypadku drugiej opcji możliwe do działania obiekty w systemie (zwykle użytkownicy) stają się ogromne, ponieważ użytkownicy systemu to ci, którzy właściwie wszystko robią i wpływają na wszystko.


title: Nisze językowe i biblioteki niszowe

text: "Wszyscy wiedzą" ... * ... że c jest szeroko stosowane w programach niskiego poziomu w dużej mierze, ponieważ interfejsy API systemu operacyjnego/urządzenia są zwykle w c. * ... Java jest szeroko stosowana w aplikacjach korporacyjnych w dużej mierze ze względu na biblioteki korporacyjne i obsługę ide. * ... ten ruby jest szeroko stosowany w aplikacjach internetowych, w dużej mierze dzięki szynom i jego bibliotecznemu ekosystemowi. Ale przejdźmy do szczegółów, jakie są konkretne nisze i podnisze. Zwłaszcza w odniesieniu do bibliotek. Gdzie można osadzić Lua do skryptów aplikacji w porównaniu z Pythonem. Gdzie byś użył Java vs C#. Jakimi językami używają różni naukowcy? Również w jakich językach są biblioteki dla tych podnisz? Rzeczy takie jak bioperl/scipy/Incanter. Proszę, nie bójcie się o to, jak miły jest każdy język lub środowisko. To właśnie tam używali. Również żadnych skarg dotyczących marketingu / PHB. **(migracja ręczna) zadałem to pytanie ponownie po jego zamknięciu na stackoverflow.com**


title: W jaki sposób napisanie części transakcyjnej w Javie wpłynie na bezpieczeństwo aplikacji, gdy wszystkie inne części zostaną napisane w PHP?

text: Znajomy podczas pracy nad aplikacją PHP poprosił mnie o napisanie jednej części aplikacji w Javie. Część, która dotyczyła transakcji. Powiedział, że lepiej będzie napisać tę część w Javie. Mówił o tym, jakie to będzie bezpieczne! Choć byłem wtedy zbyt zajęty, żeby mu pomóc, chcę poznać istotę tego pomysłu. Dlaczego próbował używać Javy, kiedy pisał większość w PHP? Czy to naprawdę zwiększy bezpieczeństwo? A pisanie transakcji w Javie dotyczy tylko bezpieczeństwa? Rzecz wydaje się bardzo interesująca, ale naprawdę nie mam pojęcia, co to jest! Proszę o wgląd w temat. Uwaga: Kiedy mówię o transakcji, dotyczy ona wszystkiego. Od dostępu do konta po przelewanie pieniędzy.


title: Czy istnieje luka w GPL, która pozwala na łączenie prawnie zastrzeżonego oprogramowania z bibliotekami GPL?

text: Przyjrzyjmy się hipotetycznemu scenariuszowi: Firma X pisze zastrzeżony program (A), który dynamicznie łączy się z zastrzeżoną biblioteką (B). Firma Y chce użyć biblioteki zastępczej (C) na licencji GPL, dlatego pisze bibliotekę opakowującą (D), która dynamicznie łączy się z A i C i tłumaczy wywołania API używane przez A na wywołania API używane przez C. D jest przeznaczone do użytku z C i używa wywołań API C, jest dziełem pochodnym C i dlatego musi być rozpowszechniany na warunkach GPL*. W rezultacie połączone dzieło A i D musi być również rozpowszechniane na warunkach GPL, co jest niemożliwe, biorąc pod uwagę, że firma Y nie posiada kodu źródłowego dla A. To powiedziawszy, o ile firma Y sama dystrybuuje D , nie ma problemu. _Jednak niezależnie od działań firmy Y, firma X nie narusza GPL, rozpowszechniając A, nawet bez B. Samo istnienie D nie oznacza, że A jest nagle dziełem pochodnym C (za pośrednictwem D), które musi być objęte licencją na GPL również._ Teraz jest to luka: _nie ma nic, co mogłoby powstrzymać firmę X przed napisaniem własnej wersji D, rozprowadzaniem jej oddzielnie od A i informowaniem użytkowników końcowych, aby używali D zamiast B podczas uruchamiania A._ Wygląda na to, że że firma jest w stanie zaprojektować zastrzeżony program do korzystania z biblioteki GPL bez naruszania GPL, o ile moduł opakowujący jest używany do odizolowania zastrzeżonego programu od biblioteki GPL i ten moduł jest rozprowadzany oddzielnie. Czy mam rację w swoim rozumowaniu? Czy to prawdziwa luka w GPL? *D jest również dziełem pochodnym A, ale na potrzeby tego scenariusza firma X wyraźnie autoryzowała utworzenie D i zezwoliła na jego licencjonowanie na licencji GPL.


title: Jaki rodzaj kodu lub programu mogę opublikować jako open source na Git lub Bit Bucket

text: Wiele razy widziałem, że jeśli chcesz dobrze wyglądać w CV, powinieneś mieć jakiś projekt zakodowany jako open source na wiadrze bitowym i Git. Chcę to zrobić, chociaż może być mały, ale przynajmniej chcę rozpocząć kroki, które mogą uczynić mnie dobrym programistą i dobrze wygląda po wznowieniu. Znam te języki, takie jak `php bash python django jquery joomla` Czy ktoś może podać mi przykład, jaki typ projektów powinienem tam przesłać, o czym mogę wspomnieć w CV. zazwyczaj tworzę strony internetowe, jak mogę umieścić tego typu kody. Czy można tam również umieścić skrypt powłoki do tworzenia kopii zapasowych bazy danych?


title: Monitorowanie procesów w środowisku Linux?

text: Próbuję napisać wielowątkową/procesową aplikację i cały czas muszę wiedzieć, jak monitorować proces z innego procesu. Oto, co mam, mam 2 procesy, każdy z wieloma wątkami, które obsługują część sieciową, a następnie kolejne 2 procesy również z wieloma wątkami, które współdziałają z bazą danych i procesami sieciowymi, co muszę zrobić, to jeśli dla przykład jeden z procesów sieciowych przechodzi w dół, proces bazy danych zaczyna wysyłać do działającego procesu sieciowego, dopóki drugi nie zostanie ponownie uruchomiony. Używam fifo między DB a procesem sieciowym. Cały czas myślałem o wysyłaniu wiadomości z wiadomością przechodzącą, ale nie jestem pewien, czy to dobry pomysł, czy muszę użyć innego IPC do tego problemu, czy prawdopodobnie nie jest to dobry i muszę użyć zupełnie czegoś innego?


title: Czy ORM POCO zastępują jednostki domeny?

text: To jest trochę podobne do tego pytania, ale szersze. Ogólnie rzecz biorąc, czy w przypadku ORM, takich jak EF 4.1 obsługujących POCO, ma teraz sens, aby jednostki domeny były **byłymi** obiektami, które są utrwalane w bazie danych? W przypadku starszych ORM, takich jak EF 4 lub Linq-to-SQL, „obiekty bazy danych” były generowane automatycznie i ściśle powiązane z bazą danych, a więc w przypadku nietrywialnych aplikacji były mapowane na bardziej niezawodne, inteligentne jednostki domeny przed do pracy. Czy pomysł z nowszymi ORM-ami polega na zbudowaniu solidnych jednostek domeny, a następnie posiadaniu warstwy danych, która po prostu zapewnia mapowanie między wspomnianymi jednostkami domeny a systemem DBMS? Pisząc, że mam wrażenie, że to **zawsze** było celem, ale nie jest to łatwe (łatwe) możliwe dzięki dostępnym narzędziom, przynajmniej nie w świecie .NET.


title: stałe/wyliczenia w API

text: Jakie są sposoby postępowania ze stałymi i wyliczeniami podczas tworzenia klienta API? Piszę klienta w pythonie dla naszego API i trafiłem w spór. Używamy wielu mapowań do liczb (aby zaoszczędzić miejsce) i zastanawiałem się, jaka jest najlepsza technika. Mogę je na stałe zakodować w kliencie, ale jeśli zostanie dodane nowe wyliczenie/stała, konsument będzie musiał zaktualizować swoją wersję klienta. Myślałem też o pobieraniu map/enumów, gdy klient jest po raz pierwszy inicjowany i buforowany, dopóki nie pojawi się aktualizacja. Czy są to typowe podejścia, czy istnieje bardziej skuteczny sposób na zrobienie tego? Edycja: To jest REST API, ale tworzę klienta Pythona (tak przypuszczam, że jest specyficzny dla platformy), aby ułatwić pracę. Aby uzyskać trochę więcej szczegółów, kiedy mówię o wyliczeniach, mam na myśli po prostu użycie stałej (takiej jak liczba całkowita) do reprezentowania określonego wyboru konsumenta dla określonego atrybutu. Powiedzmy więc, że ktoś korzystający z API zapisuje rodzaj posiadanego systemu gier wideo. 1 = xbox, 2 = playstation, 3 = wii, itd. Czy mam je na stałe zakodować w kliencie Pythona, aby mógł z nich korzystać klient? Czy pobieram je z serwera, gdy klient jest inicjowany, a następnie buforuję je po stronie klienta?


title: Czy istnieje uzasadnienie pozostawiania znaczników konfliktu w kodzie zaewidencjonowanym?

text: Rozważ znaczniki konfliktu. czyli: <<<<<<< branch blah blah to ======= blah blah to >>>>>>> HEAD W konkretnym przypadku, który skłonił mnie do zadania tego pytania, odpowiedzialny członek zespołu właśnie zakończył scalenie z poprzedniego oddziału i w niektórych przypadkach pozostawił je jako komentarze, jako rodzaj dokumentacji dotyczącej tego, co właśnie zostało rozwiązane. Zostawił go w stanie skompilowanym, testy przeszły pomyślnie, więc nie jest tak źle, jak mogłoby się wydawać. Instynktownie jednak sprzeciwiłem się temu, jednak będąc diabłami, które są dla siebie adwokatami, widzę, dlaczego mógł to zrobić: * ponieważ podkreśla to innym deweloperom zespołu, co zmieniło się w wyniku połączenia. * ponieważ ci, którzy są bardziej ekspertami w poszczególnych fragmentach kodu, mogą następnie zająć się problemami zilustrowanymi w komentarzach, aby nie musiał zgadywać. * ponieważ wcześniejsze scalenie jest właściwym problemem i może być trudno uzasadnić czas, aby rozwiązać wszystko dobrze i całkowicie, więc konieczne jest pewne półkompletne powiadomienie FIXME, więc dlaczego nie użyć oryginalnego konfliktu jako komentarza, aby to udokumentować. Mój sprzeciw był instynktowny, ale chciałbym móc go racjonalnie uzasadnić lub mądrzej zobaczyć swoje stanowisko. Czy ktoś może mi podać kilka przykładów lub nawet doświadczeń, w których ludzie mieli zły czas z kimś, kto to robi, i/lub powody, dla których jest to zła praktyka (lub możesz zagrać w adwokata diabła i go wspierać). Moją bezpośrednią obawą było to, że byłoby wyraźnie irytujące, gdybym edytował jeden z plików, których dotyczyło, wyciągnął zmiany, miał prawdziwe konflikty, ale także wciągnął te skomentowane. Wtedy miałbym naprawdę bardzo niechlujny plik. Na szczęście tak się nie stało.


title: Wzorzec MVC z aplikacją webową JSF-Spring-MyBatis

text: Mam webapp Java z tymi frameworkami i chcę wiedzieć, czy moja implementacja spełnia wzorzec MVC: **Controller Layer (V)** Używam JSF @ManagedBean public class Controller{ @ManagedProperty("#{business} ") prywatna działalność gospodarcza; public void wstaw (){biznes.wstaw(); } } **Warstwa biznesowa (C)** Używam interfejsu publicznego Spring Business{ public void insert(); } @Service("business") public class BusinessImpl implementuje Business{ @Autowired private DaoMapper mapper; @Override @Transactional public void insert(){ mapper.insert(); } } **Warstwa danych (M)** Używam MyBatis (Ten interfejs java jest powiązany z plikiem XML MyBatis) interfejs publiczny DaoMapper{ public void insert(); } Moje warstwy zaimplementowały wzorzec MVC? Jestem zdezorientowany :S...


title: Dlaczego na świecie sterta musi się upewnić, że alokuje się w wyrównaniach 8-bajtowych?

text: 4 bajty = słowo; 8-bajtów = 2x słowo W takim razie dlaczego stos po prostu nie ma wyrównania do 4 bajtów (ponieważ i tak będzie pobierał słowo na raz, prawda?) Jeśli wybraliśmy wyrównanie 8-bajtowe, dlaczego nie 12? 16?


title: Jaki jest odpowiedni zamiennik bazy danych programu Access 2003 wymaganej do uruchomienia starszego komputera?

text: Wiele lat temu napisałem małą bazę danych Access 2003 dla organizacji non-profit, aby śledzić otrzymane darowizny. Niedawno napisali do mnie, prosząc o nowe funkcje (byłem zszokowany, szczerze mówiąc, że nadal jest w użyciu) i zastanawiam się, czy mógłbym przepisać aplikację z nowszą technologią/frameworkiem. Oto specyfikacja komputera: * Pentium 4 2,8 Ghz * 1 GB RAM * Wbudowana karta graficzna Intel * Windows XP SP3 Co, jeśli w ogóle, byłoby odpowiednim zamiennikiem bazy danych i interfejsu użytkownika? Jestem głównie programistą C#, więc przychodzą mi na myśl Wininforms + SQL Compact 4 (nie wiem, jak WPF zachowywałby się na tak starej maszynie). Być może istnieją inne możliwości w Python/Ruby/etc? Aktualizacja: Doceniam i zgadzam się, że przepisywanie rzadko jest właściwą rzeczą, ale miałem nadzieję dowiedzieć się poprzez to pytanie, że biorąc pod uwagę specyfikacje komputera i system operacyjny, jakie mam możliwości napisania aplikacji, która mogłaby * wykonać CRUD dla darowizn * generowanie raportów podsumowujących (łącznie według miesiąca/roku/itd.) Lub, ujmując to inaczej, czy Access nadal jest odpowiednim narzędziem do tego zadania?


title: Skąd mam wiedzieć, czy jestem przygotowany na stanowisko, na którym się znajduję?

text: W większości przypadków ktoś ma szansę na większą odpowiedzialność i rozwój w swojej karierze, nie wiedząc na pewno, czy poradzi sobie z tym, dopóki faktycznie nie wykona pracy. Kiedy wydaje się, że coś się nie układa, skąd można wiedzieć, czy jest to spowodowane tym, że nie jest w stanie wykonać pracy z powodu niekompetencji, czy z powodu braku doświadczenia? Pamiętaj, że w firmie nie ma osoby starszej niż Ty w danym obszarze specjalizacji. Jeśli otrzymałeś pracę, do której nie jesteś gotowy/zdolny do wykonywania odpowiedniej pracy, jaki byłby lepszy ruch w karierze: 1. Mocno naciskaj na podnoszenie umiejętności, aby móc wykonywać tę pracę. potencjalne zagrożenie wypaleniem, a następnie jak poradziłbyś sobie z czasem między byciem niekompetentnym a staniem się kompetentnym. 2. Powiedz kierownictwu, że nie jesteś gotowy do pracy i musi zatrudnić kogoś na wyższym stanowisku. Mogą was wszystkich zastąpić razem. 3. Poszukaj innej pracy, w której Twoje doświadczenie jest odpowiednio dopasowane do Twoich obowiązków 4. Żadne z powyższych


title: Jakie jest najlepsze wyjaśnienie tego, czym są Story Points?

text: Zaczynamy używać Story Points tutaj do naszego rozwoju Agile, ale trudno mi to wyjaśnić, a także nie mogę znaleźć żadnej ostatecznej odpowiedzi na to, czym one są. Najlepszą rzeczą, jaką mogę zrobić, to wskazać inne strony (takie jak http://blog.mountaingoatsoftware.com/tag/story-points) i podać niejasne uogólnienie tego, czym one są. Szukam dobrego wyjaśnienia z kilkoma przykładami użycia, które byłyby pomocne dla innych. Czy są jakieś dobre źródła do wyjaśnienia punktów fabularnych?


title: Przykład Xerox SOLID w PHP

text: Dobry przykład łamania zasad SOLID można znaleźć na Wikipedii. > ISP został po raz pierwszy użyty i sformułowany przez Roberta C. Martina podczas konsultacji > dla firmy Xerox. Firma Xerox stworzyła nowy system drukarki, który może wykonywać > różnorodne zadania, takie jak zszywanie kompletu wydrukowanych dokumentów i faksowanie. Oprogramowanie dla tego systemu zostało stworzone od podstaw i pomyślnie wykonało swoje zadania. Wraz z rozwojem oprogramowania dokonywanie modyfikacji stawało się > i trudniejsze, tak że nawet najmniejsza zmiana zajęła > godzinę cyklu ponownego wdrożenia. To uniemożliwiało > kontynuację rozwoju. Problem projektowy polegał na tym, że jedna główna klasa Job była > używana przez prawie wszystkie zadania. Za każdym razem, gdy trzeba było wykonać zadanie drukowania lub zszywania, wywołano jakąś metodę w klasie Job. Doprowadziło to do > powstania ogromnej lub „grubej” klasy z mnóstwem metod specyficznych dla różnych > różnych klientów. Dzięki takiemu projektowi, zadanie zszywania znałoby > wszystkie metody zadania drukowania, nawet jeśli nie było z nich żadnego pożytku. Rozwiązaniem > zaproponowanym przez Martina jest to, co dzisiaj nazywa się Zasada Segregacji Interfejsów > Zasada. W przypadku oprogramowania Xerox dodano warstwę interfejsów > między klasą Job a wszystkimi jej klientami, stosując zasadę zależności > inwersji. Zamiast jednej dużej klasy Job stworzono interfejs Staple Job > lub Print Job, który byłby używany odpowiednio przez klasy > Staple lub Print, wywołując metody klasy Job. > Dlatego dla każdego zadania stworzono jeden interfejs, z których wszystkie zostały > zaimplementowane przez klasę Job. > > http://en.wikipedia.org/wiki/Interface_segregation_principle Próbowałem znaleźć dobre rozwiązanie PHP do tego celu, doszedłem do tego: class Job implementuje StampleJob, PrintJob { } class Print { protected $objPrintJob; funkcja publiczna __construct(PrintJob $objPrintJob) { $this->objPrintJob = $objPrintJob; } } class Staple { protected $objStapleJob; funkcja publiczna __construct(StapleJob $objStapleJob) { $this->objStapleJob = $objStapleJob; } } Rozumiem, w jaki sposób interfejs ograniczy wiedzę, ale nie zmieni to w rzeczywistości dużej klasy Job ani nie usunie naruszenia SRP. Czy możesz wyjaśnić, w jaki sposób to rozwiązanie faktycznie rozwiązuje problem: „Problem projektowy polegał na tym, że jedna główna klasa Job była używana przez prawie wszystkie zadania”?


title: Po co umieszczać instrukcję SQL w zmiennej przed użyciem mysql_query()?

text: Od jakiegoś czasu pracuję z PHP z przerwami i widziałem mnóstwo kodu w obie strony: $sql = "SELECT …"; mysql_query($sql); vs mysql_query("WYBIERZ..."); Czy jest jakiś powód do rozdzielenia tych dwóch rzeczy, poza możliwością przekazania czegoś takiego jak $con?


title: Co to znaczy, że oprogramowanie, biblioteki i języki są asynchroniczne?

text: Co to oznacza w przypadku popularnego oprogramowania, takiego jak Node.js, Celery, Twisted i innych, które chwalą się, że są asynchroniczne? Przeszedłem przez podstawowe tutoriale Node.js i napisałem kilka skryptów Node.js, ale nadal nie czuję się komfortowo w temacie. Proszę zauważyć, że nie miałem formalnego wprowadzenia do tematu. 1. Jak dokładnie działa oprogramowanie asynchroniczne? 2. Jakie są zalety i wady? 3. Co to są wywołania zwrotne? 4. Wreszcie, jak działa synchroniczny serwer WWW w porównaniu z asynchronicznym serwerem WWW?


title: Gdzie UI mieści się w systemie Multi Agent

text: **tl;dr** Jak reprezentować GUI jako agentów w systemie z wieloma agentami. Dowiaduję się więcej o systemach wieloagentowych. Lubię koncepcje takich systemów, ma to sens i brzmi bardzo pożytecznie, gdy chcę stworzyć duży system złożony z mniejszych części dla sieci. Stworzyłem więc podstawową klasę „Agent”, nauczyłem moich agentów negocjować i komunikować się, stworzyłem środowisko, w którym mogą się znajdować i tym podobne. Tak więc, w prostej próbie aplikacji mam: * Kilku Agentów "InfoBroker", którzy obsługują komunikację z usługami serwera, chcą uzyskać informacje o świecie i chcą się nimi dzielić na określonych warunkach (prowadzą aukcje, jeśli to ma znaczenie). * Kilku agentów, którzy koordynują komunikację między moimi usługami po stronie klienta (także agenci "InfoBroker" jak sądzę). * Kilku agentów roboczych, którzy mają prosty cel w swoim środowisku, wykonując obliczenia i wykonując (bardzo podstawowe) rozumowanie w zakresie środków i celów w środowisku. To moja „ręczna praca” w aplikacji. * Kilka innych rzeczy specyficznych dla mojej aplikacji. To wszystko świetnie, ale nie mam pojęcia, gdzie w tym wszystkim mieści się GUI? Muszę pokazać użytkownikowi informacje o moim systemie, GUI nie jest małą częścią (rozważ agenty, które rozmawiają z DOM w aplikacji internetowej). Jak reprezentowałby GUI jako agent w systemie z wieloma agentami? Uwaga: zaimplementowałem to w JavaScript, ale wydaje mi się to bardziej agnostyczne dla języka.


title: Zbieranie słów kluczowych, relacja ManyToOne czy OneToMany?

text: Mam nadzieję, że to właściwe miejsce na tego typu problem. Obiekt z mojej klasy „Film” może mieć kilka „słów kluczowych” (takich jak „klub walki”, „brad”, „fincher”) i należeć do różnych „kategorii” (takich jak „Dramat”, „Najlepsze filmy w historii”) Zaimplementowałem je jako ManyToMany: @OneToMany(targetEntity = Keyword.class,fetch=FetchType.EAGER) private Set<Keyword> words; @OneToMany(targetEntity = MovieCategory.class, fetch=FetchType.EAGER) private Set<MovieCategory> movieCategories; Jakoś nie wydaje mi się, że to nie jest właściwy model relacji, jak byś to zaimplementował? W tej chwili hibernacja nie pozwoli mi pobrać. fetch.lazy jest w porządku. Znalazłem ten link http://www.mkyong.com/hibernate/hibernate-many-to- many-relationship-example-adnotation/, ale nie odpowiedział na moje pytanie.


title: Czy „inżynier pomocniczy” to to samo, co „młodszy inżynier”?

text: Jestem świeżo upieczonym absolwentem college'u i zaczynam swoją pierwszą pracę inżyniera oprogramowania. Otrzymałem ofertę, która mi się podoba, ale tytuł to inżynier inżynier. Jestem przyzwyczajony do młodszych inżynierów. Czy to prawie to samo? Wynagrodzenie wynosi 70 000 $ + opcje na akcje.


title: Jak ważne są naprawdę powiadomienia PHP?

text: Niedawno włączyłem wszystkie możliwe komunikaty o błędach za pomocą `error_reporting(-1);` w moim projekcie PHP. Oczywiście od razu dostałem dużo wiadomości. Na przykład: > **Notice:** Niezdefiniowana zmienna: foo w /.../file.php on line **205** Zacząłem więc aktualizować swój kod, aby pozbyć się wszystkich powiadomień. Przede wszystkim dodając `isset($foo)` i zmieniając `$foo = NULL;` Zastanawiam się więc. Jak ważne są te powiadomienia? Mam na myśli, że jeśli zmienna `$foo` nie jest ustawiona, to powinna być domyślnie false/null/not-set.. więc technicznie kod działa?! Jeśli pozbyłbym się wszystkich powiadomień, to czy przyspiesza to proces, czy go spowalnia (ponieważ dodaję więcej kodu, `isset($foo)`, `$foo = NULL` itd.)? Jak radzicie sobie z tymi powiadomieniami, czy w ogóle zwracacie na nie uwagę? Myślę, że najważniejsze pytanie brzmi: czy kod powinien być napisany tak rygorystycznie, aby nigdy nie generował żadnych powiadomień ani ostrzeżeń?


title: O pustym wierszu kodu

text: Dlaczego moi koledzy nie znoszą, gdy dodaję pustą linię kodu? Czasami dodaję kilka linijek, aby zobaczyć, kiedy jakaś metoda się kończy, a inna zaczyna się łatwiej.


title: Jaka jest standardowa praktyka wyodrębniania klucza podstawowego z automatycznym przyrostem?

text: Mam kilka obiektów, które zostaną utworzone i wpisane do bazy. Nie ma gwarancji, że którekolwiek z ich pól będzie unikatowe, z wyjątkiem automatycznie zwiększającego się klucza podstawowego. Chciałbym móc później uzyskać dostęp do tych obiektów w programie przy użyciu ich klucza podstawowego. Jaki jest najlepszy sposób na usunięcie tego klucza z bazy danych? Przychodzą mi do głowy dwie metody uzyskania klucza podstawowego po dodaniu danych obiektu do bazy danych: 1. Znajdź maksymalny klucz podstawowy, ponieważ był to ten, który został ostatnio dodany. 2. Usuń bieżący obiekt, porównaj dane w bazie danych z danymi w programie, a następnie utwórz nowy obiekt na podstawie wiersza, którego nie ma w programie. Oba wydają się podatne na błędy i hacky i zastanawiam się, czy można to zrobić w bardziej standardowy sposób.


title: Zapisywanie argumentów w konstruktorach

text: Podczas tworzenia konstruktorów z wieloma argumentami można użyć ogólnych argumentów „String[]”, czy też lepiej wypisać argumenty? Czy to naprawdę robi jakąś znaczącą różnicę, gdy kodowanie staje się bardziej skomplikowane? public static void Coś (String[] args) { } lub public static void Coś (String partie, ... int trochę, ... itd.) { }


title: sprzedawać aplikacje działające tylko na serwerze GPL v2

text: Testowałem edycję społecznościową serwerów Pentaho BI i po przeczytaniu ich warunków licencyjnych dowiedziałem się, że edycja społecznościowa jest na licencji GPLv2. Jak być może wiesz, serwer jest przeznaczony do obsługi różnych typów plików i aplikacji (takich jak raporty, kostki olap itp.) Moje pytanie brzmi: czy wolno nam sprzedawać aplikacje działające na serwerze GPLv2? (być może trochę zmodyfikujemy kod źródłowy serwera, ale nie obciążymy nim naszych klientów. W ten sposób zmodyfikowany serwer GPL będzie tylko środowiskiem wykonawczym lub kontenerem na raporty i aplikacje, które zamierzamy sprzedawać) ? sugeruje to, że nasi klienci muszą najpierw zainstalować edycję GPL v2, a następnie kupić od nas raporty, które na niej działają, ale nie ich kod źródłowy. Z góry dziękuję.


title: Tomcat + Spring + CI workflow

text: Zaczynamy nasz pierwszy projekt ze stosem webowym `Spring` i `java`. Ten projekt będzie polegał głównie na przepisaniu dość dużego ERP/CRM z `Zend Framework` na `Java`. Ważnym czynnikiem w moim pytaniu jest to, że pochodzę z terytorium `php`, gdzie rzeczy (pod względem jakości) wyglądają inaczej niż w świecie `java`. **Fatcs** : * będzie 2-3 programistów, * co najmniej jeden z programistów korzysta z systemu Windows, reszta z systemu Linux, * jest jedna zdalna maszyna linuksowa, która powinna obsługiwać instancje testowe i produkcyjne, * po zmaganiach z wadliwy stary kod, chcemy wprowadzić dobre praktyki programistyczne i programistyczne (CI, testy, czysty kod itd.) * klient: wewnętrzne, częste zmiany logiki biznesowej, * scrum, codzienne wdrożenia To, co chcę osiągnąć, to dobry przepływ pracy na jak największej liczbie etapy rozwoju jak to możliwe (kodowanie -> zatwierdzanie -> testowanie -> wdrażanie). Problem polega na tym, że nigdy wcześniej tego nie robiłem, więc nie wiem, jakie są najlepsze praktyki, aby to zrobić. **Do tej pory mam:** 1. programiści kodują lokalnie, 2. na każdej maszynie deweloperskiej jest instancja `vagrant`, zarządzana przez `puppet`. Zawiera te same wersje `linux`, `jenkins` i `tomcat` co maszyna produkcyjna, 3. podczas kodowania programista wdraża się na maszynę vagrant, 4. po lokalnym scaleniu do gałęzi `test`, `jenkins` na vagrant obsługuje testy, 5. kiedy wszystko jest w porządku, programista wypycha zatwierdzenia i łączy 6. `jenkins` na zdalnej maszynie ściąga zatwierdzenie z gałęzi `test`, uruchamia testy itd. 7. jeśli wszystko wygląda na zielone, `jenkins` wdraża się do `test` ` instancja tomcat` 8. Wdrożenie na produkcję odbywa się ręcznie (choć można to zrobić za pomocą skryptów pomocniczych), gdy logika biznesowa jest testowana przez inne działy i wszystko wygląda dobrze dla klienta. **Teraz prawdziwe pytanie: czy powyższe ma sens? Rzeczy, których nie jestem pewien:** 1. Zdalna maszyna: czy nie będzie żadnych problemów z dwoma (lub nawet trzema, ponieważ Jenkins może potrzebować jednej) instancji tej samej aplikacji na `tomcat`? 2. Używanie `vagrant` do programowania w środowisku `php` to po prostu imadło. Czy to nie przesada podczas korzystania z Tomcata? Chodzi mi o to, czy istnieje większe prawdopodobieństwo, że `tomcat` będzie działał tak samo na każdej maszynie? 3. Czy jest sens mieć miejscowych „jenkinsów” na włóczęgów?


title: Szacowanie kosztów programowania zorientowanego aspektowo AOP

text: Istnieje wiele technik estymacji, takich jak liczenie linii kodu, punktów funkcyjnych, punktów obiektów itp. Jednak mój następny projekt wykorzystuje programowanie zorientowane na aspekty. Czy istnieją jakieś specjalne metody lub techniki szacowania, które można zastosować do oprogramowania opracowanego przy użyciu tego paradygmatu? Czy istnieje coś takiego jak punkty funkcyjne lub punkty obiektów dla AOP?


title: Jaki jest właściwy sposób radzenia sobie z podobnymi, ale niezależnymi funkcjami?

text: Załóżmy, że nadeszło żądanie funkcji i zaczynamy nad nią pracować, którą nazwiemy _feature-1_. Wprowadza do aplikacji nową logikę, którą będziemy nazywać _logic-A_ i _logic-B_. Programista odgałęzia się od gałęzi wydania i rozpoczyna pracę nad funkcją. Wkrótce otrzymamy kolejne żądanie funkcji, które nazwiemy _feature-2_. Zaimplementuje w aplikacji _logic-A_ i _logic-C_. _logika A_ implementowana przez tę funkcję jest taka sama jak _logika-A_, która została zaimplementowana w _cecha-1_. Powiedzmy też, że przy danym _logic-B_ _logika-A_ może być zaimplementowana nieco inaczej niż miałaby _logic-C_ , a także inaczej przy danych _logic-B_ i _logic-C_ (np. z tylko jedną funkcją, kod być mniej elastycznym niż w przypadku obu). Jak postępować w tej sytuacji? **Konkretny przykład** (aby pomóc w zamieszaniu w moich sformułowaniach) * _feature-1_ to kanał z programrs.stackexchange.com. * _feature-2_ to kanał z gaming.stackexchange.com. * _logic-A_ to implementacja kanału w ogóle (zakładając, że aplikacja obecnie nie ma kanałów), który również zawiera linki do treści i podaje powiązane informacje. * _logic-B_ oznacza, że źródło kanału pochodzi z programrs.stackexchange.com. * Dodaje do _logic-A_, że wyświetlany jest powiązany język programowania. * _logic-C_ oznacza, że źródło kanału pochodzi z gaming.stackexchange.com. * Dodaje do _logic-A_, że wyświetlana jest nazwa powiązanej gry i grafika pudełka.


title: Alternatywa dla dokumentacji POD Perla w innych językach?

text: Perl ma naprawdę fajną metodę tworzenia dokumentacji, która sprawia, że dokumentowanie jest naprawdę łatwe. Nazywa się POD (zwykła stara dokumentacja). Oto przykład: =head1 NAZWA Przykład::Module - przykład =head1 SKŁADNIA use Example::Module; mój $obiekt = Przykład::Module->new(); print $object->as_string; =head1 OPIS Tylko przykład. =head2 Metody =ponad 12 =element C<nowy> Zwraca nowy obiekt My::Module. =item C<as_string> Zwraca ciągłą reprezentację obiektu. Służy to głównie do debugowania. =back =head1 LICENSE Jest to wydane na licencji artystycznej. Zobacz L<perlartystyka>. =head1 AUTOR Dynamic =head1 ZOBACZ TAKŻE L<perlpod> =cut Wynikiem tego będzie HTML, jak ten przykład na CPAN (nie to, co napisałem). Fajne prawo! Czy istnieje więc metoda podobna do POD, w której programista może umieścić dokumentację wewnątrz samego kodu, nie będąc komentarzem?


title: Utwórz bilety z TODO (lub w inny sposób z adnotacjami) komentarze

text: Czy jest jakieś oprogramowanie, które pozwoli mi generować zgłoszenia problemów (dla Traca, Team Foundation Server itp.) z TODO lub w inny sposób z adnotacjami w kodzie źródłowym?


title: Obrona dla boilerplate’u?

text: Dla mnie szablonowy kod jest oczywiście zły. Jednak spotkałem programistę, który wykazuje opór w każdej próbie ograniczenia schematu. Zdałem sobie sprawę, że nie miałem łatwo sformułowanej, dobrze przemyślanej argumentacji poza obrzydzeniem, które rozwinąłem do tego z biegiem czasu. Abym mógł sformułować przekonujący argument za faworyzowaniem mniej schematu, jakie są kontrargumenty? Innymi słowy, jakie są argumenty (jeśli są) przemawiające za schematem? (Mam na myśli to, co moim zdaniem ogólnie oznacza boilerplate, ale dobrym przykładem są gettery i settery w Javie.)


title: Jak mogę poprawić ten „wzór”?

text: Mam serię wywołań metod, które mają podobne cechy. Podstawowy układ to public void CallDataBase() { Utility sqlHelper = new Utility(); Zapytanie StringBuilder = nowy StringBuilder(200); query.Append(@"update " + Environment.NewLine);//lub wstaw, wybierz zapytanie.Append(@" table " + Environment.NewLine); //... utility.ConnectAndExecuteNonQuery(query);//lub zapytanie, skalar } W tym przypadku nie jestem wielkim fanem `StringBuilder`, ale łamanie linii w inline SQL pomaga w czytelności. Procedury składowane nie wchodzą w grę (zbyt dużo pracy do przekonwertowania, mają wyższe priorytety). LINQ i EF nie są opcjami. Firma korzysta z SQL 2000 i nie ma konkretnych planów aktualizacji.


title: Jak mogę uniemożliwić programistom przechwytywanie danych wprowadzanych przez użytkowników?

text: Zajmuję się tworzeniem aplikacji internetowej z silnym naciskiem na bezpieczeństwo. Jakie środki można podjąć, aby uniemożliwić osobom pracującym nad aplikacją (programistom, administratorom baz danych, personelowi zapewniania jakości) przechwytywanie wprowadzanych przez użytkownika wartości, które powinny być dobrze chronione, takich jak hasła, numery ubezpieczenia społecznego itd.?


title: Jak zdecydować, czy zaimplementować operację jako operację Entity vs Service w projekcie opartym na domenie?

text: Czytam projekt oparty na domenie Evansa. Książka mówi, że istnieje byt i są usługi. Gdybym miał zaimplementować operację, jak zdecydować, czy dodać ją jako metodę na encji, czy zrobić to w klasie usługi? np. `myEntity.DoStuff()` czy `myService.DoStuffOn(myEntity)`? Czy to zależy od zaangażowania innych podmiotów? Jeśli angażuje inne podmioty, wdrożyć jako działanie usługowe? Ale podmioty mogą mieć skojarzenia i mogą je stamtąd przemierzać, prawda? Czy to zależy od bezpaństwowców, czy nie? Ale usługa może również uzyskać dostęp do zmiennej encji, prawda? Podobnie jak w przypadku myService.DoStuffOn, może mieć kod typu if(myEntity.IsX) doSomething(); Co oznacza, że będzie to zależało od państwa? Czy to zależy od złożoności? Jak definiujesz złożone operacje?