title: Co oznacza XML/XSLT/XPath i programowanie asynchroniczne?

text: Rozumiem, że (1) XML/XSLT/XPath i (2) programowanie asynchroniczne mogą nie być ze sobą powiązane. Moje pytania to: 1. Kiedy ogłoszenie o pracy programisty C# mówi: „wymagana jest następująca umiejętność wymieniona w punktach 1 i 2”, co to właściwie oznacza? 2. Powiedzmy, że muszę opanować te dwa tematy (1 i 2). Co muszę zrobić, aby osiągnąć tę umiejętność? Jeśli są jakieś książki dla średniozaawansowanych, które faktycznie uczą tego z praktycznymi scenariuszami i studiami przypadków, proszę zasugerować. Odpowiedzi są mile widziane. Pracowałem nad tworzeniem pakietów XML do wymiany wiadomości przez sieć, opracowałem kilka amatorskich parserów XML dla niektórych projektów i wykonałem wymianę wiadomości dla systemu przesyłania wiadomości opartego na serwerze klienta przy użyciu połączeń asynchronicznych. Ale naprawdę muszę wiedzieć i dowiedzieć się, czego szukają firmy, gdy piszą te rzeczy (1 i 2) jako wymóg w swoich ogłoszeniach o pracę. Zagregowane umiejętności wymagane dla konkretnego stanowiska to: * ASP.NET 2.0 (OK) * Usługi sieciowe i .Net Remoting (OK) * XML/XSLT/XPath **(?)** * Programowanie asynchroniczne **(?)** * Usługi Windows (OK) * Javascript/XML/AJAX (OK) * Microsoft Silverlight/WPF (OK) Po pierwsze, jasne jest, że AJAX nie jest związany z programowaniem asynchronicznym (w tym bardzo specyficznym kontekście), ponieważ jest napisany jako * *oddzielna** wymagana umiejętność (i mam nadzieję, że nie jest to zwykła redundancja). W normalnych przypadkach moje dedukcje byłyby takie same, jak programowanie asynchroniczne oznacza pracę z AJAX (asynchroniczny JavaScript z XML). Po drugie, tworzenie usługi internetowej w C# nie wymaga żadnego **rozległego** doświadczenia z **XSLT**. W rzeczywistości udostępnianie funkcji z biblioteki DLL (hermetyzacja logiki biznesowej) jest najprostszym ze wszystkich zadań z usługami sieciowymi w C#. Zastanawiam się, czy potrzebne są jakieś dodatkowe umiejętności lub doświadczenie?


title: Czy powinienem dołączyć `asembler` jako język programowania w CV?

text: W odpowiedzi na jedno pytanie ktoś napisał, że "asembler to nie język, to proces". Zwykle się z tym zgadzam, ponieważ „język” asemblera zależy od architektury, na której będzie działać, która może się nieco różnić w zależności od procesora. Więc jeśli napisałeś asembler dla jednej architektury, czy to oznacza, że możesz zawrzeć go w CV jako „asembler” razem z innymi językami programowania? A może wyraźnie mówisz, że napisałeś asembler dla tej konkretnej architektury? **EDYTUJ:** Zmieniono „babkowany” na „pisemny”. Angielski nie jest moim językiem ojczystym i źle zrozumiałem ten termin, myśląc, że oznacza to, że używałeś go często, a nie tylko trochę.


title: Obiekty PHP z konfigurowalnymi interfejsami danych

text: Mam klasę `User`, która musi ładować dane z różnych źródeł, np. główna baza danych użytkowników, metadane użytkowników WordPress, autoryzacje z innej aplikacji itp. Ze względu na organizację chcę rozdzielić te różne programy ładujące dane na ich własne klasy. Wywołania `$user->get_name()` odpowiednio delegują do dowolnego obiektu backendu, który dostarcza te informacje. Jak to może wyglądać w PHP? Czy istnieje nazwa tego wzoru? (I miejmy nadzieję, że nie jest to antywzorzec.) Mogę spodziewać się, że ludzie będą sugerować niektóre osadzone obiekty, takie jak `$user->wordpress` jako interfejs do programu ładującego WordPress. Mam dodatkowy czynnik komplikujący, że nie wszyscy użytkownicy są obecni we wszystkich naszych magazynach danych. Moje programy ładujące są w stanie określić, czy rozumieją i posiadają dane dla danej nazwy użytkownika/id, i są ładowane do obiektu `User` z priorytetem. Dany identyfikator może tylko wyzwolić podzbiór programów ładujących dane, więc `$user->get_name()` zasadniczo jest spójnym interfejsem do danych użytkownika, gdziekolwiek są przechowywane. Oceniam moją konfigurację, starając się, aby wszystko było bardziej testowalne i uważam, że jest to właściwy pierwszy krok.


title: Dlaczego nowi programiści wydają się ignorować komunikaty o błędach kompilatora/komunikaty o wyjątkach w czasie wykonywania?

text: Myślę, że wszyscy to widzieliśmy. Początkujący zadają pytania na StackOverflow, które są zgodne z podstawowym zarysem... > Próbuję zrobić _(bardzo niejasny opis celu)_ ale to nie działa/otrzymuję błąd/wyjątek. Proszę pomóż! Czy to nie dziwne, że tak wielu z nich wydaje się uważać za niepotrzebne wklejanie komunikatu o błędzie? Zastanawiam się, jaka jest w tym psychologia. Co takiego jest w komunikatach o błędach, że ludzie początkowo zakładają, że są one bezużyteczne i nie warto na nie zwracać uwagi? Odpowiedź, której szukam, to _nie_ „nie rozumieją komunikatu o błędzie”. To nie wyjaśnia, dlaczego nie rozważyliby powiedzenia nikomu, kto mógłby to zrozumieć.


title: Pomóż analizować długi (3,5 miliona linii) plik tekstowy, wiersz po wierszu i przechowywać dane, potrzebujesz strategii

text: To jest pytanie o rozwiązanie konkretnego problemu, z którym się borykam, parsuję długą listę danych tekstowych, linia po linii dla aplikacji biznesowej w PHP (skrypt cron na CLI). Plik ma format: HD: tutaj jakiś tekst {tekst tutaj też} DC: opis tutaj DC: opis jest kontynuowany tutaj DC: i kończy się tutaj. DT: 2012-08-01 HD: Następny nagłówek tutaj {dodatkowy tekst} ... to powtarza się w kółko przez kilkaset megabajtów. Muszę przeczytać każdą linię, przeanalizować linię HD: i pobrać tekst z tej linii. Następnie porównuję ten tekst z danymi przechowywanymi w bazie danych. Po znalezieniu dopasowania chcę nagrać następujące linie DC:, które następują po dopasowanym HD:. Pseudo kod: while ( the_file_pointer_isnt_end_of_file) { line = getCurrentLineFromFile title = parseTitleFrom(line) matched = searchForMatchInDB(line) if ( matched ) { recordTheDCLines // <- Najlepszy sposób na to? } } Mój problem polega na tym, że ponieważ czytam wiersz po wierszu, jaki jest najlepszy sposób na wywołanie skryptu, aby zaczął zapisywać wiersze DC, a następnie, po ich zakończeniu, zapisać je w bazie danych? Mam niejasny pomysł, ale muszę go jeszcze właściwie zrealizować. Chciałbym usłyszeć pomysły\sugestie społeczności! Dziękuję Ci.


title: Sprawdź parametry z adnotacjami @Nonnull dla wartości null?

text: Zaczęliśmy używać FindBugs i odpowiednio dodawać adnotacje do naszych parametrów za pomocą `@Nonnull` i świetnie sprawdza się wskazywanie błędów na początku cyklu. Do tej pory kontynuowaliśmy sprawdzanie tych argumentów pod kątem `null` za pomocą `checkNotNull` Guava, ale wolałbym sprawdzać `null` tylko na krawędziach — w miejscach, w których może pojawić się wartość bez sprawdzenia `null`, np. żądanie SOAP. // warstwa usług dostępna z zewnątrz public Person createPerson(@CheckForNull String name) { return new Person(Preconditions.checkNotNull(name)); } ... // wewnętrzny konstruktor dostępny tylko przez warstwę usług public Person(@Nonnull String name) { this.name = Preconditions.checkNotNull(name); // usunąć to sprawdzenie? } _Rozumiem, że `@Nonnull` nie blokuje samych wartości `null`._ Jednak biorąc pod uwagę, że FindBugs wskaże gdziekolwiek wartość jest przenoszona z pola nieoznaczonego do pola oznaczonego `@Nonnull`, czy nie możemy na tym polegać wyłapać te przypadki (co robi) bez konieczności sprawdzania tych wartości pod kątem „null” wszędzie tam, gdzie są one przekazywane w systemie? Czy jestem naiwny, chcąc zaufać narzędziu i uniknąć tych szczegółowych kontroli? **Koniec:** chociaż usunięcie drugiego potwierdzenia „null” poniżej wydaje się bezpieczne, czy jest to zła praktyka? To pytanie jest być może zbyt podobne do pytania Czy należy sprawdzać wartość null, jeśli nie oczekuje wartości null, ale pytam konkretnie w odniesieniu do adnotacji `@Nonnull`.


title: Zaczynasz pracę z kontrolą wersji i zintegrowanym zarządzaniem projektami?

text: Dostaję zadanie znalezienia **kontroli wersji + konfiguracji zarządzania projektami** , a także szkolenia i utrzymania, oprócz moich zwykłych prac; Od teraz będę znany jako „gitarzysta” (czy jak tam). Tworzymy PHP (w netbeans), C# (w VisStudio) i Python w Windows XP i Fedora. System ma być hostowany w systemie Windows. Mamy pięć osób i możemy agresywnie skoczyć do 8-10 wkrótce sam wybrałem **Mercurial + Redmine** przez racjonalizację. Moje powody są następujące: * Łatwy w administrowaniu i utrzymaniu * Łatwy do rozpoczęcia pracy w Mercurial i ma delikatną krzywą uczenia się * Równie dobrze obsługuje przepływy pracy solo i kilku osób * Mercurial ma użyteczne narzędzia GUI * Redmine ma ** stabilny i zintegrowany ** interfejs do Mercurial (TRAC omija stabilną obsługę Mercurial, co mnie denerwuje) * Netbeans ma **stabilną i użyteczną** integrację z Mercurialem (wiem, że Netbeans jest dostarczany z obsługą Mercurial, ale...) **Moje pytania** (w kolejności od ważności) to: 1. Czy moje uzasadnienia są słuszne, czy też moje założenia doprowadzą później do kosztownych błędów? 2. Czy ta kombinacja ma problemy, które poważnie wpływają na użyteczność? 3. Czy jest mniej bolesna kombinacja dla naszego małego zespołu (na przykład SVN+Trac)? Niektórzy w SO mają opinię „Po prostu zacznij!”, ale chcę grać bezpiecznie.


title: Dostęp do wielu baz danych czy jeden dostęp masowy?

text: Jakie jest lepsze podejście, jeśli chodzi o wydajność i optymalne wykorzystanie zasobów: wielokrotny dostęp do bazy danych za pośrednictwem AJAX, aby uzyskać dokładnie potrzebne informacje tylko wtedy, gdy jest to potrzebne, lub wykonanie jednego dostępu w celu pobrania obiektu, który zawiera wszystkie informacje, które mogą ** ** być potrzebne, z dużym prawdopodobieństwem, że nie wszystko jest **właściwie** potrzebne? Wiem, jak porównywać rzeczywiste zapytania, ale nie wiem, jak testować, co jest najlepsze, jeśli chodzi o wydajność bazy danych, gdy tysiące użytkowników jednocześnie uzyskuje dostęp do bazy danych i jak w grę wchodzi pulowanie połączeń.


title: Jak powszechne są algorytmy czasu wykładniczego dla ogólnych przypadków w oprogramowaniu produkcyjnym?

text: Wiem, że algorytmów czasu wykładniczego należy generalnie unikać, ale czasami są one konieczne. Sprawa będąca komiwojażerem. Jak powszechne są takie algorytmy w oprogramowaniu produkcyjnym? Czy te przypadki są zazwyczaj konieczne, czy też wynikają z pośpiechu w pracy? Rozumiem, że wiele można rozwiązać za pomocą dobrej heurystyki. Co zwykle robi się z tymi, którzy nie mogą?


title: printf - źródło błędów?

text: Używam dużo `printf` do celów śledzenia/logowania w moim kodzie, odkryłem, że jest to źródło błędów programistycznych. Zawsze uważałem, że operator wstawiania (`<<`) jest nieco dziwny, ale zaczynam myśleć, że używając go zamiast tego mógłbym uniknąć niektórych z tych błędów. Czy ktoś miał kiedyś podobne objawienie, czy ja po prostu się tu czepiam? # Niektórzy zabierają punkty * Mój obecny tok myślenia jest taki, że bezpieczeństwo czcionek przeważa nad korzyściami wynikającymi z używania printf. Prawdziwym problemem jest ciąg formatujący i użycie funkcji wariadycznych, które nie są bezpieczne dla typu. * Może nie będę używał `<<` i wariantów strumienia wyjściowego stl, ale z pewnością przyjrzę się mechanizmowi bezpiecznego typu, który jest bardzo podobny. * Wiele śledzenia/logowania jest warunkowych, ale chciałbym zawsze uruchamiać kod, aby nie przegapić błędów w testach tylko dlatego, że jest to rzadko używana gałąź.


title: Utwórz wiele podobnych zajęć lub tylko jedną

text: Celem jest stworzenie aplikacji, która ma obiekty, które mogą reprezentować niektóre operacje (dodawanie, odejmowanie itp.). Wszystkie te obiekty będą miały wspólne funkcje i elementy członkowskie, a zatem będą implementować interfejs lub dziedziczą z klasy abstrakcyjnej (która byłaby lepsza praktyka, będzie to w C#, jeśli ma to znaczenie?). O ile widzę, są dwa różne sposoby na zorganizowanie wszystkich tych zajęć. 1. Mógłbym stworzyć klasę dodawania, odejmowania itp. Ma to tę zaletę, że jest bardzo modułowa, ale różnica między klasami jest tak minimalna. 2. Mogę stworzyć jedną klasę i mieć członka, który powie, jaki typ operacji jest reprezentowany. Oznacza to wiele instrukcji switch i utratę pewnej modułowości, a ponadto jest trudniejsze w utrzymaniu. Co jest lepszą praktyką? Czy istnieje lepszy sposób na zrobienie tego, czego nie wymieniono powyżej? Jeśli ma to znaczenie, lista funkcji, które powinny być obsługiwane, jest długa.


title: Czy obliczając liczbę dni między 2 datami, należy uwzględnić obie daty, czy nie, czy 1?

text: Staram się stworzyć algorytm odliczający dni pomiędzy dwiema datami, np. od 01.03.2012 do 02.03.2012. Jaka jest prawidłowa odpowiedź lub najpopularniejszy wybór? Czy powinien być tym, którego używam? W tym przypadku, jeśli nie uwzględnię obu porównywanych dat, dni wynoszą 0; jeśli uwzględnię jeden z nich, dni to 1; jeśli uwzględnię oba, dni są 2.


title: Ile punktów fabularnych powinieneś przeznaczyć w pierwszym sprincie?

text: Kiedy po raz pierwszy wdrażasz Scruma w zespole, jak powinieneś określić liczbę punktów historii, które znajdują się w początkowym sprincie, gdy nie masz pojęcia o szybkości zespołu? Czy powinieneś oprzeć się na szacunkowej liczbie godzin i wykorzystać punkty tylko na późniejszym etapie?


title: Jak ulepszyć mój handel

text: Obecnie pracuję jako programista i studiuję na kierunku inżynieria oprogramowania (pierwszy, podczas gdy nie robię drugiego). Jestem przekonany, że potrafię wykonywać swoją pracę kompetentnie, ale czuję, że mógłbym to robić lepiej. Wiem, że moja największa pułapka tkwi w umiejętnościach biznesowych; na przykład często nie rozumiem na początku, dlaczego jestem proszony o wdrożenie czegoś w taki sposób, ponieważ nie zrozumiałem wymagań biznesowych, które za tym stoją. Czy ktoś ma dobrą radę, jak poprawić moje umiejętności biznesowe? A może jest to coś, co przychodzi wraz z doświadczeniem?


title: Rekomendacje dotyczące książek do samodzielnej nauki informatyki?

text: Can you guys poleca, które książki są najlepsze, aby dowiedzieć się, czego uczy się na większości studiów licencjackich i magisterskich z informatyki. Zwłaszcza w określonych obszarach (takich jak sztuczna inteligencja, inżynieria oprogramowania itp.). Jestem bardzo zainteresowany nauką wszystkiego, co mogę. I mam nadzieję, że pomoże to innym zainteresowanym jak ja. Dzięki za wszelką pomoc, której możesz udzielić - naprawdę to doceniam.


title: Czy istnieje powód, aby nie używać Opcjonalnego jako argumentu metody w przypadku, gdy wiesz, że argument jest czymś, co może lub nie może być potrzebne?

text: Wraz z Javą 8 widziałem coraz więcej artykułów na temat korzystania z Option/Optional. Rozumiem, co próbują reprezentować, i widzę wiele przykładów wykorzystania ich jako zwrotów. Jednak nie widzę, że są one używane jako argumenty metody/funkcji w językach, które nie mają składni dla parametrów domyślnych/opcjonalnych. Czy jest jakiś powód, aby nie używać opcji „Opcjonalne” jako argumentu metody w przypadku, gdy wiesz, że argument może być potrzebny lub nie? Oto przykład, który mógłbym wymyślić: Opcjonalny<Klient> lookupCustomer(String firstName, Optional<String> middleName, String lastName)


title: Czy prawidłowe jest nazywanie symbolu przypisania „operatorem”, gdy w rzeczywistości jest to instrukcja?

text: W niektórych językach (C++, Java, Ruby itp.) przypisanie zwraca wartość i może być użyte w wyrażeniu: x = (y = z); // ok, 'x' otrzymuje wartość 'z' W innych językach (Ada, VHDL) przypisanie jest poprawną instrukcją i nie może być użyte jako wyrażenie: x := (y := z); -- błąd! Jednak w obu przypadkach można znaleźć materiały dydaktyczne, w których symbol przypisania nazywany jest „operatorem przypisania”. Moje pytanie brzmi, czy technicznie poprawne jest nazywanie symbolu przypisania „operatorem” w drugim przypadku, gdy w rzeczywistości jest to instrukcja, nie zwraca wartości i nie może być użyta w środku wyrażenia?


title: Dlaczego serwer nie może kontynuować działania na żądanie po wysłaniu odpowiedzi?

text: Powiedzmy na przykład, że mam usługę sieciową RESTful i muszę wspierać tworzenie widżetu za pomocą żądania HTTP POSTed. Muszę 1. Deserializować widżet POSTed. 2. Sprawdź poprawność zdeserializowanego widżetu. 3. Zachowaj widżet w usłudze tworzenia kopii zapasowych. 4. Wyślij odpowiedź o powodzeniu z powrotem do klienta. Problem polega na tym, że moja umowa SLA nie pozwala 3 na blokowanie 4-utrwałości w tym przypadku trwa zbyt długo i klient musi od razu wiedziećże żądanie powiodło się (jest to standardowy przypadek użycia dla http `202` Kod statusu). Prawie wszędzie, gdzie patrzę, zakładam, że sposobem na rozwiązanie tego problemu jest „w tle” kosztowna część o trwałości. Jest to zazwyczaj niezręczny proces z wieloma ruchomymi częściami i często własnym opóźnieniem (np. wykonanie wywołania blokującego do oddzielnej usługi kolejkowania). Proste zrównoleglenie 3 i 4 przy użyciu konstrukcji natywnych jest generalnie wykluczone, podobnie jak zmiana kolejności tak, aby 4 bloki 3. O ile wiem, dzieje się tak głównie dlatego, że serwery internetowe i aplikacje są budowane z podstawowym założeniem, że proces (i wszystkie dzieci, które zostały oddzielone) może zostać zabity/ponownie wykorzystany, gdy tylko wyśle odpowiedź. Lub, równoważnie, że odpowiedź nie może zostać wysłana, dopóki aplikacja nie zakończy wszystkich czynności, które zamierza zrobić. To jest dla mnie bardzo frustrujące! W każdym innym kontekście mogę robić, co mi się podoba, z przepływem sterowania programu. Ale kiedy uruchamiam konfigurację Phusion Passenger -> Ruby on Rails i chcę coś zrobić po wysłaniu odpowiedzi, mam do dyspozycji szeroką gamę barokowych opcji, które wydają się uważać za całkowicie naturalne i akceptowalne powiedzmy, zserializować stan aplikacji, wysłać go do Amazon SQS, mieć w zasadzie oddzielną usługę sieciową, która odpytuje SQS, deserializuje stary stan aplikacji, a następnie zrób to. Po wysłaniu odpowiedzi miałem ustawiony stan aplikacji tak, jak chciałem! Dlaczego nic nie jest napisane, więc mogę po prostu zrobić def create widget = Widget.new(params[:widget]) if widget.valid? respond_with(widget) widget.save else respond_with(widget.errors) end end Dlaczego istnieje powszechne założenie, że stosy usług internetowych nigdy nie będą obsługiwać tego rodzaju przepływu? Czy istnieje ukryta wada lub kompromis w umożliwieniu tego?


title: Jak maksymalnie wykorzystać niezależność od lokalizacji… moja osobista zachęta nr 1 do pracy jako programista

text: Dla mnie najpiękniejsze w pracy jako programista jest to, że mając ładne CV, znajdziesz nową pracę, wszędzie i o każdej porze. Więc chciałbym zapytać, czy ktoś tutaj ma doświadczenie w pracy np. podczas podróży. Albo skakanie z metropolii do metropolii co, powiedzmy, sześć miesięcy. Na przykład badam, jak dostać się do Brazylii. Ale wygląda na to, że praca jako pracownik w Brazylii nie byłaby opcją, ponieważ uzyskanie odpowiednich wiz i pozwoleń zajmuje dużo czasu / pieniędzy / wysiłku. Tak więc jedynym praktycznym rozwiązaniem byłoby freelancer i sprawiedliwe podróżowanie, jednocześnie wykonując swoją pracę, gdziekolwiek jesteś. Założę się, że jest wielu informatyków, którzy wiedzą dokładnie, o czym mówię. Nie mogę się doczekać ciekawych pomysłów i historii. **EDYTUJ** dla BOUNTY: Nie tyle interesują mnie ogólne mądrości, co konkretne relacje z osobistych doświadczeń dotyczących tematu od osób, które mogą odnieść się do mojego pytania i mają rzeczywiste osobiste doświadczenia, którymi mogę się podzielić. Nie proszę o opinie i relacje o charakterze drugiego stopnia. **EDYTUJ** dla **_EVERYBODY_** (konkretne pytania): 1. Gdzie pracujesz podczas podróży? (pooling biurowy? biblioteki? kawiarnie?) 2. Gdzie śpisz? Myślę, że hotele są nieco za drogie. (hostele? couchsurfing?) **EDYTUJ** Odpowiedź Andy'ego przyjęłam jako odpowiedź „ta” głównie z powodu jej romantycznego i pozytywnego wydźwięku. Chociaż oczywiście nie ma odpowiedzi na to pytanie. Liczyłem na intrygującą dyskusję i mając 11 głosów i 5 zakładek wydaje mi się, że nie tylko mnie interesuje jakiś wkład. Mam więc nadzieję, że więcej osób dołączy i podzieli się swoimi doświadczeniami.


title: Przewodnik po PowerShell lub dokumentacja dotycząca platformy .Net Framework?

text: Jestem programistą Java, który jest nowy w powershell. Wiem, że jest zbudowany na .Net Framework, ale nie mam dużej wiedzy na temat tego frameworka. Czy istnieje jakiś przewodnik, który pokazuje, jakie biblioteki są dostępne w Powershell? Znalazłem listę poleceń Powershell 2.0, ale nie wiem, jakiej biblioteki użyć lub co jest dostępne w podstawowej strukturze.


title: Jak zaprojektować aplikację czytającą pliki przy użyciu wzorca MVC?

text: Zamierzam napisać aplikację, która odczytuje dane z pliku csv i wyświetla te dane użytkownikowi. Zamierzam zastosować wzorzec projektowy MVC do stworzenia tej aplikacji. Użytkownik będzie wchodzić w interakcję z tą aplikacją za pośrednictwem konsoli. Stąd widok jest konsolą. Powstanie Main.java, który będzie odpowiedzialny za: * Prezentowanie menu, które użytkownik może wybrać w konsoli. * Możliwość obsługi zdarzenia w konsoli, np.: użytkownik wybiera opcję odczytu dwóch plików csv i prosi aplikację o wyświetlenie różnic między dwoma plikami csv. * Wykonaj odpowiednią logikę biznesową dla wybranych wydarzeń. Aby to zrobić, Main.java będzie miał metodę Main, która wyświetla menu użytkownikowi w konsoli. Zastanawiam się nad zrobieniem Main.java jako kontrolera, ponieważ ta klasa jest odpowiedzialna za pobranie danych wejściowych użytkownika i ustalenie, co zrobić z danymi wejściowymi. Aby to zrobić, Main.java wywoła klasę o nazwie FileService.java, która jest klasą usług. FileService.java jest odpowiedzialny za: * Odczyt pliku csv. * Wyświetl zawartość pliku tekstowego posortowaną według jakiejś zasady. * Wyświetlaj zawartość różnic 2 plików csv. FileService przeanalizuje plik csv za pomocą parsera csv i zapisze zawartość plików na dysku przy użyciu MapDB. Intencją korzystania z MapDB jest umożliwienie użytkownikowi odczytu ogromnego pliku (np.: 5 GB) i wykonywania operacji na zawartości pliku. Po odczytaniu pliku Main.java może wyświetlić zawartość pliku lub wyświetlić różnice między dwoma plikami tekstowymi, gdy użytkownik wybierze opcję w konsoli. FileService ma być częścią modelu w tej aplikacji. Usługa FileService jest całkowicie oddzielona od widoku i kontrolera, którym jest Main.java. Czy ten prosty projekt pozwala na oddzielenie obaw rozwiązywanych przez MVC? **Odpowiedź na @tgkprog:** _gdzie jest widok? jeśli main jest kontrolerem, a FileService częścią modelu/biznesu, wtedy potrzebujesz również klasy widoku._ **Odpowiedź** : Kiedy budowałem aplikację internetową, widok byłby, ale nie ograniczony do JSP lub HTML strona. W kontekście aplikacji do odczytu plików CSV, jaki byłby odpowiednik strony HTML lub JSP? To jest coś, czego nie jestem pewien. Menu wyświetlane w konsoli można po prostu uzyskać w głównej metodzie Main.java. _jeśli pliki mają rozmiar 5 MB, to myślę, że aplikacja konsolowa będzie nieodpowiednia do wyświetlania różnic, chyba że jest ich bardzo mało?_ **Odpowiedź** : Mógłbym zrzucić różnicę w pliku tekstowym i pozwolić użytkownikowi wyświetlić plik tekstowy. Myślę, że to byłoby dla nich bardziej pomocne. Dziękuję za wskazanie tego.


title: Jak konieczna jest nauka JavaScript przed jQuery?

text: Moim zdaniem, kiedy spojrzałem na JavaScript, wyglądało to jak nie moja filiżanka herbaty. Kiedy natknąłem się na jQuery, pokochałem go. Siedziałem i oglądałem Nettuts+ przez 15 dni screencastów jQuery, rok później i teraz jestem całkiem pewien, że nie stworzyłbym strony internetowej bez biblioteki jQuery. Nigdy nie czułem, że to mnie powstrzymywało, ale moje pytanie brzmi: czy to wróci i ugryzie mnie w tyłek pewnego dnia, fakt, że nie miałem solidnego fundamentu w JavaScript, zanim wskoczyłem do jednego z najlepszych (jeśli nie najlepsze) frameworki? Czy ktoś inny przyjął takie podejście?


title: Jaka jest różnica między „warstwą abstrakcji” a „poziomem pośrednim”?

text: Nie jestem pewien, czy oba terminy mogą być używane zamiennie. Może jest jakieś akademickie rozróżnienie w informatyce, które nie ma znaczenia w codziennym programowaniu? Czy mogę używać obu terminów zamiennie, nie myląc się? Może to zależy od kontekstu, w jakim używam obu terminów? Edycja: Powodem, dla którego uważam, że oba terminy mogą być wymienne, jest wpis w Wikipedii o warstwie abstrakcji. Można tam znaleźć cytat Davida Wheelersa: „Wszystkie problemy w informatyce można rozwiązać za pomocą innego poziomu pośredniości”.


title: Czy pytania algorytmu są dobrymi pytaniami do rozmowy kwalifikacyjnej?

text: Niedawno pokłóciłem się z kolegą programistą. Prowadził rozmowę kwalifikacyjną na nowe stanowisko i zadano mu to pytanie: > Podaj ciąg liczb rozpoczynający się od X i kończący się na Y, ale z brakującym > elementem, więc N to Y-X-1, znajdź brakujący element w O(N) lub lepiej . Odpowiedź jest tutaj nieistotna (ale interesująca). Rozpoczęło to dyskusję na temat tego, czy jest to w ogóle dobre pytanie do zadania podczas wywiadu. Z jednej strony: algorytmy są dziedziczną częścią programowania, a zdolność kandydata do udzielenia odpowiedzi na to pytanie potwierdza, że ten kandydat będzie dobrym programistą i będzie w stanie rozwiązywać większe problemy oraz radzić sobie z większością zadań programistycznych, które są ostatecznie łatwe do zrozumienia i udzielenia odpowiedzi. Druga strona: Pisanie algorytmów od podstaw jest rzadko używane we współczesnym programowaniu i dlatego nie ma znaczenia w większym pytaniu, czy dana osoba będzie dobrym programistą. Osoba mogłaby z powodzeniem odpowiedzieć na to pytanie, ale nadal nie byłaby w stanie wykonać bardziej typowych zadań programistycznych. Twoje myśli? Dobre pytanie do rozmowy kwalifikacyjnej czy nie?


title: Podręcznik oprogramowania — od czego zacząć

text: Czy istnieją jakieś pakiety oprogramowania do generowania ładnie wyglądającej instrukcji obsługi dla małych projektów? Nie mówię o dokumentacji źródłowej. Chcę stworzyć podręcznik użytkownika końcowego, który nie wygląda na to, że spędziłem 20 minut w programie Microsoft Word.


title: Czy można pominąć MVC?

text: Buduję parę komponentów, które komunikują się w sposób jednokierunkowy: [ JButton ] --> data... process... process... out --> [ JTextField ] JButton pozwala użytkownikowi wybrać plik a ActionListener JButton przejmuje kliknięcie i wyciąga nazwę pliku i katalog. Następnie potrzebuję tych informacji, które mają być wyświetlane przez JTextField. Taka funkcjonalność jest tak podstawowa, że nigdy nie musi się zmieniać. Ktoś zasugerował sposób przekazania wiadomości tutaj, ale ja zadaję inne pytanie: **czy powinienem pominąć MVC?** [JButton] --> [JTextField] Proste jest najlepsze, prawda? To najprostszy i najjaśniejszy sposób, jaki przychodzi mi do głowy, aby przekazać wiadomość. Mam na myśli, po prostu zmodyfikuj JTextField przez ActionListener JButtona. Czy powinienem więc zastosować to prostsze podejście, czy mimo to spróbować zastosować MVC?


title: Jaka jest konwencja lokalizacji gwiazdy w zmiennych referencyjnych?

text: Uczyłam się Objective-C, zauważając, że różne książki i przykłady używają różnych konwencji dotyczących lokalizacji gwiazdy (`*`) podczas nazywania zmiennych referencyjnych: MyType* x; MójTyp *y; MójTyp*z; // to też działa Widzę pierwsze dwa używane zamiennie, a czasami w tym samym kodzie widziałem różne zastosowania obu. Czy jeden format jest łatwiejszy do odczytania, łatwiejszy w utrzymaniu lub mniej podatny na błędy niż inne formaty, czy jest to po prostu kwestia osobistych preferencji?


title: Kiedy programiści zaczęli tworzyć znormalizowane relacyjne bazy danych?

text: Pracuję nad dość starą aplikacją, która została przekonwertowana z DOS-a i płaskich plików do przechowywania informacji do tabel Paradox przy użyciu BDE, a następnie do relacyjnej bazy danych MySQL. Starsi programiści twierdzą, że powodem, dla którego nie mają pojęcia, jak poprawnie utworzyć tabelę w 3nf, jest to, że ich kod jest starszy od relacyjnych baz danych i nigdy nie nauczyli się o nich w szkole. Kiedy więc w ramach rzeczywistych programów większość programistów przyjęła przyzwoitą metodę tworzenia tabel w swoich bazach danych? Jeśli spojrzysz na bazy danych w CMS-ach typu open source, te tabele wyglądają na dobrze znormalizowane – czy udane te są inicjowane w ten sposób, czy też z czasem ulegają normalizacji (lub denormalizacji z powodów pragmatycznych)?


title: Kiedy używasz podzapytania w SQL?

text: Kiedy używasz podzapytania w SQL i do jakiego typu żądania podzapytanie jest przydatne? Ćwiczę SQL i muszę wiedzieć, jak natychmiast wykryć problem z podzapytaniem


title: Co powinniśmy zrobić, aby spotkanie Morning Standup było lepsze i efektywne

text: Cóż, tutaj, w moim biurze, praktykowaliśmy przychodzenie przed 9 rano (w dowolnych warunkach określonych przez Zarząd) i rozpoczynanie od Standup Meeting. Tutaj zaczynamy od omówienia problemów z poprzedniego dnia, wszelkich aktualizacji od kierownika (według leadów) i planu pracy na dziś. To spotkanie może brzmieć dobrze i zorientowane na proces, ale czasami, jeśli jest show, to psuje poranny nastrój lub jeśli jest różnica w opiniach, to znowu nie jest dobrze zacząć. Tak więc HR i Kierownictwo decydują, że początkowo będziemy omawiać sprawy osobiste przez 10 do 15 minut, a następnie przejdziemy do dyskusji technicznej i oficjalnej. Przez 15 minut każdego dnia, czy mówisz poważnie, nie mam tematu do omówienia przez 15 minut każdego dnia z moim liderem, który jest znacznie starszy ode mnie i do tej pory nigdy nie rozmawiał o niczym osobiście, a ty chcesz tak po prostu zacząć! Więc wracamy do punktu wyjścia. Wszyscy (o dziwo we wszystkich zespołach) ponownie dyskutują o technicznych aspektach dopiero na porannym spotkaniu. A więc nadchodzi, dzisiaj mam lunch z kierownictwem, a tematem do dyskusji jest: „Jak sprawić, by spotkania Nice Day (Morning/Standup) były efektywne?” Wszelkie sugestie proszę.


title: Jak przeprowadzić wywiad z programistami Front-End Web?

text: Po raz pierwszy jestem na stanowisku, w którym pomagam przeprowadzać wywiady z potencjalnymi programistami front-end. Drugi ankieter jest bardziej skoncentrowany na biznesie i PM, chociaż jest byłym programistą. Szukam wiedzy i tła w CSS, Javascript i innych powiązanych technologiach, ale te pytania tak naprawdę są tylko testem dla żargonu. Uważam, że niesprawiedliwe byłoby zadawanie bardzo konkretnych pytań o CSS, kiedy nie siedzimy przed komputerem. Dostałem również strony internetowe napisane przez tych programistów. Czy to wystarczy, aby przeprowadzić wywiady z front-endami? Poszukujemy również ogólnych umiejętności, a nie bazy wiedzy.


title: Ruby on Rails - przewodnik po kamieniach milowych w nauce?

text: Czy istnieje jakiś przewodnik po ważnych kamieniach milowych podczas nauki Ruby on Rails? Jestem samoukiem, więc nie mam mentora, który by mi te rzeczy mówił. Uczę się Railsów od 11 miesięcy i myślę, że robię dobre postępy, ale chciałbym uzyskać informacje zwrotne na temat tego, czy robię dobre postępy, czy też muszę zwiększyć swoje wysiłki, więc szukam, aby zobaczyć jeśli taki przewodnik istnieje w Internecie. Może ktoś napisał załącznik do książki, którą napisał na Railsach, albo post na blogu? Coś w tym stylu...


title: Jak śledzić najnowsze trendy w oprogramowaniu wraz z wymagającą pracą?

text: > **Możliwy duplikat:** > Gdzie znajdujesz czas? Jestem pewien, że w tej bardzo powszechnej sytuacji jest nas wielu. Masz wymagającą pracę. Innymi słowy, musisz poświęcić ponad 50 godzin tygodniowo, a mimo to oczekuje się, że będziesz nadążać za tym, co dzieje się w najnowocześniejszej technologii i końcu open source. Jakieś sugestie ludzie, jak to robisz? Czytanie blogów lub artykułów na temat C++ lub ruby nie jest opcją w biurze, chyba że chcesz zrezygnować z lunchu. Co chciałbyś przeczytać? Jest zbyt wiele narzędzi C++ i klejnotów rubinowych, które są istotne dla mojej pracy - nie mogę ich wszystkich przeczytać, prawda?


title: Automatycznie usuwaj pliki po ich wygaśnięciu

text: Wpadłem na ten pomysł od jakiegoś czasu i zastanawiałem się, czy ktoś widział taką funkcję/aplikację w jakimkolwiek systemie operacyjnym, a jeśli nie, to co o tym sądzisz. Jak myślisz, od czego powinienem zacząć? Pomysł jest prosty. Myślę, że wszyscy mamy te pliki, które są tworzone i prawdopodobnie używane przez kilka dni, a następnie pozostają na naszym dysku i nigdy ich nie usuwamy ani nawet nie sprawdzamy, czy znowu ich potrzebujemy. Byłoby fajnie, gdybyś mógł kliknąć plik prawym przyciskiem myszy i kliknąć na przykład „Wygaśnięcie za... 3 dni”. A plik zostanie usunięty po 3 dniach. Bardzo tego potrzebuję i być może **niektórzy** uznają to za przydatne. Myślałem o napisaniu skryptu i na początek użyć projektu Nautilus Action w GNOME.


title: Kto był pierwszym programistą?

text: Czy wśród historyków istnieje zgoda co do tego, kto był pierwszym programistą w historii? Jeśli tak, to kto to był i na czym programował? Uważam, że ciekawsze jest dowiedzieć się więcej o pionierach programowania, niezależnie od tego, czy programowali na programowalnej maszynie, czy sami zaprojektowali maszynę do wykonania jakiegoś zadania obliczeniowego.


title: Czy mogę zmienić nazwę części kodu wydanej pod Apache 2.0?

text: Czy można zmienić nazwę fragmentu kodu wyodrębnionego z licencjonowanego oprogramowania Apache 2.0, udostępniając go jako nowe repozytorium pod nową nazwą?


title: Jaka jest alternatywa programowania funkcjonalno-programowego dla interfejsu?

text: Jeśli chcę programować w stylu „funkcjonalnym”, czym zamieniłbym interfejs? interface IFace { string Nazwa { get; ustawić; } int Id { get; } } class Foo : IFace { ... } Może `Tuple<>`? Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo; Jedynym powodem, dla którego w pierwszej kolejności używam interfejsu, jest to, że chcę, aby zawsze były dostępne pewne właściwości/metody. * * * **Edytuj:** Więcej szczegółów na temat tego, o czym myślę/próbuję. Powiedzmy, że mam metodę, która przyjmuje trzy funkcje: static class Blarf { public static void DoSomething(Func<string> getName, Action<string> setName, Func<int> getId); } Z instancją `Bar` mogę użyć tej metody: class Bar { public string GetName(); public void SetName(wartość ciągu); public int GetId(); } ... var bar = new Bar(); Blarf.DoSomething(bar.GetName, bar.SetName, bar.GetId); Ale to trochę uciążliwe, ponieważ muszę wspomnieć „bar” trzy razy podczas jednego połączenia. Ponadto nie zamierzam, aby wywołujący dostarczali funkcje z różnych instancji Blarf.DoSomething(bar1.GetName, bar2.SetName, bar3.GetId); // NIE! W C#, `interfejs` jest jednym ze sposobów radzenia sobie z tym; ale to wydaje się być podejściem bardzo zorientowanym na obiekt. Zastanawiam się, czy istnieje bardziej funkcjonalne rozwiązanie: 1) przekaż razem grupę funkcji i 2) upewnij się, że funkcje są ze sobą odpowiednio powiązane.


title: Czy warto próbować pisać niezawodne struktury danych?

text: ## Problem Musimy przechowywać dane w sposób podobny do tabeli, ale mamy bardzo ścisłe ograniczenia dotyczące miejsca (~1Mb na tabelę składającą się z 10k+ wierszy). Przechowujemy takie dane: ID | recenzje | współczynnik | wynik | przedział | itd. ---+---------+--------+-------+----------+----- 1 | 244 | 2.4 | 10 | 4268 | ... w prostym formacie binarnym (jednowymiarowa tablica bajtów, w której indeks każdego wiersza można obliczyć po prostu znając długość każdego wiersza, która jest stała). Jest tylko jedna funkcja, która kiedykolwiek odczytuje te dane (pobiera wiersz według swojego indeksu) i tylko jedna funkcja, która dodaje nowy wiersz (na końcu). Usuwanie pozycji z tabeli nigdy nie będzie wymagane (tabela jest tylko dołączona). Obie funkcje są objęte przyzwoitą ilością testów jednostkowych. Problem jest następujący: musimy być w stanie szybko przejść przez wiersze _uporządkowane według różnych kolumn_. Innymi słowy, dane muszą być posortowane według co najmniej dwóch kolumn. ## Proste rozwiązanie Aby rozwiązać ten problem, zaimplementowalibyśmy indeksy, które ponownie byłyby fragmentami danych binarnych. Teraz zrobiłbym to intuicyjnie, tworząc uporządkowane struktury danych, które wyświetlają tylko indeks wiersza w oryginalnej tabeli: factor_index score_index ------------ ----------- 6 2 2 1 3 6 1 4 . . Funkcja, która dołącza nowy wiersz do tabeli, musiałaby zostać zaktualizowana, aby spowodować zaktualizowanie również indeksów. **PRZYKŁAD:** Aby uzyskać pierwszą pozycję uporządkowaną według wyniku, po prostu wyszukujemy pierwszą wartość w tabeli indeksów dla wyniku (2) i pobieramy odpowiedni wiersz z oryginalnej tabeli (trzeci wiersz, jeśli zgadzamy się, że tabela jest indeksowany do zera). Zasugerowano mi jednak inne podejście. ## Bardziej złożona, ale prawdopodobnie bezpieczniejsza wersja Zamiast przechowywać tylko indeksy, powielamy pola ID w każdej tabeli indeksów: factor_index | ID score_index | ID -------------+--- ------------+--- 6 | 46 2 | 8 2 | 8 1 | 14 3 | 91 6 | 46 1 | 14 4 | 60 . | . . | . Następnie zachowaj oryginalną tabelę posortowaną według identyfikatorów i używaj indeksów tylko jako pozycji początkowej do wyszukiwania binarnego w oryginalnej tabeli. Funkcja, która dołącza nowy rekord, będzie musiała teraz przeprowadzić wyszukiwanie binarne według identyfikatora, aby znaleźć miejsce wstawienia nowego wiersza _i_ spowodować aktualizację indeksów. **PRZYKŁAD:** Aby uzyskać pierwszy element uporządkowany według wyniku, szukamy pierwszego wiersza w tabeli indeksów pod kątem wyniku (2, 8) i używamy indeksu (2) jako pozycji początkowej wyszukiwania binarnego w stół. Jeśli dane są prawidłowe, nie musimy nawet wykonywać wyszukiwania binarnego, ponieważ na pozycji 2 znajdziemy wiersz o ID 8. Jeśli natomiast stwierdzimy, że rekord na pozycji 2 ma inny indeks, kontynuujemy z wyszukiwaniem binarnym, aby znaleźć właściwy i zarejestrować błąd. Argumentem przemawiającym za tym podejściem jest to, że zadziała, nawet jeśli indeks wskazuje na niewłaściwy wiersz w tabeli. Trudno mi jednak uwierzyć, że takie podejście jest naprawdę lepsze z następujących powodów: * Wymaga wyszukiwania binarnego, które może być nowym źródłem błędów. * Wymaga utrzymywania porządku w tabeli, co oznacza bardziej złożoną wstawkę (w przeciwieństwie do prostego dołączania). * Nie chroni przed awarią głównej tabeli: jeśli tak się stanie, indeks może nawet nie znaleźć rekordu za pomocą wyszukiwania binarnego. * Wymaga pisania (i testowania) kodu, który nigdy nie jest przeznaczony do uruchomienia. * Wykorzystuje więcej danych niż jest to konieczne. ## Pytanie Dla naszej aplikacji bardzo ważne jest, aby powyższe dane były zawsze aktualne. Ale czy to uzasadnia pisanie bardziej złożonych struktur danych i mechanizmów wyszukiwania w celu ochrony przed przypadkami brzegowymi, które mogą się zdarzyć, ale nie muszą? Czy zamiast tego nie należy poświęcić czasu i wysiłku na napisanie bardziej niezawodnych przypadków testowych dla prostszej wersji?


title: Jak zaznaczać typy w programach C i C++?

text: W tej mojej odpowiedzi użyłem `_t` na końcu typów, co w najlepszym wypadku zakończyło się kontrowersją. Taką praktykę stosuję w moich obecnych projektach. typedef struct { int x; int y; } punkt_t; Miało to być zgodne z typami C z `stddef.h`, takimi jak `size_t` lub `ptrdiff_t`. Jednak zgodnie z pewnymi komentarzami w moich pytaniach, postfix `_t` wydaje się być zarezerwowany dla POSIX. Czego powinienem użyć zamiast `_t`? Czy mimo to powinienem nadal używać `_t`? To pytanie dotyczy zarówno C, jak i C++. Jeśli te języki mają różne konwencje, odpowiedz na nie.


title: Porady/mądrość w zawodach programistycznych. (W szczególności IOI)

text: Jestem w irlandzkim zespole jadącym na Międzynarodową Olimpiadę Informatyczną w Bułgarii na początku sierpnia i korzystając z ogromnej wiedzy SA, chciałbym zadać kilka pytań tym z Was, którzy brali udział w zawodach programistycznych ( lub rzeczywiście, IOI) wcześniej. Głównie, jakie rady możesz udzielić tym, którzy rywalizują ze sobą? Jaki jest najlepszy sposób (w twoich oczach) na rozwiązanie problemu? Mam własne metody, ale jestem zainteresowany poznaniem twojego punktu widzenia. Jak zarządzasz czasem? Czy warto załadować kłopotliwy kod do gdb, aby spróbować rozwiązać podchwytliwe błędy, czy najlepiej spróbować zhakować rozwiązania? Czy jest jeszcze czas na prawidłowe debugowanie rzeczy? Zapamiętywałem niektóre algorytmy, takie jak algorytmy wyszukiwania grafów, algorytmy brute force, algorytmy rekurencyjne itp. Jakie inne popularne algorytmy są Twoim zdaniem przydatne? Z góry dziękuję.


title: Skąd wiedzieć, kiedy przestać testować?

text: Wiem, że to bardzo podstawowe pytanie. W przypadku niektórych aplikacji istnieje duża, prawie nieskończenie duża liczba przypadków testowych dla aplikacji. Testowanie wszystkich tych przypadków testowych jest niepraktyczne. Jak decydujemy, kiedy przestać testować? (inne niż „gdy skończą się pieniądze”).


title: Znaczące nazwy w słabo pisanym języku, takim jak JS

text: Ja się uczę od około roku, ale niedawno wkroczyłem w świat javascriptu. Mam problem z wymyśleniem znaczących nazw w parametrach funkcji, dzięki czemu będę w stanie powiedzieć i zapamiętać, co jest przekazywane i działać poprawnie. Na przykład: W javie mógłbym zdefiniować `void method(Type name)` i zawsze wiedzieć, że nazwa jest typu obiektu. void printToConsole(String errorMessage) { System.out.println(errorMessage); <--Wiem, że errorMessage to ciąg znaków } W JavaScript mogę wykonać tylko `metoda funkcji(nazwa)`, a jeśli wrócę później, zapomnę jaka jest nazwa i muszę zobaczyć, gdzie została wywołana `metoda` i jaka został przekazany. Zacząłem nazywać parametr „nameType”, ale wydaje się to zbyt szczegółowe. gdzieś w kodzie: getBoxText($("input[type='text']")[0]); function getBoxText(searchBox) { //TODO: zrób coś z searchBox; } W drugim przykładzie nie jest od razu jasne, że `searchBox` jest `elementem`, w przeciwieństwie do `nodeList`, XML DOM lub czegoś innego, więc kiedy wrócę, aby napisać tę metodę, muszę znaleźć zadzwoń i pamiętaj, co to jest. Kusiłoby mnie, aby zmienić deklarację funkcji na: function getBoxText(seachBoxElement) { Co gorsza, później mógłbym pokusić się o wywołanie `getBoxText(somethingNotAnElement)`. Czy istnieje przyjęta konwencja na to? Myśli?


title: Jak czytać kod Scala z dużą ilością niejawnych?

text: Rozważmy następujący fragment kodu (zaadaptowany z http://stackoverflow.com/a/12265946/1333025): // Using scalaz 6 import scalaz._, Scalaz._ object Przykład extends App { case class Container(i: Int) def compute(s: String): State[Container, Int] = state { case Container(i) => (Container(i + 1), s.toInt + i) } val d = List("1", "2" , "3") typ ContainerState[X] = State[Container, X] println( d.traverse[ContainerState, Int](compute) ! Container(0) ) } Rozumiem, co robi na wysokim poziomie. Ale chciałem prześledzić, co dokładnie dzieje się podczas wywołania `d.traverse` na końcu. Oczywiście, `List` nie posiada `traverse`, więc musi być `niejawnie` przekonwertowana na inny typ, który to robi. Chociaż spędziłem sporo czasu próbując się tego dowiedzieć, nie odniosłem sukcesu. Najpierw odkryłem, że w `scalaz.Traversable` traverse[F[_], A, B] (f: (A) => F[B], t: T[A]) (niejawne arg0: Applicative [F]): F[T[B]], ale wyraźnie to nie to (chociaż najprawdopodobniej "mój" `traverse` jest zaimplementowany przy użyciu tego). Po wielu poszukiwaniach pogrzebałem kody źródłowe scalaz i znalazłem metodę `scalaz.MA`'s traverse[F[_], B] (f: (A) => F[B])(niejawna a: Applicative[ F], t: Traverse[M]): F[M[B]] co wydaje się być bardzo bliskie. Nadal brakuje mi tego, co jest przekonwertowane w moim przykładzie i czy używa `MA.traverse` czy czegoś innego. * * * **Pytanie brzmi: Jaką procedurę powinienem wykonać, aby dowiedzieć się, co dokładnie nazywa się `d.traverse`?** Posiadanie nawet tak prostego kodu, który jest tak trudną analizą, wydaje mi się dużym problemem. Czy brakuje mi czegoś bardzo prostego? Jak mam postępować, gdy chcę zrozumieć taki kod, który używa wielu importowanych `niejawnych`? Czy jest jakiś sposób, aby zapytać kompilator, jakiego „niejawnego” użył? A może jest coś takiego jak Hoogle for Scala, abym mógł wyszukać metodę po prostu po jej nazwie?


title: dlaczego projektowanie/kodowanie kompilatora uważane jest za najwyższy poziom aktywności w programowaniu?

text: W kilku ostatnich artykułach, które przeczytałem odkryłem, że w programowaniu kompilatora drabinkowego projektowanie jest zawsze traktowane jako działanie najwyższego poziomu. Dlaczego tak jest? Dlaczego nie projekt bazy danych lub architektura protokołu sieciowego. Oto jeden z takich artykułów.


title: Pomiń kończący się średnik w tagu - dobry pomysł?

text:
Istnieje możliwość pominięcia **średnika końcowego** w tagu. Przykład:
 Nazwa	E-mail	 <? foreach ($receiver jako $receiver): ?>
 <?= $receiver->nazwa ?>	 <?= $recevier->e-mail ?>
 <? endforeach ?>
 Zwróć uwagę na `<? endforeach ?>` bez średnika po `endforeach`. Dokumentacja PHP mówi: > Znacznik zamykający bloku kodu PHP automatycznie oznacza średnik; > nie musisz mieć średnika na końcu ostatniej linii bloku PHP. **Dlaczego poruszam ten temat?** Obecnie wraz ze znajomym pracujemy nad autorskim projektem PHP z MVC (model-view-controller). Dla tego widoku oceniłem niektóre silniki szablonów PHP, takie jak Smarty, Mustache, a nawet zaprojektowałem swój własny silnik szablonów. Ale kiedy przeczytałem, że PHP jest samo w sobie silnikiem szablonów, coś poszło mi do głowy „_klik_”. Dlaczego po prostu nie zgodzić się w zespole na użycie ograniczonego podzbioru PHP jako silnika szablonów? I masz wiele recenzji kodu, aby dotrzymać reguł? A ten podzbiór może wyglądać tak: * Używaj tylko krótkich tagów `<?`, `<?=` i `?>` * Używaj tylko prostych wyrażeń bez efektów ubocznych, szczególnie **nie przypisuj zmiennych** * Używaj tylko `if`, `foreach` i `include` dla instrukcji * Używaj tylko alternatywnej składni dla struktur kontrolnych * Każda z nich zawiera tylko **jedną** instrukcję Jest to kontekst, w którym pomijamy kończący średnik, a mianowicie dla `<? endforeach ?>`, `<? endif ?>` i `<? include("list-contents.php") ?>`. **Często jednak czytam, że pomijanie kończących średników to zła praktyka. Czemu? Czy to w ogóle zła praktyka?** Cieszę się, że PHP pozwala pominąć kończący średnik, ponieważ minimalizuje to wizualny bałagan w plikach szablonów. Powinny wyglądać głównie jak pliki HTML z małymi fragmentami PHP tu i tam. Powyższy przykład jest tym, do czego dążę. Co o tym myślisz? Jeśli jesteś temu przeciwny: dlaczego? Jeśli go popierasz: dlaczego miałby to być dobry pomysł? Co mam powiedzieć mojemu partnerowi, jeśli odsyła do mnie jakiś tekst przeciwko pomijaniu średnika? Prosimy o poparcie swojej opinii faktami, referencjami lub własnym doświadczeniem.


title: C#, architektura i miejsca pracy

text: Czy muszę znać architekturę wraz z C#, aby dostać pracę w C#, czy gdybym przepracował kilka książek (bez zawartości architektury), czy wystarczyłoby to na stanowisko absolwenta? Ukończyłem uniwersytet i uzyskałem stopień Inżyniera Oprogramowania, ale nie pamiętam żadnej z zawartości modułów architektury i frameworków, takich jak konfigurowanie architektury n-warstwowej.


title: Jak radzić sobie z oprogramowaniem do „portowania”, które wciąż jest w fazie rozwoju

text: Moja firma buduje wersję aplikacji na Androida na iOS, którą rozwija nasz klient (ale jeszcze nie została wydana). Mamy dostęp do najnowszych kompilacji i źródeł, jednak ponieważ oprogramowanie jest często restrukturyzowane i refaktoryzowane, wykonujemy wiele niepotrzebnych przeróbek. Ponadto termin realizacji umowy prawdopodobnie minie, zanim aplikacja klienta będzie gotowa do wydania. Innymi słowy, powinniśmy zbudować wersję iOS, zanim oryginalna wersja Androida będzie jeszcze gotowa. Na szczęście klient odrzucił pierwotny termin, ale teraz być może będziemy musieli renegocjować ceny… nigdy nie jest to zabawna sytuacja. _Czy zajmujemy się tym nieprawidłowo?_ Jak zwykle wykonuje się „porty” (zwłaszcza między platformami mobilnymi)? Czy istnieje właściwy sposób tworzenia potoku dla wielu platform bez tak wielu przeróbek? Z góry dziękuję! :)


title: Dlaczego PHP nie obsługuje przeciążania funkcji?

text: Zastanawiam się, czy jedną z kluczowych cech języka programowania jest możliwość przeciążania funkcji za pomocą argumentów. Myślę, że jest to niezbędne w kontekście programowania obiektowego. Czy jest to celowo pozostawione i niedozwolone? A może przeciążanie nie jest dobrą praktyką?


title: Nauka o bezpieczeństwie i znajdowanie exploitów

text: Po pierwsze: absolutnie nie interesuje mnie nauka łamania systemów w celu osobistego wzbogacenia się, krzywdzenia innych ludzi lub robienia czegokolwiek zdalnie złośliwego. Rozumiem podstawy wielu exploitów (XSS, SQL injection, use after free etc.), chociaż sam nigdy żadnego nie wykonywałem. Mam nawet pomysł, jak chronić aplikacje internetowe przed typowymi exploitami (jak wspomniany wcześniej XSS i SQL injection) Przeczytanie tego pytania na temat luki zero-day Internet Explorera z Security SE wzbudziło moją ciekawość i sprawiło, że zacząłem się zastanawiać: jak ktoś w ogóle dowiedzieć się o tym exploitu? Jakich narzędzi używali? Skąd wiedzieli, czego szukać? Nieufnie podchodzę do odwiedzania hakerów online z obawy przed zainfekowaniem własnego systemu (historie Defcon wprawiają mnie w paranoję). Więc jakie jest dobre, bezpieczne miejsce do rozpoczęcia nauki?


title: Co się stanie, gdy projekt przełączy się na inną licencję?

text: Czytałem trochę o licencjach na oprogramowanie i mam problem ze zrozumieniem, co się dzieje, gdy ktoś chce zmienić licencję. Przeczytałem tutaj kilka pytań na ten temat i to trochę wyjaśnia, ale wciąż jest kilka obszarów, które są dla mnie niejasne. Jeden przykład: Załóżmy, że mam projekt hostowany na github bez określonej licencji. Jeśli ktoś wniesie łatkę do mojej bazy kodu, a ja ją połączę, czy ta łatka nadal należy do niego? Jeśli tak, czy potrzebuję ich zgody na zmianę licencji w moim projekcie? Inny przykład: Załóżmy, że posiadam oprogramowanie na jakiejś liberalnej licencji open source. Rozumiem, że mogę dowolnie zmieniać licencję mojego oprogramowania (z wyjątkiem konfliktów ze współtwórcami), ale czy ma to wpływ na istniejące kopie oprogramowania? Jeśli zdecyduję się zamknąć źródło mojego projektu, czy istniejące kopie źródła z licencją na system operacyjny w pakiecie pozostają open source i można je rozpowszechniać zgodnie z poprzednią licencją? Podoba mi się pomysł elastycznej współpracy z innymi przy projektach i jeśli projekt nie zacznie się rozwijać, decydowanie o odpowiedniej licencji wydaje się niepotrzebnym kosztem. Miło byłoby jednak być bardziej świadomym potencjalnych konfliktów, które mogą się pojawić.


title: jakieś problemy z używaniem git w środowisku CI?

text: Pracuję w sklepie, który żyje swoim procesem CI. Tradycyjnie używaliśmy SVN i rozważamy przejście na git (chcemy wykorzystać jego łatwość rozgałęziania, przechowywania itp.). Myśląc w kategoriach, że rozproszony system kontroli źródeł, z samej swojej natury, wydaje się stawiać potrzebę centralnego repozytorium jako drugorzędny problem, czy git stwarza jakiekolwiek wyzwania dla procesu CI? Tak długo, jak programista wykonuje „zatwierdzenie”, a następnie „push”, czy koncepcja centralnego repozytorium, jaką znałbym z SVN, nadal istnieje, sprawiając, że kompilacje CI są po prostu inną konfiguracją (wyciągnij z git zamiast svn)? Jakieś problemy kulturowe (deweloperzy rzadziej naciskają na główne repozytorium i zamiast tego angażują się tylko lokalnie)? Chciałbym usłyszeć historie sukcesów/porażek od grupy, która używa CI z git.


title: Jaka jest najlepsza praktyka dla historyjek użytkownika zawierających dwie role?

text: Mam wiele historyjek użytkowników, w których ta sama funkcja musi być dzielona przez wiele ról. Zacząłem pisać te historie w ten sposób: > Jako Rola-A lub Rola-B > Kiedy wykonuję Akcję-X > Zdarzenie-Y powinno nastąpić. Czy jest to właściwy sposób na przedstawienie tej koncepcji w historyjkach użytkownika, czy też powinienem podzielić ją na jedną historię dla każdej roli?


title: Konwertuj listę wartości opadów 24-godzinnych na sumę po godzinie

text: Załóżmy, że mam listę wartości opadów według godziny, z których każda pokazuje, ile deszczu padło w ciągu ostatnich 24 godzin, uporządkowane według daty. Na przykład: { '2012-05-24 12:00': 0.5, // .5" deszczu od godziny 12:00 do 24 maja 11:59 '2012-05-24 11:00': 0.6 , // 0,6" deszczu od 11:00 23 maja do 24 maja 10:59 '2012-05-24 10:00': 0,6, // 0,6" deszczu od godz. 23 maja do 10:00 - 5/24 09:59 ... '2012-05-23 10:00': 0 } Czy istnieje strategia/algorytm określający ile deszczu padał w każdej z godzin? to.Wiem, że nie jest to tak proste, jak po prostu sumowanie różnic.**Wizualizacja zestawu danych** P(N) [.....=================== ====] P(N-1) [....======================.] P(N-2) [... ======================..] P(N-3) [..================= ======...] Chcę [................................=] Wielkie dzięki za wszelką pomoc.


title: Projekt: Udostępnianie klasy między wieloma formami

text: To pytanie odnosi się do pytania, które zadałem wcześniej, które można tutaj wykorzystać jako odniesienie: Czy to najlepszy sposób na podejście do tego projektu? Czy to jest przykład MVC? Podczas kodowania natknąłem się na uświadomienie sobie, że nie tworzę „luźnego sprzężenia”. Sposób, w jaki próbuję teraz rozwiązać ten problem, polega na utworzeniu instancji **Log Collector Class** w **MAIN** i przekazaniu jej do każdego konstruktora klas formularzy. Teraz, teoretycznie, **Klasa kolektora dzienników** musi być utworzona tylko raz przez cały czas działania programu. Myślałem o użyciu wzorca Singleton dla tej klasy, ~~ale pomyślałem, że gdyby dwa formularze musiały aktualizować tę klasę w tym samym czasie, byłby problem.~~ Jaki byłby najlepszy sposób na posiadanie Log Collector Klasa może być udostępniana za pośrednictwem wielu formularzy bez tworzenia za każdym razem nowej wersji klasy Log Collector? Zrobiłem trochę badań przed opublikowaniem tego pytania i przeczytałem, jak niektórzy mówią, że używam statycznej klasy do tego typu projektu. Nie wydaje mi się to jednak luźnym sprzężeniem. **Kolejne pytanie** Czy interfejs klasy Log Collector najlepiej sprawdzi się tutaj dla wszystkich formularzy, które chcą się z nim komunikować? Na przykład: interfejs publiczny LogCollectorInterface { void SendLogMessage(string logMessage); } Teraz, gdy wszystkie formularze chcą komunikować się z **Klasą kolektora dzienników** , jest to jedyna funkcja, której naprawdę potrzebują, SendLogMessage. Czy najlepszym sposobem byłoby utworzenie instancji interfejsu zamiast **Klasy kolektora dzienników**? FWIW, nie jestem pewien, czy „luźne połączenie” jest najlepszym kierunkiem. To jedna z tych rzeczy, na które natknąłem się czytając odpowiedzi na pytania związane z OOP. Będąc nowym programistą OOP, ma to dla mnie największy sens zarówno z punktu widzenia organizacyjnego, jak i stanowiska testowego. **Edycja:** To nie będzie aplikacja wielowątkowa, więc żadne dwa formularze nie będą mogły aktualizować klasy kolektora dzienników w tym samym czasie.


title: Dokumentowanie funkcji, która przyjmuje parametry losowe?

text: Jakie jest najlepsze podejście do tworzenia dokumentacji (wyświetlania prototypu funkcji, jeśli chcesz) dla funkcji, które przybierają różne formy pod względem parametrów. Załóżmy, że istnieje 10 różnych możliwości: param(name); parametr(nazwa, typ); param(nazwa, opcje); param(nazwa, typ, opcje); parametr(nazwa, fn); parametr(nazwa, typ, fn); param(nazwa, opcje, fn); param(nazwa, typ, opcje, fn); param(opcje); param(opcje, fn); Jak napisać prototyp funkcji (dokumentację) dla tego typu metod (nawet tych, które nie są tak ekstremalne)? Niektóre projekty używają funkcji „przeciążanie” w dokumentacji: .on(zdarzenie, fn, [przechwytywanie]) .on(zdarzenie, selektor, fn, [przechwytywanie]) Ale czy przejrzystość lub elastyczność przeważyłaby długość?


title: Doradzić, jak napisać prosty test dla tego fragmentu kodu javascript?

text: Próbuję rozpocząć testowanie jednostkowe (nie używając żadnych ram testowych) dla moich skryptów java. Oto jeden z przykładów. zmienna obj = {}; obj.disableBtn = function ($btn, styl) { $btn.attr('wyłączone','wyłączone').addClass('wyłączone').removeClass(styl); }; Przykład użycia jest następujący: obj.disableBtn($('.submit'), 'btn-blue'); Wystarczy dodać atrybut `disabled`, dodać klasę `disabled` i usunąć styl `btn-blue`. Proszę doradzić, jak w tym przypadku wyglądałby typowy przypadek testowy. Mam niewielką wiedzę na temat testowania za pomocą `assert()`, ale nie mam pojęcia, jak się do tego zabrać, gdy wiąże się to z weryfikacją wyników na elementach HTML.


title: Właściwe miejsce do osadzenia parsera: serwer czy klient?

text: Piszę oprogramowanie do zarządzania bazami danych. Ma architekturę klient-serwer, w której serwer ma fragment kodu do przechowywania i pobierania. Klient musi uzyskać dane wejściowe od użytkownika, połączyć się z serwerem i zadać mu zapytanie. Teraz mam parser, który może analizować SQL jak zapytania. Moje pytanie brzmi, gdzie najlepiej osadzić ten parser? ### Opcja 1 – Osadzenie na serwerze: Pobierz zapytania od klienta, przekaż je w stanie nienaruszonym do serwera, a następnie przeanalizuj i wykonaj niezbędne czynności. lub dane w obiekcie polecenia. Jaki jest właściwy sposób postępowania?


title: Czy mogę pożyczyć części projektu na licencji Apache na coś, co nie jest open-source?

text: Jeśli chcę stworzyć aplikację do gry karcianej lub Androida, czy mogę legalnie pożyczyć części pasjansa na Androida na licencji Apache-2.0? Czy byłbym w stanie obciążyć taki projekt? (Nie mogłem zrozumieć żargonu prawnego zawartego w licencji).


title: Planowanie rozwiązywania problemów w sprincie

text: Od czasu do czasu stajemy przed trudnymi problemami, które trudno odtworzyć. Tworzenie planu rozwiązania takiego problemu jest (prawie) niewykonalne. To, co robimy w tej chwili, to rozbijanie ich w analizach/reprodukcjach i rozwiązywanie problemu. Dopóki nic nie wiemy, planujemy liczbę godzin na zbadanie i zarezerwowanie tych godzin poprzez wysiłek, a nie wynik. To nie wygląda na prawdziwy zwinny sprint. Czy macie jakieś sugestie, jak poprawić tę sytuację?


title: Co jest potrzebne do wdrożenia aplikacji korzystającej z nowej bazy danych LocalDB firmy Microsoft?

text: Chciałbym wiedzieć, jakie komponenty Microsoft muszą zostać zainstalowane, aby ta nowa baza danych LocalDB działała na komputerze użytkownika. > **Teraz w CTP3: SQL Server Express LocalDB** LocalDB to nowa, uproszczona > opcja wdrażania SQL Server Express Edition z mniejszą liczbą wymagań wstępnych >, która instaluje się bardzo szybko. To sprawia, że jest to idealne rozwiązanie dla programistów, którzy potrzebują > wbudowanej bazy danych SQL Server dla aplikacji lub narzędzi komputerowych. LocalDB ma > wszystkie te same funkcje programowalne co SQL Express, ale działa w procesie > z aplikacjami, a nie jako usługa. Jest on dostępny w ramach pobierania SQL > Server Code Name „Denali” CTP3. Powyższe pochodzi ze strony Microsoftu Nowość w CPT3 Brzmi to jak idealna baza danych SQL dla małych aplikacji komputerowych dla jednego użytkownika. Próbuję dowiedzieć się, co muszę uwzględnić w instalacji. Chcę używać tego jako wbudowanej bazy danych, ale nie wiem, czy muszę zainstalować jakieś składniki Microsoft lub upewnić się, że wcześniej zainstalowano inne składniki Microsoft. Czy ktoś wie, jakie komponenty Microsoft muszą zostać zainstalowane, aby ta nowa baza danych LocalDB mogła działać? Czy istnieje instalator, który automatycznie wykryje obecność niezbędnych komponentów i zainstaluje je? ### Potrzebna pomoc moderatora: Jak przenieść to pytanie do witryny http://dba.stackexchange.com?


title: umiejętności programistyczne asp .net przeniesione do programu sharepoint?

text: Czy kompetentny programista asp .net C# lekceważy wiele swoich umiejętności, aby bardziej zajmować się konfiguracją i kodowaniem po stronie serwera, gdy przenosi swoją karierę na arenę programu SharePoint 2010? A może asp .net C# w rzeczywistości jest tylko dobrą bazą do rozpoczęcia badań nad programem sharepoint?


W mojej pracy językiem używanym do pisania aplikacji jest Visual Basic .NET. Czytam w internecie i prawie wszystkie przykłady i pytania dotyczą C#. Czy jest jakaś komercyjna aplikacja napisana w Visual Basic .NET? Czy jest jakieś pole dla programisty VB Net?


title: Jakie są względy prawne przy rozwidleniu projektu na licencji BSD?

text: Jestem zainteresowany rozwidleniem projektu wydanego na dwuklauzulowej licencji BSD: > Copyright (c) 2010 {właściciel praw autorskich} Wszelkie prawa zastrzeżone. > > Redystrybucja i używanie w formie źródłowej i binarnej, z > modyfikacją lub bez, jest dozwolone pod warunkiem, że spełnione są następujące warunki: > > (1) Redystrybucja kodu źródłowego musi zawierać powyższą informację o prawach autorskich, > tę listę warunków i wyłączenie odpowiedzialności na końcu. Redystrybucje w > formie binarnej muszą zawierać powyższą informację o prawach autorskich, tę listę > warunków i następujące zastrzeżenie w dokumentacji i/lub innych materiałach > dostarczonych z dystrybucją. > > (2) Ani nazwisko {posiadacz praw autorskich}, ani nazwiska jego współtwórców > nie mogą być używane do promowania lub promowania produktów wywodzących się z tego oprogramowania > bez uprzedniej pisemnej zgody. > > WYŁĄCZENIE ODPOWIEDZIALNOŚCI > > NINIEJSZE OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ WŁAŚCICIELI PRAW AUTORSKICH I WSPÓŁPRACOWNIKÓW „TAK JAK JEST” > ORAZ WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO PRZEDMIOTU. W ŻADNYM WYPADKU WŁAŚCICIEL PRAW AUTORSKICH LUB WSPÓŁPRACOWNICY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SZCZEGÓLNE, PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM MIĘDZY INNYMI ZAKUP TOWARÓW LUB USŁUG ZASTĘPCZYCH; UTRATĘ DANYCH, UTRATĘ UŻYTKOWANIA, LUB ZYSKÓW LUB PRZERWANIE W DZIAŁALNOŚCI JEDNOCZEŚNIE SPOWODOWANE I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI, CZY W RAMACH ODPOWIEDZIALNOŚCI UMOWNEJ, ŚCISŁEJ LUB CZYNNEJ (W TYM ZANIEDBANIA LUB INNEGO) WYNIKAJĄCE W JAKIKOLWIEK SPOSÓB Z KORZYSTANIA Z TEGO OPROGRAMOWANIA, NAWET > MOŻLIWOŚĆ TAKICH USZKODZEŃ. Nigdy wcześniej nie rozwidlałem projektu, ale ten projekt jest bardzo podobny do czegoś, czego potrzebuję/chcę. Jednak nie jestem pewien, jak daleko dojdę, więc planuję wyciągnąć najnowsze z ich repozytorium i rozpocząć pracę. Może w końcu dostanę go tam, gdzie chcę i będę mógł go wydać. Czy to właściwe podejście? Jak dokładnie to wpływa na rozwidlenie projektu? Jak mogę śledzić, kto jest właścicielem jakich komponentów lub sekcji (co jest chronione prawami autorskimi ja, jakie prawa autorskie mają oryginalni twórcy, gdy zacznę tupać nad ich bazą kodu)? Czy mogę rozwidleć ten projekt? Co muszę zrobić przed wydaniem i kiedy/jeśli zdecyduję się wydać oprogramowanie pochodzące z tej pracy na licencji BSD?


title: Kiedy interpreter wykonuje kod: czy istnieje „łańcuch interpretacji” aż do najniższego poziomu?

text: Po przeprowadzeniu pewnych badań i z pomocą ludzi na tej stronie, w końcu zrozumiałem, czym właściwie jest interpretacja. Zasadniczo interpretacja oznacza (popraw mnie, jeśli się mylę): 1. Zeskanuj fragment kodu. 2. Wymyśl fragment kodu w innym języku o tym samym znaczeniu. 3. **Wykonaj** ten nowy fragment kodu. Na przykład, interpreter napisany w Javie, który interpretuje kod w C i widzi ten wiersz kodu:`printf("hello world");` Pojawi się następujący wiersz kodu: `System.out.println("hello world");` I **wykona** go (w przeciwieństwie do kompilatora, który **przechowa** go). **Jeśli to wszystko prawda, to oto moje pytanie:** Myślę, że **każda egzekucja wykonywana przez tłumacza faktycznie tworzy łańcuch interpretacji aż do najniższego poziomu.** Chciałbym wiedzieć Jeśli to prawda. Oto, co mam na myśli: Kiedy interpreter **wykonuje** wiersz kodu (który jest nowym wierszem, który wymyślił, po zeskanowaniu wiersza), **w rzeczywistości mówi platformie bazowej, aby go zinterpretowała.** przykład, jak wiemy, interpreter napisany w Javie, który interpretuje kod C, widzi `printf("hello")` i **wykonuje** w reakcji nową linię kodu `System.out.println("hello")` . Ale co właściwie oznacza " **wykonuje** `System.out.println("cześć")`"? ** Oznacza to poinformowanie platformy (w tym przypadku JVM) o zinterpretowaniu tego wiersza.** I tak zaczyna się kolejna interpretacja: interpreter (w tym przykładzie) w JVM otrzymuje wiersz `System.out.println( )`, wymyśla nowy wiersz kodu o tym samym znaczeniu w innym języku i **wykonuje** go. A kiedy **wykona** nowy wiersz kodu, znowu: faktycznie mówi swojej podstawowej platformie, aby go zinterpretować (w tym przykładzie system operacyjny). A potem kolejna interpretacja zaczyna się w systemie operacyjnym, który wymyśla nową linię kodu o tym samym znaczeniu w innym języku i każe jeszcze niższemu poziomowi go zinterpretować. To trwa do najniższego poziomu procesora. Moje pytanie brzmi: czy to prawda? **Czy każde wykonanie wykonywane przez interpreter jest w rzeczywistości wezwaniem do podstawowej platformy w celu interpretacji?** (Tworząc w ten sposób łańcuch interpretacji aż do najniższego poziomu?) Kiedy ludzie mówią, że interpreter **wykonuje** kod, czy w rzeczywistości oznacza to, że mówi, że platforma bazowa interpretuje ten kod? (I tak dalej?) _(Uwaga: mogę nie być dokładny w odniesieniu do funkcji JVM, pominąłem tam kilka kroków. Ale moje pytanie jest bardziej ogólne, Java to tylko przykład)._


title: Czy można znaleźć pracę i staże na poziomie podstawowym bez poświęcania całego czasu na programowanie?

text: Na studiach specjalizuję się w informatyce, a obecnie jestem na letnim programie dla nieletniego biznesu. Z harmonogramem i wszystkimi zewnętrznymi projektami grupowymi i nauką nie mogę naprawdę programować, a będę miał tylko krótki czas wolny przed rozpoczęciem semestru jesiennego. Co gorsza, powiedziano mi, że moja ścieżka edukacyjna – z koncentracją na biznesie – zacznie bagatelizować znaczenie programowania przez resztę mojego czasu w szkole, co jeszcze bardziej osłabi moje umiejętności programowania. Chciałbym aplikować na staże programistyczne w okresie letnim, ale nie wydaje mi się prawdopodobne, że będę mógł je wylądować, gdy inni kandydaci spędzają znacznie więcej czasu na programowaniu. Czy przesadnie podkreślam znaczenie znajomości programowania od początku do końca na stanowiskach stażystów/początkujących, czy też naprawdę konieczne jest skoncentrowanie większości czasu na programowaniu kosztem innych rzeczy, które chcę robić (takich jak życie towarzyskie )?


title: Licencja na artykuły publikowane na uczelniach?

text: Przeszukałem trochę, jak interpretować kod Morse'a wprowadzony przez człowieka. Nie znalazłem żadnych istniejących bibliotek ani aplikacji, które to robią, ale znalazłem kilka artykułów naukowych na temat tego, jak to zrobić. Przed wyruszeniem w podróż prób interpretacji języka akademickiego i zaawansowanych tematów muszę wiedzieć, czy mogę korzystać z tych artykułów? Jakie mają licencje? Jednym z nich, o którym myślę, jest „System rozpoznawania alfabetu Morse'a z LMS i algorytmami dopasowywania dla osób niepełnosprawnych”. ale także inne unoszące się wokół. Wspomniany artykuł wydaje się kosztować czytanie, ale co wtedy? Czy można to opatentować? Jakie zasady obowiązują tutaj?


Czy architektura grid lub p2p jest podzbiorem architektury brokera? jakie są kluczowe cechy, które sprawiają, że są one podobne lub różne?


title: Czy można napisać kod bez metod klasowych, globalnych i zmiennych klasowych?

text: Projektuję własny język programowania dla zabawy i myślę o tym, aby był w pełni zorientowany obiektowo (bez statyki, bez globalnych, bez zmiennych klas, bez metod klas), więc muszę znaleźć sposób na całkowite wyeliminowanie potrzeb metod klasowych, ale najpierw muszę się upewnić, że znam wszystkie problemy, które można rozwiązać tylko za pomocą metod klasowych. Czyli zwykle do tworzenia pomocników używane są metody klasowe, a nazwane konstruktory, tak? (Coś jeszcze?). Obecnie muszę je zastąpić projektami zorientowanymi obiektowo: Na przykład: pomocnicy plików, myślę o zaprojektowaniu tego w ten sposób: class File def initialize(ścieżka) @path = path end def copy(miejsce docelowe) # Skopiuj plik z @path do destination # Następnie otwórz ścieżkę docelową, tworząc nową instancję pliku end end _Właściwie używam C, ale napisałem przykład w Ruby, więc będzie łatwiejszy do zrozumienia._ Brak metod klasowych, a mógłbyś połącz go w ten sposób: File.new("katalog/plik").copy("nowa_ścieżka").copy("inna_ścieżka") Jeśli jest za długa, mogę po prostu porzucić "nową" metodę, tak jak robi to Python: File( "katalog/plik").copy("nowa_ścieżka").copy("inna_ścieżka") Pomocników matematycznych można zastąpić domieszkami: module Math def pow(wartość) @value = @value ** value end end class Integer include Math def inicjalizuj(wartość) @value = wartość end end Nazwij to tak: Integer.new(100).pow(10).pow(10).pow(10) Jeśli nadal potrzebujesz pomocników: module Helpers # Jakiś blok kodów end class Object include Pomocnicy koniec A teraz jest dostępny wszędzie. Aby dodać więcej pomocników, po prostu zmodyfikuj moduł Helpers: module Helpers # Dodaj więcej helperów end Możemy utworzyć klasę fabryczną zamiast nazwanego konstruktora: class Lexer def initialize(source) @source = source end end class LexerFactory def create_from_file(file) return Lexer .new(File.read(file)) end def create_from_string(string) return Lexer.new(string) end end class Base def initialize(lexer_factory) @lexer_factory = lexer_factory end def lexer @lexer_factory end end lexer = Base.new(LexerFactory .new).lexer.create_from_file("katalog/plik") Więc moje pytania brzmią: Czego mi brakuje? Czego nie możesz zrobić bez metod klasowych i zmiennych klasowych? Jakie problemy można było rozwiązać tylko za ich pomocą?


title: Wysłałeś, masz rzadką usterkę segmentu. Sprawdzanie wskaźnika czy puścić?

text: Wysłałeś, potwierdzenia są wyłączone, otrzymujesz _rzadki_ raport o awarii wskazujący, że w Twoim kodzie wystąpiło naruszenie wskaźnika zerowego. W środowisku programistycznym problem zostałby wyłapany przez asercję. Wszystko, co masz, to raport o awarii, więc odtworzenie problemu jest prawie niemożliwe. Śledzenie śladu wstecznego nie daje żadnych wskazówek, dlaczego w ogóle doszło do wypadku. Opcje: \- Dodaj sprawdzanie wskaźnika, aby zapobiec awarii. Zapobiegnie to awarii, ale prawdopodobnie nawet nie dowiesz się, dlaczego to się stało. \- niech lata, miejmy nadzieję, że powtórzy się to ponownie w przypadku powtórzenia. Załóżmy, że aplikacja nie jest przeznaczona do pocisku kierowanego ani automatycznego układu hamulcowego... Który byś wybrał?


title: Dostajesz pracę w branży oprogramowania wywodzącą się z branży gier?

text: Czy próba wejścia do branży oprogramowania wywodząca się z branży gier jest w ogóle realna? Czuję, że mam dość duże umiejętności w odniesieniu do programowania w ogóle - jestem trochę w technikach programowania Agile i zwracam szczególną uwagę na jakość kodu, mam pewne ograniczone doświadczenie w korzystaniu z SCRUM i mam dość silną wiedzę na temat C# i mniejszą zakres C++ jednak nie mam doświadczenia z żadnymi technologiami biznesowymi- tylko technologie gier. Za każdym razem, gdy widzę reklamy, są one zawsze mocno związane z doświadczeniem technologicznym, więc nie jestem pewien, jakie mam szanse.


title: Ile wysiłku wkłada się w utrzymanie systemu kompilacji?

text: W StackExchange Podcast #09 zauważono: > W innym badaniu ostatnio przyjrzano się, ile wysiłku wkłada się w utrzymanie systemu kompilacji: 5 do 30% całego wysiłku programistycznego poświęca się na utrzymanie systemu kompilacji. Różnice są ogromne nawet podczas pracy nad podobnymi > projektami. Jaka jest nazwa wspomnianego badania i gdzie można je znaleźć? Dźwięk podcastu nie zawiera dalszych szczegółów. Dodatkowo, czy ktoś ma linki do innych badań obejmujących ten sam temat.


title: Czy powtarzanie linków do tej samej klasy w jednym komentarzu javadoc to zła praktyka?

text: Obecnie piszę API i jego dokumentację. Na przykład mam coś takiego: public interface Event { } public interface Process { } public interface EventProcessor { /** * Rozpoczyna asynchroniczne przetwarzanie określonego zdarzenia. Zwrócony * {@link Process} może służyć do śledzenia postępu przetwarzania. Jeśli * określone zdarzenie powoduje przetworzenie większej liczby {@link Event events} w tym * systemie, są one również śledzone za pomocą zwróconego {@link Process}. * * Zdarzenie @param * do rozpoczęcia przetwarzania * @return */ Process startProcessing(Zdarzenie); } W powyższym przykładzie link javadoc do interfejsu `Process` jest powtarzany. W API, które piszę, zdarzają się przypadki, w których mam kilka odwołań do tej samej klasy w jednym komentarzu javadoc. Czy zawsze powinienem zaznaczać odniesienia do klasy/metody/itd. jako linki javadoc? Ogólnie uważam, że posiadanie wielu linków w komentarzu javadoc jest oznaką wysokiej spójności. Ale kiedy często jest to ten sam cel, który jest powiązany, nie jestem pewien, czy to dobrze.


title: Jak uchronić się jako DevLead przed politycznymi grami menedżerskimi

text: Jako programista/DevLead skupiasz się na tworzeniu oprogramowania i możesz być w tym całkiem dobry. Deweloperzy jednak, z moich obserwacji, często nie są tak dobrzy w graniu w gry polityczne. Dotyczy to w szczególności: * ochrony siebie i prawidłowego dostarczania informacji * śledzenia: kto co powiedział * kogo należy winić, jeśli coś pójdzie nie tak * itd. Menedżerowie są znacznie lepsi w grze o dobry wygląd i obwinianie innych. :) Czy istnieją wspólne zasady i techniki dla twórców oprogramowania i DevLeadów, aby chronić się przed grami politycznymi i ułatwiać życie?


title: Modelowanie architektury oprogramowania

text: Jestem trochę zdezorientowany, jak najlepiej wizualnie zamodelować architekturę opartą na przestrzeni (SBA) w celu zaprezentowania klientowi projektu architektury systemu/oprogramowania. Celem tego modelowania jest pokazanie: * głównych elementów systemu (np.: baz danych, interfejsu API wyeksponowanego na serwerze, klienta, pracowników serwera, interfejsu API wyeksponowanego przez klienta) * interakcji między tymi głównymi elementami * podstawowych przepływów pracy typu end-to-end Obecnie I myślę o użyciu notacji BPMN2 z torami; oraz diagramy sekwencji i przypadków użycia w notacji UML2. Nie jestem pewien, czy to podejście jest najlepsze, dobrze byłoby uzyskać informację zwrotną :)


title: Co może być dobrym ćwiczeniem z zakresu budowania zespołu, aby poprawić umiejętności szacowania?

text: Przygotowuję prezentację, która zostanie przekazana niektórym z moich kolegów z zespołu (wszystkim programistom), i chciałbym dołączyć krótkie ćwiczenie z budowania zespołu, które koncentruje się na doskonaleniu umiejętności szacowania. Czy ktoś ma jakieś sugestie lub wie o zajęciach z budowania zespołu, z których mógłbym skorzystać?


title: Czy SourceSafe jest naprawdę bezpieczny?

text: Spędziłem cały poranek próbując coś sprawdzić - teraz zdaję sobie sprawę, że straciłem kilka dni pracy. Zdarzyło się to wcześniej - i najwyraźniej jest to częste zjawisko w przypadku SourceSafe. Czy SourceSafe może być używany z powodzeniem, bez problemów, a jeśli tak, to w jaki sposób?


title: Co uważa się za „modyfikację” źródeł na licencji BSD?

text: Mam pytanie dotyczące 3-klauzulowej licencji BSD na podstawie jej opisu na Wiki. Stanowi ona: > Redystrybucja i używanie w formie źródłowej i binarnej, z > modyfikacją lub bez, jest dozwolone pod warunkiem spełnienia następujących warunków: > ... Co rozumie się przez "modyfikację"? W szczególności interesuje mnie, czy którakolwiek z poniższych modyfikacji jest uważana za taką modyfikację: 1. Czytanie oryginalnych źródeł, a następnie ponowne zaimplementowanie w niestandardowy sposób. 2. Czytanie oryginalnych źródeł, czekanie przez rok, a następnie ponowne wdrażanie czegoś na podstawie tego, co pamiętasz. 3. Bezpośrednia i bardzo istotna „kompletna” refaktoryzacja oryginalnych źródeł.


title: Jaki jest dobry początek dla małych projektów webowych?

text: Jakie są najpopularniejsze szablony, języki, narzędzia do projektowania stron internetowych, które polecasz, abym mógł rozpocząć projektowanie stron internetowych? Zajmuję się oprogramowaniem, ale nie miałem doświadczenia w projektowaniu stron internetowych, byłem programistą Win32 z VB 6.0, Delphi, C# itp., a nie webowym. Rodzaj projektowania stron internetowych, jaki mam na myśli, to proste strony internetowe, nawet statyczne strony internetowe, które właściciel małej firmy, takiej jak restauracja, chce mieć witrynę internetową, aby pokazać swoje usługi. Wiem, że są takie rzeczy, od których ludzie zaczynają, takich jak WordPress, Joomla, PHP CMS-y, frameworki CSS,... Szukam takich rzeczy, które pomogą przyspieszyć budowanie ładnej strony internetowej... Z jakich rzeczy ludzie najczęściej korzystają w dzisiejszych czasach? Dziękuję


title: Wzorce do utrzymywania stanu modelu w czasie rzeczywistym

text: Chociaż niektóre platformy w niektórych językach już rozwiązują ten problem, chciałbym zachować tę półjęzykową agnostykę i skupić się na wzorcach związanych z tym problemem. Mam model danych, który zawiera FirstName, MiddleName i LastName (aby zachować prostotę). Imiona i nazwiska są wymagane i mogą mieć inne zasady zapewniające ich ważność. Drugie imię jest opcjonalne. Domyślnie model jest pusty, a zatem nieważny. Gdy zmienia się wartość, może zostać wyzwolone zdarzenie w celu sprawdzenia poprawności pola, które uległo zmianie. Moje pytanie brzmi, jakie wzorce można wykorzystać do najlepszego zarządzania stanem obiektu, ponieważ na podstawie scenariusza przeprowadzam walidację na poziomie pola. Czy powinienem przejść do walidacji na poziomie modelu w przypadku zmiany pola, która rozwiązałaby problem ze stanem, czy istnieje alternatywny sposób?


title: Jak mogę lepiej prototypować moją aplikację?

text: Kilka tygodni temu zobaczyłem historię o mistrzu projektanta aplikacji pokazującą, jak pracował ze starym, dobrym długopisem i papierem, aby skutecznie prototypować przed pisaniem kodu. Nie jestem w stanie wykopać tej historii (i myślę, że to był film), ale jeśli mógłbyś polecić inne przydatne zasoby, byłbym wdzięczny. Wiem z grubsza, co chcę zbudować, ale potrzebuję przydatnego frameworka do myślenia o tym, jak ekrany powinny się ze sobą łączyć. Aplikacja, którą chcę zbudować, jest przeznaczona na platformę iOS, ale myślę, że film mógł dotyczyć tworzenia aplikacji internetowej. Dziękuję!


title: Czy są jakieś formalne badania dotyczące skuteczności pytań FizzBuzz?

text: Po obejrzeniu tego pytania dzisiaj na temat odmiany pytania do wywiadu FizzBuzz, a także zobaczeniu innych pytań z nim związanych, muszę zapytać: czy są jakieś _formalne_ badania na temat skuteczności tej techniki jako techniki wywiadu? Jest wielu ludzi, którzy twierdzą, że to odfiltrowuje jakiś szalenie brzmiący procent kandydatów (95%+ w niektórych przypadkach), ale jak dobrze jest znaleźć dobrych programistów/deweloperów? Przeprowadzono badania, które pokazują, że umiejętności miękkie mogą być lepszymi wskaźnikami niż umiejętności twarde przy wyborze dobrego kandydata na stanowisko. Ponadto mogą istnieć pośrednie powody, dla których tak wielu kandydatów nie oblało tego testu (nerwowość, myślenie „to sztuczka” itp.). **EDYTUJ:** Na podstawie dotychczasowych komentarzy wygląda na to, że ideą stojącą za pytaniami FizzBuzz jest określenie, czy dana osoba ma dobre (wystarczające) umiejętności kodowania, aby można było je dalej rozważać. Nie jestem całkowicie przekonany, że FizzBuzz rzeczywiście to robi. Pamiętaj też, że FizzBuzz filtruje _bardzo duży odsetek_ kandydatów _bardzo wcześnie_ w procesie rekrutacji, co może oznaczać, że znaczna liczba dobrych kandydatów jest usuwana na wczesnym etapie, ponieważ nie są w stanie wystarczająco szybko rozwiązać głupich problemów. Zwrócę również uwagę, że patrząc na skuteczność FizzBuzz jest coś, co można całkowicie zrobić w sposób ilościowy. Jest to w przeciwieństwie do patrzenia na „pasowanie” lub „pasję”, które są bardzo zmienne i wysoce nienaukowe (ale nadal są dość ważne dla nowych decyzji o zatrudnieniu).


title: Jaka jest korzyść z niestosowania notacji węgierskiej?

text: Jedną z rzeczy, z którymi się zmagam, jest nieużywanie notacji węgierskiej. _nie_ chcę przechodzić do definicji zmiennej tylko po to, aby zobaczyć, jaki to typ. Kiedy projekt staje się rozbudowany, dobrze jest móc spojrzeć na zmienną poprzedzoną przedrostkiem „bool” i wiedzieć, że szuka ona **prawda/fałsz** zamiast wartości **0/1**. Dużo pracuję również w SQL Server. Moje procedury składowane poprzedzam przedrostkiem „sp”, a moje tabele – przedrostkiem „tbl”, nie wspominając o wszystkich moich zmiennych w bazie danych. Wszędzie widzę, że nikt tak naprawdę nie chce używać notacji węgierskiej do tego stopnia, że jej unika. Moje pytanie brzmi: jaka jest korzyść z _nie_ używania notacji węgierskiej i dlaczego większość programistów unika jej jak ognia?


title: Po co nam Sterta, jeśli na Stosie wszystko można zrobić znacznie wydajniej?

text: Właściwie jest to nieco związane z pytaniem, które zadałem wczoraj, dlaczego zarówno stos _i_ sterta są niezbędne w aplikacjach, których używamy dzisiaj (i dlaczego nie możemy po prostu użyć sterty zamiast obu, aby mieć proste & pojedynczy standard do przejścia). Jednak wiele odpowiedzi wskazywało, że stos jest _niezastąpiony_ ze względu na fakt, że jest wiele setek (lub tysięcy) razy szybszy niż próba przydzielenia/odniesienia do sterty. Wiem, że istnieje problem z dynamiczną alokacją pamięci, jeśli usuniemy stertę, ale czy nie ma sposobu na obejście tego, a może sposobu na ulepszenie stosu, aby mógł obsługiwać dynamiczną alokację pamięci?


title: Historyjki użytkowników są na zbyt wysokim poziomie i są koncepcyjne, kierownictwo oczekuje, że programiści wypełnią puste miejsca

text: Jestem zatrudniony w bardzo genialnej firmie z prawdziwym zamiarem robienia XP. Komunikacja jest dobra, a kierownictwo jest otwarte na konstruktywną dyskusję, ale ze względu na naglące ograniczenia czasowe niektóre pewne rzeczy są uważane za zbyt RUP, aby je omawiać. W tej chwili jestem trochę zaniepokojony ilością zmian, które stają się konieczne podczas wdrażania historii. Uważam, że wiele z tych odkryć (które oczywiście wymagają czasu i wysiłku) to obowiązki autorów historii (klientów, użytkowników końcowych i właścicieli produktów), a nie twórców. Krótko mówiąc, historie użytkowników są zbyt konceptualne i po prostu przekazują podstawową intencję, ale brakuje im wystarczająco dużo szczegółów (zwłaszcza warunków wstępnych i warunków końcowych, związku z innymi historiami, zależności i tym podobnych). Od dewelopera oczekuje się, że wypełni puste pola według własnego uznania, ponieważ programiści XP są jednocześnie projektantami i analitykami. Problem polega na tym, że wiele z tych luk zostaje odkrytych po tym, jak pewne błędne założenia wkroczyły w czas oceny i kod, ponieważ zauważono, że pojawiają się dodatkowe złożoności, niż początkowo oczekiwano. Nawet wtedy znalezienie właściwej rzeczy do uzupełnienia wymaga czasu, który – w różnym stopniu – jest uważany za odstępstwo od wstępnych szacunków. Szukam konstruktywnego sposobu przekazania tych implikacji kierownictwu w sposób, który nie będzie przedstawiał mnie jako kogoś, kto próbuje niepotrzebnie komplikować sprawy. Jestem nowy i jak dotąd nie ugruntowałem sobie zbytniej wiarygodności. Twoje spostrzeżenia są mile widziane. Ściśle powiązane i jakoś daje odpowiedź: Ile szczegółów na temat historyjki użytkownika może oczekiwać programista?


title: Czy git-flow jest w duchu git?

text: Pytanie jest dość oczywiste. Miałem trochę doświadczenia z git-flow i niewiele więcej _prawdziwego_ doświadczenia ze zwykłym gitem przed tym. (Używałem go bardziej jako dostawcy kopii zapasowych.) Jestem zdezorientowany co do konsensusu, biorąc pod uwagę, że mogę bezpiecznie założyć, że istnieje duża liczba użytkowników git, którzy tęsknią za „starymi dobrymi czasami” formalnego, scentralizowanego kontroli wersji i po prostu chcę odzyskać część (por. artykuł rant poniżej) Powiązane artykuły: * Nasienny * anty-git-flow rant * * * _"duch git"_ w tytule pytania to, cokolwiek to jest znaczy dla ciebie. Dla mnie pamiętam, że to DVCS, a nie CVS. Wydaje się, że git flow narzuca zorganizowany model rozgałęziania, w którym w ogóle nie trzeba tam być, co byłoby niezbędne w scentralizowanym systemie, takim jak SVN.


title: Dlaczego JavaScript liczy długość tablicy według ostatniego indeksu?

text: JavaScript wydaje się obliczać właściwość length tablicy przez numer ostatniego indeksu w tablicy, zamiast liczyć liczbę elementów w tablicy. Przykład: var testArray = ['a', 'b', 'c']; console.log(TestArray.length); //3 testArray[8] = 'i'; console.log(TestArray.length); //9 Normalnie użyłbym push() i nie dodałbym wartości do tablicy za pomocą notacji nawiasów, ale było to trochę zaskoczeniem. Czy jest jakiś powód dla tej implementacji przypisywania wartości do Array.length? Jedyne, co mogę wymyślić, to użycie ostatniego indeksu jako optymalizacji wydajności, aby uniknąć zliczania elementów tablicy.


title: Jak duży powinien być moduł Pythona?

text: Przeglądałem projekt na githubie i znalazłem **ten moduł**, który ma ponad 8 tysięcy wierszy. Czy dobrą praktyką jest posiadanie tak dużej ilości kodu w jednym module? Czy nie powinno to być podzielone na wiele modułów? może po jednym na każdy silnik db? A jaką korzyść czerpie programista z jednego wielkiego modułu takiego jak ten?


W ostatnich miesiącach i latach wiele uwagi mediów poświęcono wzrostowi liczby głównych kierunków CS i możliwości powstania drugiej bańki technologicznej. Niektóre doniesienia prasowe sugerują, że w miarę jak coraz więcej osób wchodzi do CS, rynek może zostać zalany profesjonalistami CS, a znalezienie pracy może być coraz trudniejsze. Czy to zły czas na studiowanie informatyki? Edycja: Jestem studentem nietradycyjnym, który już ma tytuł licencjata z ekonomii i zamierzam kontynuować studia CS w nadchodzącym semestrze letnim na Univ of Kansas. Programuję od około dwóch/trzech lat i po prostu potrzebuję bardziej formalnej edukacji, aby wypełnić dziury w mojej głowie. Interesuję się CS, tylko martwię się o perspektywy na przyszłość.


title: Jaka jest najlepsza praktyka dla poziomu logów w PHP?

text: Podczas programowania w C często otrzymuję radę, aby włączyć wiele lub wszystkie ostrzeżenia i nie ignorować ostrzeżeń. Czy tak samo jest w PHP, czy powinienem włączyć wszystkie ostrzeżenia w dzienniku PHP?


title: Ile czasu/pieniędzy należy poświęcić na oprogramowanie QA/QC?

text: Każda nietrywialna komercyjna aplikacja/program/system/co-masz wymaga przetestowania (QA/QC). Nie licząc takich rzeczy jak testy automatyczne, ile czasu/pieniędzy w stosunku do inwestycji w rozwój projektu należy poświęcić na testowanie (np. z żywymi ludźmi)? Wiem, że nie ma magicznego procentu czasu ani budżetu, a poszczególne projekty będą różnić się wielkością i zakresem testowania, ale czy jest coś, co jest uważane za dobrą praktykę? Aplikacja może być doskonała pod każdym względem, ale jedynym sposobem na jej zapewnienie jest jej przetestowanie. Zasadniczo mój pracodawca chce ograniczyć testowanie oprogramowania opracowanego za granicą, ale mam silne zastrzeżenia do tego (będąc odpowiedzialnym za kontrolę jakości i wcześniej pracowałem z dostawcą, nie sądzę, aby nasza dyrektywa nakazywała im "rób mniej błędów" dokładnie da nam wyniki, bez względu na to, co jest określone w umowie). Czy jest jakaś najlepsza praktyka lub wskazówka, na którą mogę się zwrócić?


title: Dobry sposób na zarządzanie danymi testowymi bazy danych?

text: Standardowy stos LAMP: CentOS, Apache, PHP, MySQL plus Java (przez Google Web Tools), eclipse, mercurial GUI. Korzystamy ze wspólnej bazy danych deweloperów. Mamy do czynienia z problemem, w którym gałęzie funkcji wymagają innego schematu bazy danych, tworząc wąskie gardło między tworzeniem gałęzi funkcji a testowaniem akceptacji. Chcielibyśmy zacząć mieć oddzielne bazy danych deweloperów, ale nie wiemy, jak obsłużyć zapełnianie bazy danych danymi testowymi (aplikacja internetowa wymaga obecności pewnej podstawowej ilości danych do uruchomienia, tj. użytkowników) i zsynchronizować te dane testowe z scalanie gałęzi funkcji itp. Czytam wiele sugestii i narzędzi dotyczących zmian w schemacie bazy danych, ale nie zarządzania danymi testowymi bazy danych. Jesteśmy sklepem tylko dla dwóch osób, więc ważne jest, aby wszystko było proste. Pomyśleliśmy o utrzymaniu skryptów (plików SQL lub innych) w celu zapełnienia testowej bazy danych. Czy ktoś ma zasoby, historie sukcesu lub porady, którymi mógłby się podzielić?


title: Jaki jest twój ulubiony problem z wywiadem na tablicy?

text: Tak jak mówi tytuł, jaki jest Twój ulubiony problem z wywiadem na tablicy i dlaczego okazał się dla Ciebie skuteczny? Junior, senior, Java, C, Javascript, PHP, SQL, pseudokod itp.


title: Śledzenie postępów za pomocą wykresu wypalania, gdy sprinty nakładają się

text: Nasz zespół przyjął pewne zwinne praktyki, które pomogą nam rozwijać i dostarczać nasze oprogramowanie naszemu klientowi. Przyjęliśmy praktyki w miarę potrzeb (po zidentyfikowaniu problemów/wyzwań), zamiast wskakiwać hurtowo do obozu zwinnego. Największe dla nas są utrzymywanie backlogu produktu i sprintu oraz opracowywanie i dostarczanie nowych wersji w sprintach jednomiesięcznych. Szacujemy pozycje w naszym backlogu sprintu, aby oszacować, co możemy dostarczyć w ramach sprintu, jednak nie śledzimy zbyt dobrze postępów, więc trudno jest stwierdzić, czy jesteśmy w stanie osiągnąć cel. Następny krok w naszej ewolucji wydaje się poprawiać naszą zdolność śledzenia postępów. Używamy wykresów spalania, aby nam pomóc. Jednak nasze sprinty znacznie się pokrywają ze względu na ustalone i procedury dotyczące naszego harmonogramu promocji oprogramowania. Mamy ustalone następujące wydarzenia: 1. **Rozwój rozpoczyna się** w _Sprint 1_ i trwa do _zamrożenia kodu_. To powiedziawszy, testujemy nasze oprogramowanie w tej fazie z grupami programistycznymi i testowymi. 2. **Zamrożenie kodu** zatrzymuje rozwój funkcjonalności _Sprint 1_. Mamy małe okienko na zakończenie lub naprawienie wszelkich problemów przed kolejnym wydarzeniem _promocja akceptacji 1_. Ponadto rozwój rozpoczyna się w _Sprint 2_. 3. **Promocja akceptacji 1** promuje aplikację do środowiska akceptacyjnego klienta, gdzie jest testowana przez naszą grupę testową. Problemy zidentyfikowane podczas testowania można naprawić w krótkim czasie przed _promocją akceptacji 2_. W międzyczasie trwa rozwój _Sprint 2_. 4. **Promocja akceptacji 2** promuje aplikację po raz ostatni do środowiska akceptacji klienta, aby zweryfikować wszelkie problemy zidentyfikowane podczas _promocji akceptacji 1_. Rozwój _Sprint 2_ trwa. 5. **Promocja produkcji** promuje aplikację do produkcji i jest testowana przez naszą grupę testową, a _Sprint 1_ jest oficjalnie zakończony. Właśnie wtedy jest to naprawdę zrobione. Wizualny obraz tego można zobaczyć poniżej. Średni czas kalendarzowy między **rozpoczęciem rozwoju** a **zamrożeniem kodu** wynosi cztery tygodnie. Średni czas między **zamrożeniem kodu** a **promocją produkcji** to dwa tygodnie. ![Nakładające się sprinty](http://i.stack.imgur.com/fKqke.png) wersja w większej rozdzielczości Ten harmonogram wydarzeń nie jest pod naszą kontrolą. Zasady klienta określają, kiedy oprogramowanie aplikacji jest promowane z testowania przez akceptację do produkcji. Żaden kod aplikacji nie może być modyfikowany poza naszym drugim oknem poprawki. Nie wykonujemy promocji. Odbywa się to za pośrednictwem „trzecich” stron w witrynie klienta, ponownie ze względu na politykę. Ponadto niektóre zadania, takie jak aktualizacje danych, mogą i są wykonywane poza tym harmonogramem. Niektóre aktualizacje danych są zgodne z kodem (na przykład, gdy istnieje zależność od schematu), ale inne, takie jak błędy danych lub aktualizacje, mogą i występują poza tym harmonogramem. Wynika to z mniejszej liczby ograniczeń co do tego, co można modyfikować w środowisku klienta. Tylko kod aplikacji jest ograniczony do tych konkretnych kamieni milowych. Dane i konfiguracja są zwolnione i technicznie mogą być modyfikowane w razie potrzeby. Rozważamy zaostrzenie tego, aby aktualizacje danych odbywały się według tego samego harmonogramu, co kod. Biorąc pod uwagę ten scenariusz, nakładające się sprinty mam kilka pytań? 1. Jaki jest właściwy sposób tworzenia/obsługi wykresu spalania, gdy wypalamy godziny programowania, testowania i danych z poprzedniego sprintu, jednocześnie pracując nad kolejnym? Myślę, że mamy 2 równoległe wykresy spalania na każdy sprint. 2. Zakładając, że mamy co najwyżej dwa wykresy wypalenia, jak najlepiej wyświetlić skumulowane wypalenie, gdy sprinty się nakładają, aby zrozumieć nasz rzeczywisty postęp w obciążeniu pracą na każdym z nich i jak najlepiej przygotować nas do sukcesu? 3. Jeśli elementy zostaną znalezione w Sprint 1 po zamrożeniu kodu, które należy rozwiązać w Sprint 2, w jaki sposób nasz backlog Sprint 2 się wypala? Zakładam, że w przypadku krytycznych przedmiotów musimy wyrzucić mniej krytyczne przedmioty Sprint 2, aby zrobić miejsce na niekompletne przedmioty Sprint 1. Przedmioty niekrytyczne zostaną przeniesione do Sprintu 3 lub późniejszego. 4. Jakie byłyby prawidłowe daty rozpoczęcia i zakończenia wykresu spalania? Wydaje się, że najlepszą opcją byłoby odzwierciedlenie rzeczywistości. Sprint 1 nie jest naprawdę ukończony (w tym testowanie i aktualizacja danych) do **promocji produkcji** i jej ostatecznych testów. Tak więc datą rozpoczęcia będzie **rozpoczęcie rozwoju**, a datą zakończenia **promocja produkcji** pomimo nakładania się. 5. Czego jeszcze mi brakuje? Co jeszcze mogłoby nas ugryźć lub ugryźć?


title: Tworzenie pseudoniezmiennej klasy poprzez ustawienie flagi

text: Mam projekt java, który polega na budowaniu dość skomplikowanych obiektów. Jest ich całkiem sporo (dziesiątki), a niektóre z nich mają OGROMNĄ liczbę parametrów. Muszą też być niezmienne. Myślałem więc, że wzorzec konstruktora zadziała, ale w końcu wymaga to wielu szablonów. Innym potencjalnym rozwiązaniem, o którym pomyślałem, było stworzenie mutowalnej klasy, ale nadanie jej "zamrożonej" flagi, a-la ruby. Oto prosty przykład: public class EqualRule extends Rule { private boolean frozen; prywatny cel int; public EqualRule() { zamrożone = fałsz; } public void setTarget(int i) { if (frozen) wyrzuć nowy IllegalStateException( "Nie można zmienić zamrożonej reguły."); cel = ja; } public int getTarget() { zwróć cel; } public void zamrozić() { zamrożone = prawda; } @Override public boolean checkRule(int i) { return (target == i); } } i "Rule" to po prostu klasa abstrakcyjna, która ma abstrakcyjną metodę "checkRule". Zmniejsza to liczbę obiektów, które muszę napisać, jednocześnie dając mi obiekt, który staje się niezmienny dla wszystkich intencji i celów. Ten rodzaj zachowywania się tak, jakby obiekt był swoim własnym Konstruktorem... Ale nie całkiem. Nie jestem jednak zbyt podekscytowany posiadaniem niezmiennej istoty przebranej za fasolę. Miałem więc dwa pytania: 1\. Zanim pójdę za daleko tą ścieżką, czy są jakieś ogromne problemy, które ktoś widzi od razu? Co jest warte, planuje się, że zachowanie to będzie dobrze udokumentowane... 2\. Jeśli tak, czy istnieje lepsze rozwiązanie? Dziękuję


title: Wzór matematyczny najbliższego punktu podejścia (CPA) w radarze okrętowym

text: Ostatnio szukałem wzoru matematycznego, aby znaleźć najbliższy punkt podejścia (CPA) między jednym statkiem a drugim statkiem. Muszę zastosować wzór w moim programie radarowym i nie mogę znaleźć właściwego sposobu na jego obliczenie. Czy ktoś wie, jaka jest poprawna formuła (lub pseudokod), zamiast kreślić ją ręcznie?


title: Czy naprawdę istnieje wybór najlepszego języka do konkretnego projektu?

text: Programrs.SE ma wiele pytań od początkujących programistów, pytających, czy muszą używać określonego lub innego języka w swojej codziennej pracy, czy też muszą uczyć się języka lub innego. Te pytania są szybko zamykane, a po otrzymaniu odpowiedzi są to odpowiedzi typu: > Użyj tego, co jest najlepsze dla konkretnego projektu. Istnieją języki, których nie można rozsądnie używać w niektórych projektach. Na przykład, byłoby dziwnie używać Assembly do tworzenia dynamicznej strony internetowej lub używać PHP do tworzenia bogatej aplikacji Windows na komputery stacjonarne lub używać Ruby do tworzenia gier wideo z akceleracją sprzętową. Ale ogólnie, czy zasada „Użyj tego, co jest najlepsze dla konkretnego projektu” działa? * Jeśli tworzę prostą biznesową aplikację komputerową, jak mogę powiedzieć, że dla tej aplikacji biznesowej język C# w ogóle nie jest odpowiedni, podczas gdy Java jest najlepszym wyborem? * Jeśli tworzę zwykłą witrynę na małą lub średnią skalę, jak mogę powiedzieć, że muszę używać C#/ASP.NET MVC przez Ruby on Rails? **Porównując języki głównego nurtu, wszystkie są dość podobne**. Wybieram C# zamiast Javy, ponieważ nie znam zbyt dobrze Javy; Wybieram ASP.NET MVC zamiast PHP, ponieważ _moim zdaniem_ PHP jest do bani; Wybieram PHP zamiast ASP.NET MVC, gdy moi klienci mają serwer WWW z systemem Linux. We wszystkich przypadkach, za każdym razem, gdy muszę dokonać wyboru, biorę pod uwagę: * moje umiejętności w zakresie języków do wyboru, * języki, których osobiście chcę i lubię używać, * wymagania sprzętowe i programowe (tj. trudności we wdrożeniu Javy lub Ruby na Strona Railsów na serwerze, który ma już wsparcie dla PHP), * problemy związane ze starszymi wersjami i interoperacyjnością. Czy to oznacza, że brakuje mi szerokiej wiedzy w _kilku_ językach? Co dzieje się w innych firmach? **Czy dla każdego projektu istnieje realny wybór języka, który w konkretnym przypadku jest najlepszy?** Jak można dokonać takiego wyboru w sytuacji, gdy języki głównego nurtu są tak podobne?


title: Architektura hurtowni danych do mutowania schematu

text: Konfiguruję proces ETL i małą hurtownię danych do odpytywania danych w kilku różnych wymiarach. Jedną z kwestii jest to, że schemat obiektów może z czasem ulegać mutacji - głównie dlatego, że niektóre pola zostaną dodane, a niektóre usunięte. Jakie są metodologie lub podejścia do radzenia sobie z tym? (Zauważ, że dane źródłowe są zarządzane jako EAV, co jest trudne do wyszukania i jest powolne - stąd podejście DW w pierwszej kolejności). To, co wydaje się naiwnym podejściem (które często może być najlepsze), polega po prostu na dodawaniu kolumn w czasie do kształtów docelowych w hurtowni i wypełnianiu istniejących obiektów danymi zastępczymi poprawnymi w zapytaniu. Jest to jednak trochę poza moją wiedzą na temat domeny, więc szukam danych wejściowych.