title: Jaki jest najbardziej odpowiedni czas trwania samouczka wideo?

text: Obecnie coraz popularniejsze jest posiadanie samouczków wideo dotyczących oprogramowania lub technologii zamiast pisania długich artykułów. Jak dla mnie ma to sens, zwłaszcza w takich obszarach jak „Pierwsze kroki” czy „Co nowego”. Jak myślisz, jaki jest najodpowiedniejszy czas trwania takich filmów? Jeśli sam nagrasz samouczek wideo, czy po prostu dotknąłbyś głównych punktów, aby był zwięzły, czy raczej podzielił go na kilka części, aby zachować ten sam poziom szczegółowości? I dlaczego? Wiem, że to pytanie nie oznacza, że ma jedną i jedyną odpowiedź. Chciałbym usłyszeć uzasadnienie różnych opinii. Osobiście natknąłem się dzisiaj na 45-minutowy samouczek wideo i zmęczyłem się około minuty 10. Więc mam wrażenie, że lepiej trzymać go od 5 do 10 minut, aby w pełni przyciągnąć uwagę odwiedzających. Dziękuję!


title: Python i tylko Python do prawie wszystkich zadań programistycznych!

text: Czy nie mam racji, jeśli uważam, że Python jest wszystkim, co muszę opanować, aby rozwiązać większość typowych zadań programistycznych? **EDYTUJ** Nie jestem w porządku z nauką nowych języków programowania, jeśli nie uczą mnie one nowych koncepcji programowania i rozwiązywania problemów; stąd pomysł na opanowanie nowoczesnego, szybko ewoluującego, z bogatym zestawem bibliotek klas, szeroko stosowanych i udokumentowanych, i oczywiście z "przyjaznym" językiem programowania krzywej uczenia się. Myślę, że w szybko rozwijającej się branży technologicznej specjalizacja jest kluczem do sukcesu.


title: Czy oprócz makr istnieją inne techniki metaprogramowania?

text: > **Możliwe duplikowanie:** > Języki programowania z mechanizmem rozszerzania składni podobnym do Lispu Tworzę język programowania i po spędzeniu trochę czasu w Lisp/Scheme czuję, że mój język powinien być plastyczny. Czy powinienem używać makr, czy jest coś innego, czego mogę/powinienem użyć? Czy składnia plastyczna to nawet dobry pomysł? Czy może to zbyt potężna koncepcja? Przeprowadzając pewne badania, znalazłem `fexprs`. Naprawdę nie rozumiem, co to jest. Pomóż też w odpowiedzi, proszę. Czy można mieć język z makrami/coś-co-podobnej-natury bez s-wyrażeń?


title: Języki takie jak Tcl, które mają konfigurowalną składnię?

text: Szukam języka, który pozwoli mi zrobić to, co mogłem zrobić z Clipperem lata temu i który mogę zrobić z Tcl, a mianowicie dodawać funkcjonalność w sposób inny niż tylko dodawanie funkcji. Na przykład w Clipper/(x)Harbour są polecenia #command, #translate, #xcommand i #xtranslate, które umożliwiają takie rzeczy: #xcommand REPEAT; => ZROBIĆ PODCZAS .T. #xcommand DO <war.>; => JEŻELI (<warunek>); ;WYJŚCIE; ;ENDIF; ;ENDDO LOCAL n := 1 REPEAT n := n + 1 DO n > 100 Podobnie w Tcl robię proc process_range {_for_ project _from_ dat1 _to_ dat2 _by_ slice} { set fromDate [skanowanie zegara $dat1] set toDate [ clock scan $dat2] if {$slice eq "day"} then {set incrementor [expr 24 * 60]} if {$slice eq "hour"} then {set incrementor 60} set method DateRange ustawia "Skanowanie z [format zegara $fromDate -format "%c"] do [format zegara $toDate -format "%c"] by $slice" for {set dateCursor $fromDate} {$dateCursor <= $toDate} {set dateCursor [clock add $dateCursor $ incrementor minutes]} { # ... } } zakres_procesu dla „klienta” od „2013-10-18 00:00” do „2013-10-20 23:59” na dzień Czy istnieją inne języki, które pozwalają na tego rodzaju , prawie COBOL-esque, modyfikacja składni? Jeśli zastanawiasz się, dlaczego pytam, chodzi o skonfigurowanie rzeczy, aby inni z umiejętnościami, które nie są tak geekowe jak ja, mogą deklarować zadania przetwarzania.


title: Dlaczego języki nie zawierają implikacji jako operatora logicznego?

text: Może to być dziwne pytanie, ale dlaczego nie ma implikacji jako operatora logicznego w wielu językach (Java, C, C++, Python Haskell - chociaż jako ostatni ma operatory zdefiniowane przez użytkownika, co jest trywialne, aby go dodać)? Uważam, że implikacja logiczna jest o wiele jaśniejsza do napisania (szczególnie w asercjach lub wyrażeniach podobnych do asercji) niż negacja za pomocą lub: encrypt(buf, key, mode, iv = null) {asset (mode != ECB --> iv != null) ; asercja (tryb == ECB || iv != null); asercja (implikuje(mode != ECB, iv != null)); // Funkcja zdefiniowana przez użytkownika }


title: Czy mogę użyć kodu do responsywnego wideo na tym łączu github na podstawie licencji?

text: To jest link: https://gist.github.com/jgarber/2302238 Jestem nowy w github i tworzeniu stron internetowych. Więc proszę o wyrozumiałość z moimi pytaniami. Chciałbym użyć responsywnego kodu wideo z powyższego linku do komercyjnej strony internetowej, którą tworzę. Widzę, że kod jest zamieszczony w sekcji „publiczne”, ale dołączone są również prawa autorskie. A nazwa pliku to MIT-LICENSE.txt. Czy ma to jakiś związek z licencją MIT? Dwa pytania: a) Czy mogę użyć tego kodu, podając atrybucję? b) A jeśli mogę, na jakiej licencji mogę używać kodu i jakiego rodzaju przypisanie jest wymagane?


title: Niezależność danych schematu bazy danych

text: Obecnie czytam o schematach baz danych o tym, jak działa trójpoziomowa architektura ANSI-SPARC i jestem trochę zdezorientowany pojęciem, o którym mówi. Moje pytanie brzmi, co by się stało, gdyby aplikacja została zmodyfikowana, aby mogła przechowywać dane dla kolumny niezdefiniowanej w schemacie logicznym? Książka, którą czytam, mówi o: > ... dodawaniu lub usuwaniu nowych encji, atrybutów lub relacji > powinno być możliwe bez konieczności zmiany istniejących zewnętrznych schematów lub > konieczności przepisywania programów aplikacji." - Systemy baz danych: Praktyczne > Podejście do projektowania, wdrażania i zarządzania Strona: 40 (Część: 2.1.5) * W jaki sposób schemat logiczny obsługuje dane wejściowe (kolumny) z aplikacji, dla których nie jest zdefiniowany w schemacie logicznym Architektura ANSI-SPARC: http: //pl.wikipedia.org/wiki/ANSI-SPARC_Architecture


title: Spraw, aby program Java używał więcej procesorów

text: Używam programu, który ma rozwiązać problem z podejściem brute force. Mój komputer ma czterordzeniowy procesor. Kiedy uruchamiam program wyraźnie java używa tylko jednego rdzenia, ponieważ w moim programie używam tylko jednego wątku. Czy istnieje sposób na podzielenie programu na więcej wątków, aby użyć większej liczby rdzeni, a tym samym poprawić szybkość obliczeń? Mam na myśli: jeśli ma się program, który ma naturalne rozwiązanie wykorzystujące tylko jeden wątek, to czy można wymusić na nim użycie większej liczby wątków bez całkowitej zmiany kodu?


title: Jak naprawić źle zaprojektowane oprogramowanie?

text: Hobbystycznie pracuję nad dużymi projektami i na samym początku popełniłem błąd: od razu wskoczyłem do programowania bez poświęcania czasu na projektowanie. Teraz mam prawie 6 miesięcy i wszystko zaczyna się rozpadać: nie mogę nic zrobić, kod jest bardzo niespójny, a cała sprawa jest bałaganem. Zdecydowanie nauczyłem się, jak ważne jest projektowanie w tworzeniu oprogramowania, ale nie wiem, jak projektować oprogramowanie na początek. Czy są jakieś programy, które mogą w tym pomóc? A może muszę usiąść z długopisem i papierem przez kilka następnych tygodni, próbując to wszystko rozwiązać?


title: Jakie funkcje należy przetestować za pomocą automatycznych testów interfejsu użytkownika?

text: Niedawno nasz konsultant powiedział nam, że jeśli funkcję można przetestować tylko za pomocą automatycznych testów interfejsu użytkownika (np. Selenium, kodowany interfejs użytkownika), to istnieje problem związany z architekturą. Chociaż to stwierdzenie może być nieco ekstremalne, jest zgodne z piramidą testowania, ponieważ testy interfejsu użytkownika powinny stanowić niewielką część ogólnego zestawu testów automatycznych. Jakie więc funkcje _powinny_ mieć automatyczne testowanie interfejsu użytkownika? Czy system o przekonującej architekturze nadal będzie posiadał funkcje, które można zweryfikować tylko za pomocą testów interfejsu użytkownika, czy też testy te powinny służyć jako „zapas” dla zestawu testów jednostkowych i usług?


title: Uczenie maszynowe z danymi kategorialnymi i ciągłymi

text: To pytanie może trafić tutaj lub na S.O. być może... Załóżmy, że Twój zestaw danych treningowych zawiera zarówno dane kategoryczne, jak i ciągłe, takie jak ta konfiguracja: Zwierzę, rasa, płeć, wiek, waga, ciśnienie_krwi, roczny_koszt kot, perkal, M, 10, 15 , 100 , 100 kot, pręgowany, F, 5, 10 , 80 , 200 pies, beagle, M, 3, 30 , 90 , 200 pies, laboratorium, F, 8, 75 , 80 , 100 A zmienną zależną do przewidzenia jest roczny koszt weterynarza. Jestem trochę zdezorientowany co do konkretnych dostępnych technik radzenia sobie z takim zbiorem danych. Jakie są powszechnie stosowane metody radzenia sobie z zestawami danych, które są mieszanką danych ciągłych i kategorycznych?


title: Konwertuj gramatykę na gramatykę LL(1), która rozpoznaje ten sam język

text: Mam następujące przykładowe pytanie do egzaminu na kompilatory i chciałem sprawdzić moje rozwiązanie. Przekształć następującą gramatykę na gramatykę LL(1), która rozpoznaje ten sam język: E -> E + T E -> T T -> id T -> id() T -> id(L) L -> E;L L -> E Dla mojej odpowiedzi mam E -> T E' E' -> + T | ε T -> id T -> id() T -> id(L) L -> E L' L' -> ;E | ε Czy ktoś może zweryfikować odpowiedź? **Edytuj** Ok, więc byłoby podobne do... E -> T E' E' -> + E | ε T -> id T -> id() T -> id(L) L -> E L' L' -> ;E | ε


title: Przechowywać profil użytkownika i użytkownika w różnych tabelach?

text: Widziałem w kilku projektach, że programiści wolą przechowywać najważniejsze informacje o użytkowniku w jednej tabeli (adres e-mail/login, hash hasła, nazwa ekranowa), a resztę nieistotnego profilu użytkownika w innej (data utworzenia, kraj itp.). Przez nieistotne rozumiem, że te dane są potrzebne tylko sporadycznie. Oczywistą korzyścią jest to, że jeśli używasz ORM, mniej pól jest oczywiście dobre. Ale wtedy możesz mieć dwie encje zmapowane do tej samej tabeli, co pozwoli Ci zaoszczędzić od zapytań o rzeczy, których nie potrzebujesz (przy czym jest to wygodniejsze). Czy ktoś zna jakąś inną zaletę trzymania tych rzeczy w dwóch tabelach?


title: Jaka jest powszechnie akceptowana metoda tworzenia programu niezależnego od platformy w C++?

text: Sposób, w jaki zwykle to robię, to tworzenie platformy przestrzeni nazw w Platform.h, a każde wywołanie systemu operacyjnego jest hermetyzowane przez funkcję statyczną w tej przestrzeni nazw. Tak więc jedynym miejscem w całej bazie kodu, które wie, jaki system operacyjny jest używany, jest Platform.cpp. Czy to dobry sposób na ułatwienie sprawy? Na przykład, kiedy wywołuję Platform::MessageBox(...), to, co faktycznie się dzieje, to: void Platform::MessageBox(...) { #ifdef(_WINDOWS) .... #elif(_LINUX) .... # elif(_MAC) .... #endif }


title: Ciekawe tematy w Comp. Nauka. dla Nowych Studentów?

text: Mam nadzieję, że to właściwe forum do zadania tego pytania. W miniony piątek dyskutowałem z moimi profesorami na temat braku motywacji studentów i zainteresowania informatyką. Wszyscy studenci są zapisani, ale poprzez kwestionariusze i inne pytania, które zadał mój profesor, okazało się, że ponad 90% wszystkich zapisanych studentów jest właśnie w tym, aby zdobyć pracę w przyszłości (ponieważ jest to rozwijająca się dziedzina z wysoki potencjał zawodowy) Poprosiłem mojego profesora o zgodę na przejęcie kilku pierwszych wykładów i starałem się motywować, interesować i inspirować studentów na kierunku Informatyka i programowanie w szczególności (jest to kurs Wprowadzenie do programowania). Ta prośba została spełniona i mam teraz tydzień na wymyślenie tematu wykładu dla pięciu grup mojego profesora. Moim głównym celem nie jest nauczanie, po prostu chcę, aby uczniowie byli równie zainteresowani tą dziedziną, jak ja. Chcę im pokazać, co jest możliwe, jakie niesamowite magiczne rzeczy zostały zrobione w terenie, jaka jest przyszłość, do której zmierzamy za pomocą programowania i Comp. Nauka. Dlatego chciałbym zadać to pytanie: Mam kilka tematów, materiałów i przykładowych projektów, o których chciałbym porozmawiać: * Grace Hopper (Mam nadzieję, że zainteresuję na zajęciach programistki. Nigdy nie jest więcej niż dwóch lub trzech na grupę i bardziej niż mężczyźni mają skłonność do skakania ze statku i porzucania Comp.Sci.) * The Singularity Institute * Alan Turing * Robotyka * Programowanie nie jako obowiązek lub konieczność, ale idea, którą jesteśmy, w naszym rdzeniu jest to węzeł, z którym łączy się wszystko, co ktokolwiek robi w cyfrowym świecie. Rozwiązujemy problemy; składamy wszystkie części razem i jesteśmy tymi, którzy zasadniczo urzeczywistniają wizję. * Podaruj im pomysł na projekt programistyczny, który z pomocą profesora mógłby mieć znaczenie dla każdego ucznia (chcę, aby uczniowie nie tylko czuli się zainteresowani tematem, ale powinni czuć się ważni, aby to, co tutaj robili, było różnica) Czy masz ciekawe tematy godne omówienia, coś, co mogę powiedzieć uczniom, czym mogą się zainteresować? Jak podszedłbyś do wykładu? Gdybyś miał 90 minut na próbę zainteresowania uczniów projektem, co byś zrobił?


title: Podkreśl negację

text: Właśnie pisałem oświadczenie if z dość długimi nazwami nieruchomości i natknąłem się na ten problem. Powiedzmy, że mamy taką instrukcję if: if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue && !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant) { //Zrób coś } Druga właściwość jest typu logicznego if i nie ma sensu boleanValue == true) Czy istnieje lepszy sposób na podkreślenie negacji niż umieszczenie `!` na początku. Wydaje mi się, że można to łatwo przeoczyć podczas czytania kodu i potencjalnie spowodować problemy z debugowaniem


title: Parsowanie pliku dziennika — Java

text: Czytam plik dziennika w Javie na Linuksie w ciągłym harmonogramie 2 minut, szukając pewnych wiadomości. Przechowuję ostatnie przesunięcie (RandomAccessFile getFilePointer) i czytam od niego, gdy wykryję, że LastModified uległ zmianie; czy to najlepsza praktyka, czy w ogóle słuszna?


title: Udostępnianie danych między procesami

text: Mam aplikację C# .NET, która pobiera tweety użytkowników przy użyciu LinqToTwitter. To jest do transmisji telewizyjnej - klient chce wyświetlać tweety na antenie. Mamy dwie inne aplikacje, które muszą uzyskać dostęp do tych tweetów. Jedna to aplikacja C++, a druga będzie używać hosta skryptów MS. Te dwie aplikacje nie działają jednocześnie – to jedna lub druga. Moje pytanie brzmi: z wielu sposobów udostępniania tych danych, który byś wybrał? **Baza danych** \- Jak MySql. To był mój pierwszy wybór. Ale wtedy wydawało się, że to przesada za 10-20 tweetów, które dostają dziennie. **Streaming** \- Jak TCP lub nazwane potoki. Wymagałoby to pewnego rodzaju protokołu. Na przykład „Daj mi 10 ostatnich tweetów...” **Xml** \- Przechowuj dane w pliku, do którego mają dostęp wszystkie programy. Najprostsze, ale z jakiegoś powodu nie wydaje mi się właściwe. **Memory Mapped IO** \- Myślę, że wymagałoby to biblioteki COM, aby skrypty mogły z niej korzystać Są inne. Po prostu ciekaw, czego byś użył. Jestem jedynym programistą w małej firmie i nie mam innych, od których mógłbym odbijać pomysły. Dziękuję.


title: Korzystanie z indeksów bazy danych

text: Może to brzmieć jak naiwne pytanie, ale kiedy są wymagane indeksy tabel bazy danych w mysql? Jak takie indeksy wpływają na wydajność i dlaczego?


title: Czy istnieje sposób na wyświetlenie stosu podczas metody rekursji?

text: Próbuję nauczyć się rekurencji. Skopiowałem ten fragment kodu z mojej książki i dodałem wyświetlacze, aby pomóc mi prześledzić, co robi metoda i kiedy. public static void main(String[] args) { System.out.println(sum(4)); }//główna public static int sum(int n) { int sum; System.out.println("n = " + n + "\n"); jeśli (n == 1) suma = 1; w przeciwnym razie suma = suma(n-1) + n; System.out.println("n po funkcji = " + n + "\n"); System.out.println("suma po funkcji = " + suma + "\n"); suma zwrotu; } Oto wyniki: > n = 4 > > n = 3 > > n = 2 > > n = 1 > > n po funkcji = 1 > > suma po funkcji = 1 > > n po funkcji = 2 > > suma po funkcji = 3 > > n po funkcji = 3 > > suma po funkcji = 6 > > n po funkcji = 4 > > suma po funkcji = 10 > > 10 Rozłączam się z tym, co jest przechowywane na stosie, a może jak to jest przechowywane. Czy istnieje sposób na wyświetlenie zawartości stosu, gdy n odlicza do 1? To dziwna koncepcja - jest jak niewidzialna pętla przechowująca wartości w sposób, którego nie rozumiem.


title: Czy istnieją dobre, otwarte systemy żądania zmiany?

text: Mam potrzebę stworzenia nieco niestandardowego systemu żądania zmiany (bardzo wysokie wymagania dotyczące audytu). Zamiast całkowicie wymyślać koło na nowo, zastanawiałem się, czy istnieje system żądań zmian typu open source, uważany za przyzwoity, dla którego mógłbym napisać niestandardowy moduł? Przeprowadziłem pewne poszukiwania, ale te, które znalazłem, nie wydają się zawierać tego, czym powinien być system żądań zmian (brak możliwości rejestrowania planów testów lub strumieni pracy). Z mojego doświadczenia wynika, że system żądań zmian przechowuje (przechowuje) plany testów/specyfikacje techniczne oraz dziennik prac.


title: Jak ważni są ludzie, z którymi pracuję?

text: Jestem bardzo szczęśliwym człowiekiem, któremu udało się przeforsować pracę, którą lubię jako młodszy programista (mówię push, ponieważ zostałem zatrudniony jako analityk biznesowy, ale przeszedłem do rozwoju, udowadniając, że mogę wykonać tę pracę). Jestem zadowolona z mojego wynagrodzenia i warunków pracy. ALE (Poważnie, dlaczego nie miałoby być ale?) ludzie, z którymi pracuję, są... jednym słowem... sami. Mam dwóch starszych programistów - genialne umysły, świetna praca, ale pełne hordy wiedzy. Czuję, że _mógłbym_ się od nich wiele nauczyć, ale bardzo mało _pozwolą_ mi się nauczyć. Ponieważ jestem na początku mojej kariery i naprawdę chcę być w tym tak świetny, jak tylko potrafię - jak ważne jest uczenie się od innych (spoza Internetu) na tym etapie mojej kariery? Czy wyrządzam sobie krzywdę, której będę żałować w dalszej karierze, pozostając tutaj i nie szukając miejsca pracy, w którym ludzie chcą mnie uczyć i pomagać mi rozwijać moje umiejętności?


title: Asynchroniczna Java

text: Zastanawiam się, czy chciałem zaimplementować serwis webowy oparty na javie, który zajmuje się analityką internetową, jakiej architektury powinienem użyć. Właściwym przetwarzaniem Big Data zajmie się Hadoop. Jednak nie jestem pewien, co musiałbym zrobić, aby był asynchroniczny, czy Hadoop jest już z natury asynchroniczny? Czy mogę coś zrobić z JMS? Jeśli tak, to jak to wpasuje się w całość? Czy byłoby to coś w stylu, że po otrzymaniu żądania usługi sieciowej używam JMS do wysyłania komunikatu do Hadoop w celu obsługi określonych danych, a następnie czekam, aż do mnie wróci? Nie znam zbytnio asynchronicznej javy, więc nie wiem od czego zacząć.


title: Co oznacza „powierzchnia testowa” w kontekście programowania?

text: Natknąłem się na następujący tekst w artykule na temat wzorca ModelViewPresenter i mój mózg był ekranowany na niebiesko: > Widok pasywny zwykle zapewnia **większą powierzchnię testową** niż Nadzorowanie > Kontroler, ponieważ cała logika aktualizacji widoku jest umieszczona w prezenterze. Nie spotkałem się wcześniej z tym konkretnym żargonem i raczej zastanawia mnie, co dokładnie stanowi „powierzchnię testową” wzorca projektowego. Czy ktoś mógłby mnie oświecić, co oznacza ten termin, a także co oznacza, że jeden wzorzec projektowy ma większą (lub mniejszą) „powierzchnię testową” niż inny?


title: Dota 2 działająca na systemach Linux, Mac i Windows – jak to robią?

text: Jak Valve tworzy gry działające w systemach Linux, Mac i Windows? Wyobrażam sobie, że tak naprawdę nie piszą jednej wersji na każdą platformę, bo to byłby po prostu koszmar… czy nie? Wyobrażam sobie, że jest napisany w przenośnym kodzie C++ (lub C#?), ale chciałem dowiedzieć się więcej na ten temat. Stworzyłem aplikację na Adobe AIR i rozważam przeniesienie jej na język diff, ponieważ Adobe porzucił obsługę linuksa.


Przeglądałem ostatnio trochę kodu OpenJDK i znalazłem tam kilka **intrygujących** fragmentów kodu, które mają związek z **operacjami bitowymi**. Zadałem nawet pytanie na ten temat na StackOverflow. Inny przykład ilustrujący tę kwestię: 1141 public static int bitCount(int i) { 1142 // HD, Rysunek 5-2 1143 i = i - ((i >>> 1) & 0x55555555); 1144 i = (i & 0x333333333) + ((i >>> 2) & 0x333333333); 1145 i = (i + (i >>> 4)) & 0x0f0f0f0f; 1146 i = i + (i >>> 8); 1147 i = i + (i >>> 16); 1148 powrót i & 0x3f; 1149 } Ten kod można znaleźć w klasie Integer. **Nie mogę się oprzeć, ale czuję się głupio, kiedy na to patrzę.** Opuściłem zajęcia lub dwa na studiach, czy nie jest to coś, co powinienem po prostu _dostać_? Mogę wykonywać proste operacje bitowe (takie jak AND, ORing, XORing, shifting), ale daj spokój, jak ktoś wymyślił kod taki jak ten powyżej? **Jak dobry musi być dobrze zaokrąglony programista w operacjach bitowych?** **Na marginesie...** _Niepokoi mnie to, że osoba, która odpowiedziała na moje pytanie na StackOverflow, odpowiedziała na nie w sprawie minut. Jeśli mógł to zrobić, dlaczego po prostu gapiłem się jak jeleń w reflektory?_


title: Zanurz się w frameworku PHP

text: Mam zamiar zanurzyć się w frameworkach PHP, a moją ulubioną bronią jest kohona. Mam rozsądną ilość doświadczenia OO z javą. A moje umiejętności w zakresie javaScript, jQuery, PHP i html/CSS są znośne. Teraz do pytania. Czy to rozsądny wybór? Ponieważ ZEND wygląda jak bardziej stroma krzywa uczenia się, a konfiguracja wiersza poleceń CakePHP nie od razu wydaje mi się dobrym sposobem na tworzenie kodu.


Myślałem o tym od dłuższego czasu. Czy zapamiętywanie funkcji naprawdę jest tylko dla prymitywów? Obecnie mam ten fragment kodu: Public Shared Function Mize(Of TArg1 As Structure, TResult)(ByVal input_f As System.Func(Of TArg1, TResult)) As System.Func(Of TArg1, TResult) Dim map = New System. Collections.Generic.Dictionary(Of TArg1, TResult) Return Function(arg1 As TArg1) If map.ContainsKey(arg1) Then Return map.Item(arg1) Dim wynik = input_f(arg1) map.Add(arg1, wynik) Zwraca wynik End Function End Function I zastanawiam się, czy powinienem uaktualnić TArg1 tak, aby mógł akceptować dowolną dowolną klasę?


title: Jak obsługiwać flagę w wielu przypadkach if-else

text: Wydaje mi się, że widzę to wystarczająco często w moim kodzie i innych. Nie ma w tym nic, co wydaje się strasznie niewłaściwe, ale denerwuje mnie, ponieważ wygląda na to, że można to zrobić lepiej. Przypuszczam, że instrukcja case może mieć trochę więcej sensu, ale często zmienna jest typem, który nie działa dobrze lub wcale z instrukcjami case (w zależności od języka) If variable == A if (Flag == true) doFooA() else doFooA2 else if zmienna == B if (Flag == true) doFooB() else doFooB2 else if zmienna == C if (Flag == true) doFooC() else doFooC2 Wygląda na to, że jest wiele sposobów na „uwzględnienie” tego jako 2 zestawy if-elses, gdzie jeden zestaw obsługuje flagę == true. Czy istnieje „dobry sposób” na rozłożenie tego na czynniki, a może, gdy dzieje się ten algorytm, jeśli-w przeciwnym razie zwykle oznacza to, że robisz coś złego?


title: Skalowalny rdzeń sprężynowy z AMQP?

text: Używam 3 standardowych wojen Spring MVC, które mają wspólny rdzeń (usługi, DAO i modele). Główny problem polega na tym, że planuję rozmieścić wszystkie 3 wojny na tym samym serwerze. Mam utworzony 3 razy kontekst aplikacji podstawowej. Wiem, że możliwe jest dzielenie wspólnego kontekstu za pomocą EAR, ale ze względu na skalowalność muszę zachować wszystkie 3 wojny jako 3 odrębne jednostki, z których każda może być wdrażana w innej liczbie. Moje pytanie dotyczy wyboru architektury: czy dobrym pomysłem jest podzielenie warstwy usługi używanej przez moje kontrolery na fasadę + polecenia (wzór), które można dystrybuować do rdzenia (zaplecza) za pośrednictwem AMQP? Abym mógł udostępniać żądania między wieloma rdzeniami.


title: Uważam, że pomieszałem kod C i C++, kiedy nie powinienem; Czy to jest problem i jak to naprawić?

text: **Tło/Scenariusz** Zacząłem pisać aplikację CLI wyłącznie w C (mój pierwszy właściwy program C lub C++, który nie był "Hello World" ani jego odmianą). Mniej więcej w połowie pracowałem z „ciągami” danych wejściowych użytkownika (tablice znaków) i odkryłem obiekt streamera ciągów C++. Zobaczyłem, że mogę za ich pomocą zapisać kod, więc korzystałem z nich za pośrednictwem aplikacji. Oznacza to, że zmieniłem rozszerzenie pliku na .cpp i teraz skompilowałem aplikację za pomocą `g++` zamiast `gcc`. Opierając się na tym, powiedziałbym, że aplikacja jest teraz technicznie aplikacją C++ (chociaż ponad 90% kodu jest napisane w tym, co nazwałbym C, ponieważ istnieje wiele skrzyżowań między tymi dwoma językami, biorąc pod uwagę moje ograniczone doświadczenie w zakresie dwójka). Jest to pojedynczy plik .cpp o długości około 900 wierszy. **Ważne czynniki** Chcę, aby program był darmowy (jak w pieniądzu) i swobodnie rozpowszechniany i używany dla wszystkich. Obawiam się, że ktoś spojrzy na kod i pomyśli coś w stylu: > Och, spójrz na kodowanie, to okropne, ten program nie może mi pomóc, kiedy potencjalnie mógłby! Inną sprawą jest sprawność kodu (jest to program do testowania łączności Ethernet). Nie powinno być żadnych części kodu, które są tak nieefektywne, że mogą poważnie utrudnić działanie aplikacji lub jej wyjście. Myślę jednak, że jest to pytanie do Stack Overflow, gdy prosisz o pomoc z określonymi funkcjami, metodami, wywołaniami obiektów itp. **Moje pytanie** Mając (moim zdaniem) mieszanie C i C++, gdzie być może nie powinienem. Czy powinienem spróbować przepisać to wszystko w C++ (przez to mam na myśli zaimplementowanie większej liczby obiektów i metod C++, w których być może zakodowałem coś w stylu C, co można skondensować przy użyciu nowszych technik C++), czy usunąć użycie obiektów streamerów i przenieść to wszystko "z powrotem" do kodu C? Czy jest tu właściwe podejście? Jestem zagubiony i potrzebuję wskazówek, jak utrzymać tę aplikację „dobrą” w oczach mas, aby mogli z niej korzystać i czerpać z niej korzyści. **Kod - aktualizacja** Oto link do kodu. To około 40% komentarzy, komentuję prawie każdą linijkę, aż poczuję się płynniej. W kopii, do której podałem link, usunąłem prawie wszystkie komentarze. Mam nadzieję, że nie będzie to zbyt trudne do odczytania. Mam jednak nadzieję, że nikt nie powinien tego w pełni rozumieć. Jeśli jednak popełniłem fatalne wady projektowe, mam nadzieję, że będą one łatwe do zidentyfikowania. Powinienem również wspomnieć, że piszę kilka komputerów stacjonarnych i laptopów Ubuntu. Nie zamierzam przenosić kodu do innych systemów operacyjnych.


title: Listy kontrolne debugowania: Ile trzeba mieć?

text: Czy tworzenie _debug-checklists_ powinno być istotną częścią procesu rozwoju? Jak można go zintegrować z _testami jednostkowymi_? **Aktualizacja** Lista kontrolna debugowania: pomyśl o tym jako o liście kontrolnej rozwiązywania problemów – na przykład o tym, co robisz z połączeniem sieciowym, tym razem dla programistów i kodu źródłowego. Na przykład, jeśli próbujesz uzyskać dostęp do sieci za pośrednictwem przeglądarki internetowej, a nie możesz, prawdopodobnie sprawdzisz, czy możesz załadować inne witryny, czy nie, jeśli nie, sprawdź połączenie internetowe/sieciowe , i tak dalej. Tutaj, jeśli masz zespół wielu programistów i natrafiłeś na błąd, nie wskoczyłbyś po prostu do kodu źródłowego i próbował go tam debugować, ponieważ ktoś inny może zmienić kod i to może spowodować problem. Aby wykryć rzeczywisty błąd bez listy kontrolnej, każdy musi poświęcić dużo czasu na przyglądanie się różnym rzeczom, prawdopodobnie również w niezorganizowany sposób. Na przykład w naszym oprogramowaniu mamy moduł Map. Jeśli próbujesz użyć tego modułu gdzieś w aplikacji i to nie działa, istnieje mała lista kontrolna, która pomoże Ci szybciej debugować: 1. Sprawdź, czy licencja istnieje w Dashboard/Settings/Map lub w bazie danych . Czy to ważna licencja? 2. Co to jest MapCenter? Czy to ważny LatLng? 3. Co to jest MapProjection? 4. Czy możesz połączyć się z MapServerem? Tak więc, szczególnie jeśli jesteś nowy w zespole/kodzie, możesz szybciej dogonić innych, nie spędzając godzin na szukaniu przyczyny błędów. Istnieją sposoby na lepszą obsługę błędów - na przykład rzucanie _wyjątku_, jeśli serwer MapServer jest nieosiągalny, jednak są też sytuacje, w których nadal musisz sprawdzić różne elementy, aby upewnić się, co dokładnie powoduje błąd. Pytanie brzmi: Jeśli piszę funkcję _sort_ i wiem, że musisz określić poprawne _kodowanie_, aby uzyskać poprawny wynik, czy powinienem napisać listę kontrolną po prostu tak: 1. Upewnij się, że ustawiłeś właściwe _kodowanie_ w pliku konfiguracyjnym. Jeśli powyższy przykład może zaoszczędzić mnie lub innemu programiście 10-15 minut na szukanie problemu, czy powinniśmy wprowadzić obowiązek pisania tego rodzaju list kontrolnych przez każdego programistę, gdy zauważy coś, co może być źródłem problemu na konkretna część aplikacji później?


title: Czy umieszczanie typów/funkcji wewnątrz przestrzeni nazw ułatwia parsowanie kompilatora?

text: Zachowanie nazw w przestrzeni nazw sprawi, że kompilator będzie mniej stresujący!? Na przykład: // test.cpp #include</*iostream,vector,string,map*/> class vec { /* ... */ }; Weź 2 scenariusze `main()`: // scenariusz-1 używając przestrzeni nazw std; // skomentuj ten wiersz dla scenariusza-2 int main () { vec obj; } W scenariuszu 1, w którym ` using namespace std;`, kilka nazw typów z `namespace std` znajdzie się w zasięgu globalnym. Tak więc kompilator będzie musiał sprawdzić, czy którykolwiek z typów koliduje z `vec`. Jeśli tak, to generuje błąd. W scenariuszu 2, w którym nie ma `używania przestrzeni nazw`, kompilator musi po prostu sprawdzić `vec` z `std`, ponieważ jest to jedyny symbol w zasięgu globalnym. Interesuje mnie to, czy nie powinno to sprawić, że kompilator nie powinien być trochę szybszy?


title: Refaktoryzacja i zasada otwarcia/zamknięcia

text: Niedawno czytałem stronę internetową o tworzeniu czystego kodu (nie umieszczam tutaj linku, ponieważ nie jest on w języku angielskim). Jedną z zasad reklamowanych na tej stronie jest **Zasada Open Closed**: każdy składnik oprogramowania powinien być otwarty na rozszerzenie i zamknięty na modyfikację. Np. kiedy zaimplementowaliśmy i przetestowaliśmy klasę, powinniśmy ją jedynie modyfikować, aby naprawić błędy lub dodać nową funkcjonalność (np. nowe metody, które **nie** wpływają na istniejące). Nie należy zmieniać dotychczasowej funkcjonalności i implementacji. Zwykle stosuję tę zasadę, definiując interfejs „I” i odpowiednią klasę implementacji „A”. Kiedy klasa `A` jest stabilna (zaimplementowana i przetestowana), zwykle nie modyfikuję jej za bardzo (być może wcale), tj. 1. Jeśli pojawią się nowe wymagania (np. wydajność lub zupełnie nowa implementacja interfejsu) które wymagają dużych zmian w kodzie, piszę nową implementację `B` i używam `A`, dopóki `B` nie jest dojrzały. Kiedy „B” jest dojrzałe, wystarczy zmienić sposób tworzenia „I”. 2. Jeśli nowe wymagania sugerują również zmianę interfejsu, definiuję nowy interfejs `I'` i nową implementację `A'`. Tak więc `I`, `A` są zamrożone i pozostają **implementacją** dla systemu produkcyjnego, dopóki `I`` i `A`` nie są wystarczająco stabilne, aby je zastąpić. Tak więc w związku z tymi spostrzeżeniami byłem nieco zaskoczony, że strona internetowa sugerowała wówczas zastosowanie **kompleksowych refaktoryzacji** , "...ponieważ nie da się napisać kodu bezpośrednio w jego ostatecznej postaci". Czy nie ma sprzeczności/konfliktu między egzekwowaniem zasady otwartej/zamkniętej a sugerowaniem stosowania złożonych refaktoryzacji jako najlepszej praktyki? Albo pomysł polega na tym, że można używać złożonych refaktoryzacji podczas tworzenia klasy „A”, ale gdy ta klasa zostanie pomyślnie przetestowana, należy ją zamrozić?


title: Co tak naprawdę ogranicza Microsoft Public License (Ms-PL) klauzula 3 sekcja (A)?

text: Patrzyłem na licencję Ms-PL, pod którą publikowane są ASP.NET MVC i DotNetOpenAuth, a 3A mówi tak: 3 Warunki i ograniczenia (A) Brak licencji na znak towarowy — Ta licencja nie daje Ci praw do używania nazwy żadnego współtwórcy , logo lub znakami towarowymi. Czy to oznacza, że nie mogę nazwać mojego projektu ASP.NET MVC DotNetOpenAuth Sample Project i opublikować go, jeśli używam tych dwóch technologii, czy to po prostu oznacza, że nie mogę używać nazwiska autora do promowania tego projektu?


title: Aplikacja Klient/Serwer – Najlepsza biblioteka do przechowywania/administracji/komunikacji online?

text: Pracuję na niektórych aplikacjach na iPhone'a/Androida, a wzorzec „dane przechowywane na scentralizowanym serwerze” wydaje się dość powszechny. Do tej pory zrobiłem jedną taką aplikację, robiąc wszystko samodzielnie na niskim poziomie bez korzystania z wielu bibliotek: 1. Baza danych MySQL 2. Formularze internetowe PHP/HTML umożliwiające menedżerowi aplikacji wprowadzanie/aktualizowanie treści z pewną walidacją 3. Skrypty PHP przekształcanie danych SQL w pliki XML do pobrania 4. Kod aplikacji (java/objective-c) do pobrania plików XML, parsowania ich i przekształcania w odpowiednie obiekty, a następnie wyświetlane w interfejsie aplikacji Jak można sobie wyobrazić, jest to bardzo żmudne i nudne i jest wiele duplikatów. Co więcej, ciekawie było zrobić to raz w ten sposób, aby zrozumieć, jak to działa, ale jestem pewien, że niektóre biblioteki robią to znacznie lepiej niż mój własny kod php/java/obj-c. Teraz będę musiał popracować nad czymś podobnym i szukam jakiegoś rodzaju API/usługi, która wykona większość tej pracy za mnie, ale nadal pozwoli mi zmienić/dostosować to, czego potrzebuję (np. walidacja formularzy internetowych, więc że menedżer aplikacji nie łamie integralności bazy danych, np.: podpięcie się własnymi klasami). Więc szukam najlepszego ogólnego rozwiązania, które obejmuje wszystkie powyższe kroki oraz przypadek, w którym aplikacja może również wstawiać/aktualizować dane (pobierać i przesyłać). (Zauważ, że biblioteka nie powinna mieć licencji, która uniemożliwiałaby mi sprzedaż aplikacji) Załóżmy, że muszę zbudować aplikację o samochodach, chcę przechowywać dane samochodu w internetowej bazie danych SQL z kilkoma formularzami HTML umożliwiającymi menedżerowi aplikacji dodaj więcej samochodów (ale tylko pozwalając mu na wprowadzenie zweryfikowanych danych). Chcę, aby użytkownik aplikacji mógł pobrać samochody i wstawić nowe do internetowej bazy danych SQL ze swojego telefonu. Jaką bibliotekę/API poleciłbyś? Jaka usługa zaoszczędziłaby mi najwięcej czasu, jednocześnie zapewniając elastyczność?


title: Kontrola wersji: postępowanie z niekompletnym/uszkodzonym kodem

text: Wydaje się, że ogólnie przyjętą dobrą praktyką jest niewpychanie nieprawidłowego, uszkodzonego lub niekompletnego kodu. Ale jedną z ogromnych zalet systemów kontroli wersji jest to, że udostępniają one zdalne miejsce na kod, dzięki czemu można pracować na tej samej bazie kodu z więcej niż jednego miejsca. Załóżmy, że pracujesz nad funkcją z kilkoma innymi programistami i ogłoszono straszną zimową burzę; wszyscy zgadzają się iść do domu i dalej pracować, zamiast dać się złapać burzy, ale nikt nie jest w idealnym _miejscu postoju_. Co robisz? 1. Utwórz różne gałęzie dla każdego programisty i zatwierdź w tym zmiany, wypchnij te gałęzie zdalnie i masz nadzieję, że możesz je później posprzątać zdalnie bez utrudniania życia? 2. Utworzyć innego pilota tylko dla niekompletnego kodu? 3. Skopiuj swój kod na osobisty pendrive i miej nadzieję, że go później nie zgubisz lub nie zostaniesz przyłapany na łamaniu zasad firmy? 4. Coś jeszcze? (Używamy `git`, ale mam nadzieję, że odpowiedź może być ogólna dla każdego systemu kontroli wersji.)


title: Używasz manipulatora strumienia (endl) lub znaku zmiany znaczenia nowego wiersza (\n)?

text: Nie mam konkretnego kontekstu, w którym zadaję pytanie, ale kiedy czytałem książkę dla początkujących o C++, zauważyłem użycie zarówno manipulatora strumienia endl, jak i znaku ucieczki nowej linii, gdy mam do czynienia z obiektem strumienia. Przykład wygląda następująco: cout << "Witaj świecie" << endl; cout << "Witaj świecie\n"; Moje pytania brzmią: 1. Czy bardziej odpowiednie jest użycie manipulatora strumienia (endl) w pewnej sytuacji, a znaku ucieczki w innej? 2. Czy istnieją wady wydajności mądrego korzystania z jednego z dwóch? 3. Czy są całkowicie wymienne? 4. Przeczytałem, że sekwencja ucieczki jest przechowywana w pamięci jako pojedynczy znak. Czy to oznacza, że bardziej odpowiednie jest używanie endl, jeśli chcesz zmniejszyć zużycie pamięci? 5. Czy manipulator strumienia endl w jakikolwiek sposób zużywa pamięć, jeśli tak, to czy jest to więcej niż sekwencja ucieczki? Dzięki, przepraszam StackExchange, jeśli opublikowałem to w złej sekcji, myślałem, że liczy się to jako struktury danych.


title: Czy w git to zły pomysł, aby utworzyć tag o tej samej nazwie, co usunięta gałąź?

text: Mam projekt z modelem rozgałęziania git, który z grubsza jest zgodny z modelem git-flow nvie. Nasze gałęzie wydania są nazwane w formacie SemVer, np. `v1.5.2` Gdy gałąź wydania otrzyma zielone światło dla produkcji, zamykamy gałąź, łącząc ją z główną, stosując tag, a następnie usuwając gałąź. Ponieważ natychmiast usuwamy gałąź release, używamy tego samego identyfikatora do tagowania gałęzi, np. `v1.5.2` Oto polecenia, których użyjemy do zamknięcia gałęzi wydania: $ git checkout master $ git merge v1.5.2 $ git tag -a v1.5.2 -m "Wersja 1.5.2 - foo bar, baz itp. " $ git branch -d v1.5.2 $ git branch -dr origin/v1.5.2 $ git push origin :v1.5.2 $ git push $ git push --tags To wydaje się działać w większości przypadków, jednak powoduje problem w scenariuszu, w którym inna instancja repozytorium git (np. inna maszyna deweloperska lub środowisko pomostowe) ma lokalny checkout gałęzi v1.5.2. Komenda `git push origin :v1.5.2` usunie gałąź ze zdalnego, ale nie usunie lokalnej wersji gałęzi (jeśli istnieje) we wszystkich repozytoriach. Prowadzi to do niejednoznacznego odniesienia, gdy próbujesz checkout `v1.5.2` w tych repozytoriach: $ git checkout v1.5.2 warning: refname 'v1.5.2' jest niejednoznaczna. Czy można tego uniknąć bez używania innej składni dla gałęzi, np. `release-v1.5.2` czy `v1.5.2-rc`? A może jest to nieuniknione, a zatem zasadniczo zły pomysł, aby utworzyć tag o tej samej nazwie, co usunięta gałąź?


title: Czy powinienem przechowywać pliki testowe w kontroli źródła?

text: Mam kilka (dużych) plików testowych, które wymagają konserwacji. Oznacza to, że wymagany jest dostęp do ich historii. **Korzyści** * Każdy nowy programista otrzymuje cały zestaw testowy za pomocą `git pull`. * Tworzona jest kopia zapasowa historii plików. * Kopie zapasowe samych plików są tworzone. **Wady** * Ogromny wzrost rozmiaru repozytorium. * Ogromny wzrost rozmiaru pobierania nowych programistów kopiujących repozytorium. Jakie są najlepsze praktyki dotyczące utrzymywania plików testowych? Czy przechowuję te pliki w kontroli źródła? Czy są jakieś alternatywy?


title: Spotkania Planowania Sprintu - określ, czy element pracy jest „planowany”?

text: Pracujemy ze Scrumem już od jakiegoś czasu, generalnie z powodzeniem. Jednak ostatnio, gdy presja zaczęła narastać, napotkaliśmy kilka sytuacji, w których przedmioty pojawiły się podczas spotkań planistycznych, ale kiedy rzeczywiście nadszedł czas na kodowanie, okazało się, że są one żałośnie niedoszacowane. To denerwująca i niezręczna strata czasu. Zastanawiam się więc, czy jest coś, co możemy zrobić, aby upewnić się, że element pracy jest właściwie zrozumiany i zaplanowany, zanim zostanie włączony do sprintu? Nie używamy TDD, ale moje doświadczenia z nim sugerują, że jest to dobry sposób na zapewnienie, że programista rozumie zadanie przed rozpoczęciem pracy. Zastanowiłem się więc nad opracowaniem automatycznych testów jako możliwego podejścia do tego. Ale nie wszystkie elementy pracy nadają się do testów automatycznych i prawdopodobnie będzie to trudne/nudne dla osób nie będących programistami na spotkaniu. Na marginesie, z ciekawości, kiedy ktoś decyduje o kryteriach akceptacji, czy powinien przejść do elementu pracy, historyjki użytkownika, czy obu?


title: Opakowanie wokół C++ STL

text: Tam, gdzie pracuję, mamy własną bibliotekę systemową, która w zasadzie jest tylko wrapperami wokół STL, takimi jak: template <typename T> class HVector { protected: std::vector<T> data; public: int size () const; //Zwraca tylko data.size() int custom(); //Niektóre ogólne niestandardowe funkcje, które używają wektora danych } Większość elementów klasy to tylko ponowne deklaracje elementów kontenera STL, ale mamy też kilka dostosowanych funkcji, które wykonują pewne ogólne zadania z kontenerem. Czy to dobry projekt? Jeśli nie, jaki byłby najlepszy sposób na zaimplementowanie niestandardowych funkcji wokół kontenerów?


title: Weryfikacja numeru telefonu komórkowego

text: Próbuję znaleźć najlepszy sposób na zweryfikowanie numeru telefonu komórkowego w danym kraju. Obecnie rozumiem, że: użytkownik może wprowadzić dowolny format w numerach telefonów komórkowych i jest to strata czasu i energii, aby sprawdzić, czy jest to zestaw wyrażeń regularnych. Moja aplikacja nie jest krytyczna, jak aplikacja bankowa, a jeśli użytkownik wprowadza nieprawidłowy numer telefonu komórkowego, to na własne ryzyko pobiera aktualizacje (takie jak aktywacja konta / zrobienie czegoś z aplikacją) Więc myślę, że najlepszym sposobem jest sprawdzenie długość numeru telefonu komórkowego i czy wszystkie są cyframi. Chcę poznać najlepszą drogę naprzód i czy jest jakiś dobry zasób (nierozproszony), aby uzyskać wszystkie walidacje długości numeru telefonu komórkowego na podstawie kodu kraju?


title: Zdjęcia z iPhone'a na serwer FTP klientów - Bezpośrednio (iPhone->FTP) lub Cloud (iPhone->Amazon->FTP)

text: Moi klienci chcą robić zdjęcia swoimi iPhone'ami i umieszczać je na swoim serwerze, co sugeruje FTP. Widzę, że są dwa rozwiązania: 1. Bezpośrednie wgranie z iPhone'a na serwer FTP. Mój kolega może tak zrobić, aby uzyskać nazwę użytkownika i hasło ActiveDirectery, aby nie używali tego samego hasła we wszystkich. 2. Prześlij je bezpośrednio do Amazon S3, gdzie mam pracownika, który pobiera obraz i umieszcza go na serwerze ftp. Mogę to łatwo zrobić w Pythonie. Użyję Kinvey do zarządzania użytkownikami. Czy nr. 2 przesada w krótkich terminach? A może są wady tworzenia połączenia FTP na iPhonie? Mój szef uważa, że ten dodatkowy link sprawia, że sprawa staje się niepotrzebna i bardziej skomplikowana. Łatwo widzę, co ma na myśli mój szef i myślę, że ma rację. Problem polega na tym, że nie próbowałem FTP'ing w Obj-C i nie wiem, jak trudne lub trudne może to być. Znam phonegap, który spokojnie mógłbym wgrać do Amazona.


title: Czy powinienem odwoływać się do CopyOnWriteArraySet z interfejsu Set?

text: Istnieją dwa sposoby użycia obiektu CopyOnWriteArraySet: // Set<Object> set = new CopyOnWriteArraySet<>(); i // B CopyOnWriteArraySet<Object> set = new CopyOnWriteArraySet<>(); W przypadku „normalnych” zestawów, takich jak HashSet i TreeSet, przypadek A jest preferowany, ponieważ umożliwia łatwe przełączanie implementacji zestawu. Jednak w tym przypadku dokonywany jest świadomy wybór konkretnej, bezpiecznej wątkowo implementacji zestawu. Czy powinienem użyć przypadku B, aby wyrazić tę intencję?


title: Czy programista, który naprawia błędy „kontroli jakości” i błędy zgłaszane przez testerów, jest uznaną rolą?

text: Ostatnio często znalazłem się w sytuacji, w której sprawdzam zarówno poprawki błędów innych programistów, jak i błędy zgłaszane przez zespół QA. Wszelkie poprawki błędów często kończą się „ubocznymi uszkodzeniami” i uznałem za nieocenione przejrzenie wszelkich ostatnich poprawek i przeanalizowanie, na jakie inne części systemu mogły potencjalnie wpłynąć te zmiany. Odgrywa kluczową rolę w utrzymaniu niezawodności systemu. Bez tego procesu testerzy zazwyczaj znajdują nowe zgłoszone błędy i rzadko rozpoznają przyczynę jako ostatnią poprawkę błędu. Dość często przechodzę również przez nowe błędy zgłaszane przez testerów, analizując możliwe przyczyny, aby ustalić, czy istnieje główna przyczyna, która może mieć wpływ na inne części systemu, dość często łącząc dwa lub więcej błędów w jeden przypadek. Zasadniczo zajmuje się „dochodzeniem” procesu naprawy błędów, tak aby inny programista mógł skupić się tylko na kodowaniu. Pytanie brzmi, czy jest to uznana rola? Wydaje się, że nie pasuje to do stanowiska „programisty” lub „kontroli jakości”, jest to coś pomiędzy. A może potrzeba tej roli jest bardziej konsekwencją złego procesu lub złego projektu?


title: Nowoczesne podejście do pobierania przydatnych treści ze strony internetowej?

text: Jakie są współczesne sposoby (skutecznego) określania, która część strony zawiera przydatny tekst, tabele danych itp., a które nie (np. reklamy, nawigacja itp.)? Jakie były ostatnie wartościowe badania/wyniki/artykuły w tej dziedzinie w ostatnich latach? Z góry dziękuję!


title: Kontynuuj permutację wektora, dopóki nie zostanie uporządkowany

text: Mam taki problem: Wyobraź sobie, że masz wektor V, liczby całkowite od 0 do 70000 -- posortowane w porządku rosnącym Teraz masz permutację P tego wektora. Następnie wykonujesz V[P] "tasowanie" wektora. Jeśli będziesz dalej robił V[P] (P nigdy się nie zmienia), V w końcu zostanie posortowane ponownie w kolejności rosnącej? Czy jest sposób, w jaki możesz wiedzieć a priori, w jaki sposób możesz potrzebować przetasowań?


title: Czy programiści backendowi dbają o to, jak ich kod wygląda we frontendzie?

text: Jako backend i frontend developer widzę cały proces od początku do końca, najpierw tworząc logikę, wyświetlając poprawne dane na stronie internetowej, a następnie wykorzystując umiejętności frontendowe, aby wyglądało to niesamowicie. Moje pytanie brzmi, czy programiści zajmujący się czystym backendem dbają o to, jak ich kod będzie wyglądał w interfejsie? Jeśli chodzi o użytkownika, zobaczy on TYLKO projekt/frontend. W rzeczywistości nie obchodzi ich, że twój kod jest czysty, SUCHY i łatwy w utrzymaniu. Dopóki nie zakłóci to procesu płatności lub rezerwacji lotu, nie obchodzi ich to. Czy to wpływa na przeciętnego programistę backendu?


title: Programowanie asynchroniczne w językach funkcjonalnych

text: Jestem głównie programistą C/C++, co oznacza, że większość mojego doświadczenia dotyczy paradygmatów proceduralnych i obiektowych. Jednak, jak wielu programistów C++ zdaje sobie sprawę, C++ przesunął się na przestrzeni lat na styl funkcjonalny, którego kulminacją było dodanie lambd i domknięć w C++0x. Niezależnie od tego, chociaż mam spore doświadczenie w kodowaniu w funkcjonalnym _stylu_ przy użyciu C++, to mam bardzo małe doświadczenie z rzeczywistymi językami funkcjonalnymi, takimi jak Lisp, Haskell itp. Niedawno zacząłem studiować te języki, ponieważ idea „bez efektów ubocznych” " w językach czysto funkcjonalnych zawsze mnie intrygował, zwłaszcza w odniesieniu do jego zastosowań do współbieżności i przetwarzania rozproszonego. Jednakże, wywodząc się z C++, jestem zdezorientowany co do tego, jak ta filozofia „braku efektów ubocznych” działa z programowaniem asynchronicznym. Przez programowanie asynchroniczne rozumiem dowolny framework/API/styl kodowania, który wysyła procedury obsługi zdarzeń dostarczone przez użytkownika do obsługi zdarzeń, które występują asynchronicznie (poza przepływem programu). Obejmuje to biblioteki asynchroniczne, takie jak Boost.ASIO, lub nawet zwykły stary C obsługi sygnałów lub obsługi zdarzeń Java GUI. Jedyną wspólną cechą wszystkich tych elementów jest to, że natura programowania asynchronicznego wydaje się _wymagać_ tworzenia efektów ubocznych (stanu), aby główny przepływ programu był świadomy, że wywołano procedurę obsługi zdarzeń asynchronicznych. Zazwyczaj we frameworku takim jak Boost.ASIO, procedura obsługi zdarzeń _zmienia_ stan obiektu, dzięki czemu efekt zdarzenia jest propagowany poza okres istnienia funkcji obsługi zdarzeń. Naprawdę, co jeszcze może zrobić program obsługi zdarzeń? Nie może "zwrócić" wartości do punktu pożarowego, ponieważ nie ma punktu pożarowego. Procedura obsługi zdarzeń nie jest częścią głównego przepływu programu, więc jedynym sposobem, w jaki może mieć jakikolwiek wpływ na rzeczywisty program, jest zmiana jakiegoś stanu (lub inaczej `longjmp` do innego punktu wykonania). Wygląda więc na to, że programowanie asynchroniczne polega na asynchronicznym wytwarzaniu efektów ubocznych. Wydaje się to całkowicie sprzeczne z celami programowania funkcjonalnego. Jak pogodzić te dwa paradygmaty (w praktyce) w językach funkcjonalnych?


title: Czy istnieją jakieś wzorce projektowe, które są niepotrzebne w językach dynamicznych, takich jak Python?

text: Zacząłem czytać księgę wzorców projektowych GoF. Niektóre wzorce wydają się bardzo podobne, z niewielkimi różnicami pojęciowymi. Czy uważasz, że spośród wielu wzorców niektóre są niepotrzebne w dynamicznym języku, takim jak Python (np. dlatego, że są one zastąpione funkcją dynamiczną)?


title: Dlaczego potrzebujemy zmiennych prywatnych?

text: Dlaczego potrzebujemy prywatnych zmiennych w klasach? Każda książka o programowaniu, którą przeczytałem, mówi, że jest to zmienna prywatna, tak ją definiujesz, ale na tym kończy się. Sformułowanie tych wyjaśnień zawsze wydawało mi się, że naprawdę przeżywamy kryzys zaufania do naszego zawodu. Wyjaśnienia zawsze brzmiały tak, jakby inni programiści zamierzali zepsuć nasz kod. Jednak istnieje wiele języków programowania, które nie mają prywatnych zmiennych. 1. Przed czym pomagają zmienne prywatne? 2. Jak zdecydować, czy dana nieruchomość powinna być prywatna, czy nie? Jeśli domyślnie każde pole POWINNO być prywatne, to dlaczego w klasie znajdują się publiczne składowe danych? 3. W jakich okolicznościach zmienna powinna być upubliczniona?


title: Dlaczego nie powinienem używać zmiennych publicznych w mojej klasie Java?

text: W szkole wiele razy mówiono mi, żebym przestał używać `public` dla moich zmiennych. Jeszcze nie zapytałem dlaczego. To pytanie: Czy w tym momencie publiczne pola Javy to tylko tragiczna historyczna wada projektu? wydaje się trochę z tym związane. Jednak wydaje się, że nie dyskutują _dlaczego_ to jest „niewłaściwe”, ale zamiast tego skupiają się na _jak_ mogą ich używać. Spójrz na tę (niedokończoną) klasę: public class Reporte { public String rutaOriginal; public String rutaNueva; public int bytesOriginals; public int bytesFinales; ganancia pływaka publicznego; /** * Konstruktor obiektów klasy Reporte */ public Reporte() { } } Nie trzeba rozumieć hiszpańskiego. Wszystko, co robi ta klasa, to przechowywanie statystyk (te pola publiczne), a następnie wykonywanie na nich pewnych operacji (później). Będę też musiał często modyfikować te zmienne. Ale cóż, ponieważ powiedziano mi, żebym nie używał `public`, oto co zrobiłem: public class Reporte { private String rutaOriginal; prywatne String rutaNueva; private int bytesOryginały; private int bytesFinales; prywatna ganancia typu float; /** * Konstruktor obiektów klasy Reporte */ public Reporte() { } public String getRutaOriginal() { return rutaOriginal; } public String getRutaNueva() { return rutaNueva; } public int getBytesOriginales() { return bytesOriginales; } public int getBytesFinales() { return bytesFinales; } public float getGanancia() { return ganancia; } public void setRutaOriginal(String rutaOriginal) { this.rutaOriginal = rutaOriginal; } public void setRutaNueva(String rutaNueva) { this.rutaNueva = rutaNueva; } public void setBytesOriginales(int bytesOriginales) { this.bytesOriginales = bytesOriginales; } public void setBytesFinales(int bytesFinales) { this.bytesFinales = bytesFinales; } public void setGanancia(float ganancia) { this.ganancia = ganancia; } } Wygląda całkiem ładnie. Ale wydaje się, że to strata czasu. Wyszukiwania Google dotyczące „Kiedy używać public in Java” i „Dlaczego nie powinienem używać public in Java” wydają się dyskutować o koncepcji **zmienności** , chociaż nie jestem do końca pewien, jak interpretować takie dyskusje. Chcę, żeby moja klasa była zmienna – przez cały czas.


title: Dlaczego nie powinienem upubliczniać zmiennych, ale powinienem używać publicznych metod pobierania/ustawiania?

text: Oglądam film instruktażowy C++. Mówi o zmiennych wewnątrz klas i zapewnia, że zmienne powinny być oznaczone jako prywatne. Wyjaśnia, że jeśli chcę z nich korzystać publicznie, powinienem to zrobić pośrednio poprzez funkcje. Czemu? Co za różnica? Wygląda na to, że wynik jest taki sam, z wyjątkiem tego, że zamiast jednej linii kodu, mam teraz 9 lub 10 więcej LOC, aby zrobić to samo. Czy ktoś może wyjaśnić, dlaczego konwertowanie zmiennej prywatnej w klasie na publiczną w klasie, zamiast po prostu upublicznianie jej w prosty sposób, jest inne i bardziej wydajne?


title: Czy WSZYSTKIE zmienne muszą być zadeklarowane jako prywatne?

text: > **Possible Duplicate:** > Dlaczego potrzebujemy prywatnych zmiennych? Wiem, że najlepszym rozwiązaniem jest zachowanie bezpieczeństwa i że zawsze powinniśmy uniemożliwiać _innym_ bezpośredni dostęp do właściwości klasy. Cały czas słyszę to od profesorów uniwersyteckich i cały czas widzę to w wielu kodach źródłowych opublikowanych w App Hub. W rzeczywistości profesorowie twierdzą, że faktycznie zdejmą oceny z każdej zmiennej, która zostanie zadeklarowana do publicznej wiadomości. Teraz zostawiam mnie _zawsze_ deklarowanie zmiennych jako prywatnych. Nieważne co. Nawet jeśli każda z tych zmiennych miałaby mieć zarówno getter, jak i setter. Ale oto problem: to żmudna praca. Zwykle szybko tracę zainteresowanie projektem za każdym razem, gdy potrzebuję mieć zmienną w klasie, która mogłaby być po prostu zadeklarowana jako publiczna zamiast prywatnej za pomocą gettera i settera. Więc moje pytanie brzmi, czy naprawdę muszę zadeklarować _all_ moje zmienne jako prywatne? Czy mogę zadeklarować _niektóre_ zmienne jako publiczne, gdy wymagają zarówno metody pobierającej, jak i ustawiającej?


title: Jak radzisz sobie z potrzebą posiadania wielu środowisk programistycznych?

text: Jak radzisz sobie z różnymi środowiskami projektowymi? Każdy projekt może wymagać innej bazy danych (oracle, IBM db2, mysql itp.), innego serwera (tomcat, IBM WAS, weblogic itp.) lub innych nowych technologii. Za każdym razem, gdy pojawia się nowa baza danych lub nowy serwer, dla wygody instaluję je na mojej stacji roboczej. W tej chwili mam więcej niż jedną bazę danych i serwer na mojej stacji roboczej, co spowodowało, że moja stacja robocza zajmuje trochę czasu podczas uruchamiania. Muszę trochę poczekać, aż moja stacja robocza będzie gotowa do rozpoczęcia pracy. Czasami, gdy instaluję bazę danych A, powoduje to problemy z moją poprzednią bazą danych B. Odkryłem, że zajmie to dużo mojego procesora, chociaż w tej chwili ich nie używam. W tym przypadku mogę wymyślić tylko jedną metodę, mogę zainstalować bazy danych na jednej maszynie wirtualnej, a serwery na innej maszynie wirtualnej. Lub jedno środowisko projektowe jedna maszyna wirtualna. Wtedy mogę uruchomić tylko to, czego potrzebuję. Co myślisz?


title: Jakie są różnice między klasami abstrakcyjnymi, interfejsami i kiedy ich używać?

text: Ostatnio zacząłem owijać głowę wokół OOP i doszedłem do tego, że im więcej czytam o różnicach między klasami abstrakcyjnymi a interfejsami, tym bardziej jestem zdezorientowany. Jak dotąd nie można utworzyć instancji. interfejsy są mniej lub bardziej strukturalnymi planami, które określają szkielet, a streszczenia różnią się możliwością częściowego tworzenia kodu. Chciałbym dowiedzieć się o nich więcej w mojej konkretnej sytuacji. Oto link do mojego pierwszego pytania, jeśli chcesz trochę więcej informacji ogólnych: Jaki jest dobry model projektowania dla mojej nowej klasy? Oto dwie klasy, które stworzyłem: class Ad { $title; $opis $cena; function get_data($strona internetowa){ } function validate_price(){ } } class calendar_event { $title; $opis $data_początkowa; function get_data($website){ //guts } function validate_dates(){ //guts } } Jak widać te klasy są prawie identyczne. Nie pokazano tutaj, ale istnieją inne funkcje, takie jak „get_zip()”, „save_to_database()”, które są wspólne dla moich klas. Dodałem również inne klasy Cars and Pets, które mają wszystkie wspólne metody i oczywiście właściwości specyficzne dla tych obiektów (np. przebieg, waga). Teraz naruszyłem zasadę **DRY** i zarządzam i zmieniam ten sam kod w wielu plikach. Zamierzam mieć więcej zajęć, takich jak łodzie, konie, czy cokolwiek. Czy to jest miejsce, w którym użyłbym interfejsu lub klasy abstrakcyjnej? Z tego, co rozumiem na temat klas abstrakcyjnych, użyłbym superklasy jako szablonu ze wszystkimi wspólnymi elementami wbudowanymi w klasę abstrakcyjną, a następnie dodałbym tylko elementy potrzebne w przyszłych klasach. Na przykład: treść klasy abstrakcyjnej { $title; $description function get_data($website){ } function common_function2() { } function common_function3() { } } class calendar_event rozszerza zawartość { $start_date; function validate_dates(){ } } A może użyłbym interfejsu i, ponieważ są one tak podobne, stworzyłbym strukturę, której każda z podklas jest zmuszona używać ze względu na integralność, i pozostawię to końcowemu programiście, który dopracowuje tę klasę być odpowiedzialnym za każdy szczegół nawet wspólnych funkcji. Myślę, że niektóre „zwykłe” funkcje mogą wymagać w przyszłości dostosowania do potrzeb ich konkretnej klasy. Pomimo tego wszystkiego powyżej, jeśli uważasz, że nie rozumiem co i dlaczego w ogóle abstraktów i interfejsów, za wszelką cenę pozwól, aby poprawną odpowiedzią było przestanie myśleć w tym kierunku i zasugerowanie właściwej drogi do przodu! Dziękuję!


title: Interfejsy a klasa podstawowa

text: Staram się wiedzieć, kiedy używać klasy bazowej z polimorfizmem lub interfejsem. Dostarczenie mojego obiektu uwidacznia DoThis(), a następnie nie widzę, dlaczego ma to znaczenie, jeśli jest to interfejs klasy bazowej. Proszę wziąć pod uwagę następujące publiczne void MyMethod() { var myObject = new MyObject(); mójObiekt.ZróbTo(); } W odniesieniu do MyObject mogłem stworzyć go na 2 sposoby Approach 1 public class MyObject : IMyInterface { public void DoThis() { //logic } } Approach 2 public class MyObject : MyBaseObject { public override void DoThis() { // logika } } Z tego co widzę, obie te implementacje osiągają to samo. Problem może polegać na tym, że mój przykład jest zbyt prosty/wymyślny, ale czy istnieje sposób, aby wiedzieć, kiedy zastosować jedno podejście, a nie drugie? W moim przykładzie powyżej _zgaduję_, że odpowiedź brzmi: preferencja? Nie robiłem wcześniej żadnych dużych projektów, więc domyślam się, że jeden nie jest tak rozszerzalny, ale nie wiem, dlaczego tak myślę!


title: Jak długo powinienem udostępniać bezpłatne aktualizacje oprogramowania shareware — według wersji, rocznie lub na zawsze?

text: Wkrótce wydam swój pierwszy shareware i zastanawiam się, jak długo płacący użytkownik powinien mieć prawo do bezpłatnych aktualizacji. Przychodzą mi do głowy trzy opcje: * Kupujesz wersję, a wszystkie aktualizacje są bezpłatne przez rok (np. SmartFTP) * Kupujesz wersję, a wszystkie drobne aktualizacje (w większości zawierające poprawki błędów) są bezpłatne (np. UltraEdit) * Kupujesz wersję, a wszystkie mniejsze i większe aktualizacje są na zawsze bezpłatne (np. Total Commander) Wygląda na to, że różne aplikacje używają różnych sposobów. Co byś polecił?


title: Format danych UPOS RFIDScanner

text: Dużo pracy, którą obecnie wykonuję, opiera się na świecie OPOS/UPOS. Moja firma ma urządzenie, które może odczytywać tagi 13,56 MHz (RFID), karty inteligentne i karty Mag Stripe. Do niedawna pracowałem z RFID tylko dla bardzo specyficznego scenariusza. To było czytać karty UltraLight C i Desfire. Wszystkie te karty zostały bardzo dokładnie skonfigurowane, abym mógł pobrać dane odczytane z tych kart i przetworzyć je w formacie MSR track2. Jednak przez ostatnie kilka tygodni pracowałem nad odczytem kart kredytowych RFID (odkąd mam kartę Visa, z której korzystam) i kart kredytowych Smart Card. (Karta wizowa, którą mam obie) Ucząc się, jak komunikować się z kartą SmartCard i czytać dokumenty ISO7816 i EMVCO, trochę lepiej poznałem sposób przechowywania informacji. Ale teraz mam pytanie dotyczące UPOS. Dane RFID na mojej wizie są przechowywane (i odczytywane) bardzo podobnie do tego, jak dane są przechowywane i odczytywane z karty inteligentnej na mojej wizie. Chłodny. Otóż w specyfikacji UPOS dla SmartCardRW metoda ReadData zwraca tablicę bajtów. Świetnie, mogę po prostu zwrócić wszystkie te dane, a następnie przeanalizować je tak, jak zapragnie moje serce. Jednak RFID ma LinkedList of Tags. Cóż, to ma sens, jeśli chodzi o moją kartę Visa (przypomina mi się pytanie, które mam w odniesieniu do SmartCard, ale to jest inne pytanie), ale co z ULC i Desfire, lub z jakąkolwiek kartą Mifare. Strony, pliki, torebki nie pasują dokładnie do profilu Tag. Na przykład powiedzmy, że czytam strony 4-12 na mojej karcie ULC. Każda przeczytana strona ma 4 bajty. Czy to oznacza, że mam 9 tagów na mojej LinkedList? Czy mój identyfikator tagu to numer strony? Albo jak to się przekłada na Desfire? Otwieram aplikację 123456 i czytam plik 1 i plik 2. Czy mam 2 tagi? a jeśli tak, jaki jest mój identyfikator tagu? Przynajmniej z moją wizą _myślę_, że muszę użyć identyfikatora tagu (np. 5F24 dla mojej daty wygaśnięcia) i wartości {0x15, 0x10, 0x31} Część mnie mówi tak.. to ma sens. Inna część mnie mówi: „Jeśli tak jest, to dlaczego SmartCardRW nie ma tagów?” Więc to jest moje pytanie. Jak sformatować moje dane z tych różnych typów mediów? czy jest to zadanie mojego obiektu kontrolnego (aplikacji)? Czy więc skąd to wie? Jedyne protokoły jakie posiadam to: // Podsumowanie: // Wylicza dostępne predefiniowane protokoły tagów RFID obsługiwane przez urządzenie. [Flagi] publiczne wyliczenia RFIDProtocols { EpcClass0 = 1, RFIDSdt0Plus = 2, EpcClass1 = 4, EpcClass1Gen2 = 8, EpcClass2 = 16, Iso14443A = 4096, Iso14443B = 8192, Iso15693 = 12288, Iso180006B = 1610732416, Inne , } Jeśli dobrze użyję, wszystkie moje karty to Iso14443A. Używam ATQA i SAK, aby wiedzieć, jaki typ karty naprawdę mam. Nie ma właściwości RFID, która pozwala mi to określić. Więc jestem zgubiony.


title: Schemat blokowy rozwiązywania problemów programistycznych

text: Zauważyłem, że każdy programista implementuje nieco inny schemat rozwiązywania problemów programistycznych. Przez schemat blokowy rozumiem określony system technik, przez które programista przechodzi w określonej kolejności, próbując rozwiązać dany problem. Kilka przykładów technik: * Google "jak..." lub "... tutorial". * Wyszukaj w dokumentacji API java/msdn/apple/etc konkretną klasę lub metodę. * Wyszukiwanie w stosie przepełnia dokładnie problem z niektórymi tagami, takimi jak [iphone]/[java] itp. * Zdrzemnij się i pozwól podświadomości działać. * Debuguj. * Narysuj algorytm lub system. * Google zarejestrowany komunikat o błędzie. * Zapytaj kolegę lub kierownika. * Zadaj nowe pytanie w przepełnieniu stosu. Z Twojego doświadczenia, jaki jest najlepszy schemat blokowy do rozwiązania problemu programistycznego?


title: Czy programowanie Java zazwyczaj obejmuje więcej podklas niż C#/.NET?

text: Niedawno zacząłem przyglądać się programowaniu Androida. To przywróciło mnie do świata tworzenia oprogramowania Java. Kiedy ostatnio pracowałem z Javą, przyznam się, że OOP nie rozumiałem tak bardzo, jak (chyba) rozumiem teraz. Używając głównie C# w mojej karierze, zauważam zaskakującą różnicę w sposobie używania dziedziczenia w Javie i C#. W C# wydawało się, że w większości sytuacji można uniknąć dziedziczenia. Zadanie pod ręką można zwykle wykonać przy użyciu konkretnych klas frameworka .NET. W Javie, z tego, co zbieram z próbek kodu, wygląda na to, że framework Java dostarcza wiele interfejsów lub klas abstrakcyjnych, które następnie mają być zaimplementowane/rozszerzone przez programistę. To wydaje się być zbyt dużą różnicą, aby sprowadzać się do stylu. Jakie jest to uzasadnienie? Czuję, że nie będę pisał czystego kodu Java, dopóki tego nie zrozumiem. Czy ogranicza się to tylko do Android SDK, czy jest to podejście do programowania obiektowego obejmujące całą Javę? Innymi słowy, co takiego jest w projekcie tych dwóch języków, które (wydaje się zachęcać) do korzystania z dziedziczenia w mniejszym lub większym stopniu niż inne? Jeśli języki traktują dziedziczenie identycznie i zakładając, że moja obserwacja jest słuszna, oznacza to, że jest to związane z projektowaniem frameworków/bibliotek, a nie z językami. Jaka byłaby motywacja do tego rodzaju projektowania?


title: Jak spopularyzować Nemerle (lub inny język programowania)?

text: Każdy programista .NET zainteresowany różnymi językami programowania wie, że F# jest obecnie najpopularniejszym językiem funkcjonalnym platformy .NET. Jedynym faktem opisującym popularność F# jest ogromne wsparcie Microsoftu. Ale wcale nie jesteśmy ograniczeni F#. Istnieje kilka innych języków funkcjonalnych na platformie .NET. Jestem bardzo rozczarowany faktem, że Nemerle nie jest dobrze znany. To niesamowity język, który obsługuje trzy paradygmaty: zorientowany obiektowo, funkcjonalny i metaprogramowanie. Nie będę próbował tłumaczyć, dlaczego tak bardzo to lubię. Problem w tym, że nie mogę go używać w pracy. Myślę, że tylko naprawdę odważne firmy mogą polegać na Nemerle. To prawie nieznane, dlatego ciężko znaleźć nowych programistów do projektu. Nikt nie chce zrobić pierwszego kroku z Nemerle, jeśli może to w rozsądny sposób wpłynąć na budżet. Oto pytanie: **co mogę zrobić, aby Nemerle stał się bardziej popularny?** Oto moje pierwsze pomysły: * realizuj projekty open-source przy użyciu Nemerle; * wygłaszać prezentacje na różnych konferencjach; * pisać artykuły.


title: Jak szybko istniejące projekty powinny zostać zaktualizowane do nowszych wersji technologii je napędzających?

text: W aplikacjach o dużej skali (np. Banking Domain), jakie są kryteria aktualizacji istniejącego projektu do nowszej wersji technologii, na której jest zbudowany? Na przykład aplikacja .NET zbudowana na platformie .NET Framework 3.5 i korzystająca z zaplecza Oracle 9i. Nie ma żadnych pilnych wymagań, ale czy powinienem pomyśleć o aktualizacji do .NET 4.5 i Oracle 11g w najbliższej przyszłości? Czy warto nadążać za wersją technologiczną?


title: Jaka jest różnica w porównaniu z modelami programowania push i pull?

text: Czytałem Explained Programming Explained, Second Edition i w rozdziale 11 „Teoria ograniczeń” autorzy mówią o starym i przestarzałym **modelu rozwoju typu „push”** i drodze XP, modelu rozwoju typu **”pull”. **. Wygląda to na dość ważną koncepcję, ale zajmuje tylko bardzo mały akapit i dwa obrazy, które są jedynie ilustracjami „wodospadu” i procesu iteracyjnego, nic konkretnego w tych modelach poza podpisem obrazu. Szukałem i nie ma tego dalej w dalszej części książki. W Internecie też nie mogłem znaleźć dalszych wyjaśnień ani dyskusji na ten temat. Jeśli jedyną różnicą jest to, że jeden to **„wodospad”**, a drugi to **iteracyjny** , to po co pchać, a po co ciągnąć? Czy ktoś rozumie, jaka jest naprawdę różnica między tymi dwoma i podaje kilka dobrych przykładów?


title: Jak mogę stworzyć prototyp bardzo abstrakcyjnych ram teoretycznych?

text: Mam pomysł na semantyczny model obliczeń, który jest teoretycznie poprawny, ale też dość nietypowy. Chciałbym szybko zrobić prototyp systemu, aby udowodnić, że może działać w praktyce. Większość mojej pracy dotyczy języków programowania, więc czuję się komfortowo, tworząc mały język do celów testowych, ale zastanawiam się, czy jest to najlepsze podejście, ponieważ wymaga pewnej ilości zaawansowanej pracy nad stroną lingwistyczną, która nie jest bezpośrednio związane z modelem obliczeniowym. Jaka jest więc najlepsza strategia prototypowania dla bardzo wysokiego poziomu ram teoretycznych, takich jak ta? Czy powinienem wybrać nowy język, czy wbudowany DSL, czy inne podejście? W razie potrzeby mogę podać nieco więcej tła, ale nie musi to przeradzać się w dyskusję na temat specyfiki modelu.


title: Wydawanie oprogramowania/Korzystanie z ciągłej integracji – Z czego zdaje się korzystać większość firm?

text: Skonfigurowałem nasz system ciągłej integracji, który działa już od około roku. W końcu osiągnęliśmy punkt, w którym chcemy tworzyć wydania przy użyciu tego samego. Przed naszym systemem CI, proces(y) który był używany to: (Rozwój) -> Gotowy do wydania -> Utwórz gałąź -> (Buduj -> Napraw błędy, gdy QA je znajdzie) Pętla -> Finalna kompilacja -> Tag ( Develop) -> Gotowy do wydania -> (budowa -> naprawa błędów) Pętla -> Tag Nasza konfiguracja CI: 1 serwer dla rozwoju (DEV) 1 serwer dla qa/release (QA) Drugi jest doskonale zintegrowany z CI. Tworzę gałąź, gdy oprogramowanie jest gotowe do wydania, a gałąź nigdy się później nie zmienia, co oznacza, że kompilację można odtworzyć bez konieczności zmiany zadania CI. Każdy przyszły rozwój odbywa się na HEAD, a nawet wydania utrzymaniowe dostają zupełnie nową gałąź i zupełnie nowe zadanie, które pozostaje w systemie CI na zawsze, a nawet trochę. Pierwsza metoda jest trudniejsza do zaadaptowania. Jeśli gałąź się zmieni, kompilacji nie da się odtworzyć, chyba że użyję tagu do kompilacji [zadania na serwerze CI używają gałęzi do QA/RELEASE i HEAD do kompilacji deweloperskich]. Jeśli jednak używam tagu do budowania, muszę utworzyć nowe zadanie CI do zbudowania z tagu (utrata dziennika zmian na serwerze) lub zmienić istniejące zadanie (utrać oryginalną konfigurację zadania). Wiem, że brzmi to skomplikowanie i jeśli będzie to konieczne, przepiszę/edytuję, aby lepiej wyjaśnić sytuację. Jednak moje pytanie: [Jeśli w ogóle] jaki proces stosuje Twoja firma, aby wypuszczać oprogramowanie przy użyciu systemów ciągłej integracji. Czy to w ogóle odbywa się za pomocą systemu CI, czy ręcznie?


title: Luki w zabezpieczeniach związane z przepełnieniem bufora, których nie wykryje statyczny analizator kodu

text: W tym przykładzie użyję FlawFindera. FlawFinder to narzędzie do „analizowania” kodu statycznego, które analizuje pliki źródłowe C/C++ i wyświetla ostrzeżenia/działania w przypadku wykrycia luki. Robi to za pomocą dopasowania wzorców tekstowych do nazw funkcji i ich parametrów. Następnie dopasowuje je do wstępnie zdefiniowanej bazy danych powszechnie znanych problemów/luk związanych z różnymi funkcjami biblioteki standardowej. Np. #include <stdio.h> int main() { char str[50]; printf("Wprowadź ciąg : "); pobiera(str); printf("Wpisałeś: %s", str); powrót(0); } Spowoduje to, że FlawFinder wygeneruje trafienie w linii wywołującej funkcję `gets(str)`. Ostrzega przed potencjalnym przepełnieniem bufora i radzi programiście, aby zamiast tego używał fgets(). Podejrzewam, że w niektórych przypadkach może to spowodować fałszywe pozytywne wyniki, ponieważ w rzeczywistości nie „analizuje” kodu i kontekstu, ale po prostu dopasowuje nazwy funkcji do zestawu wstępnie zdefiniowanych ostrzeżeń. Ale zastanawiałem się, czy istnieje sytuacja, w której możesz mieć oczywistą lukę w zabezpieczeniach przepełnienia bufora, która nie zostałaby zidentyfikowana przez narzędzie takie jak FlawFinder lub ogólnie większość statycznych narzędzi do analizy kodu? W szczególności w środowisku C/C++.


title: Co sądzisz o tej praktyce obsługi wyjątków?

text: Pracuję nad projektem, który zawiera dużo tworzenia/manipulowania i odczytywania JSONObjects i tablic, ale nie w sposób systematyczny. Więc wszędzie jest kod JSON. Dla mnie jest ok, z wyjątkiem tego, że za każdym razem, gdy pracuję nad JSONObject, muszę obsługiwać JSONException. Stworzyłem więc klasę, która rozszerza JSONObject i Override znajdujące się w niej metody put/get i obsłużyłem JSONExceptions wewnątrz tej klasy. Dzięki temu mój kod jest znacznie bardziej przejrzysty i uważam, że jest to więcej niż wystarczające w moim przypadku. Co myślisz?


title: Cel używania puli stałych dla stałych niezmiennych

text: _Oryginalnie zamieszczony na atstackoverflow.com/q/23961260_ * * * Często natrafiam na następujący kod: if (myArray.length == Constants.ZERO_INT) lub if (myString != null && !myString.equals(Constants. EMPTY_STRING)) Żadna z tych rzeczy nie ma dla mnie większego sensu. Czy nie ma sensu posiadanie stałej puli w celu ułatwienia wyświetlania kodu i umożliwienia modułowości? W obu powyższych przypadkach wygląda to po prostu na niepotrzebny hałas, który nie spełnia żadnego celu. Moje pytanie: jaki jest cel używania puli stałych dla takich zmiennych, które nigdy się nie zmienią? A może to tylko kultowe programowanie cargo? Jeśli tak, to dlaczego wydaje się być powszechny w branży? (Zauważyłem to u co najmniej dwóch różnych pracodawców, z którymi pracowałem).


title: Czy podczas dziedziczenia z klasy bazowej należy ponownie przetestować argumenty konstruktora?

text: Powiedzmy, że mam coś takiego: public class BaseClass { public BaseClass(string someString) { if(someString == null) throw new ArgumentException(); } } public class ChildClass : BaseClass { public ChildClass(string jakisString) : base(jakisString) { // Czy mam to zrobic?? if(someString == null) wyrzuć nowy ArgumentException(); } } A co jeśli dziedziczę klasę, dla której nie mam źródła. Czy powinienem ponownie sprawdzić argumenty konstruktora?


title: Gdzie przechowywać niestandardowe ustawienia konfiguracyjne aplikacji internetowej

text: Obecnie pracuję nad wewnętrzną aplikacją internetową dla mojej firmy w node.js Chcemy, aby pewne ustawienia konfiguracyjne mogły być zmieniane przez kierownictwo. Na przykład niektóre etykiety wstępnie drukujemy automatycznie podczas odbioru, jeśli ilość jest mniejsza niż 5, dzięki czemu użytkownik nie musi zatrzymywać się, aby potwierdzić okno dialogowe drukowania. Co by było, gdybyśmy chcieli zmienić to na dowolne ilości mniejsze niż 10, ponieważ okazało się, że jest bardziej wydajne? Moje pytanie brzmi: jakie jest najlepsze podejście do zapisywania niestandardowych ustawień konfiguracji, jeśli mam utworzyć obszar do zmiany tych parametrów na ich pulpicie nawigacyjnym? Czy najlepszym sposobem byłoby zapisanie tych informacji w pliku tekstowym w formacie json na serwerze, a następnie po prostu analizowanie ich za każdym razem przy użyciu fs? czy jest coś, o czym nie myślę? Z góry dziękuję.


title: Czy w przeglądarce można zainstalować JQuery i podobne narzędzia?

text: Po przeczytaniu kolejnego pytania na temat JQuery i CDN, czy jest możliwe, aby narzędzia takie jak JQuery „pochodziły z” przeglądarką, zmniejszając w ten sposób/eliminując potrzebę pierwszego pobierania z CDN lub z własnego serwera hosta. W szczególności pliki JQuery są dość małe, więc możesz łatwo mieć kilka (wszystkie?) różnych wersji w ramach instalacji przeglądarki. Teraz dość uczciwie, zwiększyłoby to rozmiar instalacji, czas pobierania samej przeglądarki. Następnie witryny mogą najpierw sprawdzić „lokalne”, przed CDN (który następnie buforuje), zanim ostatecznie domyślnie pobierze się z samego serwera witryny. Jeśli jest to wykonalne, czy zostało to zrobione, a jeśli nie, dlaczego nie zostało zrobione?


title: Uczyć studentów kontroli wersji (git, mercurial)?

text: Prowadzę kurs programowania naukowego dla studentów pierwszego roku i drugiego roku, którzy po raz pierwszy widzą wiersz poleceń, ale prawdopodobnie będą potrzebować kontroli wersji na przyszłych zajęciach i karierze. Czy są dostępne zasoby do nauczania kontroli wersji (dla tych, którzy nigdy jej nie widzieli)? Jakich aspektów należy nauczać w pierwszej kolejności / podkreślać najbardziej?


title: Jak decydujesz, jaki kod umieścić w funkcji?

text: Zacząłem od skryptu, który miał kilkaset linijek. Później zdałem sobie sprawę, że potrzebuję innego skryptu, który wymagałby dużo tego samego kodu. Postanowiłem ująć pewne obszary oryginalnego scenariusza, które będą udostępniane, w definicje. Kiedy dokładnie decydowałem, co powinno być w funkcji, natknąłem się na różne rzeczy do rozważenia: 1. Co powinienem ustawić jako jej parametry wejściowe? Jeśli coś było potrzebne w funkcji, prawdopodobnie powinienem wymagać tego jako parametru, prawda? A może powinienem to zadeklarować w samej funkcji? 2. Jeśli funkcja x zawsze wymaga wyjścia funkcji y, ale funkcja y czasami jest potrzebna sama, to czy funkcja X powinna zawierać kod funkcji y, czy po prostu wywołać funkcję y? 3. Wyobraź sobie przypadek, w którym mam 5 funkcji, z których wszystkie wywołują funkcję „sub” (sub jest niezbędne, aby te 5 funkcji zakończyło swoją pracę). Jeśli 'sub' zawsze ma zwracać ten sam wynik, to czy wielokrotne wywołania tych funkcji nadrzędnych nie powielałyby tej samej pracy? Jeśli przeniosę wywołanie „sub” poza 5 funkcji, skąd mogę mieć pewność, że „sub” zostanie wywołane przed pierwszym wywołaniem dowolnej z 5 funkcji? 4. Jeśli mam segment kodu, który zawsze daje ten sam wynik i nie jest wymagany więcej niż raz w tej samej aplikacji, normalnie nie umieściłbym go w funkcji. Jeśli jednak nie jest funkcją, ale jest później wymagana w innej aplikacji, to czy powinna stać się funkcją? Przepraszam, jeśli te pytania są zbyt niejasne, ale uważam, że powinny istnieć pewne ogólne wytyczne. Nie programowałem zbyt długo i przeskakiwałem między OOP a funkcjonalnością, ale nigdy nie pamiętałem, aby przeczytać coś, co by to wyjaśniało. Czy może to być po prostu kwestia osobistych preferencji?


title: Metody Pythona a funkcje wbudowane

text: Python szeroko używa wbudowanych funkcji (lub funkcji modułu), a nie metod klasowych. A więc * `len([])` zamiast `[].length()` * `filter(f, [])` zamiast `[].filter(f)` * `str(2)` zamiast ` 2.to_str` * to samo dla `map`, `foreach` itp. Uniemożliwiają one wykonanie ładnego łączenia, które jest możliwe w innych językach, takich jak Ruby lub Scala: (przepraszam za bardzo sztuczny przykład) my_list.map(f).filter(g) .length() W Pythonie musiałbyś podzielić się na kilka wierszy: list_of_coś_innego = map(f, moja_lista) list_of_coś_else_bez_blah = filter(g, list_of_coś_innego) length = len(list_of_coś_innego_bez_blah) W pojedynczym wyrażeniu nie wygląda to na czytelne (filter(g, map(f, moja_lista)) Czy łańcuch metod jest uważany za nie-Pythonic?Czy ludzie zwykle rozszerzają klasy z tuzinem funkcji pomocniczych, aby to ułatwić?


title: Jaka jest zasada przekazywania zbiorów? Lista a Ienumerable a IQueryable

text: Robię rzeczy Entity Framework przy użyciu wzorców repozytorium, które są przekazywane do kontrolera, aby następnie zostać wywołane przez klienta przy użyciu jquery AJAX.. Czy istnieją jakieś podstawowe zasady dotyczące tego, w jakim formacie powinienem przekazywać te listy? Przypuszczam, że w kodzie serwera mógłbym po prostu przekazać Iqueryable? tak? A klientowi mógłbym przekazać wersję listy ? To jest moje pierwsze przypuszczenie.. jakieś pomysły?


title: Kiedy/Gdzie tworzyć/przypisywać obsługę zdarzeń do jego elementów?

text: Powiedzmy, że mam następujący kod // JS $(function(){ $('[data-mc=logout]').click(function(){ if (!confirm(myconfig.msg['asklogout'])) { return false; } }); $('[data-mc=ajax]').click(function(){ var target=$(this).data('target'); kliknięty tag zwraca false; }); }); które są kierowane na niektóre elementy HTML // HTML Wyloguj Strona startowa 1. Czy mam rację mówiąc, że ten kod musi być wywoływany na każdym pełne wczytanie strony? 2. a: Jeśli tak, to co jeśli jeden z elementów nie istnieje na wybranej stronie? b: Aby uniknąć błędów, konieczne jest sprawdzenie "jeśli istnieje", prawda? c: jQuery zrobi to przed dodaniem obsługi? 3. Co się stanie, jeśli jakaś zawartość zostanie zażądana za pomocą Ajax i wstawiona do DOM. Następnie ten kod musi zostać wywołany ponownie, prawda? 4. Czy jest to najlepsza praktyka, czy też kod powinien być dzielony i wywoływany po załadowaniu strony, gdzie dołączane są tylko programy obsługi zdarzeń istniejącego elementu?


title: Czy sztuczki kiedykolwiek są dobrym pomysłem?

text: Czy dodawanie sztuczek do strony internetowej to kiedykolwiek dobry pomysł? Przez sztuczkę rozumiem dodanie „fajnych” funkcji, które nie rozwiązują żadnego prawdziwego problemu. Obecnie rozważamy dodanie do witryny aplikacji do przeglądania produktów w stylu magazynu. Wiesz, jak aplikacja oparta na flashu, która pokazuje strony czasopisma, które możesz kliknąć i przewrócić strony za pomocą myszy. Osobiście uważam, że to okropny pomysł. Mamy już stronę kategorii, na której klikasz kategorię i zawiera listę produktów. Tak więc ten widok katalogu nie rozwiązuje żadnych problemów, które nie zostały jeszcze rozwiązane. Chcą go używać ze względu na jego „fajny” czynnik. Osobiście uważam, że nie jest to fajne, myślę, że jest to kłopotliwe, ale poza tym. Jestem za dodawaniem złożonych funkcji, ale tylko wtedy, gdy te złożone funkcje rozwiązują prawdziwe problemy. Myślę, że najgorszą częścią tego wszystkiego jest to, że istnieją teraz 2 ścieżki, którymi może podążać użytkownik, trasa kategorii i trasa czasopisma. Myślę, że trasa zakupów powinna być liniowa i uważam, że zbyt wiele takich opcji rozprasza i dezorientuje. InDesign ma wtyczkę, która może bardzo łatwo zrobić coś takiego. Nie będzie więc na to dużo czasu, ale nadal uważam, że to bardzo zły pomysł. Mam rację, czy jestem zbyt uparty? Czy ktoś może mi podać jakieś dobre argumenty dla którejkolwiek ze stron?


title: Czego powinienem się spodziewać jako inżynier oprogramowania C++ w firmie, która tworzy aplikacje internetowe w Pythonie?

text: Firma zatrudnia inżynierów oprogramowania C++. Kiedy wchodzę na stronę firmy, udostępniają aplikacje webowe napisane w pythonie. (Przynajmniej to widzę z zewnątrz.) Jakich obowiązków mogę się spodziewać? Czy to brzmi jak kodowanie serwera i zaplecza? Co jeszcze? W którym momencie aplikacja internetowa Pythona najprawdopodobniej przełączy się na C++?


title: Zalecenia dotyczące uruchamiania programu Visual Studio w środowisku VMWare VDI?

text: Czy ktoś ma doświadczenie w uruchamianiu programu Visual Studio w środowisku VDI? * Poleciłbyś to? * Czy odradzałbyś to? * * * **Nasze zaplecze** Nasz dział jako jeden z nielicznych w firmie nie korzysta z cienkich klientów. Szef działu naciska, że my również powinniśmy korzystać z cienkich klientów, w nadziei, że administratorzy działu pomocy i serwera będą bardziej reagowali na skargi i problemy innych działów. Zgadzam się z ideą, która się za tym kryje, ale bardzo obawiam się uruchamiania programu takiego jak Visual Studio na maszynie wirtualnej.


title: Wracanie z funkcji długiej przy pierwszym fałszywym warunku

text: Mam funkcję long (ish) o następującym wzorcu: bool func(some_type_t *p1, another_t *p2) { bool a = false, b = false, c = false, etc = false; a = (niektóre_długie && wyrażenie && \ (na to_zasługuje | jego_własna_linia)); b = (kolejne || długie_wyrażenie && \ (na które_zasługuje | jego_własna_linia)); c = i_tak && dalej; zwróć a && b && c && etc; } Jak widać, zwracana wartość jest „prawda” wtedy i tylko wtedy, gdy wszystkie flagi są prawdziwe. Mogę więc wrócić, gdy tylko jeden z nich okaże się „fałszywy”. Może, ale nie musi, być bardziej optymalna niż obecna wersja, ale chcę to zrobić, aby spełnić moje OCPD. Myślałem o umieszczeniu wszystkiego w `do{}while(0);` i wyłamaniu się na `false`, ale wygląda to dziwnie (i pamiętam, że widziałem coś takiego w tdwtf). Nie chcę wielokrotnych instrukcji powrotu lub głęboko zagnieżdżonych bloków if, a na pewno nie chcę iść na kompromis w zakresie czytelności z ogromnym, jeśli opiera się to na zwarciu. Mogę w tym przypadku żyć z `goto`, ale chcę wiedzieć, czy istnieją inne wzorce/konstrukcje używane w podobnych scenariuszach.


title: Zrozumienie, w jaki sposób zawartość pamięci mapuje się na strukturę

text: Nie jestem w stanie zrozumieć, w jaki sposób bajty w pamięci są mapowane do struktury. Mój komputer to little-endian x86_64. Kod został skompilowany za pomocą gcc 4.7.0 z dystrybucji Win64 mingw32-64 dla Win64. Oto zawartość odpowiedniego fragmentu pamięci: ...450002cf9fe5000040115a9fc0a8fe... A to jest definicja struktury: typedef struct ip4 { unsigned int ihl :4; unsigned int wersja :4; uint8_t tos; uint16_t tot_len; identyfikator uint16_t; uint16_t frag_off; // flags=3 bity, offset=13 bitów uint8_t ttl; protokół uint8_t; sprawdzenie uint16_t; uint32_t saddr; uint32_t tata; /*Opcje zaczynają się tutaj. */ } ip4_t; Kiedy wskaźnik do takiej struktury (niech będzie `*ip4`) jest inicjowany na adres początkowy powyższego wklejonego obszaru pamięci, debugger pokazuje to dla pól struktury: ip4: adres=0x8da36ce ip4->ihl: adres=0x8da36ce, wartość=0x5 ip4->wersja: adres=0x8da36ce, wartość=0x4 ip4->tos: adres=0x8da36d2, wartość=0x9f ip4->tot_len: adres=0x8da36d4, wartość=0x0 ... widzę jak ` ihl` i version są mapowane: 4 bajty dla długiej liczby całkowitej, little-endian. Ale nie rozumiem, jak mapowane są `tos` i `tot_len`; które bajty w pamięci odpowiadają każdemu z nich. Z góry dziękuję.


title: Dlaczego tak trudno jest stworzyć świetną aplikację?

text: Może lepszym sposobem na zadanie pytania byłoby: dlaczego aplikacja Facebooka jest taka zła? To nie jest pytanie specyficzne dla aplikacji Facebook na iOS, po prostu używa tego jako przykładu. Chcę wiedzieć, jak to możliwe, że firma taka jak Facebook, która ma wszystkie potrzebne zasoby, może stworzyć tak złą aplikację. Facebook jest sławny i „fajny”, więc wielu programistów, projektantów i architektów chce dla nich pracować, a on ma pieniądze, by zapłacić za najlepszych z nich. I to nie tak, że nie dba o aplikację. To nie jest jakiś mały wewnętrzny, nieważny projekt, to jedna z najczęściej pobieranych aplikacji w sklepie z aplikacjami. Ale także jeden z najbardziej narzekanych. To prowadzi mnie do mojego pytania, jak to możliwe, że podmiot z takimi zasobami i chęcią może skończyć na tak złym produkcie? Innymi słowy, jakie są główne zawiłości związane z tak dużym projektem, który może ostatecznie doprowadzić zbiór doskonale wykwalifikowanych osób do wspólnego stworzenia czegoś, co nie jest tak doskonałe? Mówiąc bardziej pozytywnie, co jest wymagane (oprócz wykwalifikowanych pracowników), aby stworzyć świetny produkt?


title: Dlaczego możemy usunąć niektóre wbudowane właściwości obiektu globalnego?

text: Czytam obecnie es5 i stwierdzam, że atrybut [[configurable]] w niektórych wbudowanych właściwościach obiektu globalnego jest ustawiony na true, co oznacza, że możemy usunąć te właściwości. Na przykład: metoda join obiektu Array.prototype ma atrybuty {[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true} Więc możemy łatwo usunąć metodę join dla Array, taką jak: usuń Array.prototype.join; alert([1,2,3].dołącz); Alert wyświetli `undefined` w moim chromie 17,firefox 9 ,ie 10,nawet ie6; W Chrome 15 i safari 5.1.1 atrybut [[configurable]] jest ustawiony na true, a wynik usunięcia również jest prawdziwy, ale końcowy wynik to nadal `function(){[kod natywny]}`. Wygląda na to, że to błąd i chrom go naprawi. Nie zauważyłem tego wcześniej. Moim zdaniem usuwanie wbudowanych funkcji w kodzie użytkownika jest niebezpieczne i wyjdzie na jaw wiele błędów podczas pracy z innymi. Dlaczego więc ECMAScript podejmuje taką decyzję?


title: Ćwiczenie 3.6: Podręcznik projektowania algorytmu Skiena

text: Przygotowuję się do rozmowy kwalifikacyjnej i staram się rozwiązać zadania ćwiczeniowe książki. > 3-6. [5] Opisz, jak zmodyfikować dowolną zrównoważoną strukturę danych drzewa, tak aby > wyszukiwanie, wstawianie, usuwanie, minimum i maksimum nadal zajmowało czas O(log n), > ale następca i poprzednik zabierają teraz czas O(1). Które operacje należy > zmodyfikować, aby to wspierać? Rozwiązanie: zachowaj dodatkowe wskazówki dotyczące następcy i poprzednika. Zaktualizuj wskaźniki przy wstawianiu i usuwaniu. Nic więcej, prawda? A może jest jakaś inna sztuczka. Dziękuję


title: Strona/aplikacja ciężka JavaScript - najlepsze praktyki w zakresie obsługi błędów

text: Rozważ aplikację, która zawiera wiele stron ze stosunkowo dużą ilością kodu JavaScript, lub aplikację w przeważającej mierze zasilaną przez JS. Skrypt obsługuje wiele rzeczy, takich jak: * Walidacja po stronie klienta * Pokazywanie/ukrywanie sekcji wpisów w razie potrzeby * Autouzupełnianie podczas wypełniania pól tekstowych * Selektory dat itp. Jeśli weźmiemy pod uwagę przypadek, że JavaScript jest wymagany do korzystania z witryny (np. nie publiczna strona internetowa), zastanawiam się, jaka byłaby najlepsza praktyka obsługi nieoczekiwanego błędu, który pojawia się w czasie wykonywania, który powoduje, że niektóre funkcje nie są już obecne (np. sekcje pozostają ukryte, kontrolki kalendarza stają się pustymi polami tekstowymi itp.). Opcje, które mogę wymyślić, to: 1. Spróbuj z wdziękiem zawieść i mieć stronę, która będzie odpowiadać bez obecności skryptu (im bardziej złożona strona/aplikacja staje się tym trudniejsza). lub 1. Spróbuj.. Przechwyć cały krytyczny kod, a w przypadku błędu wyświetl komunikat lub przekieruj do strony błędu. Jestem ciekaw, czy ktoś ma na to sugestie „najlepszych praktyk”? * * * Moja motywacja do przyjrzenia się temu pojawiła się po niejasnym błędzie we wcześniejszej wersji jQuery dla użytkownika w IE10 działającej w trybie zgodności. To pytanie nie dotyczy tego, ale efekt domina polegał na tym, że duża część kodu w obsłudze gotowego dokumentu w jQuery nie została załadowana, co spowodowało znaczną degradację użyteczności.


title: Strategie wyszukiwania wycieków pamięci w aplikacji AIR z rozszerzeniem natywnym

text: **Tło:** pracuję nad aplikacją Adobe AIR, która ma wiele aspektów. Szukam strategii znajdowania wycieków pamięci. Ogólnie rzecz biorąc, plik EXE zawiera wbudowaną maszynę JVM i natywne rozszerzenie AIR dla systemu Windows (przy użyciu języka C). Jest więc wiele ruchomych części. Jako jeden przykład używam MonsterDebugger, który śledzi środowisko wykonawcze AIR (lub Flash Player... nie jestem pewien, który). Wykorzystaliśmy go do znalezienia jednego przecieku (dotyczące słuchaczy w ActionScript). Monitoruję również plik EXE przez PowerShell i próbuję dopasować skoki pamięci do plików dziennika. **Pytania:** * Jak mogę monitorować wbudowaną maszynę JVM, która jest uruchamiana w języku C w środowisku AIR ANE? * Jakieś inne strategie? Traktuję to jako pytanie "tablicowe"; dlatego nie ma go na Stack Overflow.


title: Sposób, w jaki program java odczytuje plik od momentu jego zatrzymania

text: Pracuję nad aplikacją, która odczytuje plik dziennika, wyszukuje określony ciąg, wysyła e-maile z alertami i zapisuje dane z pliku do bazy danych. Funkcja czytania działa dobrze, ale napotykam problem, gdy zatrzymuję i ponownie uruchamiam program. Zasadniczo zawsze zaczyna się od początku pliku dziennika, więc ponownie czytam informacje, które już przeczytałem. Proszę odnieść się do poniższego przykładu. Weź pod uwagę, że mam plik dziennika z następującymi wierszami 1 0708 1200 Błąd w dzienniku 2 0708 1230 Otrzymana faktura 00001 3 0708 1231 Otrzymana faktura 00002 4 0708 0130 Błąd w dzienniku 5 0708 0135 Otrzymana faktura 00003 6 0708 0200 Otrzymana faktura 00004 7 0708 0230 Otrzymana faktura 00005 8 0708 0235 Błąd w logu W tym przykładzie powiedzmy, że uruchomiłem aplikację. Aplikacja zacznie czytać w wierszu 1 i będzie kontynuować, dopóki nie zatrzymam aplikacji (zbierając również wszystkie wiersze dodane do pliku). Powiedzmy, że zatrzymam aplikację, gdy dotrę do linii 5. Gdyby tak było, otrzymałbym wiadomość e-mail z ostrzeżeniem z linii 1 i 4. Zapisałbym również linie 2 i 3 w bazie danych. Mój problem/pytanie pojawia się, gdy chcę ponownie uruchomić aplikację. Obecnie aplikacja ponownie zacznie czytać od wiersza 1. To nie jest problem, jeśli chodzi o zapisywanie danych, ponieważ umieściłem klauzulę, aby nie zapisywać, jeśli linia została już dodana. Jednak jeśli chodzi o wysyłanie e-maili, to znowu otrzymam e-mail dla linii 1 i 4. Po całej tej wędrówce przedstawię moje aktualne pytanie/zapytanie. Czy istnieje sposób na zatrzymanie programu (całkowicie zatrzymuje proces) i rozpoczęcie czytania od miejsca, w którym przestałem czytać? Nie mogę wymyślić sposobu na zapisanie symbolu zastępczego dla pliku i użycie go po ponownym uruchomieniu programu. Rozważałem zapisanie wartości wskaźnika pliku do pliku tekstowego i odczytywanie stamtąd przy każdym uruchomieniu, ale zastanawiałem się, czy jest inny sposób lub jakieś sugestie, aby ulepszyć ten proces. Wiem, że to pytanie jest abstrakcyjne, ale sięgam po dodatkowe mózgi w tej sprawie. Trochę informacji: * To jest program Java * To aplikacja internetowa działająca na serwerze tomcat * Serwer, na którym działa tomcat, jest serwerem uniksowym * Jest to stale działająca aplikacja, która powinna być wyłączana tylko podczas problemu lub zmiany * Skanowane dzienniki są bardzo duże i mają ponad 500 000 wierszy * Dzienniki obracają się (zastępują pustym dziennikiem), gdy osiągną określony rozmiar. Oznacza to, że zapisując wskaźnik pliku, muszę się upewnić, że jestem w tym samym pliku, zanim zacznę czytać ponownie, w przeciwnym razie chcę zacząć od początku Każda pomoc / sugestie byłyby bardzo pomocne. Przepraszamy za rozwlekłe pytanie, proszę dać mi znać, jeśli coś jest niejasne. Dziękuję!


title: Przykłady substytucji Liskov

text: W przyszłym tygodniu prowadzę sesję na temat Zasady Zastępstw Liskowa i zastanawiam się, czy ktoś ma jakieś przykłady naruszeń „z okopów”? Szukam czegoś innego niż prostokąt wujka Boba - problem kwadratu i problem z uporczywym zestawem, o którym mówi w A-PPP (chociaż to świetny przykład). Do tej pory używam przykładu (bardzo prostego) List i IndexedList jako "poprawnego" użycia dziedziczenia. A dodanie Set do tej hierarchii jako naruszenie (jako że Set jest odrębny; wzmocnienie warunku wstępnego metody Add). Wziąłem również ten świetny przykład i jego rozwiązanie z tego pytania. Oba te przykłady są świetne, ale szukam czegoś bardziej subtelnego i trudniejszego do wykrycia. Do tej pory nic nie wymyśliłem, więc jeśli masz świetny, subtelny przykład, opublikuj go. Również wszelkie metafory, które pomogły ci zrozumieć LSP, byłyby bardzo przydatne.


title: Zapewnienie Jakości = inspekcje, recenzje...?

text: Studiując ten temat dogłębnie, większość książek stwierdza, co następuje: * **Zapewnienie jakości: działanie profilaktyczne. Akt inspekcji, przegląd..** * **Kontrola jakości: testowanie** Chociaż istnieją pewne wyjątki, które wspominają, że QA dotyczy tylko procesów (planowania, strategii, standardowych aplikacji itp.), które są IMHO znacznie bliższe rzeczywistej kontroli jakości, jednak nie mogę znaleźć żadnego dobrego odniesienia w Książkach Google. Uważam, że inspekcje, przeglądy, testy to wszystko **kontrola jakości**, ponieważ chodzi o sprawdzanie produktów, niezależnie od tego, czy jest to produkt końcowy, czy produkt. Problem w tym, że tak wielu autorów się nie zgadza. Byłbym wdzięczny za szczegółowe wyjaśnienie, najlepiej z referencją.


title: Jak złe jest używanie podkreślenia w nazwach?

text: Jestem głównie programistą C. W moim świecie pisanie „likeThis” lub „like_this” to tylko kwestia stylu. W Haskell jednak wydaje się, że camelCase jest ostatecznym wyborem. Osobiście uważam, że później jest znacznie bardziej czytelny. Pomyśl `pthread_mutexattr_init` a `PthreadMutexAttrInit`. Co więcej, skonfigurowałem vima do zamiany liczb i ich alternatywnych symboli (w C), ponieważ liczby są zapisywane znacznie rzadziej niż symbole takie jak nawiasy, gwiazdka, ampersand itp., co ułatwia życie na moim nadgarstku. Jako bonus, pozwala mi to napisać `tego_rodzaju_rzeczy` bez użycia klawisza Shift. Moje pytanie od programistów Haskella brzmi, czy używanie podkreślenia w nazwach jest akceptowalne dla społeczności Haskella, czy nie. Czy camelCase to niepisana zasada czy powszechna konwencja? Czy byłoby w porządku, gdyby funkcje publiczne były „jak to”, ale wewnętrznie zapisywały „takie_to”?


title: Czy ES6 pomaga rozwijać standardową bibliotekę Ecmascript?

text: Z całym hałasem związanym z EC6, zdałem sobie sprawę, że nie słyszałem o rozszerzeniu standardowej biblioteki Javascript. JavaScript ma dość rzadką bibliotekę standardową. Potrzebujesz biblioteki innej firmy, aby robić wiele podstawowych rzeczy, takich jak manipulacja datami. Wolałbym mieć więcej wbudowanych w przeglądarkę za pomocą standardowej biblioteki, niż pobierać JavaScript, aby robić podstawowe rzeczy. Czy na tym skupia się organ normalizacyjny? Czy jest to uzależnione od modułów ES6? Czy w ogóle słuszne jest omówienie "standardowej biblioteki Ecmascript" (czy standard określa standardową bibliotekę, jak powiedzmy specyfikacja C++), czy jest to coś specyficznego dla implementacji JavaScript standardu Ecmascript?


title: MVC i reguła biznesowa

text: Muszę wiedzieć, gdzie w MVC należy zastosować regułę biznesową. Wyobraź sobie sytuację: mam szkołę i muszę wygenerować kalendarz zajęć dla nauczycieli. Każdy nauczyciel ma przedmiot szkolny i jest dostępny tylko w określonych godzinach. Muszę wygenerować ten kalendarz w taki sposób, aby nauczyciele mogli występować bez konfliktów czasowych. **Oto moje pytania:** 1. W jakiej części MVC powinien być nauczyciel? Biorąc pod uwagę, że twoje dane o taktowaniu są przechowywane zewnętrznie (takie jak baza danych SQL lub XML), powinien to być model, prawda? 2. Teraz, gdzie w MVC powinna powstać reguła biznesowa, która będzie kompilować kalendarz? Jak kontroler czy biblioteka? 3. Te dane mogą być przetwarzane bezpośrednio w Modelu, a może konkretny Model do pracy z innymi Modelami? **Teraz trochę mojej wizji:** (proszę, popraw mnie, jeśli się mylę) 1. Dane od nauczycieli powinny być obsługiwane przez Modelkę. Abym mógł, na przykład, uzyskać czas dostępny dla niego i jego przedmiotu szkolnego. Tak więc nauczyciel jest wzorem. 2. Zestawienie kalendarza można wykonać w kontrolerze lub bibliotece. Pytanie: ale kontrolery powinny być powiązane z trasami, a biblioteki z API?


title: Jakie są korzyści z zamykania każdej instrukcji if za pomocą else w Pythonie?

text: Czytam Naucz się Pythona Hard Way Zed Shaw. W tej lekcji pisze: „Każde stwierdzenie „jeśli” musi mieć „inne”. Jakie są korzyści z zakończenia każdej instrukcji „if-statement” słowem „else”? Czy istnieją uzasadnione powody, by nie kończyć wyrażenia „if-statement” słowem „else”?