title: Czy powinniśmy zatrudnić kogoś, kto pisze C w Perlu?

text: Jeden z moich kolegów przeprowadził ostatnio rozmowę kwalifikacyjną z kilkoma kandydatami do pracy i jeden powiedział, że mają bardzo dobre doświadczenie w Perlu. Ponieważ mój kolega nie znał Perla, poprosił mnie o krytykę jakiegoś kodu napisanego (poza stroną) przez potencjalnego pracownika, więc rzuciłem okiem i powiedziałem mu o swoich obawach (główny był to, że pierwotnie nie miał komentarzy i to nie tak, że daliśmy im wystarczająco dużo czasu). Jednak kod działa, więc niechętnie odmawiam bez dodatkowego wkładu. Innym problemem jest to, że ten kod wygląda dokładnie tak, jak zakodowałbym go w C. Minęło trochę czasu, odkąd zrobiłem Perla (i nie zrobiłem dużo, jestem bardziej bodem Pythona do szybkich skryptów), ale wydaje mi się przypomnieć sobie, że był to język o wiele bardziej ekspresyjny niż ten, którego używał ten facet. Szukam danych wejściowych od prawdziwych koderów Perla i sugestii, jak można go ulepszyć (i dlaczego koder Perla _powinien_ znać tę metodę poprawy). Możesz także lirycznie omamić, czy ludzie, którzy piszą w jednym języku w zupełnie innym języku, powinni (lub nie powinni być zatrudniani). Interesują mnie twoje argumenty, ale to pytanie dotyczy przede wszystkim krytyki kodu. Specyfikacja polegała na pomyślnym przetworzeniu pliku CSV w następujący sposób i wypisaniu poszczególnych pól: Identyfikator użytkownika,Nazwa,Poziom,Numeryczny identyfikator pax, Pax Morgan,admin,0 gt,"Turner, George"śmieci,użytkownik,1 ms,"Mark \"X-Men\" Spencer","użytkownik gościa",2ab,,"użytkownik","3" Dane wyjściowe miały wyglądać tak (kod potencjalnego pracownika faktycznie wyświetla to): ID użytkownika,Nazwa, Poziom ,Identyfikator numeryczny: [ID użytkownika] [Nazwa] [Poziom] [Identyfikator numeryczny] pax, Pax Morgan ,admin,0: [pax] [Pax Morgan] [admin] [0] gt," Turner, George " śmieci,użytkownik ,1: [gt] [ Turner, George ] [użytkownik] [1] ms,"Mark \"X-Men\" Spencer","gość użytkownika",2: [ms] [Znak "X-Men" Spencer] [gość] [2] ab,, "użytkownik","3": [ab] [] [użytkownik] [3] Oto kod, który przesłali: #!/usr/bin/perl # Otwórz plik. otwarte (IN, "qq.in") || umrzeć "Nie można otworzyć qq.in"; # Przetwarzaj każdą linię. while (<IN>) { chomp; $linia = $_; print "$linia:\n"; # Przetwarzaj każde pole w linii. while ($line ne "") { # Pomiń spacje i zacznij od pustego pola. if (substr ($linia,0,1) eq " ") { $linia = substr ($linia,1); następny; } $pole = ""; $minlen = 0; # Wykryj pole cytowane lub w inny sposób. if (substr ($line,0,1) eq "\"") { $line = substr ($line,1); $pastquote = 0; while ($line ne "") { # Specjalna obsługa cudzysłowów (\ \ oraz \"). if (length ($linia) >= 2) { if (substr ($linia,0,2) eq "\\\"") { $pole = $pole . "\""; $linia = substr ($linia,2); następny; } if (substr ($linia,0,2) eq "\\\\") { $pole = $pole . "\\"; $linia = substr ($linia,2); następny; } } # Wykryj cudzysłów zamykający. if (($pastquote == 0) && (substr ($line,0,1) eq "\"")) { $pastquote = 1; $line = substr ($line,1); $minlen = length ($ pole); next; } # Martw się o przecinek tylko wtedy, gdy miniony cytat zamykający. if (($pastquote == 1) && (substr ($line,0,1) eq ",")) { $line = substr ($line ,1); last; } $pole = $pole .substr ($linia,0,1);$linia = substr ($linia,1); } } else { while ($linia ne "") { if (substr ($linia,0,1) eq ",") { $linia = substr ($linia,1); last; } if ($pastquote == 0) { $pole = $pole . substr ($linia,0, 1); } $linia = sub str ($linia,1); } } # Usuń spację na końcu. while ($pole ne "") { if (długość ($pole) == $minlen) { last; } if (substr ($pole,długość ($pole)-1,1) eq " ") { $pole = substr ($pole,0, długość ($pole)-1); następny; }                 ostatni; } print " [$pole]\n"; }     }     zamknąć w);


title: Gdzie mogę hostować moją aplikację internetową JSP+Java?

text: Moja aplikacja internetowa jest obecnie napisana w JSP/Java, przy użyciu bazy danych Oracle. Programuję w systemie Windows, używam JDeveloper (klon Oracle Eclipse) i używam zintegrowanego WebLogic Server JDev. Chcę na żywo korzystać z szanowanej firmy hostingowej. Deweloperzy LAMP dostają wszystkie dziewczyny, utknąłem przy użyciu WWOJ (Windows Weblogic Oracle Java). Nie mogę znaleźć żadnych hostów, które używają Oracle, a tych, które uruchamiają Tomcata, są bardzo nieliczne (brak niestandardowego pudełka w RackSpace). W tym tygodniu przechodzę na MySQL. Używam teraz Tomcata na moim komputerze z systemem Windows i używam NetBeans. Mogę teraz skompilować .war. W końcu jestem na poziomie WTMJ :) Czy ktoś ma doświadczenie z hostowaniem projektu Java? A może coś z backendem Oracle? Czuję się, jakbym się tutaj zgubił.


title: Dlaczego niektóre kompilatory generują bezpośredni kod maszynowy?

text: Uczestniczyłem w tym kursie - CMU 18-447, Computer Architecture w Carnegie Mellon, aby odświeżyć moją wiedzę i koncepcje. Mówią, że większość szczegółów i implementacji na poziomie maszyny jest obsługiwana na poziomie architektury zestawu instrukcji (ISA) i jest abstrakcyjna na tym poziomie. Niektóre procesory Intela mają nawet warstwy translacji na poziomie sprzętowym, które przejmują ISA na pierwszym poziomie, który jest widoczny dla programisty, i tłumaczą je dalej bliżej maszyny. Biorąc pod uwagę taką moc, jaką zapewnia sam ISA/Processor, dlaczego kompilatory generują bezpośredni kod maszynowy, czy jest to tylko czarna skrzynka i wewnętrznie używa asemblerów do konwersji ich na bezpośredni kod maszynowy? Słyszałem, że JVM pobiera kod bajtowy i tłumaczy go bezpośrednio na kod maszynowy (exe). Czy to prawda, czy moje zrozumienie jest tutaj błędne?


title: Maksymalna stała numeru portu tcp w java

text: Czy istnieje publiczna stała dla maksymalnego numeru portu TCP (65535) zdefiniowana w javie lub wspólnej bibliotece, takiej jak Apache Commons, do której mógłbym się odwołać z mojego kodu (zamiast używać zakodowanej liczby całkowitej)?


title: Wbudowany klaster Tomcat

text: Czy ktoś może wyjaśnić na przykładzie, jak działa osadzony klaster Tomcat. Czy system równoważenia obciążenia byłby konieczny? Ponieważ używamy osadzonego tomcat, w jaki sposób dwa oddzielne pliki jar (każdy jako samodzielna aplikacja internetowa z własną osadzoną instancją tomcat) będą wiedziały, gdzie się nawzajem są i informują się nawzajem o swoim statusie itd.? Oto kod, który mam do tej pory, który jest zwykłym osadzonym tomcat bez żadnego klastrowania, który mógłby sformułować jeden z wymienionych powyżej plików jar: import javax.servlet.ServletException; importowanie javax.servlet.http.HttpServlet; importowanie javax.servlet.http.HttpServletRequest; importowanie javax.servlet.http.HttpServletResponse; importuj plik java.io.; import java.io.IOException; import java.io.Writer; public class Main { public static void main(String[] args) rzuca LifecycleException, InterruptedException, ServletException { Tomcat tomcat = new Tomcat(); tomcat.setPort(8080); ctx kontekstu = tomcat.addContext("/", new File(".").getAbsolutePath()); Tomcat.addServlet(ctx, "hello", new HttpServlet() { protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Writer w = resp.getWriter(); w.write("Hello, World!") ;w.flush();} }); ctx.addServletMapping("/*", "cześć"); tomcat.start(); tomcat.getServer().await(); } } Źródło: strefa java


title: Czy jakieś języki używają =/= dla operatora nierówności?

text: Wikipedia mówi: > **Nie równe** > > Symbolem używanym do oznaczenia nierówności — gdy elementy nie są równe — jest > przekreślony znak równości „≠” (Unicode 2260). > > Większość języków programowania, ograniczając się do zestawu znaków ASCII, > używa ~=, !=, /=, =/= lub <> do reprezentowania ich logicznego operatora nierówności. Wszystkie te operatory można znaleźć w tej tabeli, z wyjątkiem `=/=`. Mogę znaleźć to równa się-ukośnik-równa się używane jako sposób formatowania ≠ w zwykłym tekście, ale nie w żadnym języku programowania. Czy `=/=` został użyty jako operator nierówności w dowolnym języku programowania?


title: Jak przetwarzać niekończący się strumień danych XML

text: Istnieje **niekończący się strumień danych komunikatów XML** (i „bicie serca”), które otrzymuję przez połączenie telnet i tunel IPsec VPN typu site-to-site. Wciąż się zastanawiam. **Jakie jest najlepsze/najbardziej eleganckie rozwiązanie do przetwarzania wiadomości XML bez utraty danych, bez redundancji iz (prawie) stałym czasem przetwarzania?** Niekończący się proces/skrypt? Zapisujesz strumień w pliku(ach) i przetwarzasz go/ich okresowo krok po kroku? A może coś zupełnie innego? Wiadomości zwykle przychodzą co kilka sekund. Czasami co sekundę. Czasami może co 10 sekund. Różni się, ale niewiele. Jedna wiadomość XML w strumieniu zawiera 45 wierszy. Wiadomości powinny być później przechowywane. Uwaga: Konkretna struktura komunikatów XML i infrastruktura uczestniczących systemów są moim zdaniem pomijalne.


title: Jaka jest wartość wyrażenia let

text: Z tego co rozumiem, każdy kod w f# jest wyrażeniem, łącznie z wiązaniem `let`. Powiedzmy, że otrzymaliśmy następujący kod: let a = 5 printfn "%d" a Czytałem, że kompilator zobaczy to jako let a = 5 in ( printfn "%d" a ) A więc wartość tego wszystkiego byłoby wartością wyrażenia wewnętrznego, które jest wartością `printf`. Z drugiej strony, w f# interactive: > let a = 5;; val a : int = 5 Co jasno wskazuje, że wartość wyrażenia let jest wartością powiązaną z identyfikatorem. **P: Czy ktoś może wyjaśnić, jaka jest wartość wyrażenia let? Czy może być inaczej w skompilowanym kodzie niż w interakcyjnym F#?**


title: Globalny kontener tekstur

text: Na moje pierwsze duże przedsięwzięcie w Open-GL tworzę swego rodzaju symulator. Wiele podstawowych funkcji działa, ale ostatnio napotkałem problem. Jak się zorientowałem, pierwotnie zaprojektowałem program tak, aby każdy obiekt w symulatorze miał własną klasę, która przechowywała jego pozycję, teksturę, kod rysowania itp. Stało się to jednak problemem, gdy zacząłem tworzyć wiele obiektów tego samego typu, ponieważ szybko zdałem sobie sprawę, że napisałem klasy, aby przeładować nową instancję danych tekstury dla każdej instancji obiektu. Aby to naprawić, rozważałem stworzenie prostej klasy bazy danych tekstur, która zawierałaby wskaźnik do pojedynczej instancji danych tekstur każdego obiektu, które każda instancja obiektu byłaby kopiowana po jej utworzeniu. Problem polega na tym, że wiele różnych klas w symulatorze tworzy obiekty i waham się, czy po prostu przechowywać klasę bazy danych tekstur na szczycie hierarchii programu i przekazywać ją do każdej funkcji, która tworzy obiekt, ponieważ czuję, że to bardzo szybko stają się bardzo złożone. Zamiast tego uważam, że byłoby lepiej mieć globalną klasę kontenera, która śledziłaby wskaźniki tekstur, ale nie jestem pewien, jak mógłbym przechowywać wskaźniki bez tworzenia instancji kontenera, co wymagałoby przekazywania ich w całym miejscu . Mam nadzieję, że istnieje bardziej eleganckie i prostsze rozwiązanie, którego pomijam, w przeciwnym razie wypróbuję sposób, który opisałem. Ewentualnie, jeśli wydaje się, że najlepiej byłoby przebudować symulator, nie jest to wykluczone, ale byłbym wdzięczny za każdą radę.


title: Wdrożenie na urządzenia mobilne czy na komputery stacjonarne?

text: Podczas pracy z zapytaniami o media CSS nie jestem pewien, czy powinienem programować w stylu mobile-first, czy desktop-first. Załóżmy na przykład, że dostaję projekt, który składa się z zestawu bloków, które są obok siebie. Na komputerze będę trzymać się specyfikacji, ale na urządzeniach mobilnych, biorąc pod uwagę zmniejszony obszar ekranu, dwa bloki ułożone jeden na drugim byłyby lepsze. Co jest lepsze, to (na pierwszym miejscu): div { width: 50%; wyświetlacz: inline-block; } @media all i (max-szerokość: 600px) { szerokość: 100%; margines: 0 auto; Blok wyświetlacza; } czy to (najpierw telefon komórkowy)? div { szerokość: 100%; margines: 0 auto; Blok wyświetlacza; } @media all i (min-szerokość: 600px) { szerokość: 50%; wyświetlacz: inline-block; } Najnowszy motyw Wordpress jest zgodny z metodą mobile-first, używając `min-width`, ale czy mam rację zakładając, że starsze przeglądarki bez obsługi zapytań o media nie byłyby w stanie przeanalizować tych dyrektyw i załadować css "mobile"? Jakie są zalety/wady obu?


title: kontrakty/atesty na kod: co ze zduplikowanymi kontrolami?

text: Jestem wielkim fanem pisania poświadczeń, umów lub wszelkiego rodzaju czeków dostępnych w używanym przeze mnie języku. Jedną rzeczą, która mnie trochę niepokoi, jest to, że nie jestem pewien, jaka jest powszechna praktyka w przypadku duplikatów czeków. Przykładowa sytuacja: Najpierw piszę następującą funkcję void DoSomething( object obj ) { Contract.Requires<ArgumentNullException>( obj != null ); //kod używając obj } potem kilka godzin później piszę inną funkcję, która wywołuje pierwszą. Ponieważ wszystko jest wciąż świeże w pamięci, postanawiam nie duplikować kontraktu, ponieważ wiem, że `DoSomething` będzie już sprawdzał, czy obiekt jest pusty: void DoSomethingElse( object obj ) { //no Requires here: DoSomething już to zrobi DoSomething ( obj ); //kod używając obj } Oczywisty problem: `DoSomethingElse` zależy teraz od `DoSomething` do sprawdzenia, czy obj nie jest pusty. Więc jeśli `DoSomething` kiedykolwiek zdecyduje się nie sprawdzać więcej, lub jeśli zdecyduję się użyć innej funkcji, obiekt może nie być już sprawdzany. Co prowadzi mnie do napisania tej implementacji: void DoSomethingElse( object obj ) { Contract.Requires<ArgumentNullException>( obj != null ); ZróbCoś( obj ); //kod używając obj } Zawsze bezpiecznie, bez obaw, poza tym, że jeśli sytuacja się powiększy, ten sam obiekt może być sprawdzany kilka razy i jest to forma duplikacji, a wszyscy wiemy, że to nie jest dobre. Jaka jest najczęstsza praktyka w takich sytuacjach?


title: Jak radzisz sobie ze skokiem złożoności?

text: Wydaje się rzadkie, ale powszechne doświadczenie, że czasami pracujesz nad projektem i nagle coś pojawia się nieoczekiwanie, wrzucając ogromny klucz w prace i znacznie zwiększając złożoność. Na przykład pracowałem nad aplikacją, która komunikowała się z usługami SOAP na różnych innych maszynach. Stworzyłem prototyp, który działał bez zarzutu, a następnie zaprojektowałem zwykły interfejs i ogólnie wszystko uruchamiałem w przyjemny, dość prosty i łatwy do naśladowania sposób. Działało to świetnie, dopóki nie zaczęliśmy testować w szerszej sieci i nagle strony zaczęły wygasać, ponieważ opóźnienie połączeń i czas wymagany do wykonania obliczeń na zdalnych maszynach spowodował przekroczenie limitu czasu żądań do usług mydlanych. Okazało się, że musimy zmienić architekturę, aby rozdzielić żądania na własne wątki i buforować zwrócone dane, aby mogły być aktualizowane progresywnie w tle, zamiast wykonywać obliczenia na podstawie żądania po żądaniu. Szczegóły tego scenariusza nie są zbyt ważne - w rzeczywistości nie jest to świetny przykład, ponieważ był dość przewidywalny i osoby, które napisały wiele tego typu aplikacji dla tego typu środowiska, mogły go przewidzieć - z wyjątkiem tego, że ilustruje sposób, w jaki można zacząć od prostego założenia i modelu i nagle eskalować złożoność na etapie rozwoju projektu. Jakie masz strategie radzenia sobie z tego typu zmianami funkcjonalnymi, których potrzeba pojawia się – często w wyniku czynników środowiskowych, a nie zmiany specyfikacji – w późniejszym procesie rozwoju lub w wyniku testowania? Jak zachować równowagę między unikaniem przedwczesnej optymalizacji / YAGNI / ryzyka przeinżynieryjnego projektowania rozwiązania, które łagodzi możliwe, ale niekoniecznie _prawdopodobne_ problemy, a opracowaniem prostszego i łatwiejszego rozwiązania, które może być równie skuteczne, ale nie zawiera gotowości na każda możliwa ewentualność? Edycja: Odpowiedź Crazy Eddiego brzmi: „wysysasz to i znajdujesz najtańszy sposób na wdrożenie nowej złożoności”. To sprawiło, że pomyślałem o czymś, co było ukryte w pytaniu, ale nie podniosłem tego konkretnie. Po uderzeniu w tę wyboję wprowadzasz niezbędne zmiany. Czy robisz coś, co utrzyma projekt tak blisko harmonogramu, jak to możliwe, ale może wpłynąć na łatwość utrzymania, czy też wracasz do swojej architektury i przerabiasz ją na bardziej szczegółowym poziomie, który może być łatwiejszy w utrzymaniu, ale odsunie wszystko podczas rozwoju?


title: Zarządzanie oprogramowaniem dla 2 programistów

text: ja i mój bardzo dobry przyjaciel robimy małą firmę. Posiadamy firmę i tworzymy aplikacje webowe w Scali. Zaczęliśmy 3 miesiące temu i mamy teraz dużo pracy. Nie możemy sobie pozwolić na zatrudnienie innego programisty, ponieważ nie możemy mu teraz zapłacić. Do tej pory staramy się zarządzać całym procesem deweloperskim w bardzo prosty sposób. Używamy arkuszy Excela do prostego śledzenia błędów i pracujemy nad żądaniami klientów w locie. Nie mamy planu na przyszły tydzień lub coś podobnego. Ale teraz uważam to za bardzo nieefektywne i bezużyteczne. Staram się znaleźć jakieś zasady lub metodologię dla małego zespołu lub tylko dla dwóch facetów. Na przykład Scrum jest, imo, nieprzystosowany dla nas. Jest wiele ról (ScrumMaster, Product Owner, Team...) i wydaje się to przesadą. Czy możesz mi coś doradzić? Czy masz jakieś doświadczenia z zarządzaniem oprogramowaniem w małych zespołach? Czy jakakolwiek metodologia obecnego zwinnego rozwoju jest odpowiednia dla pary programistów? Czy istnieje zarządzanie oprogramowaniem do prostego śledzenia błędów, może wiki lub zarządzanie czasem dla dwóch programistów? wielkie dzięki za udostępnienie.


title: Czy to konkretny wzór i jaki jest jego cel?

text: Niedawno natknąłem się na następujący kod C++, który trochę mnie zdezorientował: class One {/*definicja*/}; template<klasa Base > class Two : public Base {/*definicja*/}; template<klasa Base > class Three : public Base {/*definicja*/}; template<klasa Base > class Four : public Base {/*definicja*/}; klasa Pięć : public Cztery < Trzy< Dwa < Jeden > > > {/*definicja*/}; Znam przeznaczenie szablonów i mniej więcej kiedy i jak z nich korzystać. Czy istnieje nazwa lub wspólny wzór kaskady kilku szablonów? Kiedy używałbym tego wzorca (zamiast czegoś mniej złożonego)? PS: definicja klasy piątej jest właściwie pusta.


title: Maksymalny przepływ i minimalne cięcie wykres nieskierowany java

text: Muszę zaimplementować algorytm, w którym znajduję maksymalny przepływ i minimalne odcięcie grafu nieskierowanego, a tak naprawdę nie mogę znaleźć algorytmu na to. Spojrzałem na algorytm Forda Fulkersona, ale w tym przypadku jest on używany do wykresu ukierunkowanego. Czy ktoś może mi pomóc w znalezieniu odpowiedniego algorytmu?


title: Powoli zdaję sobie sprawę, że powinienem był poprosić o znacznie wyższą pensję

text: Pracuję w tej nowej firmie już prawie pół roku i zaczynam zdawać sobie sprawę, że popełniłem straszny błąd proponując wynagrodzenie. To moja pierwsza „prawdziwa” praca, wcześniej pracowałam jako freelancer, a przez krótki czas w małej lokalnej firmie IT. Kiedy się tu przeprowadziłem, nie byłem pewien, o ile mam prosić. Zrobiłem wiele badań i ustaliłem kwotę o około 20% wyższą niż przeciętna początkowa pensja deweloperów w moim kraju. Teraz uczestniczę w rozmowach kwalifikacyjnych (do tej pory jako praktykant) i dowiedziałam się czegoś więcej o możliwościach płacowych mojego pracodawcy. Dowiedziałem się, że prawie dwa razy więcej niż zarobię będzie „do zaakceptowania”. To dlatego, że firma została założona przez Amerykanina i chociaż mamy siedzibę w mniej zamożnym kraju, wyższa płaca jest do przyjęcia. Dodatkowo zauważyłem, że jestem lepszym programistą niż myślałem (na podstawie porównania mojej wydajności z innymi i opiniami innych). Zrobiłem już jedną rzecz w tym kierunku: jakiś czas po tym, jak nowy facet przyszedł do mnie do pracy (zapłacił tyle samo co ja), zdałem sobie sprawę, że jestem wyraźnie lepszym programistą i śmiało poprosiłem o podwyżkę (którą dostałem, po wykładzie, że podwyżki zdarzają się tylko podczas recenzji). Co mam tutaj zrobić? Jestem zagubiony.


title: Dobra historia testów jednostkowych dla szkolenia z testów jednostkowych

text: Mam doradzić szkolenie z testów jednostkowych w mojej firmie. Chciałbym pokazać uderzający, rzeczywisty przykład nieoczekiwanej regresji, która nie została wychwycona przez kompilację (oczywiście), ale wykrywalna za pomocą testów jednostkowych. Coś bardziej jak pozornie ważna zmiana, która w rzeczywistości powoduje regres w innej części programu. Czy chciałbyś podzielić się swoimi historiami o epickich zwycięstwach w testowaniu jednostek? (Językiem docelowym jest C++, rozproszona aplikacja sieciowa, ale wystarczy każdy dobry przykład)


title: Rzucanie ze sznurka na liczbę całkowitą i odwrotnie

text: Próbuję oddawać w Javie z ciągu znaków na liczbę całkowitą i na odwrót, ale kompilator narzeka na to. Moje pytanie brzmi: czy to kwestia kompilatora czy języka programowania Java nie obsługuje tego rodzaju rzutowania.


title: Sztuka Programowania Komputerowego - Czytać czy nie czytać?

text: Istnieje wiele książek o programowaniu i wydaje się, że Code Complete znajduje się na szczycie listy „książek o programowaniu, które trzeba przeczytać”, ale co z _Sztuką programowania komputerowego_ autorstwa Donalda Knutha? Jestem osobą zajętą, między pracą a młodą rodziną nie mam dużo wolnego czasu, więc muszę być wybredna w tym, jak z niego korzystać. Zastanawiam się - czy ktoś tutaj czytał 'TAOCP'? Jeśli tak, to czy warto poświęcić czas na czytanie, czy może jakaś inna książka lub bardziej programowanie poboczne, takie jak projekty dla zwierząt lub wkład w open source, byłoby lepszym wykorzystaniem mojego czasu w zakresie rozwoju zawodowego? OŚWIADCZENIE - Dla tych z Was, którzy noszą koszulki z napisem "Knuth is my homeboy", nie zrozumcie mnie źle - chcę to przeczytać, ale zastanawiam się tylko, czy powinno być na górze mojej listy priorytetów, czy jeśli coś innego powinno być na pierwszym miejscu.


title: Jaki jest dobry model projektowy dla mojej nowej klasy?

text: Jestem początkującym programistą, który po próbie zarządzania ponad 2000 wierszami proceduralnego kodu php odkrył teraz wartość OOP. Przeczytałem kilka książek, aby przyzwyczaić mnie do początkowej teorii, ale chciałbym uzyskać porady dotyczące praktycznego zastosowania. Załóżmy na przykład, że istnieją dwa rodzaje obiektów treści – reklama i wydarzenie w kalendarzu. moja aplikacja skanuje różne strony internetowe (predefiniowaną listę), a gdy znajdzie reklamę lub wydarzenie, wyodrębnia dane i zapisuje je w bazie danych. Wszystkie moje obiekty będą miały wspólny $tytuł i $opis. Jednak obiekt Ad będzie miał $cenę, a obiekt Event będzie miał $startDate. Czy powinienem mieć dwie oddzielne klasy, po jednej dla każdego obiektu? Czy powinienem mieć „nadklasę” o nazwach $title i $description z dwiema innymi klasami Ad i Event z ich własnymi właściwościami? To ostatnie jest przynajmniej kierunkiem, w którym teraz podążam. Moje drugie pytanie dotyczące tego projektu dotyczy sposobu obsługi logiki, która wyodrębnia dane dla $tytułu, $opisu, $ceny i $daty. Dla każdej witryny z mojej wstępnie zdefiniowanej listy istnieje określone wyrażenie regularne, które zwraca żądaną wartość dla każdej właściwości. Obecnie w moim konstruktorze mam bardzo dużą instrukcję switch, która określa, jaką mam witrynę, ustawia odpowiednio zmienne regex i kontynuuje. Nie tylko to, ale teraz muszę powtórzyć logikę, aby określić, na jakiej stronie jestem w konstruktorze każdej klasy. To nie jest w porządku. Czy powinienem utworzyć inną klasę Algorytmy i przechowywać tam logikę dla każdej witryny? Czy funkcje do obsługi tej logiki powinny znajdować się w tej klasie? lub specyficzne dla klas, których właściwości ustawiają? Chcę wziąć pod uwagę w moim projekcie dwie rzeczy: 1) W przyszłości dodam różne obiekty treści, które mają wspólny $title i $description, ale będą miały własne właściwości, więc chcę móc je łatwo rozwijać jako potrzebne. 2) Będę dodawał coraz więcej stron internetowych (każda z własnymi algorytmami do ekstrakcji danych), więc chciałbym teraz zaplanować efektywne zarządzanie nimi i pracę z nimi. Pomyślałem o rozszerzeniu klasy Ad lub Event o klasę 'websiteX' i przechowywaniu tam jej funkcji. Ale to też nie wydawało się właściwe, ponieważ teraz muszę zarządzać setkami małych plików klas specyficznych dla witryny. Uwaga, nie wiedziałem, czy to właściwa strona, czy też stackoverflow był lepszym wyborem. Jeśli tak, daj mi znać, a tam opublikuję.


title: Jakiego algorytmu/pakietu szyfrowania powinienem używać w grze bukmacherskiej?

text: Mam witrynę typu zakłady, na której publikuję zaszyfrowany numer (od 0 do 100). Następnie po pewnym czasie sprawdziłbym, jaki jest numer i udowodnię go kluczem do odszyfrowania zaszyfrowanego numeru, aby udowodnić, że nie oszukuję. Chcę również, aby był to łatwy do zweryfikowania przez przeciętnego użytkownika. Jakiego algorytmu/techniki/pakietu szyfrowania powinienem użyć? Nie jestem ekspertem od kryptografii. Wydaje się, że jest tak wiele opcji i nie jestem pewien, czego użyć. przyjazny dla Pythona jest plusem.


title: Czy powinieneś używać C# i F# razem?

text: Wiem, że możesz używać C# i F# razem w tym samym projekcie, ale nie jestem pewien, czy jest to dobry pomysł. Wydaje mi się, że mieszanie dwóch bardzo różnych stylów kodowania (funkcjonalny vs OO) może spowodować brak spójności w projekcie. Czy to jest poprawne?


title: Jak uniknąć konieczności budowania od podstaw kolejnego systemu CRM?

text: Budujemy księgową aplikację internetową. W naszej bazie danych przechowujemy podstawowe dane o naszych klientach, takie jak numer telefonu, ich dane logowania, ponieważ te rzeczy są powiązane z naszą aplikacją internetową. Teraz potrzebujemy systemu CRM do robienia takich rzeczy jak wysyłanie maili marketingowych do użytkowników, którzy się zarejestrowali, ale nigdy nie korzystali z usługi, chcemy również bazę potencjalnych klientów lub partnerów, z którymi chcielibyśmy się kiedyś skontaktować itp. itp. Taka funkcjonalność to podstawa w każdym systemie CRM i nie chciałbym samodzielnie wdrażać wszystkich tych funkcji. Jednocześnie nie widzę, jak moglibyśmy wykorzystać rozwiązanie CRM, takie jak SalesForce, bez konieczności przechowywania niektórych danych w dwóch miejscach i ze wszystkimi komplikacjami, które by to prowadziły. Co powinniśmy zrobić? Czy istnieje system CRM, który można umieścić w naszej bazie danych PostgreSQL i po prostu wykorzystać dane, które posiadamy i przechowywać to, czego nie mamy?


title: Czy wzorce projektowe generalnie wymuszają dobre czy złe?

text: Słyszałem, że argumentowano, że wzorce projektowe są najlepszą rzeczą od czasu krojonego chleba. Słyszałem też, jak argumentowano, że wzorce projektowe mają tendencję do zaostrzania „syndromu drugiego systemu”, że są one nadużywane i sprawiają, że ich użytkownicy myślą, że są lepszymi projektantami niż w rzeczywistości. Mam tendencję do zbliżania się do poprzedniego obozu, ale ostatnio spotykam się z projektami, w których prawie każda interakcja jest zastępowana relacją obserwatora i wszystko jest singletonem. Zatem biorąc pod uwagę korzyści i problemy, czy wzorce projektowe są generalnie dobre czy złe i dlaczego?


title: Czy warto poświęcić czas na dostosowywanie środowiska maszyny deweloperskiej?

text: Są chwile, kiedy pracuję nad projektem programistycznym i zaczyna mnie drapać, żeby coś zmienić w moim środowisku (OSX lub Linux). Vim może nie robić dokładnie tego, czego chcę, więc zamiast robić to w ten sam sposób, w jaki robiłem to od kilku miesięcy (czasem lat), wybieram właściwą drogę. Albo może robię coś od dawna w bash i mówię sobie, dlaczego nie wymyślę lepszego sposobu. Chodzi o to, że kiedy wychodzę i robię, te godziny mogą minąć. Czasami utknąłem, próbując dostać to, czego chcę. Będę wiedział, że jestem naprawdę blisko, więc się nie poddaję. Zwykle w końcu to dostaję, ale to po godzinach majsterkowania i googlowania. Nienawidzę uczucia poddawania się i konieczności radzenia sobie z czymś, o czym wiem, że może działać lepiej. Kiedy kończę, czuję się ciepło, wiedząc, że moje otoczenie jest trochę bardziej płynne i spersonalizowane, ale zastanawiam się, czy można lepiej spędzić czas. Gdzie mam narysować linię? Wydaje się, że ze wszystkimi narzędziami w stylu UNIX jest nieskończona ilość do nauczenia. Zawsze uważałem, że znak doskonałego programisty to ktoś, kto robi wszystko, aby komputer naginał się do jego woli. Czy robię to dobrze? Uważam, że bash shell, unix/linux i vim będą dostępne na zawsze, więc postrzegam to jako inwestycję. Ale z drugiej strony po prostu spędziłem 3 godziny, próbując zrobić jakąś głupią rzecz, w której wtyczka vimperator firefox działała poprawnie. Zastanawiam się więc, co myśli o tym ta społeczność.


title: Jak osadzić artykuł w kodzie źródłowym?

text: Czasami zauważam literówki w artykułach (postach na blogu) lub książkach w kodzie źródłowym, który pojawia się w treści artykułu. Może to wskazywać, że kod został ręcznie skopiowany i wklejony (np. brak nawiasów klamrowych ) lub że z tekstem stało się coś nieprzyjemnego. Jak mogę napisać artykuł w kodzie źródłowym projektu? Celuję w Wordpress; Zasadniczo szukam parsera, który rozpoznałby dwa rodzaje regionu: artykuł i kod źródłowy, i który sformatowałby je tak, jak chcę (pytanie o przepełnienie stosu, kod LaTeX lub artykuł Wordpress)


title: Deduplikacja złożonych rekordów / Wykrywanie podobieństw

text: Pracuję nad projektem, który obejmuje rekordy z dość dużą liczbą pól (~15-20) i staram się znaleźć dobry sposób na zaimplementowanie deduplikacji. Zasadniczo rekordy to ludzie wraz z dodatkowymi danymi. Na przykład rekordy mogą zawierać dane osobowe, takie jak imię, nazwisko, adres pocztowy, adres e-mail itp., ale nie wszystkie rekordy zawierają taką samą ilość danych. Obecnie rekordy są przechowywane w RDBMS (MySQL) i chcę wykrywać duplikaty podczas wstawiania i nadal je wstawiać, ale oflagować jako duplikat. Musi być szybki, ponieważ muszę przekazać informację zwrotną, czy jest to duplikat, czy nie w czasie rzeczywistym. Zbiór danych jest duży (miliony rekordów). Rozważyłem następujące opcje, ale nie jestem pewien, która jest najlepsza/czy są one lepsze z dostępnych: * Użyj wbudowanego w MySQL wyszukiwania pełnotekstowego i użyj wyszukiwania rozmytego. Głównym problemem jest to, że wydaje się powolny, tylko najnowsza wersja obsługuje indeksy pełnotekstowe z InnoDB (alternatywnym silnikiem jest MyISAM, który nie jest dobry i krytycznie nie obsługuje transakcji), a samo wyszukiwanie rozmyte nie wydaje się najlepszą metodą wykrywania podobieństw. * Użyj simhash lub podobnego. Problem polega na tym, że chciałbym również móc wykrywać synonimy, których nie widzę, jak simhash sobie z tym radzi. Na przykład adres może wyglądać tak: „Jakaś droga” lub „Jakaś ulica”. i nazwy mogą brzmieć: „Mike” lub „Michael” * Indeksuj dane za pomocą pochodnej Apache Lucene (elasticsearch/solr/etc) i wykonaj zapytanie, które prawdopodobnie zwróci wiele wyników. Jeśli chodzi o używanie Apache Lucene, czytałem o wykrywaniu podobieństw i używaniu podobieństwa cosinusów do uzyskania wartości od 0 do 1 z terminów wektory częstotliwości, które przechowuje lucene. Mógłbym zastosować to do wyników z zapytania lucene i sprawdzić, czy którykolwiek z wyników przekracza pewien próg. Obawiam się, jak istotne będzie podobieństwo cosinusów dla rodzaju przechowywanych danych, tj. liczby pól z pojedynczym lub niewielką liczbą słów w porównaniu do obliczania podobieństwa cosinusów w porównaniu z jakimś dużym dokumentem tekstowym . Zasadniczo zastanawiam się, jaki jest najlepszy sposób na deduplikację tego typu danych (lub alternatywnie wykrywanie podobieństw z tego typu danymi)?


title: Dlaczego dane wyjściowe kompilatora nazywane są kodem obiektowym?

text: Z eseju _Programming Languages Explained_ autorstwa Paula Grahama, opublikowanego w _Hackers & Painters_: > Język wysokiego poziomu, który podajesz kompilatorowi, jest również znany jako _źródło > kod_ , a generowane przez niego tłumaczenie na język maszynowy nazywa się _obiekt > kod_. Z artykułu Wikipedii na temat kodu obiektowego: > Kod obiektu, a czasem moduł obiektu, jest tym, co produkuje kompilator komputerowy. Z definicji 'kompilatora': > Tradycyjnie dane wyjściowe kompilacji nazywano kodem obiektowym lub > czasami modułem obiektowym. (Zauważ, że termin "obiekt" tutaj nie jest związany > z programowaniem obiektowym.) Więc do czego _jest_ odnosi się termin obiekt?


title: Lisp w Gnu

text: Ponieważ projekt GNU świętuje swoją rocznicę, a pierwsze ogłoszenie o GNU jest pod adresem (http://www.gnu.org/gnu/initial- Announcement.en.html) w każdym miejscu, przeczytałem go ponownie i potknąłem się na planie systemu okien opartego na Lispie: > i ewentualnie systemu okien opartego na Lispie, przez który kilka programów Lisp > i zwykłych programów Uniksowych może współdzielić ekran. Powszechnie wiadomo, że Stallman miał doświadczenie seplenienia i uruchomił oparte na nim projekty (Emacs, Guile). Jak rozumiem, preferowanym środowiskiem graficznym Stallmana dla systemu GNU jest obecnie GNUstep (który wydaje się być trochę uśpiony). Patrząc na demonstracje maszyn Symbolics Lisp, jestem naprawdę pod wrażeniem potężnego podejścia i myślę, że Stallman miał coś takiego na myśli podczas ogłoszenia. Zastanawiam się więc: **Co się stało z tym planem systemu okiennego opartego na Lispie? Czy rzeczywiście był kiedyś ścigany?**


title: Platforma do gier dla wielu użytkowników w czasie rzeczywistym

text: Rozważam stworzenie gry dla wielu użytkowników w czasie rzeczywistym i chcę zebrać trochę informacji o możliwościach, zanim zrobię prawdziwy program. Zastanawiałem się, jak najlepiej zadać to pytanie, i dla uproszczenia, najlepszym sposobem, jaki przyszło mi do głowy, było zrobienie analogii do gry na boisku (lub placu zabaw). W grze terenowej Darebase są dwie lub więcej baz. Na początek w każdej bazie jest jedna drużyna. Gra to fantazyjna gra w berka. Kiedy dwie osoby spotykają się w terenie, osoba, która ostatnio opuściła swoją bazę, chwyta drugą osobę. Następnie wracają do bazy tej osoby. Gra trwa, dopóki wszyscy nie będą częścią tej samej drużyny. Tak więc, porównując to do gry komputerowej online, załóżmy, że istnieje nieskończona liczba zasad. Kiedy dana osoba rozpoczyna grę, ma zespół, który znajduje się na przykład pod jego aktualnymi współrzędnymi GPS. Mógłby to być świat wirtualny, ale załóżmy, że wirtualny świat odpowiada rzeczywistym współrzędnym GPS gracza. Oprogramowanie gry następnie sprawdza bazę danych, aby zobaczyć, gdzie znajduje się najbliższa inna baza, która jest online, a obie drużyny grają w swoją grę w wirtualny tag. Zwróć uwagę, że użytkownik drugiej bazy może mieć inną bazę niż ta, którą prowadzi bieżący użytkownik jako najbliższa mu baza, w którym to przypadku byłby w dwóch równoczesnych bitwach, po jednej z każdą bazą. Kiedy przechodzą w tryb offline, stan ich graczy jest zapisywany gdzieś na serwerze. Logika gry wymaga od graczy pewnego rodzaju automatycznej logiki, aby mogli radzić sobie w ograniczony sposób przy użyciu podstawowych zasad, dopóki ich użytkownik nie wróci do trybu online. Użytkownik nie kontroluje bezpośrednio ruchów graczy, ale wydaje ogólne dyrektywy, które wpływają na logikę ruchu graczy. Myślę, że ta analogia jest wystarczająco dobra, aby sformułować moje pytanie. Przyglądałem się smartfoxserverowi, ale nie jestem jeszcze przekonany, że to najlepsza opcja, a nawet, że w ogóle zadziała. Jedną z możliwości byłoby oczywiście wdrożenie własnego serwera internetowego, ale wolałbym tego nie robić, jeśli istnieje już usługa, z której mógłbym skorzystać. Zauważ, że darebase nie jest grą, którą zamierzam zaimplementować, ale po zastanowieniu może to również nie być złym pomysłem. To, czego szukam, to odpowiednia architektura, która może wykonywać następujące czynności: * Działać jako repozytorium zapisanych stanów gry * Zapewnić strukturę, która pozwala wielu graczom komunikować się ze sobą. * (opcjonalnie) wykonanie części logiki gry, na przykład w grze darebase, kto decyduje, kto kogo oznaczył? Czy jest to jeden czy obaj klienci, czy też serwer? Nigdy nie miałem do czynienia z takim środowiskiem czasu rzeczywistego dla wielu użytkowników, więc mogę tylko zgadywać pułapki jednej decyzji przeciwko drugiej.


Jaki jest czasownik oznaczający „zrobić coś we wtyczce”? Przykładowe użycie: "Programista, czy możesz zrobić z Module Foo wtyczkę?". "Tak proszę pana, mogę `trochę czasownika` Module Foo". Terminy, które brałem pod uwagę: pluginify, pluginize, make pluggable Kryteria akceptacji: Pojedynczy czasownik, który oznacza „utworzyć coś we wtyczce” lub „utworzyć coś jako wtyczkę”. _Szukam terminu, który jest już używany_, a nie nowego.


title: Dynamiczne wiązanie Java

text: Mam problem ze zrozumieniem zasady OOP Polymorphic Dynamic Binding (Le Binding) w Javie. Szukałem pytania dotyczącego javy i nie byłem pewien, czy ogólna odpowiedź na to, jak działa dynamiczne wiązanie, będzie dotyczyć Java Dynamic Binding, napisałem to pytanie. Biorąc pod uwagę: class Person { private String name; Osoba(InitialName) { name = InitialName; } // nieistotne metody są tutaj. // Zastępuje metodę obiektów public void writeOutput() { println(name); } } class Student extends Osoba { private int numer studenta; Student(String intitialName, int initialStudNumber) { super(initialName); NumerUcznia = początkowy NumerUcznia; } // nieistotne metody tutaj... // nadpisuje metody Osoba, Student i Obiekty public void writeOutput() { super.writeOutput(); println(numer studenta); } } class Undergaraduate rozszerza Student { private int level; Licencjat(String nazwapoczątkowa, int początkowy numer studenta, int początkowy poziom) { super(nazwapoczątkowa,początkowy numer studenta); poziom = początkowyPoziom; } // nieistotne metody są tutaj. // pomija metody Osoba, Student i Obiekty public void writeOutput() { super.writeOutput(); println(poziom); }            }      Zastanawiam się. gdybym miał tablicę o nazwie person zadeklarowaną jako zawierającą obiekty typu Person: Person[] people = new Person[2]; person[0] = nowy Licencjat("Cotty, Manny",4910,1); osoba[1] = nowy uczeń("DeBanque, Robin", 8812); Biorąc pod uwagę, że osoba[] jest **określona** jako należąca do typu **Osoba**, można oczekiwać, że na przykład w trzecim wierszu, w którym osoba[0] jest inicjowana do nowego obiektu licencjackiego, uzyska tylko instancję zmienna z metody Person i Persons ponieważ nie przypisanie nowego licencjata do jego przodka oznacza obiekt licencjacki z dostępem do Person - jest to Ancestors, Methods i Instance zmienne... Tak więc ...z następującym kodem oczekiwałbym person[ 0].writeOutput(); // wywołuje licencjat::writeOutput() osoba[1].writeOutput(); // wywołuje Student::writeOutput() person[0], aby nie miała nadpisanej metody writeOutput() licencjatu, ani osoba[1] nie miała nadpisanej metody studenta - writeOutput(). Gdybym miał Person mikeJones = new Student("Kto?,MikeJones",44,4); mikeJones.writeOutput(); Zostanie wywołana metoda Person::writeOutput(). Dlaczego tak nie jest? Czy ma to związek z czymś, czego nie rozumiem w odniesieniu do tablic? Czy deklaracja Person[] people = new Person[2] nie wiąże metody tak jak w poprzednim kodzie?


title: Co powstrzymuje Oracle przed obsługą kolumn tożsamości (autonumerycznych)?

text: EDYCJA: Jak wskazuje odpowiedź Givenkoa, Oracle Database 12c (wydany kilka lat po tym, jak zadano to pytanie) obsługuje kolumny tożsamości. * * * O ile mi wiadomo, Oracle RDBMS jest jednym z niewielu (jedynych?) produktów bazodanowych SQL, które nie obsługują kolumn tożsamości/autonumerycznych. Alternatywą oferowaną przez Oracle są sekwencje bazy danych, funkcja pod wieloma względami znacznie potężniejsza niż kolumny autonumeryczne, ale nie równoważna. Nie chodzi o to, że nie lubię sekwencji. To, czego nienawidzę, to posiadanie innego modelu programowania do generowania wartości tożsamości wierszy między Oracle a dowolną inną bazą danych. Na przykład często próbuję skonfigurować HSQL lub SQLite dla aplikacji Java, które w końcu będą działać na bazie danych Oracle, gdy nie pracuję konkretnie w warstwie danych (po prostu jako baza danych lub mockowanie). Nie mogę tego łatwo zrobić, ponieważ potrzebuję innego zestawu skryptów SQL DDL: jednego dla Oracle i jednego dla wszystkich innych; Potrzebuję również dwóch zestawów plików mapowania Hibernate, jeśli używam Hibernate. Intryguje mnie to, że Oracle Database, będący jednym z najbardziej kompletnych i niezawodnych pakietów oprogramowania dla przedsiębiorstw ostatniej dekady, nie umieścił tej pozornie podstawowej funkcji w swoim produkcie, ale prawie każdy inny RDBMS, nawet te mniejsze, ma ją. Czemu? Dlaczego Oracle nie obsługuje składni skrótów kolumny tożsamości opartej na sekwencji, z której mogą korzystać głupi i leniwi ludzie, tacy jak ja? Jedynym powodem, o którym mogę pomyśleć, jest to, że Oracle robi to celowo jako strategia blokowania dostawcy, więc Twój kod jest trudniejszy do migracji do innych RDBMS, w których nie można użyć sekwencji bazy danych. A może po prostu się mylę i jestem zdezorientowany? Proszę, oświeć mnie.


title: Jak Twoja firma zarządza wiedzą i informacją?

text: Interesuje mnie architektura, metody i oprogramowanie wykorzystywane przez Państwa firmę do przechwytywania i przechowywania wiedzy. Czy informacje można łatwo przeszukiwać (zwłaszcza dla osób nie posiadających wiedzy technicznej)? Czy jest przechowywany w centralnym repozytorium, czy w kilku miejscach? Czy uważasz, że obecna implementacja jest odpowiednia? Co można poprawić?


title: Wydrukuj raport dostępu w formacie PDF w systemie Windows 8 z aplikacji VB6

text: Pracuję z VB6 i Microsoft Access 2013 i Windows 8. Próbuję wyprowadzić raport dostępu jako pdf z aplikacji VB6. Mam ten kod: Public Sub OpenReport(sReportName As String, frmCallingForm As Form) Dim objAccess As Access.Application Dim lResult As Long Dim Path As String Path = Environ$("AppData") Set objAccess = New Access.Application With objAccess On Błąd GoTo ErrHndlr .OpenCurrentDatabase App.Path & "\" & "OrderBackEnd.mdb" .DoCmd.OutputTo acOutputReport, sReportName, acFormatPDF, Path & "\rpt" & sReportName & ".pdf", False .Visible = True w przypadku błędu GoTo 0 .Quit acQuitSaveNone Koniec z zestawem objAccess = Nic lResult = ShellExecute(frmCallingForm.hWnd, "Open", Path & "\rpt" & sReportName & ".pdf", 0&, 0&, 3) Exit Sub ErrHndlr: objAccess.Visible = True MsgBox Err.Number & ":" & Err.Description End Sub Problem polega na tym, że wyjście się zawiesza i zawiesza system. Kiedy zamykam aplikację, w tle mojego formularza zauważam poniższe pole. Jedynym sposobem wyświetlenia poniższego pola jest Zakończ zadanie w aplikacji VB6. Wygląda na to, że nie kojarzy się z acFormatPDF w wierszu OutputTo. Czy istnieje sposób na rozwiązanie tego problemu lub obejście? Jeśli ręcznie wykonam ten proces w programie Access, działa dobrze. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/KJCAL.png)


title: Zastosowanie zasad Czystego Kodu do języków funkcjonalnych

text: Obecnie czytam _Clean Code_ Roberta Martina. Myślę, że to świetnie, a pisząc kod OO biorę jego lekcje sobie do serca. W szczególności uważam, że jego rady dotyczące używania małych funkcji o znaczących nazwach sprawiają, że mój kod przepływa znacznie płynniej. Najlepiej podsumowuje to ten cytat: > [Chcemy] móc czytać program tak, jakby był zbiorem > akapitów Do > akapitów, z których każdy opisuje aktualny poziom abstrakcji i > odwołuje się do kolejnych akapitów Do > na następny poziom w dół. ( _Czysty kod_ , strona 37: „Akapit DO” to akapit, który zaczyna się od zdania wyrażonego w bezokoliczniku. „Aby wykonać X, wykonujemy kroki Y i Z”, „Aby zrobić Y, my...” itd. ) Na przykład: > TO RenderPageWithSetupsAndTeardowns sprawdzamy, czy strona jest > stroną testową, a jeśli tak, dołączamy ustawienia i rozłączenia. W obu przypadkach > renderujemy stronę w HTML. Piszę również funkcjonalny kod do mojej pracy. Przykłady Martina w książce zdecydowanie czyta się tak, jakby były zbiorem akapitów i są bardzo jasne – ale nie jestem pewien, czy „czyta się jak zbiór akapitów” jest pożądaną cechą, aby kod funkcjonalny miał . Biorąc przykład ze standardowej biblioteki Haskell: maximumBy :: (a -> a -> Ordering) -> [a] -> a maximumBy _ [] = błąd "List.maximumBy: pusta lista" maximumBy cmp xs = foldl1 maxBy xs gdzie maxBy x y = case cmp x y GT -> x _ -> y To jest tak daleko, jak to tylko możliwe z rady Martina, ale to zwięzły, idiomatyczny Haskell. W przeciwieństwie do przykładów Javy w jego książce, nie wyobrażam sobie żadnego sposobu przekształcenia tego w coś, co ma rytm, o który prosi. Podejrzewam, że Haskell napisany w standardzie _Clean Code_ wypadłby jako rozwlekły i nienaturalny. Czy mylę się, biorąc pod uwagę (przynajmniej część) _Czysty kod_ w sprzeczności z najlepszymi praktykami programowania funkcjonalnego? Czy istnieje sensowny sposób na reinterpretację tego, co mówi w innym paradygmacie?


title: Etyka, Klienci i konsekwencje prawne

text: Pytam o to po przeczytaniu pytania SO, w którym OP poprosił o pomoc w dekodowaniu zaciemnionego kodu, który wygląda na to, że należy do firmy o zamkniętym kodzie źródłowym. Klient OP mówi: „ _Nie znam pełnych szczegółów prawnych kontraktu (jeśli taki istniał) na rozwój kodu. Twierdzą, że został im w pełni opłacony i wydany. Jeśli rozwój kodu był całkowicie poza zakresem i użycie Ioncube, to jest dyskusyjne, czy jest to nieetyczne._ " Dla mnie cała sprawa śmierdzi: klient kupił produkt i wynajął OP, aby go zdekodować, ale albo nie rozumie, że nie kupił licencji na modyfikować, rozpowszechniać, odtwarzać ani odtwarzać oprogramowania. Ale łatwo jest po prostu przyjąć pracę i powiedzieć „cokolwiek” na tego typu rzeczy, ale jest miejsce na to, aby było to uzasadnione. Jakie względy powinniśmy wziąć pod uwagę, aby upewnić się, że postępujemy właściwie, a ponadto chronić się?


title: Jaka jest różnica między „deweloperem” a „deweloperem-analitykiem”?

text: W większych firmach wydaje się, że istnieje rozróżnienie między tymi dwoma stanowiskami. Czym dokładnie się różnią?


title: Jakie są plusy i minusy posiadania partnera życiowego z tej samej dziedziny?

text: Posiadanie partnera życiowego zdecydowanie wpływa na karierę jednostki. Dla m.in. Programista spędza godziny przy komputerze do pracy. Współmałżonek pracujący w tej samej dziedzinie co ty nie miałby nic przeciwko dostosowaniu się do obowiązków domowych. Z drugiej strony partner z innej dziedziny nie zrozumie znaczenia twojej pracy, a to może spowodować problemy w życiu małżeńskim. Poza tym czynnikiem, na jakie, według Ciebie, inne czynniki wpływają wybór partnera z tej samej dziedziny? A jak przydatne dla programistów jest posiadanie małżonka z tej samej dziedziny, w której pracujesz?


title: Jak działa trilicense (mpl,gpl,lgpl), gdy chcesz z niego korzystać na ogólnodostępnej stronie internetowej?

text: Próbowałem szukać tej odpowiedzi od dłuższego czasu i przejrzałem wszystkie różne FAQ i dokumentację dotyczącą trzech licencji; ale żaden z nich nie był w stanie odpowiedzieć na moje pytanie. Od jakiegoś czasu pracuję nad pomysłem na stronę internetową, a ostatnio znalazłem oprogramowanie open source, które ma wiele podobnych komponentów. Jest licencjonowany na podstawie licencji mpl/gpl/lgpl. Myślę, że w większości rozumiem konsekwencje wyszukiwania i czytania tego, co jest wymagane, jeśli modyfikuję/używam i chcę rozpowszechniać oprogramowanie. Ale co, jeśli chcę modyfikować, a nie rozpowszechniać, ale używać go w publicznej witrynie, z której generuję przychody z reklam? Czy to nielegalne? Nie wygląda na to, że pochodzi z innych systemów open source, na przykład Drupal, gdzie pozwalają na korzystanie z oprogramowania, ale nie jest to uważane za „dystrybucję”, jeśli ludzie po prostu odwiedzają witrynę. Wiem, że ta strona może nie być najlepszym źródłem informacji i wypróbowałem kilka innych stron, ale nie otrzymałem żadnych jasnych odpowiedzi. Jeśli znasz jakieś inne źródło, z którym również mógłbym się skontaktować, daj mi znać. Linki dla tych, którzy nie wiedzą: * MPL - Wikipedia, Legalese * GPL - Wikipedia, Legalese * LGPL - Wikipedia, Legalese


title: Jak zachować znajomość wcześniej pracowanej technologii/języka/funkcji?

text: Jednym z problemów, z jakimi borykałem się przez lata, jest to, że kiedy przestaję używać technologii (COM,QT)/języka (VBScript)/funkcji (szablony) z czasem tracę w tym umiejętności. To, co według ciebie jest „najłatwiejszym” sposobem na zachowanie znajomości, tak że kiedy wracam do któregoś z nich, wysiłek związany z ponownym uczeniem się jest minimalny.


title: szykuje fałszywe dane, biorąc pod uwagę przejście od fałszerstwa do fałszerstwa, jakiekolwiek korzyści lub pułapki?

text: W Ruby on Rails zwykle używałem **Forgery** do generowania fikcyjnych danych do testów. Ostatnio zauważyłem, że kilku klientów i samouczki korzysta z **Fakera**. Oba wydają się dość podobne w użyciu i popularności: **Fałszyw** 128 widelców, 418 obserwatorów. **Fałszerstwo** 59 widelców, 399 obserwatorów. Oba wydają się podobne pod względem aktualnej wersji: **Fałszywe** Większość aktualizacji pochodzi sprzed 6 i 9 miesięcy. **Fałszystość** Większość aktualizacji pochodzi sprzed 4 i 9 miesięcy. Jedynym wyróżnikiem, jaki do tej pory znalazłem, jest to, że **Fałszerstwo** wydaje się mieć lepsze instrukcje. Czy istnieją jakieś szczególne korzyści lub wady używania jednego nad drugim? Czy kiedykolwiek musiałeś przełączyć się z jednego na drugi z jakiegoś konkretnego powodu?


title: Jak jedna jednostka testuje algorytm?

text: Ostatnio pracowałem nad pokazem slajdów JS, który obraca obrazy przy użyciu algorytmu średniej ważonej. Na szczęście Timgilbert napisał skrypt ważonej listy, który implementuje dokładnie taki algorytm, jakiego potrzebowałem. Jednak w swojej dokumentacji zanotował w todos: "testy jednostkowe!". Chciałbym wiedzieć, w jaki sposób można przeprowadzić testowanie jednostkowe algorytmu. W przypadku średniej ważonej, jak stworzyłbyś dowód, że średnie są dokładne, gdy występuje element losowości? Próbki podobnego kodu byłyby bardzo pomocne w moim zrozumieniu.


title: Programujesz do użytku na komputerach i urządzeniach mobilnych?

text: Jestem na samym początku tworzenia aplikacji/programu desktopowego. Chcę, aby była wieloplatformowa i być może również w wersji na tablety (najlepiej kanapka z Androidem Icecream). Pamiętaj, że muszę uruchomić go w trybie offline. Myślałem o następujących podejściach: * ADOBE Air, ponieważ nie potrzebuję dużej wydajności. Poza tym w przeszłości zajmowałem się programowaniem internetowym, które może się przydać. Afaik działałby na systemach OS X i Windows, a także powinien działać na systemach mobilnych. * Ilość Znalazłem ostatnio jakiś fajny pulpit oparty na Qt i przeczytałem, że działa również na Androidzie. Poza tym lubię SDK. * HTML5 / JS. Znowu moje tło internetowe powinno mi tutaj pomóc. Nie potrzebuję żadnych skryptów pobocznych, więc powinno działać bez instalowania czegokolwiek poza przeglądarką. Jak łatwo można to przekształcić w aplikację na Androida? Może istnieć mnóstwo innych (lepszych) sposobów na zrobienie tego, ale jeszcze o nich nie pomyślałem. Czy możesz pomóc? Jak byś stworzył taką aplikację. Czy nie byłoby lepiej zrobić jakiegoś czystego klienta stacjonarnego, a następnie stworzyć wersję na tablety? Czy wolałbyś zacząć tworzyć stronę internetową i martwić się później, jak przekształcić się w aplikację?


title: CQRS + Event Sourcing: (czy to prawda) Polecenia są zazwyczaj przekazywane punkt-punkt, podczas gdy zdarzenia domeny są przekazywane przez pub/sub?

text: Nie wiedziałem, jak skrócić ten tytuł. Zasadniczo staram się owinąć głowę wokół koncepcji CQRS (http://en.wikipedia.org/wiki/Command-query_separation) i pokrewnych koncepcji. Chociaż CQRS niekoniecznie zawiera przesyłanie wiadomości i pozyskiwanie zdarzeń, wydaje się to być dobrą kombinacją (jak widać na wielu przykładach / postach na blogu łączących te koncepcje ) Biorąc pod uwagę przypadek użycia zmiany stanu dla czegoś (powiedzmy, aby zaktualizować Pytanie dotyczące SO, czy uważasz, że poniższy przepływ jest poprawny (zgodnie z najlepszą praktyką)? System wydaje zagregowane polecenie UpdateQuestionCommand, które można podzielić na kilka mniejszych poleceń: UpdateQuestion, która jest ukierunkowana na główny zagregowany katalog pytań, oraz UpdateUserAction (do liczenia punktów itp.) ukierunkowany na główny zagregowany użytkownik. Są one wysyłane asynchronicznie przy użyciu komunikatów typu punkt-punkt. Zagregowane korzenie robią swoje i jeśli wszystko pójdzie dobrze, uruchamiają odpowiednio zdarzenia QuestionUpdated i UserActionUpdated, które zawierają stan, który jest zlecany do magazynu zdarzeń. Te wydarzenia są również umieszczane w kolejce pub/sub do transmisji. Każdy subskrybent (wśród których prawdopodobnie jeden lub wiele projektorów, które tworzą widoki do odczytu) może zasubskrybować te wydarzenia. Ogólne pytanie: Czy rzeczywiście najlepszą praktyką jest to, że polecenia są przekazywane punkt-punkt (tj. Odbiorca jest znany), podczas gdy zdarzenia są transmitowane (tj. Odbiorca (odbiorcy) jest nieznany)? Zakładając powyższe, jaka byłaby zaleta/niekorzyść zezwalania na nadawanie poleceń przez pub/sub zamiast z punktu do punktu? Na przykład: podczas nadawania poleceń podczas korzystania z serwisu Saga (http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/) może być problemem, ponieważ mediacyjna rola, jaką Saga musi odegrać w przypadku uszkodzenia jednego z korzeni skupisk, jest utrudniona, ponieważ saga nie wie, które korzenie skupień biorą udział na początku. Z drugiej strony dostrzegam zalety (elastyczność), gdy dozwolone byłoby rozgłaszanie poleceń. Jakakolwiek pomoc w oczyszczeniu mojej głowy jest bardzo ceniona.


title: Jak ...skonfigurować nowe środowisko Java - głównie interfejsy

text: Wygląda na to, że muszę skonfigurować nowe środowisko Java dla niektórych interfejsów, które musimy zbudować. Powiedzmy, że nasz system to X i potrzebujemy interfejsów do systemów A, B i C. Następnie napiszemy interfejsy X-A, X-B, X-C. Nasz system ma w sobie szynę, więc publikowanie po naszej stronie będzie odbywało się na szynie, a procesy interfejsu będą pobierać z szyny i mapować do systemu docelowego. To jest dla systemu opartego na dostawcy - więc większości podstawowego kodu nie możemy dotknąć. Obecnie myślimy, że będziemy mieć kilka procesów, po jednym na interfejs, który musimy wykonać. Pytanie brzmi, jak uporządkować rzeczy. Kilka interfejsów API, z którymi musimy pracować, jest opartych na Javie. Moglibyśmy przejść na EJB, ale wolimy zachować prostotę, jeden proces na interfejs, abyśmy mogli uruchamiać je pojedynczo. Podobnie SOA wydaje się przesadą, chociaż prawdopodobnie mieszam moje przemyślenia na temat jego implementacji w porównaniu z koncepcjami za nim stojącymi... Obecnie myślę, że coś opartego na Springu jest drogą do zrobienia. W rzeczywistości, w stylu „wykorzystaj nową technologię, jeśli to możliwe”, myślę, że możemy wciągnąć w to trochę jruby, być może po to, aby interfejsy API były bardziej czytelne, być może podobne do obsługi zdarzeń i aby kod interfejsu był bardziej biznesowy. przyjazny, może nawet przechowujący kod mapowania w bazie danych, jako fragmenty kodu ruby, które są wmieszane w… ale to na marginesie… Tak więc wszelkie komentarze/myśli na temat podejścia Springa – coś bardziej aktualnego/istotnego. dni. EDYCJA: Patrząc dalej na JRuby, kusi mnie, aby napisać go w całości w JRuby ... w takim przypadku potrzebujemy w ogóle jakichkolwiek frameworków, być może kilku klejnotów, aby wszystko było jaśniejsze ... Z góry dziękuję, Chris


title: Wyjaśnienie, w jaki sposób „Powiedz, nie pytaj” jest uważane za dobre OO

text: Ten wpis na blogu został opublikowany w Hacker News z kilkoma głosami za. Większość tych przykładów pochodzących z C++ wydaje się być sprzeczna z tym, czego mnie nauczono. Przykład nr 2: Źle: def check_for_overheating(system_monitor) if system_monitor.temperature > 100 system_monitor.sound_alarms end end versus good: system_monitor.check_for_overheating class SystemMonitor def check_for_overheating if temperature > 100 sound_alarms end end end preferują wolne funkcje zamiast funkcji składowych, ponieważ zwiększają enkapsulację. Oba są identyczne semantycznie, dlaczego więc preferować wybór, który ma dostęp do większej liczby państw? Przykład 4: Źle: def nazwa_ulicy(użytkownik) if user.address user.address.street_name else 'Brak nazwy ulicy w pliku' end end kontra dobry: def street_name(user) user.address.street_name end class Adres użytkownika @address | | NullAddress.new end end class NullAddress def street_name 'Brak nazwy ulicy w pliku' end end Dlaczego `User` jest odpowiedzialny za formatowanie niepowiązanego łańcucha błędu? Co jeśli chcę zrobić coś poza wypisaniem `'Brak nazwy ulicy w pliku'` jeśli nie ma nazwy ulicy? A jeśli ulica ma taką samą nazwę? * * * **Czy ktoś mógłby mnie oświecić zaletami i uzasadnieniem „Powiedz, nie pytaj”?** Nie szukam tego, co jest lepsze, ale staram się zrozumieć punkt widzenia autora.


title: Jakie znaczenie ma każdy akapit „oświadczenia o zgodzie na kopiowanie” licencji GPL?

text: Część instrukcji FSF dotyczących umieszczania programu na licencji GPL zawiera następujące „oświadczenie o uprawnieniach do kopiowania” na górze pliku, pod uwagą o prawach autorskich: Ten program jest wolnym oprogramowaniem: możesz go redystrybuować i/lub modyfikować zgodnie z warunki Powszechnej Licencji Publicznej GNU opublikowane przez Fundację Wolnego Oprogramowania, w wersji 3 tej Licencji lub (według Twojego wyboru) dowolnej późniejszej wersji. Ten program jest rozpowszechniany w nadziei, że będzie przydatny, ale BEZ ŻADNEJ GWARANCJI; bez dorozumianej gwarancji PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Więcej szczegółów znajdziesz w Powszechnej Licencji Publicznej GNU. Wraz z tym programem powinieneś otrzymać kopię GNU General Public License. Jeśli nie, zobacz <http://www.gnu.org/licenses/>. Zastanawiam się, jakie jest znaczenie każdego akapitu w tym stwierdzeniu. W szczególności, w przypadku programu, który zamierzam wydać na licencji GPL, rozważam pominięcie drugiego i trzeciego akapitu, aby skrócić długość oświadczenia, i zastanawiam się, jakie byłyby negatywne konsekwencje (jeśli w ogóle) działania więc.


title: Przekonanie klienta do zaoferowania usługi sieciowej RESTful zamiast usługi SOAP?

text: ### TŁO: Opracowuję niestandardowe wtyczki WordPress dla moich klientów, które następnie rozpowszechniają za pośrednictwem repozytorium wtyczek WordPress. Coraz częściej spotykam klientów, którzy chcą, aby moje wtyczki WordPress korzystały z usług internetowych SOAP opracowanych przez ich wewnętrzne zespoły programistyczne _(i na marginesie, jak dotąd każda z tych usług internetowych SOAP została opracowana przy użyciu ASP.NET)._ Od moje doświadczenie, zwłaszcza w zakresie tworzenia wtyczek do WordPressa, interakcja z usługami sieciowymi RESTful jest prawie zawsze trywialna i po prostu działają. Z mojej wprawdzie wiedzy z trzeciej ręki na temat faktycznego korzystania z usług internetowych SOAP za pośrednictwem wtyczek WordPress, zwłaszcza tych, które są szeroko rozpowszechniane wśród głównie nietechnicznych użytkowników WordPressa, osadzenie klienta SOAP jest obarczone niebezpieczeństwem, ponieważ jest tak wiele rzeczy, które mogą powodować SOAP wywołanie usługi sieciowej nie powiodło się; zły lokalny stos SOAP, brak lokalnego stosu SOAP, zniekształcona odpowiedź usługi itp. Odkryłem, że wielu ludzi biznesu na stanowiskach decyzyjnych w moich _(przyszłych)_ klientach ma niewielką lub żadną wiedzę na temat namacalne różnice między usługami sieciowymi RESTful a usługami sieciowymi opartymi na SOAP. Dla tych osób usługa sieciowa jest usługą sieciową; to 6 jednego, 1/2 tuzina drugiego. Mają tendencję do myślenia _"O co chodzi z całym tym zamieszaniem?"_ Dalej programiści ASP.NET w tym kliencie, programiści, którzy zagłębili się w zestaw narzędzi Visual Studio, zostali uwarunkowani doskonałym marketingiem narzędzi programistycznych firmy Microsoft, aby postrzegać SOAP jako łatwy sposób ; wystarczy dodać Visual Studio, a usługa sieciowa SOAP działa jak magia! I tak się dzieje, przynajmniej dopóki nie spróbujesz użyć innego stosu, aby uzyskać dostęp do usługi sieci Web i/lub dopóki nie spróbujesz uzyskać osób, które nie używają programu Visual Studio lub nie zaadoptują usługi sieci Web; wtedy obraz jest zupełnie inny. Kiedy ci programiści słyszą, że opowiadam się za wdrożeniem usługi sieciowej RESTful zamiast tego, jeśli otrzymam odepchnięcie, otrzymuję jedną z dwóch odpowiedzi; mówią: 1. _"Po co wkładać tyle wysiłku w tworzenie usługi sieciowej zgodnej z REST, skoro już stworzyłem usługę sieciową SOAP do użytku? Po prostu tworzysz dla mnie więcej pracy, a ja mam inne rzeczy do zrobienia. "_ 2. _"Nie ma żadnych korzyści z usług sieciowych zgodnych z REST; SOAP jest w rzeczywistości znacznie lepszy, ponieważ mogę stworzyć obiekt, a następnie mogę go zaprogramować tak jak obiekt. Plus SOAP jest używany przez programistów dla przedsiębiorstw, a my jesteśmy programistami dla przedsiębiorstw sklep; REST nie jest po prostu do poważnego użytku."_ Na marginesie, myślę, że jednym z powodów, dla których otrzymuję te odpowiedzi, jest to, że programiści ASP.NET często mają niewielką lub żadną ekspozycję na REST _ (czy ten artykuł nie jest na marginesie dla większości programistów ASP.NET?)_ Myślę, że oni naprawdę nie wiedzą, jak niewiele pracy wymaga utworzenie usługi sieciowej RESTful HTTP `GET`, gdy mają już cały kod zaimplementowany dla usługi sieciowej SOAP. I myślę, że dzieje się tak, ponieważ podejście Microsoftu polega na dostarczaniu narzędzi programistom, aby nie czuli potrzeby poznawania szczegółów. Skoro Visual Studio twierdzi, że zajmuje się tak wieloma rzeczami dla programistów, dlaczego programista miałby się uczyć wszystkiego, co Visual Studio twierdzi, że obsługuje? Wiem, że tak właśnie myślałem, kiedy kodowałem strony internetowe na platformę Microsoft. Dopiero gdy przeszedłem na PHP, zdałem sobie sprawę, czym są nagłówki HTTP i zdałem sobie sprawę z różnicy między kodem statusu HTTP 301 i 302, a co najważniejsze, zdałem sobie sprawę, że te pojęcia są zarówno łatwe do zrozumienia, jak i niezwykle ważne do zrozumienia jeśli chce się stworzyć solidną i skuteczną witrynę w sieci. * * * ### MOJE PYTANIE: **Pytam, jak przeciwdziałać tym odpowiedziom i skłonić moich potencjalnych klientów do rozważenia utworzenia usługi sieciowej RESTful?** Jak mogę przekonać ich do wielu korzyści płynących z korzystania z Serwis internetowy RESTful może je zaoferować? Jak mogę sprawić, by zobaczyli duży potencjalny minus wypuszczenia wtyczki WordPress, która potencjalnie wiąże się z dużymi kosztami wsparcia? * * * ### UWAGA: Jeśli nie zgadzasz się z moim założeniem, że wywoływanie usług internetowych RESTful jest lepszym rozwiązaniem niż wywoływanie usług internetowych SOAP z poziomu wtyczki WordPress, to proszę zrozumieć, że proszę o pomoc ludzi, którzy zgadzają się z moim założeniem i _idealnie Nie zamierzam dyskutować o założeniu. _ Jeśli jednak czujesz potrzebę kłótni, zrób to z szacunkiem, uznając, że każdy z nas ma prawo do własnych opinii i że możesz nigdy nie być w stanie mnie przekonać, abym się zgodził z Twoimi. Co oczywiście powinno być w porządku.


title: Kolejka w grach na facebooku [szukanie przeciwnika i takie tam]

text: Widziałem wiele gier na FB, które mają kolejkę, która łączy cię z przeciwnikiem, z którym powinieneś grać. Więc moje pytanie brzmi: w jakim języku można to zakodować? Czy można to zrobić w PHP/Javascript? Czy ktoś ma jakiś prawdziwy przykład lub samouczek, jak to się robi? Z góry dziękuję!


title: Czy są jakieś teorie lub książki na temat debugowania „ogólnie”?

text: Czytałem i studiowałem dużo informatyki i inżynierii i rzadko lub nigdy nie widziałem książki o debugowaniu lub teorii debugowania (chociaż z pewnością opracowałem kilka własnych teorii debugowania). Czy są jakieś teorie i/lub książki dotyczące debugowania? Dlaczego? Dlaczego nie? Mogę przeczytać, jak debugować za pomocą gdb i niektóre z najbardziej przydatnych informacji na temat rozwoju, które otrzymałem z czytania, jak używać gdb.


title: Jak możemy obsłużyć wiele instancji metody za pośrednictwem pojedynczej instancji klasy?

text: Jak możemy obsłużyć wiele wystąpień metody za pośrednictwem pojedynczej instancji klasy (pojedyncze wywołanie konstruktora)? Aby rozwinąć, mam klasę obsługi, która ma dwie metody, powiedzmy `verifyUser(String JSON)` i `getUserInfo(String JSON)`. Zakładając, że jest wielu użytkowników korzystających z tych metod, będzie wiele wystąpień tych metod. Klasę obsługi należy zainicjować raz. Tj. wiele obiektów tej klasy nie jest dozwolonych, a raczej dozwolone są wielokrotne instancje metod. Jakie będzie idealne rozwiązanie umożliwiające współbieżne wywołania metod bez uszkadzania danych podczas wykonywania?


title: Refaktoryzacja podczas programowania

text: Kiedy stawiam problem, zwłaszcza gdy jest on skomplikowany, staram się poświęcić trochę czasu na przemyślenie sposobu, w jaki zamierzam go rozwiązać. Mimo to często zdarza się, że podczas programowania rozwiązania zaczynam myśleć o szczegółach problemu, który pominąłem, i odpowiednio dostosowuję kod. Rezultatem jest bałagan w kodzie, który wymaga refaktoryzacji. Chcę „refaktoryzować, jak idę”, ale chociaż wydaje się to dość łatwe, to naprawdę ciężko mi to zrobić. Kiedy szczegóły, które przegapiłem, są niewielkie, kuszące jest, aby dokonać małej aktualizacji mojego projektu, zamiast wymazywać to, co już napisałem i pisać tak, jak powinno. Brzmi to jak pytanie z oczywistą odpowiedzią, ale czy są jakieś techniki, których można użyć, aby lepiej „refaktorować na bieżąco”? Wiem, że to dobra zasada, ale raz za razem mi się to nie udaje.


title: Porady dotyczące rozgałęzień TFS

text: Jestem nowicjuszem w rozgałęzianiu i łączeniu, ale moim zadaniem było umożliwienie przyszłego rozwoju aplikacji przy jednoczesnym umożliwieniu naprawiania błędów w środowisku produkcyjnym. Zwykle jestem jedynym programistą w aplikacji, chyba że mam urlop. Obejrzałem film Pluralsight na temat rozgałęziania i przeczytałem trochę forum / stosu. Miałem nadzieję, że ktoś może przyjrzeć się mojej propozycji rozwiązania i krytyce. Obawiam się, że jeśli się nie pomylę, sprawię więcej problemów niż rozwiązań > Od wersji 1.1.0.0 wprowadziłem system rozgałęzień dla przyszłych > rozwoju. Wersja 1.1.0.0 to nasza gałąź produkcyjna. Tutaj nie powinny pojawiać się żadne zmiany, z wyjątkiem poprawek błędów. Wersja 1.2.0.0 to kolejna wersja i nasza > gałąź programistyczna. >> Po zakończeniu rozwoju, gałąź deweloperska połączy się z > Aplikacją (trunk). Aplikacja zostanie wdrożona do testów. Po > wylogowaniu gałąź rozwojowa stanie się produkcją, poprzednia wersja > gałąź zostanie usunięta. Nowa gałąź zostanie utworzona dla następnej wersji. > > W celu naprawy błędów, błędy są naprawiane w gałęzi produkcyjnej i > scalane z aplikacją, więc gdy gałąź rozwojowa łączy się z nią również > otrzymuje te poprawki.


title: Jak mam zająć się hostingiem aplikacji na Facebooku, które wybierają szybkość?

text: Moja sytuacja jest taka. Zakodowałem w php i zbudowałem aplikację na Facebooka. Po 3 dniach ma 13 000 użytkowników. Mam własny serwer w hostmonster. Jest to regularny plan, który kosztuje mnie około 70 dolarów rocznie. Ma nieograniczoną przepustowość. Nie spodziewałem się hostingu aplikacji ani tego, że może on odebrać tak wielu użytkowników. W ciągu ostatnich kilku dni przesłano już 1 GB danych. Planuję zbudować jeszcze kilka aplikacji (około 10-20) i w sumie dotrzeć do co najmniej miliona użytkowników. Czy powinienem kontynuować hosting na tym samym serwerze, czy przenieść się na VPS? Jestem studentem i nie mam zbyt dużego dochodu do dyspozycji. Więc chcę się przenieść tylko wtedy, gdy jest to konieczne. Obecnie pokazuje 1 Gb/nieskończoność transferu danych. Wszelka pomoc/sugestie są wysoko cenione.


title: Wywiad dla UX/UI Javascript

text: Prowadzę rozmowę kwalifikacyjną do pracy, w której wymagania są... Praktyka UX z doświadczeniem w zakresie UI i Javascript Oczekuję pytań być może o MVC, może o jakieś konkretne frameworki, takie jak backbone, yui lub jQuery UI. Czy są jakieś dobre zasoby, aby przygotować mnie do rozmowy kwalifikacyjnej? Jakieś oczywiste rzeczy, którym powinienem się wcześniej przyjrzeć?


title: Rest API i buforowanie danych

text: Opracowałem aplikację, w której powinieneś być w stanie przeglądać katalog produktów (**TYLKO DO ODCZYTU**), nawet dostęp do sieci jest wyłączony, brak Wi-Fi lub 3g/lte itp. Klienci (Windows, iOS, Android itp.) zużywają pozostałe interfejsy API. Do tej pory istnieje interfejs API REST, który pobiera części, takie jak kategorie z produktami i inne wywołania interfejsu API, aby uzyskać preferencje itp. To dodaje logikę u klienta, jak łączenie ich ze sobą w coś, czego deweloperzy nie lubią. Ponadto musimy dodać wiele cenników dla każdego produktu. Obecne proponowane rozwiązanie, którego domagał się zespół, to wymaganie sieci do tej operacji i uzyskanie produktów w cenie cennika. Idealnym rozwiązaniem byłoby zapytanie o to, co jest potrzebne za każdym razem, nie jest to prawdziwe rozwiązanie, ponieważ obniżyłoby to wydajność i uniemożliwiłoby korzystanie z trybu offline. Uważam więc, że każdy klient prawdopodobnie powinien po prostu przechowywać dane w prostej lokalnej bazie danych i resynchronizować je w oparciu o wersjonowanie? Produkty/katalogi zmieniają się około 1 raz w miesiącu.


title: Zwracanie kodu widoku w odpowiedzi API

text: Mam interfejs API, który zwraca tablicę użytkowników w formacie JSON w ramach danej pary granic długości/długości. Używam tych danych do wykreślenia wielu znaczników na mapie w oparciu o lokalizację każdego użytkownika. Chcę również renderować listę HTML na każde żądanie klienta, abym mógł wyświetlić listę wykreślonych użytkowników obok mapy. Jaki jest najlepszy sposób na dostarczenie klientowi kodu HTML listy? Wydaje mi się, że zwracanie kodu HTML dla listy użytkowników _w_ ramach początkowego wywołania interfejsu API (response.html lub coś w tym rodzaju) wydaje się niepoprawnym rozwiązaniem, chociaż wydaje mi się, że używam funkcji rogów do butów w czystą odpowiedź API. Nie chcę też wykonywać dwóch wywołań API (jednego dla danych początkowych i jednego dla HTML), z oczywistych powodów (narzut). Wreszcie, nie chcę generować HTML po stronie klienta (w JavaScript), ponieważ mam już klasę, która robi to za mnie po stronie serwera. Jakie opcje mi to pozostawia? Dziękuję


title: Czy ta wersja sortowania przez wstawianie ma złożoność O (n) w najlepszym przypadku?

text: for ( i = 1 ; i <= N ; i++ ) { for ( j = 0 ; j < i ; j++ ) { if ( przyp[j] > przyp[i] ) { temp = przyp[j] ; przyp[j] = przyp[i] ; dla (k = i; k > j; k--) przyp[k] = przyp[k-1]; przyk[k + 1] = temp ; } } } Źródło: http://programminggeeks.com/c-code-for-insertion-sort/ Jeśli nie, czy naprawdę można to nazwać sortowaniem przez wstawianie? Ta wersja tego rodzaju znajduje się pierwotnie w książce renomowanego autora.


title: Transakcje deklaratywne w Node.js

text: W tamtych czasach powszechne było zarządzanie transakcjami bazodanowymi w Javie przez pisanie kodu, który to robił. Coś takiego: Transakcja tx = session.startTransaction(); ... spróbuj { tx.commit(); } catch (SomeException e){ tx.rollback(); } na początku i na końcu każdej metody. To miało kilka oczywistych problemów - jest nadmiarowe, ukrywa intencje tego, co się dzieje, itp. Tak więc pojawiły się transakcje sterowane adnotacjami: @Transaction public SomeResultObj getResult(...){ ... } Czy jest jakieś wsparcie dla deklaratywnego zarządzania transakcjami w node.js?


title: Znalezienie prelegentów na konferencję

text: Heroku zaoferowało sponsorowanie konferencji prowadzonej przez moją grupę użytkowników Ruby i zastanawiam się, czy ktoś ma sugestie dotyczące znajdowania, wybierania i zarządzania prelegentami. Powiązane pytanie: W jaki sposób możesz poprosić lub zostać poproszony o przemówienie na konferencji oprogramowania?


title: Najbardziej aktywne projekty Open Source C#?

text: Szukam projektów open source wykonywanych w języku C#, które aktywnie poszukują deweloperów i nie mają nic przeciwko osobie przychodzącej z tła C++. Wszelkie wskazówki docenione.


title: Jak zrównoważyć projekty programistyczne między wykonalnością a użytecznością

text: Jako programista stałem się całkiem kompetentny, ale nie powiedziałbym, że jestem mistrzem. Pracuję samodzielnie, w większości jako hobby, chociaż pracowałem jako freelancer w PHP. Zwykle bawię się w wiele rzeczy: Java Android SDK, Arduino, skrypty gier, Lua itp. Osiągnąłem punkt, w którym chcę rozpocząć prawdziwy projekt oprogramowania, ale nie mogę wymyślić wystarczająco małego projektu, który pozwala mi na wystarczającą praktykę, jednocześnie będąc w stanie opublikować przyzwoity kawałek oprogramowania w rozsądnym czasie i zbudować portfolio. Dokładniej, przyglądałem się rozwojowi Ubuntu w Pythonie, używając zestawu narzędzi Quickly, który zawiera biblioteki PyGTK. Więc pytanie brzmi, jaki jest najlepszy sposób na stworzenie małego projektu, który nadal jest użyteczny, jako punkt wyjścia do kariery programistycznej?


title: Jak zainspirować praktykanta programowaniem?

text: Sytuacja jest taka - wzięliśmy stażystę na wakacje z myślą, że jeśli nadrobi zaległości w lecie, zatrzymamy go jako młodszy programista w niepełnym wymiarze godzin. Zabraliśmy go po pierwszym roku studiów, więc jego wiedza była zbyt niska, aby zaangażować się w prawdziwe projekty (właściwie programował tylko na studiach), więc moim zadaniem było przeforsowanie jak najwięcej rzeczy, aby był gotowy do dołączenia realne projekty we wrześniu. Dopóki jesteśmy zdalnym zespołem programistycznym, daliśmy mu możliwość odbycia stażu zdalnie, w elastycznych godzinach. Minęły więc dwa miesiące i nie jestem pod wrażeniem jego postępów. Dałem kilka zadań do realizacji, dostęp do zasobów edukacyjnych, rekomendowane ścieżki startowe i tak dalej, zgodziłem się, że będzie raportował co kilka dni, od czasu do czasu mieliśmy sesje w parach, wspólnie przeglądaliśmy jego kod itd. W każdym razie wygląda na to, że on spędziłem mniej czasu na pisaniu kodu niż się spodziewałem i zanim powiedziałem, że nie spisał się na tyle dobrze, aby dołączyć do naszego zespołu, myślałem, że może to moja wina, może to, że naciskałem za dużo rzeczy, co jest ważne w rzeczywistości projekty życiowe (takie jak testowanie jednostkowe, strukturyzacja kodu, rzeczy z bazami danych, itp.) i za mało zabawnych rzeczy, które związałyby go z programowaniem i dlatego spędził mniej czasu, niż się spodziewałem. Zostało mi więc ~20 dni i mogę je wykorzystać, aby zainspirować go programowaniem, pytanie co i jak?


title: Czy istnieje język programowania, w którym 1/6 zachowuje się tak samo jak 1.0/6.0?

text: Kiedy kilka dni temu programowałem w C++, popełniłem ten błąd (że mam historię robienia tego!). W jednej części mojego kodu miałem 1/6 i spodziewałem się, że będzie to 0.16666666666, co nie jest prawdą. Jak wszyscy wiecie, wynik to 0 - C, C++, Java, Python, wszystkie zachowują się tak samo. Umieszczam to na mojej stronie na Facebooku i teraz toczy się debata, czy istnieje język programowania, w którym `1/6` zachowuje się tak samo jak `1.0/6.0`.


title: Przypadek testowy jako funkcja lub przypadek testowy jako klasa

text: Mam problem z projektowaniem w automatyzacji testów: Wymagania - Potrzeba przetestowania różnych serwerów (przy użyciu konsoli unix, a nie GUI) za pomocą frameworka automatyzacji. Testy, które zamierzam przeprowadzić - Jednostka, System, Integracja Pytanie: Projektując przypadek testowy myślę, że Przypadek Testowy powinien być częścią zestawu testów (zestaw testów to klasa), tak jak mamy w Pyunit framework Pythona. Ale czy powinniśmy zachować przypadki testowe jako funkcje dla skalowalnego frameworka automatyzacji, czy też powinniśmy zachować przypadki testowe jako oddzielne klasy (każda z własną konfiguracją, metodami uruchamiania i rozkładania)? Z punktu widzenia automatyzacji, czy pomysł posiadania przypadku testowego jako klasy jest bardziej skalowalny, możliwy do utrzymania, czy jako funkcja?


title: Czy przestarzałe funkcje mysql_* w PHP są przenoszone na inne bazy danych (MSSQL)?

text: ### Nie mówię o MySQL, mówię o Microsoft SQL Server Od dłuższego czasu znam PDO, standardowe funkcje mysql są niebezpieczne i należy ich unikać. http://php.net/manual/en/function.mysql-connect.php Ale co z funkcją MSSQL w PHP? W większości przypadków są to identyczne zestawy funkcji, ale strona PHP opisująca mssql_* nie zawiera ostrzeżenia o przestarzałości. http://us.php.net/manual/en/function.mssql-connect.php Istnieją sterowniki PDO dostępne dla MSSQL, ale nie są one tak łatwo dostępne lub używane jak sterowniki MySQL. Idealnie wygląda na to, że powinienem sprawić, by działały i przejść z mssql_* do PDO, tak jak w przypadku MySQL, ale czy jest to tak duży priorytet? Czy istnieje jakieś ukryte bezpieczeństwo MSSQL, które oznacza, że jest on zwolniony od wszelkiej nienawiści mysql_* w ostatnim czasie? A może jego niejasność jako zaplecza jest jedynym powodem, dla którego nie było więcej zachęty do PDO?


title: Jakie są ogólne wytyczne dotyczące tworzenia projektu iOS, który będę chciał osobiście opublikować, ale sprzedać w przyszłości?

text: Mam pomysł na własny projekt iOS, który chciałbym napisać i opublikować w sklepie iOS. Jestem typem programisty, który lubi tworzyć i publikować. Chcę pisać wysokiej jakości oprogramowanie i dbać o moich klientów. Zakładając, że napisałem aplikację, która odniosła rozsądny sukces, istnieje spora szansa, że chciałbym sprzedać prawa własności do aplikacji innej stronie i wykorzystałbym dochód na rozwój mojego kolejnego osobistego projektu, który z kolei prawdopodobnie chciałby sprzedać w przyszłości. Mając to na uwadze, jakie są ogólne wytyczne dotyczące tworzenia, tworzenia i publikowania projektu iOS, który ostatecznie będę chciał przenieść do innej firmy/dewelopera? Wiem, że to trochę szerokie pytanie, ale proszę, aby podana rada była ogólną listą wskazówek, sugestii i pułapek, których należy unikać. Jeśli jakiś konkretny punkt na Twojej liście wymaga dalszych wyjaśnień, poszukam odpowiedzi lub opublikuję nowe pytanie dotyczące tego wymagania. Dziękuję Ci! **Uwaga dotycząca tego pytania** Zamieszczam to pytanie na Programmers.SO, ponieważ uważam, że jest to kwestia architektury oprogramowania, szukania porady na temat ustawienia nowego projektu aplikacji i opublikowania projektu w sklepie Apple iOS - wszystko w ramach wymagania dotyczące pytań na tej stronie. **UPDATE** \- 2012-09-14 Chciałbym prosić, aby jeśli ktoś zna dobry artykuł na temat studium przypadku takiego przejścia, również uznałbym to za dobrą odpowiedź. Taki artykuł może nie zawierać wszystkich odpowiedzi, ale może nakreślić kilka pułapek, których należy unikać. Aplikacje są sprzedawane innym spółkom holdingowym w sposób półczęsty. Często dzieje się tak, gdy mała aplikacja odnosi sukces, a większa firma chce kupić własność i prawa. Mam trudności ze znalezieniem jakichkolwiek informacji na ten temat (prawdopodobnie moje słabe umiejętności googlowania). Większość słów kluczowych, które zwykle wyszukuję, dotyczy również promowania aplikacji, aby ludzie mogli ją pobrać. Dzięki za twój wgląd.


title: Jakie są trzy najważniejsze pytania, które powinieneś zadać swojemu zespołowi na temat swojej wydajności jako lidera zespołu?

text: Zbliżam się do 1 roku jako lider małego zespołu programistycznego (4 członków, w tym ja) w małej firmie programistycznej. Chciałbym dać mojemu zespołowi możliwość oceny, jak sobie radzę jako lider zespołu, który jest również programistą w zespole. Uważam, że trudno jest uzyskać dobre opinie za pomocą otwartego „Jak mi idzie?” pytanie, więc jakie konkretne pytania są najważniejsze? Idealnie chciałbym móc odpowiedzieć na 3 proste pytania, na które mój zespół byłby w stanie odpowiedzieć. Jakie są najważniejsze elementy, na temat których chciałbyś przekazać swoją opinię liderowi zespołu? Moją pierwszą myślą było umożliwienie mojemu zespołowi anonimowej odpowiedzi na te pytania? Czy to dobry pomysł?


title: statystyki sprawdzania importowanych danych?

text: Pracuję nad migracją danych kilkuset węzłów z witryny Drupal 6 do witryny Drupal 7. Mam dane wyeksportowane do nowej witryny i chcę to sprawdzić. Wracając do moich zajęć statystycznych, przypominam sobie, że istnieje sposób na ustalenie losowej liczby węzłów do sprawdzenia, aby dać mi pewien procent pewności, że cały proces był poprawny. Czy ktoś może mnie oświecić co do tego praktycznego zastosowania statystyki? Dla dowolnej liczby jednostek, jak duża musi być próbka, aby mieć dany przedział ufności?


title: Czy ponowne użycie kodu z „programistycznej książki kucharskiej” jest legalne?

text: Właśnie znalazłem idealne rozwiązanie problemu, który miałem w _Książce kucharskiej Perla_ O'Reilly'ego. Problem polega na tym, że książka jest chroniona prawami autorskimi i nie mogłem znaleźć niczego, co przypominałoby licencję na ponowne wykorzystanie kodu. Z drugiej strony, przypuszczam, że „książki kucharskie programowania” są mniej lub bardziej wyraźnie stworzone z zamiarem, aby czytelnik ponownie wykorzystał część dostarczonego kodu. Czy zgodnie z prawem mogę po prostu ponownie użyć kodu, czy muszę go przepisać? Jeśli ma to znaczenie, moim zamiarem było wydanie projektu, nad którym pracuję, na podwójnej licencji AL/GPL, co jest normą dla Perla. Przypuszczam, że to pytanie może równie dobrze dotyczyć każdej książki kucharskiej dotyczącej programowania bez wyraźnej licencji.


title: Nazywanie metod testowych w Javie

text: W codereview komentarz sugerował, że używanie snake_case do nazywania metod testowych jest dobrym pomysłem. To było sprzeczne z moimi poglądami i przeprowadziłem pewne badania i wydaje się, że istnieje wiele przykładów, które faktycznie używają do tego celu snake_case. Ja używam klasycznych nazw camelCase, takich jak `testXyz` do testów jednostkowych lub podejścia BDD `givenXyzWhenXyzThenXyz` do testów integracyjnych. Jest też trzecia opcja, która łączy oba sposoby, m.in. `useCase_WhenSomething_ThenAssertion`. # _Moje pytanie to_ : Jakie są dobre argumenty za używaniem snake_case lub camelCase do nazywania metod testowych? Chciałbym zacząć od kilku argumentów z mojego doświadczenia i pracy: ## Na korzyść camelCase * Jest to zgodne z ogólnymi konwencjami kodowania Java dotyczącymi używania camelCase. * Jest _spójny_ z kodem produkcyjnym. * _osobiście_ uważam, że camelCase nie jest trudniejszy do odczytania niż snake_case – i tak jestem przyzwyczajony do opisywania nazw z kodu produkcyjnego. * Obsługa IDE cierpi podczas korzystania z snake_case (przynajmniej Eclipse). ## Na korzyść snake_case * Niektóre frameworki mogą generować raporty z testów, a użycie snake_case pozwala takim frameworkom na tworzenie poprawnych zdań z nazw testów. ## Na korzyść kombinacji obu * ? Jakie są inne argumenty? Jak może wzorzec, w którym nazwane są metody testowe, wpływa na argumenty? Małe zastrzeżenie: Oczywiście ostatecznie sprowadza się to do konwencji zespołowych. Warto jednak omówić zalety i wady niektórych konwencji.


title: Czy pod presją piszesz zły kod?

text: Kiedy jesteś pod presją, zbliża się termin, a menedżer depcze ci po karku, czy zaczynasz pisać zły kod? Czy TDD i najlepsze praktyki odsuwają się na bok, aby załatwić sprawy? Co robisz w takich sytuacjach? Jakie były twoje doświadczenia?


title: Unikaj metody inicjowania

text: Mam ten istniejący kod, w którym mają klasę i metodę inicjalizacji w tej klasie. Oczekuje się, że po utworzeniu obiektu klasy muszą wywołać na nim inicjalizację. **Powód, dlaczego istnieje metoda Initialize** Obiekt jest tworzony wcześnie, aby mieć zasięg globalny, a następnie metoda Initialize jest wywoływana później po załadowaniu biblioteki dll, od której zależy. **Problem z inicjalizacją** Klasa ma teraz tę wartość bool isInitialized, która musi zostać sprawdzona w każdej metodzie przed kontynuowaniem i zwraca błąd, jeśli nie została zainicjowana. Mówiąc najprościej, jest to duży ból. **Jedno możliwe rozwiązanie** Zainicjuj w konstruktorze. Mieć tylko wskaźnik do obiektu w zasięgu globalnym. Utwórz rzeczywisty obiekt po załadowaniu biblioteki dll. **Problem z powyższym rozwiązaniem** Każdy, kto tworzy obiekt tej klasy, musi wiedzieć, że należy go utworzyć dopiero po załadowaniu biblioteki dll, w przeciwnym razie zakończy się niepowodzeniem. Czy to jest dopuszczalne?


title: Co autor Code Complete ma na myśli mówiąc o ukrywaniu danych globalnych?

text: W sekcji 6.4 Code Complete 2nd Edition znajduje się paragraf dotyczący ukrywania danych globalnych. Szczególnie interesuje mnie to, że McConnell (autor książki) podaje przykłady korzyści z ukrywania danych globalnych. Jest jeden przykład, którego nie mogę zrozumieć. Nie mam angielskiej wersji książki, więc postaram się przetłumaczyć tekst. > **Ukrywanie danych globalnych.** (...) Możesz zmienić strukturę danych > bez modyfikacji programu. Co przez to rozumie McConnell? Czy mówi o zmianie globalnych danych? Jeśli tak, dlaczego nie miałbyś modyfikować swojego programu, gdy używasz metod do pobierania tych danych? A może ma tu na myśli coś innego? Byłbym bardzo wdzięczny, gdyby ktoś mógł wyjaśnić moje zamieszanie. Jeśli mógłbyś podać również przykład, byłoby świetnie (przykłady są niesamowite, wiesz).


title: najbardziej zwięzłe odniesienie do organizowania kodu do udostępniania?

text: Moi koledzy i ja jesteśmy grupą naukowców (tj. nie przeszkolonych w programowaniu) hakujących kod do przetwarzania danych. Czy istnieje zwięzłe i proste odniesienie, które dokumentuje idiomy, konwencje lub wytyczne dotyczące organizacji kodu? Na przykład: 1. konwencje używania zmiennych globalnych 2. dokumentowanie kodu, który jest dystrybuowany do innych (np. przynajmniej wyszczególnienie wszystkich funkcji zawartych w dokumencie kodu na górze pliku) i tak dalej? Zdaję sobie sprawę, że jest to duża dziedzina i może zająć się bezpieczeństwem, testami jednostkowymi, refaktoryzacją i wszystkimi tymi problemami, ale mam nadzieję, że istnieje jakiś elementarz, który obejmuje absolutne minimum z (niezwykle) małym doświadczeniem w programowaniu? **Edycja:** Dziękuję wszystkim – wiem, że istnieją wytyczne dotyczące (i debaty nad) używaniem nawiasów, nazw zmiennych w wielbłądach (lub nie) itp., ale miałem nadzieję na podstawowe konwencje, które odnoszą się do większości języków. **Edycja2:** Aby to zawęzić, są to głównie języki imperatywne lub proceduralne (np. Fortran, ale szczególnie używany przez wielu moich kolegów jest DSL o nazwie IGOR Pro firmy Wavemetrics, jeśli ktoś o tym słyszał).


title: Kiedy mogę opublikować oprogramowanie napisane w pracy?

text: Pracuję nad problemem związanym z oprogramowaniem w pracy, który jest dość ogólny, ale nie mogę znaleźć biblioteki, którą lubię go rozwiązać, więc rozważam napisanie go sam (przynajmniej w wersji podstawowej). Napiszę trochę, jeśli nie całą wersję 1.0 w pracy, ponieważ potrzebuję jej do projektu. Jeśli dobrze się powiedzie, może zechcę zabrać pracę do domu i dopracować ją dla zabawy, a może wydać jako projekt open-source. Obawiam się jednak, że jeśli napisałem wersję 1.0 w pracy, może nie będzie mi dane zrobić tego z prawnego poczucia. Oczywiście mógłbym zapytać mojego szefa (którego pewnie to nie obchodzi), ale jestem ciekaw, jak inni programiści poradzili sobie z tą kwestią i gdzie stoi prawo. Moje jedno zdanie pytanie brzmi: **Kiedy można (prawnie/etycznie) udostępniać oprogramowanie napisane pierwotnie przez Ciebie do pracy w miejscu pracy? Co jeśli znacznie rozszerzyłeś oryginalne źródło poza godzinami pracy?** **Kontynuacja:** Załóżmy, że piszę całość w domu w swoim czasie, a potem po prostu używam jej w pracy, czy to drastycznie zmienia sytuację? **Komentarz 2**: pamiętaj, że nie próbuję oszukiwać mojego pracodawcy (rozumiem, że płacą mi za tworzenie produktów, które są jego własnością) – tylko zastanawiam się, czy jest uczciwy sposób robiąc to dla wszystkich zaangażowanych... Byłoby miło, gdyby jakaś organizacja non-profit mogła użyć mojego kodu i zaoszczędzić im trochę czasu. W grę wchodzi również inny problem. Jeśli piszę bibliotekę dla bardzo prostej, ogólnej rzeczy (takiej jak tabele HTML w JavaScript), oznacza to, że nigdy więcej nie będę mógł tego zrobić w wolnym czasie bez narażania się na ryzyko prawne (nawet jeśli było to zupełnie nowe przepisanie lub segment większego projektu). Czy do końca życia rezygnuję z prawa do pisania kodu do tego typu projektu (bez zgody tej firmy), skoro kod w pracy może nadal gdzieś w moim mózgu mieć na mnie wpływ? Na marginesie, wydaje się to być związane z patentami na oprogramowanie.


title: Wykorzystanie schematu bazy danych

text: Mam pytanie dotyczące właściwego wykorzystania schematów baz danych SQL Server i miałem nadzieję, że niektórzy guru baz danych będą w stanie zaoferować wskazówki dotyczące najlepszych praktyk. Aby dać trochę tła, mój zespół ostatnio skurczył się do 2 osób i właśnie zostaliśmy połączeni z innym 6 osobowym zespołem. Mój zespół utworzył środowisko SQL Server z kopią zapasową komputera stacjonarnego na inny komputer stacjonarny (i co noc do sieci), podczas gdy nowy zespół ma formalne środowisko SQL Server, działające na dedykowanym serwerze, z kopiami zapasowymi i konserwacją, które są obsługiwane przez oddany zespół. Jak na razie to dobra wiadomość dla mojego zespołu. Teraz do zapytania. Mój zespół zaprojektował wszystkie nasze tabele tak, aby należały do 3-literowej nazwy schematu (np. Użytkownik = USR, Ogólne = GEN, Konto = ACC), które ogólnie rzecz biorąc odnoszą się do konkretnych aplikacji, chociaż wiele się pokrywa. Mój nowy zespół wywodzi się z programu Access i zaimplementował swoje tabele w dbo z 3-literowym przedrostkiem, po którym następuje „_tbl”, więc powyższe przykłady to dbo.USR_tblTableName, dbo.GEN_tblTableName i dbo.ACC_tblTableName. Co więcej, ani mój stary, ani nowy zespół nie uruchomili jeszcze swoich serwerów SQL (obaj przypadkowo migrujemy ze środowisk Access), a nowy zespół powiedział, że jest gotów rozważyć przyjęcie naszego podejścia, jeśli to możliwe wyjaśnij, jak byłoby to korzystne. Nie przewidujemy obsługi uprawnień do tabel na poziomie schematu, ponieważ będziemy używać logowania na poziomie aplikacji, a 7-znakowe prefiksy nie stanowią problemu, ponieważ używamy LINQ, więc nazwy tabel można po prostu zmienić w DMBL (chociaż wiem co stwarza pewne wyzwania, gdy aktualizujemy DBML). Tak więc, biorąc pod uwagę, że oba zespoły muszą być ze sobą zgrane, czy ktokolwiek może przedstawić jakieś przekonujące argumenty tak czy inaczej?


title: Sparametryzowany wyzwalacz Jenkinsa + artefakt kopiowania

text: Pracuję nad skonfigurowaniem Jenkinsa do obsługi naszych kompilacji wydań. Kompilacja wydania składa się z instalatora systemu Windows, który zawiera kilka plików binarnych, które muszą być skompilowane w systemie Linux. Oto, co mam do tej pory: * Część Windows i część Linux są skonfigurowane jako oddzielne projekty Jenkinsa. * Projekt Windows jest sparametryzowany, biorąc tag Subversion do kompilacji i wydania. * W ramach kompilacji projekt Windows wyzwala kompilację tego samego tagu Subversion dla projektu Linux (przy użyciu wtyczki Parameterized Trigger), a następnie kopiuje artefakty z projektu Linux (przy użyciu wtyczki Copy Artifact) do obszaru roboczego projektu Windows, aby że mogą być zawarte w instalatorze Windows. Gdzie utknąłem: W tej chwili funkcja kopiowania artefaktu jest skonfigurowana do kopiowania ostatniej udanej kompilacji. Skonfigurowanie artefaktu kopiowania do kopiowania z dokładnej kompilacji, która została wyzwolona przez sparametryzowany wyzwalacz, wydaje się bardziej niezawodne, ale mam problem z ustaleniem, jak to działa. Istnieje opcja parametru „selektor kompilacji”, który moim zdaniem ma w tym pomóc, ale nie mogę zrozumieć, jak ma być skonfigurowany (a ślepe eksperymentowanie z różnymi możliwościami jest nieco bolesne, gdy kompilacja zajmuje godzinę lub dwóch, aby znaleźć sukces lub porażkę). Jak mam to skonfigurować? Jak działa selektor kompilacji?


title: Jaki jest podstawowy proces i narzędzia potrzebne do przeszukiwania repozytorium kodu źródłowego w celu eksploracji danych?

text: To wszystko w odniesieniu do projektu Microsoft CodeBook: CodeBook W repozytorium jest ogromna ilość kodu, wiele klas, hierarchia wywołań funkcji, przypadki testowe itp. Interesuje mnie, jak przebiega ten proces indeksowania i jak te dane są posortowane?


title: Rozwój Solo vs Team i konsekwencje

text: Od jakiegoś czasu programuję w różnych językach. Nigdy tak naprawdę nie uczyłem się programowania w szkole ani nie pracowałem w zespole składającym się z więcej niż dwóch osób (włącznie ze mną). Mimo to jestem profesjonalnym programistą od ponad trzech lat. W zeszłym roku przejąłem swój pierwszy projekt C# i skończyło się dobrze. Nic na to nie poradzę, ale myślę, że ponieważ nauczyłem się i pracowałem sam, brakuje mi pewnych pojęć/wskazówek/przewagi. Czy możesz podzielić się swoimi doświadczeniami z tymi, którzy byli programistami solo, zanim zostali częścią zespołu? Czy zdawałeś sobie sprawę, że czegoś ci brakuje? Czy było to dla Ciebie trudne? Czy nauczyłeś się później szybciej?


title: Przechowywanie poufnych danych — najlepsze praktyki

text: Niedawno rozpocząłem pracę nad osobistym projektem, w którym łączyłem się z bazą danych za pomocą Javy. To dało mi do myślenia. Aby uzyskać dostęp do bazy danych, muszę podać dane logowania do konta bazy danych na serwerze DB. Ale jeśli zakoduję go na stałe, będzie możliwe, że ktoś zdekompiluje program i wyodrębni dane logowania. Jeśli przechowuję go w zewnętrznym pliku instalacyjnym, to istnieje ten sam problem, ale jeszcze łatwiej byłoby go uzyskać. Mógłbym zaszyfrować dane przed przechowywaniem ich w dowolnym miejscu, ale wydaje się, że to też nie jest bezpieczne w razie awarii i w żadnym wypadku nie jestem ekspertem od szyfrowania. Jakie są więc najlepsze praktyki dotyczące przechowywania poufnych danych konfiguracyjnych programu?


title: Jak zasygnalizować, że łańcuch metod nie powinien być kontynuowany?

text: Podczas tworzenia łańcucha metod masz metody, które zwracają obiekt, umożliwiając kontynuowanie łańcucha. Jednak trzeba jakoś wydobyć wartości z obiektu. Zwykle dodaję metodę, która zwraca wartość na końcu, ale to komplikuje sprawę, jeśli dodasz do łańcucha i ta metoda powrotu może już nie być ważna. Sposób, w jaki widzę to za każdym razem, gdy dodajesz metodę do łańcucha, poprawiasz swój wynik, aż uzyskasz pożądaną odpowiedź w ostatnim wywołaniu metody. Posiadanie końcowej metody wyjścia tworzy ograniczenie polegające na tym, że musi wiedzieć o ostatniej operacji, aby wiedzieć, jak wyświetlić wynik. Może masz metodę, która daje w wyniku łańcuch i taką, która daje w wyniku tablicę. Twoja metoda wyjściowa musi radzić sobie z obydwoma tymi przypadkami. Co się stanie, jeśli dodasz metodę, która przechowuje wynik ciągu w nowym miejscu? Teraz musisz zaktualizować metodę wyjściową, aby obsłużyć również tę sprawę. Czy istnieje sposób, aby metoda wiedziała, że jest ostatnią w łańcuchu, więc czy powinien wyświetlić jej wynik?


title: Czy EventHandler<T> i IObservable<T> są wymienne?

text: Mam obiekt, który będzie okresowo zgłaszał zdarzenie na podstawie akcji wykonanej w aplikacji. Będzie to słyszane przez każdego słuchacza i odpowiednio podjęte. Nie chcę do tego używać niestandardowego typu i chciałbym użyć `EventHandler<T>` lub `IObservable<T>` do zarządzania mechanizmem pub/sub, który chcę wprowadzić. Bawiłem się z obydwoma i obaj robią to, czego wymagam. Przeczytałem MSDN Observer Design Pattern i MSDN Events Programming Guide, jednak nie mam pewności, czy jeden mechanizm jest bardziej odpowiedni od drugiego. Czy jeden bardziej pasuje do mojego scenariusza niż drugi, czy oba są odpowiednie i sprowadzają się tylko do osobistego wyboru? **Edytuj 1** Moje wymagania dotyczące pubów/subskrypcji nie znajdują się obecnie w warstwie interfejsu użytkownika i są niższe. Mój wydawca monitoruje aktywność sieciową i zgłasza zdarzenie na podstawie określonych zdarzeń sieciowych. Subskrybent jest odpowiedzialny za nasłuchiwanie zgłoszonych zdarzeń i wykonanie powiązanej akcji. Interfejs użytkownika nie jest w tym momencie zaangażowany.


title: Debugowanie faktów i statystyk

text: Próbuję znaleźć badanie odpowiadające na pytanie: "Ile czasu programiści spędzają na rozwoju vs debugowaniu?". Znalazłem kilka ciekawych linków w sieci, ale są trochę za stare. Badanie RTI z 2002 r. stwierdza, że błędy w oprogramowaniu kosztują amerykańską gospodarkę 59,6 miliarda dolarów rocznie. W swojej książce Beizer (1990) donosi, że z pracy włożonej w opracowanie programu roboczego, 50% zazwyczaj poświęca się na testowanie i debugowanie. Widziałem, że ta liczba wynosi 80%, ale nie mogę znaleźć linku.


title: SDK do edycji dźwięku

text: Jaki jest najlepszy sposób na stworzenie oprogramowania do edycji dźwięku? (edytuj, kopiuj, wklej audio - coś w rodzaju sound forge lub audacity) Moim językiem programowania jest Delphi. Czy są dostępne jakieś dobre komponenty lub elementy sterujące, abym mógł je kupić i wykorzystać w projekcie.


title: Różnica między idiomem a wzorem projektowym?

text: Jaka jest różnica między idiomem a wzorem projektowym? Wydaje się, że te terminologie gdzieś się pokrywają; gdzie dokładnie, nie wiem. Czy są wymienne? Kiedy powinienem użyć czego? Oto lista idiomów C++. Czy mogę nazwać je wzorcami projektowymi? Wikipedia definiuje Idiom programowania jako niskopoziomowy wzorzec projektowy Co to oznacza? Co oznacza tutaj _"niski poziom"_? To pytanie jest zainspirowane innym pytaniem: Czy niektóre wzorce projektowe są zależne od języka?


title: Planujesz napisać artykuł naukowy – wskazówki lub zasoby?

text: Uczęszczam do gimnazjum i opracowałem system optymalizacji języków funkcjonalnych, który może być bardzo wydajny. Moi profesorowie informatyki z Boise State University uważają, że powinienem napisać artykuł i wykorzystać mój pomysł tak daleko, jak tylko mogę. Sformalizowałem swoją metodę, ale nie miałem do niej rygorystycznego spojrzenia eksperta. Staram się również zachować bezpieczeństwo własności intelektualnej, więc moje opcje są trochę ograniczone. Od czego powinienem zacząć? Zaimplementowałem optymalizator w Haskell (w rzeczywistości nie kompiluje i nie generuje kodu, ale demonstruje koncepcję). Myślę, że muszę skończyć artykuł badawczy skupiający się na samym systemie i sprawdzić, czy mogę go opublikować w czasopiśmie. Doktor specjalizujący się w optymalizacjach kompilatorów w BSU powiedział, że być może będę mógł zaprezentować się w Apple, ponieważ planowałem generować kod z LLVM, do którego chcą zachęcić ciekawe projekty i zademonstrować jego wszechstronność. Brzmi to jak ekscytująca perspektywa, ale domyślam się, że napisanie artykułu badawczego nastąpi wcześniej. Czuję się lekko przytłoczony. Nie jestem pewien, czy powinienem dalej wdrażać kompilator, aby zwiększyć wiarygodność mojego papieru, czy też zobaczyć, czy pomysł wystartuje i zebrać małą społeczność, aby go w pełni wdrożyć. Napisałbym artykuł badawczy (mam już zrobioną sekcję metod), ale nie jestem ekspertem w pracach badawczych i mogę potrzebować kogoś, kto wie o kompilowaniu języków funkcjonalnych, któremu mogę zaufać, aby na to spojrzeć. Poza tym martwię się, że będę dyskryminowany ze względu na swój wiek (mam 16 lat). Jakie są dobre zasoby dotyczące pisania artykułów naukowych, zwłaszcza informatycznych? Od czego mam zacząć, gdy mam to napisane? W jaki sposób mógłbym rozwinąć zainteresowanie i społeczność, aby wdrożyć i rozwinąć mój pomysł?