title: Wyodrębnić logikę domeny z formularzy, z którymi są połączone?

text: Wiele aplikacji nie robi nic, aby oddzielić interfejs od logiki domeny. Programuję od kilkudziesięciu lat i pracowałem w kilkunastu sklepach i żaden z nich nie podjął żadnych działań w celu oddzielenia interfejsu od logiki domeny. Oznacza to, że wszystkie używają wzorca Autonomous View. Jest to sprzeczne z całą mądrością, którą przeczytałem na temat oddzielania obaw. Gdy użytkownik musi wybrać element z zestawu elementów, wybór ten jest bezpośrednio powiązany z polem kombi, a nie abstrakcją. Ogromną wadą całego tego sprzężenia jest to, że uniemożliwia pisanie testów jednostkowych. Aby uruchomić jakiekolwiek testy jednostkowe, należy najpierw załadować aplikację w całości. Moim zdaniem przypadek użycia powinien być zamknięty w abstrakcji, do której później może być dołączona baza danych i interfejs. Ten rodzaj separacji uczyniłby implementację testów jednostkowych trywialną w porównaniu. Biorąc pod uwagę, że przeciętny sklep ma ściśle powiązany interfejs i logikę domeny, jak dokonać refaktoryzacji do separacji? Oznacza to, że całkowite przepisanie jest poza stołem. Mówię o tym, że przedstawiam kierownictwu propozycję dotyczącą tworzenia obiektów domeny (jakkolwiek by one nie wyglądały), które żyją w izolacji od bazy danych i interfejsu. Innymi słowy, przydałoby się wyjaśnić, w jaki sposób ta koncepcja przedstawiania użytkownikowi możliwości wyboru (coś, co jest teraz reprezentowane przez kombinacje na formularzach) i zobaczyć, jak niektóre metodologie/frameworki/wzorce reprezentują to w abstrakcyjnym sensie i jak ta abstrakcja jest następnie powiązana z interfejsem. To sprawiłoby, że zastąpienie kombinacji z polami list nie byłoby niczym więcej niż drobnym szczegółem. Jakie są dobre sposoby wyodrębniania abstrakcji (przypadków użycia domeny) z formularzy? Jakieś dobre zasoby online? Mój obecny sklep jest na .NET, chociaż interesują mnie pomysły z dowolnej platformy programistycznej. Ostatecznie muszę podać konkretny przykład (kod) tego, jak można to osiągnąć.


title: Czy etycznie mamy prawo używać adresu MAC do celów weryfikacji?

text: Piszę program lub zaczynam od samego początku, a system weryfikacji zakupów myślę jako ostatni krok. Zajmę się komputerami Mac, PC i prawdopodobnie Linuxem, jeśli wszystko zostanie powiedziane i zrobione. Będę też programował to na smartfony, używając C++ i Objective-C. (Piszę plan, zanim wejdę w to z głową) Biorąc to pod uwagę, nie proszę jeszcze o pomoc w zrobieniu tego, ale to, czego szukam, jest realistycznym pomiarem tego, czego można się spodziewać jako realnej i etycznej opcji dla systemów weryfikacji zakupów. Apple za pośrednictwem Apple Store, a niektóre inne sklepy mają własny czek „Kupiłeś to”. Chcę użyć trzybolcowego systemu weryfikacji. 1. E-mail/hasło 2. Numer seryjny od 16 do 32 znaków za pomocą znaków alfanumerycznych i symboli z wariantami wielkimi i małymi literami. 3. Adres MAC. Pierwsze dwa są w porządku, ale muszę zapytać z etycznego punktu widzenia, czy adres MAC do blokowania oprogramowania na wspomnianym sprzęcie jest nieetyczny, czy jest to sprytne? Rozumiem, że jeśli karta Ethernet zmienia się, jeśli nie jest częścią tablicy logicznej, lub jeśli tablica logiczna zmienia się, zmienia się również adres MAC, więc jeśli to się zmieni, będzie musiał zostać ponownie zweryfikowany, ale muszę zapytać, jak wszystko jest dzisiaj . Czy etyczne jest używanie adresu MAC jako klucza weryfikacyjnego, czy nie? Czy powinienem być dalej z tego rodzaju systemem weryfikacji, czy powinienem zachować go w tajemnicy? Tak, wiem, że hakerzy i inni znajdą sposoby na poznanie tego, co robię, ale w rzeczywistości właśnie dlatego pytam. Wiem, że żadna weryfikacja nie jest niezawodna, ale robienie tego tak, aby trudniej było ją złamać, to coś, co zawsze mnie interesowało, a nauka programowania rodzi te pytania, ponieważ nie chcę zakładać jednej rzeczy i dowiedzieć się nie jest to tak naprawdę akceptowane w świecie programowania jako manewr „nie powinieneś tego robić”. Właśnie uczę się programować i po prostu upewniam się, że nie łamię jakiegoś etycznego credo programisty, którego nie powinienem.


title: technika sprawdzania zmian w pliku konfiguracyjnym podczas uruchamiania programu

text: Piszę oprogramowanie do okresowego sprawdzania zasięgu określonego zakresu urządzeń sieciowych. Zakres adresów i częstotliwość sprawdzania ich osiągalności określam w pliku xml. Którą techniką mogę użyć, aby sprawdzić plik xml podczas uruchamiania programu pod kątem modyfikacji dokonanych w zakresie lub częstotliwości i wykonać niezbędną aktualizację w określonej bazie danych?


title: Kiedy rozmiar zespołu przekroczy 10, czy nadal możecie wspólnie planować wydania?

text: Czy podejmując decyzję, nad czym pracować w następnym wydaniu i szacowając czasy dla każdej historyjki użytkownika (i podzadań dla danej historii), robicie to w grupie, czy tylko menedżerowie? Czy w przypadku zespołu liczącego 10 osób jest to praktyczne? Jak dużo czasu to zajmuje?


title: Pisząc przewodnik po stylu, jakie są najlepsze przykłady łamania długich linii?

text: Piszesz przewodnik po stylu i jesteś w rozdziale o przełamywaniu długich linii. Jakie byłyby najlepsze przykłady długich linii, aby zademonstrować twoje zasady łamania długich linii. Przykłady powinny być w składni podobnej do c. Myślę, że najlepiej jest, aby przykłady były mniej lub bardziej agnostyczne dla języka. Możesz użyć funkcji specyficznych dla języka dla ekstremalnie długich linii, takich jak wiele modyfikatorów w javie, klauzula implements lub klauzula throws. Uwaga: tu nie chodzi o zasady łamania długich linii. Chodzi o zebranie najlepszych przykładów zasad łamania długich linii. Przygotowałem pytanie do regulaminu, ale najpierw chciałem zebrać najlepsze przykłady. Proszę, nie przerywaj swojej długiej linii, przynajmniej niewiele. po prostu złam go tak bardzo, aby był czytelny na tej stronie. Możesz złamać swoją długą linię do zadowolenia w tym pytaniu, gdy mamy dobry zestaw przykładowych linii. Proszę o jeden przykład na odpowiedź.


title: Czy ktoś ma jakieś doświadczenie z serwerem obrazu scene7?

text: Scene7 to serwer obrazów firmy Adobe. Wygląda na to, że używa go wiele osób. Rozważamy jego użycie. Chcę poznać doświadczenie programistów. Czy rozwijał się ból, czy to ułatwiało sprawę? Jakie miałeś doświadczenia?


title: Jakie są korzyści z braku logiki w testach integracyjnych?

text: W doskonałej stronie http://artofunittesting.com/ zobaczyłem zalecenie, aby logikę nie uwzględniać w testach jednostkowych. Czy dotyczy to testów funkcjonalnych/integracyjnych?


title: Jak wybrać dyscyplinę badawczą w informatyce?

text: Uzyskałem tytuł licencjata z CS pięć lat temu, a potem pracowałem jako inżynier oprogramowania budując Voice Over IP (VOIP) lub system nadzoru wideo. Ale teraz z jakiegoś osobistego powodu czuję, że chciałabym wrócić na studia doktoranckie. Ale teraz problem polega na tym, że nie jestem do końca pewien, którą gałąź informatyki powinienem wybrać. Ponieważ większość mojego doświadczenia zawodowego jest związana z multimediami, być może profesorowie, którzy studiują, chętniej przyjmą moją aplikację. Nie jestem jednak pewien, czy multimedia są nadal popularną domeną badawczą w Ameryce Północnej. A jeśli nie pozostało już zbyt wiele prac w tej dziedzinie, jakie są inne możliwe wybory. Interesuję się również językami programowania, ale nie wiem, czy języki programowania można uznać za obszar badawczy. Innym ważnym pytaniem jest to, kiedy już zdecydowałem, w jakiej dziedzinie chciałbym studiować. Jak mogę znaleźć najbardziej wpływowe wyniki badań w tej dziedzinie, aby uzyskać ich ogólny zarys? Innymi słowy, skoro w danej dziedzinie musi być dużo artykułów, skąd mam wiedzieć, które powinienem przeczytać. BTW: Jeśli byłeś doktorantem informatyki, jakie umiejętności lub osobowość preferują twoi profesorowie? (To ostatnie pytanie może być zbyt subiektywne, więc zignoruj je, jeśli uważasz, że jest śmieszne) Wielkie dzięki!


title: Jeśli używasz wielu komputerów, jak wszystko synchronizujesz?

text: Mam teraz 4 lub 5 komputerów i potrzebuję lepszego systemu do synchronizacji wszystkiego. Często używam git i github do synchronizowania plików do projektów programistycznych, ale są też bazy danych, pliki .bash_profile, skrypty bash itp. Czasami zamiast synchronizować pliki, po prostu ssh z jednego komputera na drugi. Ale to robi się dość chaotyczne. Niektóre z moich komputerów to Ubuntu, a inne OS X. Jakieś sugestie dotyczące zarządzania przepływem pracy obejmującym wiele komputerów osobistych?


title: Projektowanie aplikacji Pythona składającej się z wielu małych skryptów

text: Buduję aplikację, która w tej chwili składa się z wielu małych skryptów Pythona. Każdy skrypt Pythona przetwarza elementy z jednej kolejki Amazon SQS. Wiadomości e-mail trafiają do początkowej kolejki i są przetwarzane przez skrypt, a zwykle skrypt wykonuje niewielką jednostkę przetwarzania (na przykład analizuje wiadomość e-mail i przechowuje niektóre pola bazy danych), a następnie element zostanie umieszczony w następnej kolejce w celu dalszego przetwarzania , aż w końcu wiadomość e-mail zakończy przechodzenie przez różne skrypty i kolejki. To, co podoba mi się w tym podejściu, to to, że jest ono bardzo luźno powiązane. Jednak nie jestem pewien, jak powinienem wdrożyć na żywo. Czy powinienem uczynić każdy skrypt demonem, który stale odpytuje swoją kolejkę przychodzącą w poszukiwaniu rzeczy do zrobienia? A może powinien istnieć jakiś nadrzędny program lub proces orkiestracji? A może nie powinienem mieć wielu małych skryptów Pythona, ale jedną dużą aplikację? Szczegółowe pytania: Jak powinienem uruchomić każdy z tych skryptów - jako demon z jakimś rodzajem lub zrestartować monitor, aby zrestartować je na wypadek, gdyby z jakiegoś powodu przestały działać? Jeśli tak, czy powinienem mieć jakiś program, który to zaaranżuje? A może pomysł wielu małych skryptów nie jest dobry, czy bardziej sensowne byłoby posiadanie większego programu Pythona, który zawiera wszystkie funkcje i wykonuje wszystkie odpytywanie i wykonywanie funkcji dla każdej kolejki? Jakie jest obecnie preferowane podejście do demonizowania skryptów Pythona? Generalnie byłbym wdzięczny za wszelkie komentarze lub opinie na temat jakiegokolwiek aspektu tego. Dziękuję


title: Jak powiedzieć użytkownikowi, że bps oznacza bity na sekundę lub bajty na sekundę?

text: Piszę aplikację, która zajmuje się siecią i dyskiem twardym. W przypadku części sieciowej aplikacja mierzy w bitach na sekundę, podczas gdy część dyskowa mierzy w bajtach na sekundę. Staje się to problemem, ponieważ oba są skrócone do `b/s` lub `bps` wszędzie, gdzie widziałem. Jak mogę poinformować użytkownika, że jedno oznacza _bity_ na sekundę, a drugie oznacza _bajty_ na sekundę? Gdybym pisał specyfikację, mógłbym po prostu dodać przypis, ale ponieważ jest to aplikacja, nie mogę tego zrobić. Tak więc moje pytanie brzmi: **Jak mam powiedzieć użytkownikowi, że jeden oznacza bity na sekundę, a drugi oznacza bajty na sekundę, i jak stylizowałbym literę (tj. megabinarybytes to MiB, ale co to są megabinarybity)?**


title: Jakiego rodzaju wiki lub innego rozwiązania można użyć do wprowadzenia aktualizacji/zmian oprogramowania w naszym biurze?

text: Używamy sourcesafe, aby cały nasz kod był aktualny w tym, co robimy w naszym biurze, ale dochodzimy do punktu, w którym musimy napisać kilka notatek i dołączyć różne wersje naszego kodu dla różnych rzeczy (głównie aplikacje internetowe, asp. net) Czy jest do tego przeznaczona wiki? Spojrzałem na Traca, ale nie jestem pewien, czy jest najlepszy do tej pracy. Naprawdę potrzebujemy tylko miejsca, w którym możemy się zalogować i zobaczyć, że w porządku x zrobił wydanie na nasz główny serwer na y ze zmianami z. Moglibyśmy zrobić jeden, ale w tej chwili nie mamy czasu. Jakieś sugestie? Wielkie dzięki Tom


title: Jak skonfigurować te zasoby interfejsu API REST

text: Nadal jestem w fazie projektowania mojego interfejsu API REST i trochę utknąłem w konfigurowaniu zasobów. Interfejs API będzie używany przez urządzenia mobilne (Android, iOS i Windows). Komunikacja przez HTTPS. Oto funkcje obsługiwane przez API: 1. Wyświetl listę poprzednich rezerwacji 2. Wyświetl poprzednią rezerwację 3. Utwórz nową rezerwację 4. Utwórz nową anonimową rezerwację Myślałem o nazwaniu moich zasobów w następujący sposób: 1. api/ users/{id}/rezerwacje (GET) 2. api/users/{id}/reservations/{id} (GET) 3. api/users/{id}/rezerwacje (POST) 4. api/users/0/ rezerwacje (POST) Nie jestem pewien, czy zasób na 4 to dobry projekt? Również 1, 2, 3 wymagają od użytkownika posiadania konta i uwierzytelnienia. Uwierzytelnianie zostanie wykonane za pomocą tokena dostępu. Oznacza to, że użytkownik musi logować się co X okres. Czy przechowywanie identyfikatora użytkownika na urządzeniu jest złe, aby można było wykonywać żądania, w których identyfikator użytkownika jest wymagany? A może powinienem po prostu usunąć część /users/ z zasobu i pozwolić serwerowi zdecydować na podstawie tokena dostępu, który użytkownik próbuje wykonać określoną akcję? Interfejs API REST zostanie zbudowany przy użyciu ASP.NET MVC4.


title: podświetlanie składni przeglądarki

text: Niechętnie czytam kod bez podświetlania składni. Niemal codziennie pobieram lub kopiuję i wklejam duże bloki kodu z okna przeglądarki do vima tylko po to, aby zobaczyć go w kolorze. Czy istnieje bardziej eleganckie rozwiązanie? czy istnieje wtyczka do firefox lub chrome, która pozwala mi zastosować podświetlanie składni do dowolnej strony?


title: Używanie Ubuntu do tworzenia oprogramowania komercyjnego

text: Chcę używać Ubuntu do tworzenia aplikacji na Androida i php, które będę sprzedawać na rynku. O ile rozumiem, Ubuntu podlega licencji GNU GPL. Czy w takim przypadku muszę udostępnić wszystkim mój kod źródłowy?


title: Co to jest RAII? Przykłady?

text: Zawsze, gdy używany jest termin RAII, ludzie tak naprawdę mówią o dekonstrukcji zamiast inicjalizacji... Myślę, że mam podstawowe pojęcie o tym, co może oznaczać, ale nie jestem do końca pewien. Ponadto: czy C++ jest jedynym językiem RAII? A co z Javą lub C#/.NET? czy C++/CLI nie jest już RAII?


title: Zalecenia dotyczące uczenia dzieci pojęć matematycznych i umiejętności programowania?

text: Mam dwoje bardzo bystrych dzieci, które wykazują zainteresowanie nauką programowania. Oczywiście ich głównym celem jest tworzenie gier wideo. Zdecydowali, że po ukończeniu szkoły chcą zostać twórcami gier! Wydaje mi się jednak, że ostatnio dużo czytałem o tym, jak firmy programistyczne są sfrustrowane poziomem umiejętności matematycznych u kandydatów do pracy – najwyraźniej szkoły nie uczą matematyki odpowiednio do programowania. Są już inne pytania dotyczące tego, jak uczyć dzieci programowania, ale bardziej interesuje mnie tutaj doskonalenie odpowiednich koncepcji i umiejętności matematycznych dla dzieci. Jakie konkretne sugestie możesz podać? Gwoli ścisłości, nie staram się narzucać im matematyki jako obowiązku, raczej zastanawiam się, czy jest coś przyjemnego, do czego mógłbym ich nakłonić, a jednocześnie mogliby się z tego uczyć (np. podobnie jak w Lego Mindstorms jest zalecany do nauczania programowania dzieci). Pamiętaj, że jeśli ktoś poleciłby jakąś świetną książkę do matematyki, która pomogłaby ich dziecku, to też byłoby świetnie.


title: Pisanie sprawdzania pisowni podobnego do „czy miałeś na myśli”

text: Mam nadzieję, że napiszę moduł sprawdzania pisowni dla zapytań wyszukiwania w aplikacji internetowej – podobnie jak w Google „Czy chodziło Ci o?” Algorytm będzie luźno oparty na tym: http://catalog.ldc.upenn.edu/LDC2006T13 Krótko mówiąc, generuje kandydatów do korekty i ocenia je na podstawie tego, jak często pojawiają się (wraz z sąsiednimi słowami w zapytaniu) w ogromnym zbiór danych znanych n-gramów - Google Web 1T - który zawiera ponad 1 miliard 5-gramów. Nie używam zestawu danych Web 1T, ale buduję swoje n-gramowe zestawy z własnych dokumentów – około 200 tys. dokumentów i szacuję, że zostaną wygenerowane dziesiątki lub setki milionów n-gramów. Ten rodzaj procesu przesuwa granice mojego zrozumienia podstawowej wydajności obliczeniowej - czy mogę po prostu załadować moje n-gramy do pamięci w tablicy mieszającej lub słowniku po uruchomieniu aplikacji? Czy jedynym czynnikiem ograniczającym jest ilość pamięci w komputerze? A może szczekam na niewłaściwe drzewo? Być może umieszczenie wszystkich moich n-gramów w bazie danych wykresów z pewnego rodzaju optymalizacją zapytań drzewa? Czy to może być wystarczająco szybkie?


title: Czysto techniczne powody, dla których PHP jest pierwszym wyborem?

text: Wiem, że może to wyglądać jak płomień / troll, ale mam nadzieję, że uwierzysz mi na słowo, że nie jest to moim zamiarem. Próbuję tylko zrozumieć fenomen PHP. Po przyjrzeniu się wielu problemom technicznym związanym z projektowaniem języka PHP trudno mi znaleźć jakiekolwiek odkupiające zalety techniczne, w których PHP przewyższa wszystkie inne języki. Zanim doszedłem do wniosku, że po prostu nie byłoby powodu, aby wybrać PHP jako język programowania **z przyczyn czysto technicznych** , chciałbym zapytać, czy wszystkie czynniki nietechniczne były równe (np. jaki język programiści już wiesz, jakie języki oferuje dostawca hostingu, język istniejącego kodu, koszt, licencja, korporacyjne nadanie itp.), czy byłby jakiś **nowy** system oprogramowania, który wskazywałby, że PHP jest pierwszym wyborem do rozwoju? Jeśli tak, to jaką przewagę techniczną ma PHP nad **wszystkimi** innymi językami, które skłoniłyby Cię do jego wyboru? **EDYCJA:** Nie interesuje mnie porównywanie PHP „po wyjęciu z pudełka” z innymi językami „po wyjęciu z pudełka”. Jeśli PHP ma pewną cechę "po wyjęciu z pudełka", którą inny język ma dopiero po zainstalowaniu jakiegoś łatwo dostępnego dodatku, to **nie** jest uważane za zaletę PHP dla celów tego pytania.


title: Najlepsza reprezentacja względnych dat i czasów trwania

text: Używam ISO 8601 do reprezentowania dat i czasu trwania i wszystko jest w porządku. Ale teraz muszę przedstawić względne daty i czasy trwania, takie jak: * Data pierwszego dnia, o północy, następnego tygodnia * Cały okres ostatniego miesiąca. W rzeczywistości muszę mieć do tego składnię, wolę standardową. Nie potrzebuję kodu (mam jeszcze cały kod), ale składnia do przechowywania dat lub czasów bliskich, tak jak ISO 8601 używa "P1Y2M10DT2H30M" na czas trwania. Dziękuję...


title: Koszt ciężkiego autoloadowania w aplikacjach PHP?

text: Mam aplikację, która wykonuje ciężkie automatyczne ładowanie, co oznacza, że tylko dwie klasy są "włączone" bezpośrednio. Dla każdego modułu, który posiada aplikacja (w sumie 14 modułów), moduł ten definiuje autoloader. Chciałem jednak wiedzieć, czy ładowanie wszystkich klas za pomocą autoloaderów jest zbyt czasochłonne i co mogę zrobić, aby to przyspieszyć. Na marginesie, w tym momencie nie doświadczam powolnej aplikacji, po prostu próbuję przewidzieć, czy może się to zdarzyć. Z góry dziękuję


title: Wdzięczny za opinie na temat języka i frameworka dla mojej aplikacji Windows

text: Przeczytałem kilka powiązanych pytań na tej stronie, w tym: Jakiego języka powinienem się nauczyć, jeśli chcę programować w systemie Windows i Jak rozpocząć programowanie w systemie Windows, ale czuję, że moja sytuacja jest nieco inna i mam kilka innych pytań, które Chciałbym kilka opinii na temat. Jestem dojrzałą studentką na studiach licencjackich z informatyki. Niedługo muszę wybrać pomysł na projekt na ostatni rok. Po opuszczeniu uniwersytetu mam na uwadze stworzenie konkretnego produktu dla systemu Windows (aplikacja desktopowa - z obsługą sieci Web), a mój ostatni rok projektu postrzegam jako okazję do rozpoczęcia pracy nad tym. W szczególności chcę zająć się wszystkimi trudnymi kwestiami, takimi jak sieć i bezpieczeństwo. W tej chwili nie przejmuję się kompatybilnością międzyplatformową, ponieważ rynek tego produktu używa systemu Windows, ale muszę wybrać język i framework, których powinienem używać wkrótce. Posiadam certyfikat w Javie (OCPJP (kiedyś SCJP)) i na uniwersytecie używaliśmy Javy, C i Occam (uurrghh). Myślałem jednak o nauce C++, aby móc korzystać z frameworka Qt, który wygląda całkiem nieźle. Mam jednak pewne obawy. Czy szybciej byłoby używać C#, a nie C++ i Qt? Jakie byłyby zalety korzystania z Qt? Mam nadzieję, że przyspieszy to rozwój i sprawi, że moje oprogramowanie będzie bezpieczne i trudne do złamania. Mam świadomość, że za przywilej muszę zapłacić (nie chcę korzystać z opcji darmowej, bo musiałbym udostępnić swój kod źródłowy). Jeśli użyję C#, nauczę się frameworka .NET, który jest w zasadzie wieloma klasami pomocniczymi, aby przyspieszyć rozwój systemu Windows, czy to prawda? Rozumiem, że mogę używać kilku różnych języków z .NET i wszystkie zostaną skompilowane do tego samego języka pośredniego. Jaka jest różnica między biblioteką klas Microsoft Foundation Class Library a Windows Presentation Foundation? Czy ktoś zna zalety korzystania z któregoś z nich? Nie sądzę, aby oprogramowanie było zbyt skomplikowane. Profesjonalnie używałem 4 różnych produktów tego typu, które chcę wykonać (jestem dojrzałym studentem), a rzeczywista część przetwarzania nie musi być najnowocześniejsza, ponieważ zapotrzebowanie nigdy nie jest tak duże nawet w przypadku nowoczesnych komputerów o dość niskim poborze mocy ( oczywiście nadal będę starał się być wydajny), ale w większości z nich zaskakująco brakowało ogólnego projektu i użyteczności i mam nadzieję, że zrobię to lepiej. Chcę tylko mieć pewność, że dobrze wygląda i że mogę ją szybko rozwinąć. Czy powinienem kontynuować czytanie Visual C++ Ivora Hortona, który obejmuje C++, podstawy programowania Windows, Windows Forms i Microsoft Foundation Classes? A może ktoś ma lepszą sugestię. Dostępny jest ograniczony czas, więc muszę zdecydować, jakich narzędzi użyję teraz do gotowego produktu. Bardzo mi przykro, że ten post jest tak długi, ale bardzo ważne jest dla mnie, aby uzyskać kilka dobrych rad na ten temat. Wielkie dzięki :) Edycja: Dobry artykuł na StackOverflow Kolejna edycja: Czy zarządzanie pamięcią jest czymś automatycznym podczas programowania w C++/Qt? Rozumiem, że jeśli używasz .NET z C++, to wszystkie zbierane są śmieci.


title: Właściwości platformy .NET — użyć zestawu prywatnego lub właściwości tylko do odczytu?

text: W jakiej sytuacji powinienem użyć prywatnego zestawu we właściwości, zamiast ustawić ją jako właściwość tylko do odczytu? Weź pod uwagę dwa bardzo uproszczone przykłady poniżej. Pierwszy przykład: Klasa publiczna Osoba Private _name As String Nazwa właściwości publicznej As String Pobierz Return _name End Pobierz Private Set(ByVal value As String) _name = wartość End Set End Property Public Sub WorkOnName() Dim txtInfo As TextInfo = _ Threading.Thread. CurrentThread.CurrentCulture.TextInfo Me.Name = txtInfo.ToTitleCase(Me.Name) End Sub Klasa końcowa // ---------- public class Osoba { private string _name; ciąg publiczny Nazwa { get { return _name; } zbiór prywatny { _nazwa = wartość; } } public void WorkOnName() { TextInfo txtInfo = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo; this.Name = txtInfo.ToTitleCase(this.Name); } } Drugi przykład: Klasa Public AnotherPerson Private _name As String Public ReadOnly Właściwość Nazwa As String Get Return _name End Get End Property Public Sub WorkOnName() Dim txtInfo As TextInfo = _ Threading.Thread.CurrentThread.CurrentCulture.TextInfo _name = txtInfo.ToTitleCase (_name) End Sub End Class // --------------- public class AnotherPerson { private string _name; ciąg publiczny Nazwa { get { return _name; } } public void WorkOnName() { TextInfo txtInfo = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo; _name = txtInfo.ToTitleCase(_name); } } Obie dają takie same wyniki. Czy jest to sytuacja, w której nie ma dobra i zła, a to tylko kwestia preferencji?


title: Tworzenie aplikacji p2p dla systemu Linux

text: Rzucałem pomysłem w starym stylu tworzenia prostej aplikacji do czatu p2p, która działałaby w środowisku linux i prawdopodobnie byłaby napisana w C. Minęło trochę czasu, odkąd napisałem aplikację, która nie była aplikacją internetową, a ja chciałem zrobić więcej z C. Zawsze byłem ciekawy, jak działają aplikacje p2p, więc uważam, że byłby to dobry sposób na pogłębienie mojego zrozumienia zarówno języka programowania C, jak i architektury aplikacji p2p. Jedynym problemem jest to, że nie bardzo wiem od czego zacząć. Zrobiłem trochę wstępnych badań i znalazłem tutaj następującą bibliotekę C dla aplikacji p2p. W tej chwili moje pytania brzmią: 1. Co jeszcze powinienem zbadać przed rozpoczęciem projektu? 2. Czy ktoś wie o innych bibliotekach C dla aplikacji p2p? 3. Czy ktoś ma jakieś dobre łącza lub zna dobre książki o protokołach p2p? Moim ostatecznym celem byłoby posiadanie pliku wykonywalnego, który dwie osoby mogłyby otworzyć w swoim systemie i komunikować się tam iz powrotem… to proste, wiem, ale moim głównym celem jest tutaj edukacja. Wszelkie inne informacje na ten temat również są mile widziane! Dziękuję :)


title: Jak zwracać większą uwagę na szczegóły jako programista?

text: Czy są jakieś zasoby, dzięki którym programista może poświęcić więcej uwagi szczegółom? (Szczególnie skrajne przypadki lub małe błędy w kodzie, szczegóły w opisie problemu, konsekwencje pewnych zmian w dużym systemie) Kilka myśli do tej pory: \- Jakieś książki? \- Jakieś ćwiczenie (np. po prostu rozwiązywanie problemów matematycznych [profesor na studiach wspomniał o matematyce, która uczy zwracania uwagi na szczegóły... chociaż inny powiedział, że programowanie w asemblerze też uczy szczegółów...])? \- Jakiś rodzaj metody rozkładania problemów/myślenia, aby zmusić uwagę do każdego szczegółu? \- Jakiś sposób na zapisanie szczegółów, aby później ich nie zapomnieć. Przykład tego, co mam na myśli: ktoś zadał dobre pytanie potencjalnemu programiście, ile 7 jest między 0 a 100. Zrobiłem to szybko i pomyślałem o 10, zapominając o 70-76 i 78-79. Zasadniczo jest to po prostu brak dbałości o szczegóły .... Inny przykład jest podczas wywiadu dotyczącego kodowania białej tablicy, był łatwy problem i chociaż początkowa wersja była poprawna, ponieważ staraliśmy się, aby była wydajniejsza, robiłem coraz mniej błędy. Kiedyś zauważyłem, że łatwo było mi je naprawić, ale krępujące było wskazywanie ich przez ankietera, zamiast samodzielnego znajdowania problemów i ich naprawiania. Innym przykładem jest po prostu kompilacja kodu. Początkowo pisałbym kod, przejrzałbym go raz przed kompilacją i wyłapałbym wiele błędów. Teraz brakuje mi o wiele więcej błędów, a kompilator (lub interpreter) znajduje znacznie więcej błędów niż kiedyś. Zauważyłem też, że kiedy po raz pierwszy skończyłem studia, o wiele łatwiej było trzymać się mnóstwa szczegółów, podczas gdy teraz nawet te, o których początkowo wiedziałem, wydają się zapominać więcej w miarę upływu czasu. Dlatego oprócz zwracania uwagi na szczegóły nowych problemów, mogłem również korzystać z zasobów do śledzenia szczegółów starszych problemów bez konieczności polegania na pamięci.


title: Jak podejść do tłumaczenia dokumentacji dla projektu open source?

text: Zamierzam rozpocząć mały projekt open source z przyjaciółmi z całego świata. Ponieważ wiem, że jedną z najważniejszych rzeczy w projektach open source jest pomoc użytkownikom w korzystaniu z samego projektu, chcę stworzyć wiki/tutoriale/cokolwiek w różnych językach. Jakie są najlepsze narzędzia lub ogólny sposób myślenia/działania w zarządzaniu tłumaczeniami? Czy możesz mi doradzić?


title: ASP.NET Mvc3 — czas istnienia aplikacji/żądania i wstrzykiwanie zależności

text: Myślałem o pytaniu na SO, ale wydaje się, że jest to bardziej pytanie typu „koncepcja” niż pytanie typu „problem”. Jeśli trzeba go przenieść, zrób to. W każdym razie trudno mi znaleźć proste informacje na ten temat. Używam Unity.Mvc3 do ustawiania iniekcji zależności dla kontrolerów i innych składników, których mogą używać kontrolery. Z tego, co rozumiem ze strony Unity.Mvc3, wszystko, co jest `IDisposable` zostanie usunięte na końcu żądania z kontenera, jeśli jest zarejestrowane w `HierarchicalLifetimeManager`. Czy to oznacza, że rzeczy zarejestrowane za pomocą `ContainerControlledLifetimeManager` będą rejestrowane jako ta sama instancja dla wszystkich żądań tak długo, jak serwer/aplikacja jest uruchomiona? Czy mogę zarejestrować instancję za pomocą `HierarchicalLifetimeManager` czy musi to być typ? Jak działają okresy istnienia aplikacji/sesji/żądania? Pytam, ponieważ pochodzę z PHP, a PHP nie ma zakresu poza żądaniem, więc jest to oczywiście coś, z czym muszę się oswoić.


title: Napisałem podanie do przyjaciela. Kto jest właścicielem oprogramowania?

text: Przyjaciel poprosił mnie o napisanie dla niego aplikacji. Zrobiłem, a on mi zapłacił. Nie było pisemnej umowy. Mieszkam w Wielkiej Brytanii, a on mieszka w Kanadzie. Moje pytanie brzmi: kto jest teraz właścicielem oprogramowania? Czy mój przyjaciel może robić i sprzedawać kopie bez mojej zgody? Czy mogę zrobić to samo? Pytam o to, bo inna osoba też chce go kupić, ale znajomy nalega na otrzymanie jakiejś prowizji od sprzedaży, ponieważ oprogramowanie zostało oryginalnie napisane na jego prośbę.


title: Jakiego zestawu narzędzi użyć do gry w karty?

text: Jestem w tym nowy i zastanawiałem się, czy ktoś mógłby zasugerować najbardziej odpowiedni interfejs API do stworzenia gry karcianej, która jest: * wieloplatformowa * dla dwóch graczy * peer-to-peer * zdolna do układania kart (png pliki) * open-source * przyjazny dla początkujących (dobrze udokumentowane) Jeśli pomaga udzielić lepszej odpowiedzi, gra jest oparta na _Set_ : http://www.setgame.com/set/puzzle_frame.htm ### Edytuj 1 Będzie to samodzielna aplikacja kliencka korzystająca z C# lub dowolnego innego odpowiedniego języka dla wieloplatformowych aplikacji opartych na GUI (np. Ruby, Java & Swing, Python). ### Edytuj 2 Istnieje wiele zestawów narzędzi wymienionych na stronie: * http://content.gpwiki.org/index.php/Game_Engines To pomaga, ale który zestaw narzędzi byłby najbardziej odpowiedni?


title: Jakiego algorytmu powinienem użyć, aby znaleźć najkrótszą ścieżkę na tym wykresie

text: Mam problem z obliczaniem najkrótszych ścieżek na grafie nieważonym i nieskierowanym. Którego algorytmu używam do obliczenia najkrótszej ścieżki między węzłem A a węzłem B przechodzącej przez węzeł C na grafie nieskierowanym i nieważonym?


title: W ASP.NET MVC/Razor, jak dodać inicjator JavaScript do "kontrolki"?

text: Właściwie mam już co najmniej 3 różne rozwiązania problemu, po prostu nie lubię żadnego z nich z różnych powodów. W ASP.NET MVC/Razor nie ma już kontrolek, w takim sensie, w jakim były w ASP.NET. Kiedyś kontrolka ASCX była spleciona z widokiem + kontrolerem, więc rozumiem. Zamiast tego mamy pomocników html, które emitują ciągi, fragmenty html. Załóżmy, że chcę utworzyć metodę pomocnika w bibliotece, która tworzy selektor daty jQuery UI. Pierwsze rozwiązanie. Po prostu piszę metodę, która najpierw tworzy pole tekstowe (właściwie mogę po prostu wywołać `TextBoxFor`, ponieważ robi to samo dla mnie), a następnie tworzy mały fragment kodu JavaScript, który wywołuje `$('#textboxid').datepicker( )”. Wtedy mogę to nazwać w moich widokach Razor i to działa. Nie podoba mi się fakt, że rzeczy związane z widokiem są robione w kodzie, a nie w Razor, ale niestety wszystkie domyślne szablony edytorów są takie. Nie podoba mi się fakt, że po każdym polu tekstowym w wyjściowym html będzie dużo małych fragmentów skryptu. A mój fragment kodu może stać się skomplikowany, jeśli inicjator JS miałby wiele parametrów, wyglądałby brzydko, byłyby problemy z ucieczką ciągów itp. Microsoft promuje dyskretną architekturę JavaScript. Mógłbym po prostu umieścić klasę znacznika CSS na moim polu tekstowym, dodać kilka atrybutów danych w razie potrzeby i wyemitować tylko jeden kod JavaScript, który zamienia wszystkie moje pola tekstowe w selektory daty na podstawie klasy znacznika CSS. Ta ostatnia część jest głównym problemem, do tego potrzebuję imperatywnego kodu JS. Dyskretny AJAX i walidacja działają dobrze, ponieważ w ogóle tego nie potrzebują, po prostu reagują na zdarzenia interakcji użytkownika. Tak nie jest, muszę zmienić moje pola tekstowe na selektory dat, gdy tylko się pojawią. Mogą też pojawiać się dynamicznie w edytowalnej siatce lub po wywołaniu AJAX, w dowolnym momencie. Trzecie rozwiązanie, widok należy wykonać w Razor, więc zróbmy to w Razor, jako szablon edytora. Problem w tym, że mówimy tutaj o bibliotece klas. W przeszłości widziałem brzydkie hacki do osadzania plików .cshtml jako zasobów osadzonych lub kompilowania ich do rzeczywistego kodu C# podczas kompilacji. Ostatnio sprawdzałem, wyglądały na brzydkie hacki i nie były obsługiwane. Czy jest inne rozwiązanie? Jeśli nie, który z powyższych jest najładniejszy, najbardziej zgodny z najnowszymi konwencjami kodowania, pomysłem Microsoftu itp.?


title: Jak wzrost złożoności systemów wpłynął na kolejne generacje programistów?

text: Jako „nowy” programista (pierwszy linijkę kodu napisałem w 2009 r.) zauważyłem, że stosunkowo łatwo jest stworzyć program, który prezentuje dziś dość złożone elementy, np. .NET Framework. Tworzenie interfejsu wizualnego lub sortowanie listy można teraz wykonać za pomocą niewielu poleceń. Kiedy uczyłem się programować, równolegle uczyłem się również teorii komputerowej. Rzeczy takie jak algorytmy sortowania, zasady współdziałania sprzętu, algebra Boole'a i maszyny skończone. Zauważyłem jednak, że jeśli kiedykolwiek chciałem przetestować jakąś bardzo podstawową zasadę, której nauczyłem się w teorii, zawsze było o wiele trudniej zacząć, ponieważ tak wiele technologii jest przesłoniętych przez takie rzeczy, jak biblioteki, frameworki i system operacyjny. Stworzenie programu wydajnego pod względem pamięci było wymagane 40/50 lat temu, ponieważ nie było wystarczającej ilości pamięci i było kosztowne, więc większość programistów zwracała szczególną uwagę na typy danych i sposób obsługi instrukcji przez procesor. W dzisiejszych czasach niektórzy mogą twierdzić, że ze względu na zwiększoną moc przetwarzania i dostępną pamięć te obawy nie są priorytetem. Moje pytanie brzmi, czy starsi programiści postrzegają takie innowacje jako dar niebios lub dodatkową warstwę do abstrakcji i dlaczego mogą tak sądzić? A czy młodsi programiści skorzystają na uczeniu się programowania niskopoziomowego, zanim zaczniesz odkrywać obszary ekspansywnych bibliotek? Jeśli tak, to dlaczego?


title: Czy wzór wagi muchowej jest dobrym wyborem bezpieczeństwa do zarządzania uprawnieniami?

text: Projektuję system i wymaga on możliwości przyszłej rozbudowy, aby móc korzystać z pewnego rodzaju systemu uprawnień. Zastanawiam się, czy wzorzec wagi muchowej byłby dobrym wyborem do wdrożenia tego. W tej chwili nie odpowiadam za wdrożenie, ponieważ jest to tylko prototyp, a nie prototypujemy żadnych części, które wymagają odpowiedniego systemu. Jednak ze względu na zapotrzebowanie na przyszłą rozszerzalność na części, które wymagają zarządzania uprawnieniami, interfejs musi być solidny. Oznacza to, że ostatecznie będzie to eksperyment myślowy, a nie realna część tego, nad czym muszę popracować. Jednak muszę być w stanie wyjaśnić i uzasadnić mój projekt w tym obszarze aplikacji. Na korzyść korzystania z nich jest to, że możesz zdefiniować uprawnienia, symbolizując je przez klasę tokena, reprezentowaną we wzorcu wagi muchowej. Jeśli masz do czynienia z setkami użytkowników, uprościłoby to nieco obsługę i wydawanie praw, które posiada użytkownik, oraz wymaganych uprawnień, których użytkownik potrzebuje do działania w systemie; a także wykorzystanie pamięci przez prawa przypisane wszystkim użytkownikom. W systemie, który mam na myśli, pewnego rodzaju metoda fabryczna przypisze prawa potrzebne na czas budowy. Ponieważ nie mam doświadczenia w projektowaniu z myślą o bezpieczeństwie, mam paranoiczny tok myślenia, którego nie mogę określić, czy jest to uzasadnione, z punktu widzenia bezpieczeństwa. Wspólny wskaźnik może zostać przejęty przez „złych intruzów”, aby uzyskać prawa, których nie powinni otrzymywać. To jest główny argument przeciwko używaniu wagi muchowej, która ciągle mnie denerwuje. Nawet jeśli „jak” jest nieokreślone, a ja nie wiedziałbym, jak ktoś mógłby to zrobić. (brak doświadczenia w sposobie myślenia o bezpieczeństwie lub to działa. Jednak tak naprawdę nie szukam wykładu o bezpieczeństwie poza bezpiecznym używaniem wzorców, chyba że jest to umotywowane i wyraźnie związane z pytaniem) P: Czy wzorzec wagi muchy jest odpowiednim wzorcem zarządzać reprezentacją praw użytkownika (lub innego typu danych „rozdawanych”) w projektowaniu systemu oprogramowania, który musi być zabezpieczony w fazie projektowania? Czy użycie obiektów wagi muchowej jako reprezentacji uprawnień stwarza większe zagrożenie bezpieczeństwa niż inne wzorce (mógłbym również użyć do tego łańcucha dekoratorów, nawet jeśli zajęłoby to więcej pamięci) podczas pracy z uprawnieniami?


title: Proszę o pomoc w zrozumieniu związku między rozmiarem pliku skryptu a zużyciem pamięci?

text: Programuję w PHP i mam plik dołączany, który muszę dołączyć jako część mojego skryptu. Plik dołączany ma rozmiar 400 MB i zawiera tablicę obiektów, które są niczym innym jak ustawieniami konfiguracyjnymi dla większego projektu. Oto przykład zawartości: $obj = new obj(); $obj->nazwa = "mojanazwa"; .... $objs[$obj->nazwa] = $obj->nazwa; {powtórz} .... return $objs; Ten proces powtarza się 40 000 razy i ostatecznie ma długość 650 000 linii (plik jest oczywiście generowany dynamicznie). Jeśli po prostu próbuję załadować plik, który ma 400 MB, to dlaczego użycie pamięci wzrosłoby do 6 GB? Nawet gdyby plik został załadowany do pamięci, czy nie zajmowałby tylko 400 MB pamięci RAM?


title: Jaki jest lepszy sposób na projektowanie elastycznych menu?

text: Chciałbym mieć takie menu w surfdome. Nie mam na myśli interfejsu użytkownika, ale elastyczność tego menu. Postaram się to wyjaśnić. Mam kilka produktów. Chcę dopasować te produkty do niektórych kategorii i mieć wiele rodzajów menu opartych na tych kategoriach. np. _(w [] są kategorie, aw () są produkty)_ Menu takie jak [Mężczyźni] -> [Buty] -> [Bieganie] -> (Produkt1) [Mężczyźni] -> [Akcesoria] -> [Bieganie ] -> (Produkt2) [Kobiety] -> [Buty] -> [Bieganie] -> (Produkt3) [Kobiety] -> [Akcesoria] -> [Bieganie] -> (Produkt4) lub [Bieganie] -> [Mężczyźni ] -> [Buty] -> (Produkt1) [Bieganie] -> [Kobiety] -> [Buty] -> (Produkt3) [Bieganie] -> [Mężczyźni] -> [Akcesoria] -> (Produkt 2) [Bieganie] -> [Kobiety] -> [Akcesoria] -> (Produkt 4) lub [Buty] -> [Mężczyźni] -> [Bieganie] -> (Produkt1) [Buty] -> [Kobiety] -> [Bieganie] -> ( Produkt3) [Akcesoria] -> [Mężczyźni] -> [Bieganie] -> (Produkt2) [Akcesoria] -> [Kobiety] -> [Bieganie] -> (Produkt4) ... Co myślę, że można to zrobić za pomocą `system tagów`, ale chciałbym zapytać, czy ktoś wie, jak to zrobić?


title: Metody funkcjonalne na kolekcjach

text: Uczę się Scali i jestem trochę oszołomiony wszystkimi metodami (funkcjami wyższego rzędu) dostępnymi w kolekcjach. Które z nich dają więcej wyników niż oryginalna kolekcja, które dają mniej, a które są najbardziej odpowiednie dla danego problemu? Chociaż studiuję Scala, myślę, że dotyczy to większości nowoczesnych języków funkcjonalnych (Clojure, Haskell), a także Javy 8, która wprowadza te metody w kolekcjach Javy. Konkretnie, teraz zastanawiam się nad mapą z filtrem vs. fold/reduce. Byłem zachwycony, że użycie foldRight() może dać taki sam wynik jak map(...).filter(...) z tylko jednym przechodzeniem podstawowej kolekcji. Ale przyjaciel zauważył, że foldRight() może wymuszać przetwarzanie sekwencyjne, podczas gdy map() jest bardziej przyjazny dla przetwarzania przez wiele procesorów równolegle. Może dlatego mapReduce() jest tak popularny? Mówiąc ogólniej, nadal czasami jestem zaskoczony, gdy łączę kilka z tych metod razem, aby odzyskać List(List()) lub przekazać List(List()) i odzyskać tylko List(). Na przykład, kiedy powinienem użyć: collection.map(a => a.map(b => ...)) vs. collection.map(a => ...).map(b => ...) Polecenie for/yield nie pomaga w tym zamieszaniu. Czy pytam o różnicę między operacją "zwijania" i "rozwijania"? Czy próbuję połączyć zbyt wiele pytań w jedno? Myślę, że może istnieć podstawowa koncepcja, która, jeśli ją zrozumiem, może odpowiedzieć na wszystkie te pytania lub przynajmniej powiązać odpowiedzi ze sobą.


title: Dlaczego tablice w Javie nie przesłaniają funkcji equals()?

text: Pracowałem kiedyś z `HashSet`, który ma to napisane w specyfikacji: > [add()] dodaje określony element e do tego zestawu, jeśli ten zestaw nie zawiera > elementu e2 takiego, że (e==null ? e2==null : e.equals(e2)) Używałem `char[]` w `HashSet`, dopóki nie zdałem sobie sprawy, że na podstawie tej umowy nie jest lepszy niż `ArrayList`! Ponieważ używa nie nadpisanego `.equals()`, moje tablice będą sprawdzane tylko pod kątem równości referencji, co nie jest szczególnie przydatne. Wiem, że istnieje `Arrays.equals()`, ale to nie pomaga, gdy używa się kolekcji takich jak `HashSet`. Więc moje pytanie brzmi, dlaczego tablice Java _nie_ zastępują równania?


title: Zasoby lub porady przydatne w C# z Pythona 2.7.1

text: W głębi serca jestem małpą pytonem. Jem, piję, śnię i śnię w nim, i odkryłem, że nauczyło mnie to znacznie więcej o pisaniu kodu wysokiej jakości niż mój dyplom z informatyki, jednak zostałem poproszony o napisanie projektu automatycznego testowania w C# w pracy, aby połączyć się w z Team Foundation Server. Po spojrzeniu na język wygląda to bardzo podobnie. Zauważyłem, że wygląda na statycznie wpisane, ale nigdy nie miałem z tym problemów w C++ lub Adzie. Próbowałem szukać w Internecie samouczków itp., ale wydaje się, że wszystkie zaczynają się od podstaw. Miałem nadzieję, że uda mi się znaleźć informacje o różnicach i tłumaczeniach kodu itp. Podobne do artykułu Norviga lisp to python. Wyszukiwanie w google nie przyniosło mi żadnych wyników, więc miałem nadzieję, że będę miał trochę więcej szczęścia. * * * Jako małe tło mam około 4 lata Pythona, 2 C++, ale to było kilka lat temu, i fragmenty wiedzy o innych językach. Staram się już nie wspominać o BASIC... To z powodu mojego rozszerzonego obecnego doświadczenia z pythonem chciałbym porównać z nim C#.


title: Jak wpisać plakietki do mojego projektu open source?

text: Stack Overflow ma niesamowity zestaw odznak, które rozpoznają wkład osób w społeczność i pozwalają na rozwój możliwości jednostki, im bardziej wnosi wkład. Jakich technik mogę używać w projektach typu open source lub kodowania? Na przykład, wkład danej osoby w bazę kodu daje jej odznaki wraz z coraz większym zestawem możliwości w projekcie? > ### Notatka moderatora > > Podanie linku do rekomendacji nie wystarczy: proszę podać szczegółowe > odpowiedzi na temat _jak_ włączyć elementy grywalizacji do projektu > open source. Każda odpowiedź, która tego nie zrobi, **zostanie usunięta.** > > Zobacz Dobry subiektywny, Zły subiektywny, aby uzyskać więcej informacji na temat typów > pytań i typów odpowiedzi, których szukamy na programistach.


title: Projekt strony korporacyjnej

text: Przeprojektowujemy naszą witrynę korporacyjną z następującymi funkcjami: * Chcemy dać użytkownikom marketingu elastyczność i swobodę w dodawaniu nowych stron statycznych, zmienianiu stron statycznych lub zawartości stron statycznych bez angażowania programistów/zespołu wdrożeniowego. * chcemy, aby deweloperzy pracowali nad dynamiczną częścią serwisu. Jak zaprojektować stronę internetową, aby upewnić się, że układ/wygląd i styl strony pozostanie taki sam na wszystkich stronach i osiągnąć wyżej wymienioną pracę? Jakieś doświadczenie? Propozycje?


title: jak uniknąć tagu pracoholizmu

text: Jak wszyscy wiemy, programista potrzebuje tylko komputera i połączenia sieciowego. Gdy te rzeczy są do Twojej dyspozycji, możesz programować w dowolnym miejscu na świecie. Teraz sprawia mi to trochę problemów. Ponieważ praca w miejscu pracy nie jest konieczna, tylko w dowolnym czasie wakacji lub tygodnia wolnego jesteś proszony o pomoc klientowi w przypadku zgłoszonego błędu. Ponadto, jeśli lubisz to robić w czasie wolnym, każdy, kto widzi, jak gapisz się na komputer, może traktować cię jako pracoholika, co mi się nie podoba. Jak uświadomić im, że nie chodzi tylko o pracę. Może to być również hobby. W moim rozumieniu pracoholik to osoba, która „pracuje, by zarobić”, ale entuzjasta to ten, który „pracuje, by się uczyć”.


title: Reprezentacja znaku zapytania w nazwach zmiennych

text: Kiedyś w dzieciństwie przeczytałem opowiadanie SF, w którym założono, że duża litera „P” będzie dobrym przedstawieniem znaku zapytania, jeśli nie można użyć tego znaku bezpośrednio, np. w nazwach zmiennych. Jednak historia jest dość stara i coś się mogło zmienić :) **Czy to dobra praktyka?** BTW: Historia nazywała się 'Enter P' czy jakoś tak. * * * ### Edytuj Dodatkowe pytania, na które odpowiedzi znajdują się poniżej. **Czy to tylko fantazja pisarza, czy jest oparta na zwyczaju danego języka?** **Jeśli tak, to jaki to byłby język?**


title: Czy jest dobra strona do zatrudniania programistów do małych projektów?

text: Potrzebuję fragmentu kodu php, który wykracza poza moje możliwości, więc muszę kogoś do tego zatrudnić. To naprawdę nie jest coś zbyt długiego ani skomplikowanego, więc chciałem wiedzieć, czy istnieje prosty sposób na opublikowanie mojej prośby i znalezienie kogoś, kto zrobi to za określoną kwotę. Czy taka strona istnieje lub jaka jest najlepsza alternatywa? W każdym razie wielkie dzięki


title: Dlaczego korzystanie z szablonu STE nie jest już zalecane dla EF5?

text: Szukałem uaktualnienia mojego projektu z EF4.1/Framework 4.0 do EF5/Framework 4.5. Po przeczytaniu o migracji szablonów t4 dla STE (jednostek samośledzących), natknąłem się na ten link, który wskazuje, że STE nie są już zalecane. Dlaczego Microsoft nie zaleca już używania STE?


title: Poleć tekst wyjaśniający fizyczną implementację C (stos, sterta itp.)

text: Jednym z najpopularniejszych pytań na stackoverflow.com jest to: http://stackoverflow.com/questions/4025768/what-do-people-find-difficult-about-c-pointers Wiele odpowiedzi wydaje się zmierzać w kierunku fakt, że uczniowie często nie rozumieją, co fizycznie się dzieje, gdy kod jest wykonywany… najbardziej podstawową częścią tego wydaje się być stos/sterta. Przeczytałem K&R dwa razy i wreszcie dobrze rozumiem język, ale myślę, że to nie wystarczy. Prawie każde trudne pytanie ma w odpowiedzi „stos” lub „kupę” i chociaż mam ograniczone zrozumienie tego, co one oznaczają tylko z kontekstu i wyszukiwania w Wikipedii, wolę kompleksowe podejście podręcznika. Tak więc, proszę polecić podręcznik, który wyjaśnia rzeczy takie jak stos, sterta, alokacja pamięci itp. z fizycznego punktu widzenia, ponieważ odnosi się do programowania w C. Próbowałem zadać to pytanie na stackoverflow i najwyraźniej nie było to właściwe miejsce, aby je zadawać. Mam więc nadzieję, że ta strona jest lepszą lokalizacją. Jeśli nie, rozważ przeniesienie go do odpowiedniej witryny Stackexchange. Dziękuję.


title: Jakie problemy mogą wyniknąć z naśladowania pojęć z innych języków?

text: Wiele razy czytałem w sieci, że jeśli twój język nie obsługuje jakiejś koncepcji, na przykład orientacji obiektowej lub może wywołań funkcji, i jest to uważane za dobrą praktykę w tym innym kontekście, powinieneś to zrobić. Jedynym problemem, jaki teraz widzę, jest to, że inni programiści mogą uznać twój kod za zbyt inny niż zwykle, co utrudnia im programowanie. Jak myślisz, jakie inne problemy mogą z tego wyniknąć?


title: Czy darowizny to dobry model zarabiania dla programistów?

text: Projektuję na Androida od około 2 lat (i ~1 rok na iOS), wypuszczając aplikacje freeware i open source (głównie dlatego, że moje konto AdSense zostało wyłączone w 2010 r.), ale ostatnio wpadłem na pomysł na świetną aplikację, którą Chciałem zdobyć trochę pieniędzy, ponieważ rozwój wymagałby trochę wysiłku, a także chciałbym przetestować ten „komercyjny” model, aby dowiedzieć się, czy może to sprawić, że zainwestuję więcej czasu w ulepszanie i ulepszanie moich aplikacji. Ponieważ moje konto AdSense zostało wyłączone i nie zamierzam sprzedawać go w sklepie Google Play, pomyślałem o zrobieniu z niego darowizny, abym mógł go rozpowszechniać za darmo (i prawdopodobnie też open source) i użytkownikom, którzy naprawdę polubili i chciał mi podziękować i zachęcić do dalszego rozwoju, mógł przekazać dowolną kwotę pieniędzy. Więc jakie masz doświadczenia z darowiznami? Czy warto w porównaniu do płatnych aplikacji?


title: Czy nazwy pakietów powinny być w liczbie pojedynczej czy mnogiej?

text: Często, zwłaszcza w bibliotekach, pakiety zawierają klasy zorganizowane wokół jednego pojęcia. Przykłady: **xml, sql, użytkownik, konfiguracja, db**. Myślę, że wszyscy czujemy się całkiem naturalnie, że te pakiety są poprawne w _singular_. > com.mójprojekt. **xml**.Element > com.mójprojekt. **sql**.Połączenie > com.myproject. **użytkownik**.Użytkownik > com.mójprojekt. **user**.UserFactory Jednakże, jeśli mam pakiet, który faktycznie zawiera **zbiór implementacji jednego typu** \- takich jak **zadania, reguły, programy obsługi, modele itp.** , który jest lepszy? > com.mójprojekt. **zadania**.TakeOutGarbageTask > com.myproject. **zadania**.DoTheDishesTask > com.myproject. **zadania**.PaintTheHouseTask lub > com.myproject. **task**.TakeOutGarbageTask > com.myproject. **zadanie**.DoTheDishesTask > com.myproject. **zadanie**.PomalujDomZadanie


title: jak możemy poprawić dokumentację projektu?

text: Planujemy stworzyć dla naszego projektu API bazodanowe. Chcę wiedzieć, jak możemy ulepszyć naszą dokumentację. Aktualna struktura dokumentu to : Wprowadzenie : Obiekty bazy danych :Lista każdego obiektu (tabela) Lista pól Lista wspólnych parametrów wejściowych. pętla każdego polecenia bazy danych api Input Parametr polecenia Output Parametr polecenia Przykład użycia polecenia End of loop Proszę zasugerować, czy możemy poprawić naszą dokumentację. :)


title: Czy w Javie powinienem używać "final" dla parametrów i lokalnych, nawet jeśli nie muszę?

text: Java pozwala na oznaczanie zmiennych (pola / lokalizacje / parametry) jako "ostateczne", aby zapobiec ponownemu przypisywaniu do nich. Uważam to za bardzo przydatne w przypadku pól, ponieważ pomaga mi szybko sprawdzić, czy niektóre atrybuty – lub cała klasa – mają być niezmienne. Z drugiej strony uważam, że jest to o wiele mniej przydatne w przypadku wartości lokalnych i parametrów, i zwykle unikam oznaczania ich jako „ostateczne”, nawet jeśli nigdy nie zostaną ponownie przypisane (z oczywistym wyjątkiem, gdy muszą być użyte w klasa wewnętrzna). Ostatnio jednak natknąłem się na kod, który używał final, kiedy tylko mógł, co, jak sądzę, technicznie dostarcza więcej informacji. Nie jestem już pewien mojego stylu programowania, zastanawiam się, jakie są inne zalety i wady stosowania „final” w dowolnym miejscu, jaki jest najpopularniejszy styl w branży i dlaczego.


title: Po co deklarować końcowe zmienne wewnątrz metod?

text: Studiując niektóre klasy Androida, zdałem sobie sprawę, że większość zmiennych metod jest deklarowana jako ostateczna. Przykładowy kod zaczerpnięty z klasy android.widget.ListView: /** * @return Określa, czy lista ma pokazywać górną zanikającą krawędź */ private boolean showingTopFadingEdge() { final int listTop = mScrollY + mListPadding.top; return (mFirstPosition > 0) || (getChildAt(0).getTop() > listTop); } /** * @return Czy lista ma pokazywać dolną zanikającą krawędź */ private boolean showingBottomFadingEdge() { final int childCount = getChildCount(); final int bottomOfBottomChild = getChildAt(childCount - 1).getBottom(); final int lastVisiblePosition = mFirstPosition + childCount - 1; final int listBottom = mScrollY + getHeight() - mListPadding.bottom; return (lastVisiblePosition < mItemCount - 1) || (bottomOfBottomChild < listBottom); } Jaki jest zamiar użycia słowa kluczowego final w takich przypadkach?


title: Dlaczego niektóre pakiety oprogramowania mają przyrostek „amd64” dla systemów 64-bitowych?

text: Podczas pobierania różnych pakietów oprogramowania i plików wykonywalnych dla systemu Windows zawsze widzę dwa różne typy plików wykonywalnych do pobrania. Jeden mówi po prostu „...32-bit”, a drugi zawsze mówi „...amd64”. Wiem, że nie ma to nic wspólnego z AMD, ale odnosi się do 64-bitowych systemów operacyjnych, więc dlaczego jest to nadal normą? Nawet duże firmy, takie jak Google i Ubuntu, mają skonfigurowane pakiety w ten sposób. Dzięki za wgląd! ~Carpetfizz


title: Gdzie są przydatne ósemki?

text: Po prostu waliłem głową w stół przez jakieś 20 minut, patrząc na zupełnie dziwny błąd w PHP, a potem zdałem sobie sprawę, że jest ósemkowy. Ósemkowa <%(*&#>. Krótko mówiąc, dodałem kilka literałów zerami, aby kod był wyrównany, wiem, duży błąd. Zapomniałem o ósemkach. Pytanie brzmi, czy ktoś używa ósemek do czegokolwiek innego niż uprawnienia do plików (Osobiście wolę `chmod ugo+rwx`, ale rozumiem, że jeśli muszą być generowane programowo, warto używać ósemek.) Ale czy są one przydatne w każdej innej sytuacji?


title: Śledzenie zmian w postach

text: Obecnie jestem w trakcie pisania systemu zgłoszeń do pomocy technicznej... Powiedzmy, że jest to mała aplikacja forumowa lub coś w rodzaju Uservoice. Teraz chcę, aby moi użytkownicy mogli edytować swoje bilety, ale nadal mogli oglądać ich stare wersje. Którą trasę powinienem obrać w zakresie projektowania baz danych? Wymyśliłem coś takiego: SupportTickets * Identyfikator * Autor * Temat * SupportTicketContentId SupportTicketContents * Identyfikator * Treść * CreatedOn Teraz podczas przeglądania zgłoszenia po prostu zapytam o najnowszy `SupportTicketContent` w zależności od kolumny `CreatedOn`.. Ale czy jest lepszy sposób? A może jest lepsze nazewnictwo tych tabel?


title: Tworzenie aplikacji na iOS jako web developer

text: My Boss sprzedał klientom kilka 'aplikacji na iPhone'a, jesteśmy sklepem internetowym. Tłumaczyłem mu, że nie wiem o nich pierwszej rzeczy, ale to takie potężne hasło i musimy wyjść naprzeciw oczekiwaniom klientów. Mam pewne doświadczenie w C, Javie i Pythonie, które powinny pomóc, jeśli potrzebuję używać Objective-C. Zrobiłem nawet kilka samouczków na Androida. Te aplikacje będą mniej więcej HTML, moim zdaniem nie są to prawdziwe aplikacje, ale fałszywe aplikacje, które mają taką samą funkcjonalność jak strony internetowe klientów. Dla mnie prawdziwa aplikacja to coś, co wykorzystuje wejścia i wyjścia sprzętowe telefonu, GPS, akcelerometr, głośnik itp. Jakich zasobów mogę użyć, aby przyspieszyć rozwój iOS i jak tworzyć aplikacje w html. Nie mam pojęcia od czego zacząć.


title: Uwielbiam programować, ale nigdy nie zaczynam projektów

text: Przeczytałem to pytanie i najczęściej głosowaną odpowiedź i powiedziałem sobie: „Takie rzeczy są tym, co chcę zrobić! Ale dlaczego do cholery tego nie robię?” Problem polega na tym, że nie mogę nic zacząć. Mam nadzieję, że zorientujesz się, co mnie interesuje i pomożesz mi kontynuować programowanie. Interesuję się programowaniem wbudowanym i chciałbym nauczyć się montażu ARM. Myślę, że można to połączyć z przetwarzaniem obrazu. Chciałbym też tworzyć programy, które są rzeczywiście przydatne dla niektórych ludzi, ale wygląda na to, że istnieje już wiele programów do prawie każdego celu. Może gdybym znalazł interesujący program bez alternatyw open source, mógłbym dostać świetny projekt do pracy. Jak mógłbym zmusić się, aby w końcu rozpocząć projekt lub kilka projektów i nadal się nimi interesować? Chcę tylko zrobić coś, co kocham.


title: Szybkość Java vs. JS / HTML / CSS dla aplikacji internetowych

text: Tworzę aplikację internetową. Przede wszystkim używałem JavaScript, a konkretnie jQuery. Z powodu pewnej bardzo specyficznej funkcjonalności, napotykam praktyczne ograniczenia JavaScript--nie są to twarde ograniczenia, ale rzeczy, które uważam za łatwe w Javie, takie jak tworzenie edytora równań, w którym można edytować bezpośrednio, w przeciwieństwie do wprowadzania TeX-a, jest trudne w JS, nawet używając MathJax jako bazy. Będę musiał zbudować jeszcze bardziej złożoną funkcjonalność, która obejmuje silniki 3D i fizyki. Czy w przypadku aplikacji na dużą skalę, takich jak ta, a konkretnie takiej, która obejmuje silniki 3D i fizyki, Java będzie wolniejsza lub szybsza niż JavaScript, gdy jest uruchamiana w przeglądarce? (Załóżmy, że kod jest dobrze napisany w obu przypadkach). zależny od zbyt wielu konkretnych zmiennych? Dziękuję.


title: Jak działają licencje open-source, gdy aplikacja jest przeznaczona wyłącznie do użytku wewnętrznego?

text: Piszę aplikację MATLAB, która dość intensywnie korzysta z wymiany plików MATLAB. Większość funkcji, których tu używam, podlega licencji BSD. Moja aplikacja jest wdrażana _tylko do użytku wewnętrznego_ i nie jest przeznaczona do użytku publicznego. Chociaż mój konkretny przypadek używa kodu objętego licencją BSD, ogólnie rzecz biorąc, jakie są konsekwencje używania kodu open source (GPL, BSD itp.) w programach, które nigdy nie zostaną upublicznione? Czy muszę dołączyć plik licencyjny, aby objąć kod licencjonowany jako BSD?


title: Wzorzec MVVM - Najlepsze podejście projektowe do zarządzania aplikacją

text: Rok temu odkryłem technologię WPF i jako pierwszy eksperyment opracowałem małą aplikację do porównania zawartości dwóch różnych katalogów. Zawartość każdego katalogu jest wyświetlana w innym DataGrid. W tamtym czasie nie rozwijałem aplikacji w oparciu o wzorzec MVVM, bo był to tylko eksperyment, niezbyt dobry, ale zadziałał. Teraz, gdy mam znacznie większe doświadczenie z WPF i wzorcami projektowymi, nie jestem tak dumny z tej pracy i chcę przepisać aplikację, ulepszając ją i podążając za zalecanym wzorcem MVVM. Właściwie zaprojektowałem aplikację w ten sposób: * MainModel, z głównym wspólnym algorytmem. * MainView to unikalny widok aplikacji z datagridami, w których mogę pokazać wyniki moich algorytmów. * MainViewModel, który zajmie się obsługą połączenia między innymi dwoma ViewModels, MainModel i MainView. * Jeden ViewModel dla każdego DataGrid. W ten sposób oddzielę zachowanie i dane dwóch DataGrids. MainModel zawiera główny algorytm używany do wyszukiwania plików w danym katalogu, na przykład: public class MainModel { public MainModel() {} public List<Results> GetFiles(string directoryPath) } MainViewModel utworzy wystąpienie obiektu dla każdego ViewModel ( Mam ViewModel dla każdego datagrid), używając do tego niektórych właściwości: public class MainViewModel { public MainViewModel() { FirstViewModel = new ViewModelDG1(); SecondViewModel = nowy ViewModelDG2(); } public ViewModelDG1 FirstViewModel {get;set;} public ViewModelDG2 SecondViewModel {get;set;} } Chciałem zastosować wzorzec projektowy, aby pomóc mi zarządzać aplikacją, taką jak Factory Method lub Builder lub metoda szablonu, ale myślę, że nie nadają się do mojej aplikacji ze względu na różne zastosowania/warunki tych wzorców projektowych. Nie jestem tak pewien tego projektu, nie wiem, czy jest to poprawna implementacja wzorca MVVM i czy promuje luźne sprzężenie i wysoką spójność. Czy możesz mi pomóc w projektowaniu? Czy moja poprawna implementacja MVVM? Jeśli nie, to jaki jest właściwy? Jakie są twoje opinie? Dziękuję Ci.


title: Wielokrotnego użytku i konfigurowalna biblioteka wykresów na górze d3js

text: Zacząłem budować bibliotekę wykresów na bazie d3js przy użyciu dziedziczenia javascript. Moim celem jest opracowanie elementów wykresów wielokrotnego użytku iw pełni konfigurowalnych. Przeczytałem artykuł: W kierunku wykresów wielokrotnego użytku. Następnie przejrzałem kod źródłowy nvd3. NVD3 używa kodu tabliczki kotłowej w każdym wykresie, takich jak: kopiowanie i wklejanie definicji szerokości, wysokości, marginesu itp. ALE wolałbym używać dziedziczenia, aby uniknąć takiego kodu tabliczki kotłowej. Chciałbym, aby właściwości takie jak: wymiary, osie i funkcje, takie jak powiększanie i detektory zdarzeń, można było ponownie wykorzystywać na wszystkich wykresach i można je dostosowywać za pomocą dowolnej instancji (obiektu) wykresu. Oto jak wygląda moja obecna biblioteka. (Na razie obsługuje tylko wykres bąbelkowy.) var BaseChart = function(){ this.width = 200; this.height = 200;//i inne jak: margines/ tytuł wykresu } //XYChart dziedziczy po BaseChart var XYChart = function(){ //Zawiera elementy dla osi, grup osi, etykiet, tików, domen i zakresów // Przykład: Jednym z elementów, które zawiera, jest „this.yAxis” this.yAxis = d3.svg.axis().scale(this.scaleY) .orient("left") .ticks(this.yTickCnt) .tickSize(- ta.szerokość); } //Rozszerza XYChart i dodaje powiększanie var ZoomableXYChart = function(){ this.zoom = function(){ this.svg.selectAll(this.dataShape) .attr("transform", function(d, i) { var translate = that.calculateTranslation(d); return "translate(" + translate.x + "," + translate.y + ")"; }); } } //Rozszerza wykres XY z możliwością powiększania i dodaje obsługę rysowania kształtów na punktach danych var BubbleChart = function(){ this.dataShape = "ścieżka"; this.drawChart = function() { this.prepareChart();//Załącza powiększanie, rysuje osie itp. var that = this; this.svg.selectAll(that.dataShape) .data(that.data) .enter() .append(that.dataShape) .attr("transform", function(d) { return that.transformXYData(d); }) .attr("d", symbolGenerator().size(100).type(function(d) { return that.generateShape(d); })) .attr("fill", function(d) { return that.generateColor (d); }) .on("klik", function(d) { that.onClickListener(this, d); }) } } Wykres mogę stworzyć w ten sposób: var chart = new BubbleChart(); wykres.dane = niektóreDane; wykres.szerokość = 900; chart.elementId = "#myChart"; chart.onClickListener = function(this,d){} chart.drawChart(); To rozwiązanie pozwala mi używać wspólnych właściwości i funkcji na wszystkich wykresach. Oprócz tego pozwala dowolnemu wystąpieniu dowolnego wykresu nadpisać domyślne właściwości i funkcje (takie jak: onClickListener). Czy widzisz jakieś ograniczenia takiego rozwiązania? Tak naprawdę nie widziałem dziedziczenia javascript używanego dla d3.js i zastanawiam się dlaczego? Czy „łańcuch” jest tak ważny? Korzystając z sugestii Mike'a Bostocka, jak możemy udostępniać funkcje, takie jak powiększanie na wszystkich wykresach XY? Czy dziedziczenie nie jest absolutnie konieczne do współdzielenia funkcji i właściwości?


title: Problem z licencją Ext JS

text: Przede wszystkim nie proszę o poradę prawną, tylko sprawdzam, czy ktoś zgadza się z moimi podejrzeniami. To może pomóc w przekonaniu Senchy do zmiany licencji. Ich licencja komercyjna mówi: > Wersja Oprogramowania Open Source ("Wersja GPL") jest licencjonowana na > warunkach GNU General Public License w wersji 3.0 ("GPL"), a nie > na podstawie niniejszej Umowy Licencyjnej. **Jeśli Ty lub inna strona trzecia w dowolnym momencie > opracowali całość (lub dowolne części) Aplikacji przy użyciu > Wersji GPL,** nie możesz łączyć takich prac rozwojowych z Oprogramowaniem i > **musi udzielać licencji na takie Aplikacje (lub jakiekolwiek części z nich pochodzące) > na warunkach GNU General Public License w wersji 3** , której kopia znajduje się pod adresem http://www.gnu.org/ copyleft/gpl.html. Tymczasem istnieją biblioteki na licencji MIT lub BSD, które używają ExtJS. GeoExt jest jednym z przykładów. Prawdopodobnie niektórzy współtwórcy tych bibliotek nie kupili komercyjnej licencji Ext JS i używają jego wersji na licencji GPL. Rozsądnie licencjonowany przez GPL Ext JS nie powinien „infekować” kodu GeoExt, jeśli jest rozprowadzany bez biblioteki Ext JS. Teraz problem polega na tym, że jeśli używam GeoExt, to prawdopodobnie jego „części” **zostały** „opracowane” przy użyciu wersji GPL. W szczególności Sencha wyjaśnia, co rozumieją przez „opracowanie przy użyciu” w swoim FAQ: > Licencja zabrania łączenia kodu, który **opracowałeś na licencji GPL> wersji** oprogramowania z kodem, który tworzysz przy użyciu komercyjnej > licencjonowanej wersji. Innymi słowy, **nie możesz rozpocząć rozwoju z naszą wersją > GPL, a następnie „przekonwertować” ją na naszą wersję komercyjną**. Moja interpretacja jest taka, że komercyjna licencja Sencha nie zezwala na łączenie Ext JS z GeoExt i kto wie, jakie inne biblioteki, których współtwórcy w pewnym momencie mogli "opracować" wersję Ext JS na GPL. Może to obejmować, ale nie musi, OpenLayers, jQuery i inne biblioteki, które programiści prawdopodobnie również będą musieli wykorzystać w swoich komercyjnych projektach. Jeśli Sencha sobie tego życzy, zgodnie z ich umową komercyjną, mogą zażądać od klientów komercyjnych, którzy połączyli Ext JS z innymi bibliotekami, udostępnienia ich oprogramowania na licencji GPL, ponieważ licencja komercyjna nie oferuje innego rozwiązania. Moje pytanie brzmi: czy zgadzasz się, że to brzmi jak tworzenie komercyjnego oprogramowania przy użyciu Ext JS może być ryzykowne, czy moja interpretacja jest nieprawidłowa?


title: Pozyskiwanie i trwałość zdarzeń

text: Czytam na temat pozyskiwania zdarzeń i mam pytanie dotyczące wytrwałości. Nadal mogę mieć bazę danych ze wszystkimi podmiotami, prawda? A może zdarzenia powinny być odtwarzane za każdym razem, gdy aplikacja jest uruchamiana, aby uzyskać najnowszą wersję każdej jednostki w pamięci? Wydaje się, że jest to strata na większych systemach (jak w dużej ilości danych)? W przypadku pozyskiwania zdarzeń chodzi o to, że w razie potrzeby mogę odtworzyć zdarzenia w celu zapełnienia magazynu danych? (lub przeanalizuj dane)


title: Dlaczego do filtrowania spamu używany jest klasyfikator Bayesa?

text: Czytałem o Bayesowskim filtrowaniu spamu i myślę, że rozumiem teorię, ale po prostu nie widzę, dlaczego takie podejście jest potrzebne do obliczenia prawdopodobieństwa, że wiadomość jest spamem, biorąc pod uwagę, że zawiera ona określone słowo. Jeśli mamy zestaw wiadomości już zaklasyfikowanych przez użytkownika jako „spam” lub „ham” i otrzymujemy nową wiadomość (zawierającą wybrane słowo), którą chcemy sklasyfikować, to z pewnością wystarczy podzielić liczbę wiadomości spamowych zawierających to słowo przez łączną liczbę wiadomości zawierających to słowo... Po co wszystkie równania?


title: Jakich danych nie można skompresować kodami Huffmana?

text: Jakich danych nie można skompresować za pomocą kodów Huffmana i dlaczego? Próbowałem szukać odpowiedzi, ale natrafiłem tylko na kompresję bezstratną i stratną. Naprawdę nie rozumiem, jakie typy danych nie mogą być skompresowane przez huffmana i dlaczego nie mogą być skompresowane za jego pomocą.


title: Czy istnieje inna nazwa języka programowania Sql Azure?

text: Według tej strony na MSDN język sql używany na Sql Azure nazywa się **transact-sql** (tak samo jak na serwerze sql). Ale czy to jedyny sposób na odniesienie się do programowania na Sql Azure? Wariant transakcji SQL-sql na platformie Sql Azure nie obsługuje wielu funkcji, w tym globalnych tabel tymczasowych, zapytań rozproszonych i tabel systemowych; i ma częściowe wsparcie dla innych obszarów. Czy nazwanie go transact-sql jest właściwe i czy ktoś wie, czy inna nazwa nie jest oficjalnie zajęta (azure-sql, a-sql ...)?


title: Czy programista kontraktowy powinien mieć portfolio?

text: Zdaję sobie sprawę, że im bardziej idziesz w stronę spektrum „niezależnego”, istnieje zapotrzebowanie na portfolio (przynajmniej do tworzenia stron internetowych), ale myślę, że ustrukturyzowana praca kontraktowa (jak na przykład 3-miesięczna umowa na zatrudnienie ) byłaby nieco bardziej profesjonalna w uświadomieniu sobie, że zawodowy programista spędza większość czasu na pisaniu własnych aplikacji dla firm i dlatego nie ma ich w swoim portfolio. Pracodawcy i rekruterzy wydają się tutaj nieco mniej profesjonalni, jeśli chodzi o sprawy technologiczne (ale to duże miasto w USA) i dość często otrzymuję rekruterów pytających, czy mam portfolio do udostępnienia itp. Jasne, że zrobiłem swoje własne projekty, ale nie aktualizuję ich na bieżąco, a praca, którą wykonuję dla mojego obecnego pracodawcy, jest moim głównym celem. W każdym razie, myślę, że to tylko uogólnione pytanie o to, jak odróżnić „niezależny” od „umowy” (chociaż myślałem, że robiłem to w swoim CV)


title: Kiedy używać bibliotek współdzielonych

text: Uwaga: nie jestem pewien, czy to pytanie jest bardziej odpowiednie dla Stack Overflow lub Programistów. Proces myślowy stojący za umieszczeniem go tutaj polegał na tym, że tak naprawdę nie odnosi się do samego kodowania. Zauważyłem, że małe darmowe narzędzie, które mam na swoim komputerze, używa kilku bibliotek DLL. Z ich nazw („RenderAllChunks” i „RenderSlice”) wynika, że są używane tylko do określonych funkcji. Jeśli outsourcing funkcji specyficznych dla programu jest naprawdę konieczny, czy nie byłoby lepiej umieścić je w osobnym pliku nagłówkowym? Wydaje się, że nie ma sensu podejmować wszystkich problemów związanych z kompilacją, łączeniem i dystrybucją bibliotek DLL tylko dla jednej funkcji. * Czy korzystanie z bibliotek współdzielonych w małych projektach jest złe? * Kiedy/dlaczego biblioteki współdzielone są preferowane w stosunku do bibliotek statycznych (lub nawet plików nagłówkowych)?


title: Jeśli poświęcisz rok lub dwa lata od bycia programistą, czy naprawdę trudno jest do tego wrócić?

text: Pracuję jako programista od około 3 lat (prosto z uniwersytetu), zastanawiam się, czy jeśli zrobię sobie przerwę rok lub dwa, nie będzie można wrócić do branży? Po uniwersytecie nie wyrzuciłem z mojego systemu tego okresu przerwy i myślę, że powinienem to zrobić, zanim osiągnę 30 (teraz 24), moim głównym zmartwieniem jest to, że jeśli teraz odejdę z branży, mogę w ogóle nie wracać do tego i kończyć na jakimś ślepym zaułku. Widzę to tak, że ogólne koncepcje / wzorce projektowe itp. pozostają podobne przez lata, a głównie ewoluuje składnia kodowania / rzeczywista implementacja, więc nie powinno się to dramatycznie zmieniać. Ponadto programistom (tak, jest ich kilka!) poświęcają lata na posiadanie dzieci, a potem kontynuują swoją karierę, więc nie może być to niemożliwe. Ultimatum : Czy poświęcenie roku lub dwóch zniszczy moją (małą) karierę, którą dotychczas zbudowałem?


title: Strukturyzacja programów wielowątkowych

text: Czy istnieją jakieś kanoniczne źródła do nauki tworzenia programów wielowątkowych? Nawet przy wszystkich klasach narzędzi współbieżności, które zapewnia Java, mam trudności z prawidłową strukturą programów wielowątkowych. Za każdym razem, gdy w grę wchodzą wątki, mój kod staje się bardzo kruchy, każda drobna zmiana może potencjalnie zepsuć program, ponieważ kod, który przeskakuje między wątkami, jest bardzo zawiły.


title: Czy istnieje bardziej powszechny synonim słowa „Blittable”?

text: Czy istnieje bardziej powszechna nazwa typu danych „Blittable”? W moim oprogramowaniu istnieje rozróżnienie między strukturą o zmiennej wielkości a strukturą o stałym rozmiarze, która zachowuje się podobnie do „blittable”, ale widziałem tylko nazwę używaną w oprogramowaniu Microsoft.


title: Jak stworzyć jakąś wartość dla zdań?

text: ![tutaj wprowadź opis obrazka](http://i.stack.imgur.com/qLzG4.png)Chcę zidentyfikować najbardziej pasujące zdanie za pomocą jakiegoś wzorca. Oznacza to, że używając algorytmu java chcę stworzyć identyczną wartość dla każdego zdania. Każde zdanie przy wejściu do tego algorytmu może mieć jakąś identyczną wartość. Jak mogę to rozwinąć? Jakie znasz strony internetowe, które mogę polecić? Jakich witryn powinienem szukać? Właściwie chcę wyjaśnić, kiedy podaję jako przykład: 5 zdań do algorytmu, który może wygenerować jakieś 5 wartości. Następnie porównuję te wartości z wcześniej wygenerowanymi wartościami (powinienem zapisać te wartości w mojej bazie danych) i uzyskać luka między nową wartością 5 a poprzednio zapisanymi wartościami. Następnie otrzymuję odległość i wybrałem najbardziej odpowiednie zdanie jako najniższą wartość przerwy. Używam tych rzeczy do mojego narzędzia do tłumaczenia maszynowego. Jako przykład myślimy, że używając mojego modelu tłumaczenia opartego na regułach, generujemy 2 zdania. 1\. Chcę zjeść jabłko. 2\. Chcę zjeść dom. W moim korpusie uważamy, że zawiera więcej zdań i przechowuję wartości zdań w mojej bazie danych. (Część dotycząca przypisywania wartości to jeszcze nie wiem) Chcę stworzyć algorytm java do przypisywania wartości dla każdego zdania. Jako przykład, jeśli myślimy, że wartość zdania 1: 250,8 wartość zdania 2: 290,5 Baza danych zawierała wartości 248, 400,800. Wtedy mam różnicę. Widzimy więc tutaj największą minimalną różnicę uzyskaną za 250,8 a najbardziej odpowiednim zdaniem jest 1 jedno.


title: Jak przestrzegać zasady „przydziel w rozmówcy”, gdy rozmiar jest obliczany w rozmówcy?

text: Załóżmy, że mamy nieprzezroczysty typ `handle_t` zarządzany przez prosty interfejs z funkcjami takimi jak: handle_t *handle_init(void); int handle_do(handle_t *); void handle_free(handle_t *); Problem polega na tym, że rozmiar nie zawsze może być określony w kroku inicjalizacji i musi być obliczony w `handle_do`. Jednym z rozwiązań, które widziałem, jest dwukrotne wywołanie `handle_do`, z których pierwszy zwraca rozmiar potrzebny do przydzielenia, ale czy nie wpływa to na wydajność? Czy alokacja lub zmiana alokacji pamięci w `handle_do` jest złą praktyką? Czy ma to w ogóle znaczenie przy używaniu typów uchwytów (ponieważ procedury init/free są jasne)?


title: Czy programiści włączają lub wyłączają raportowanie błędów?

text: Zastanawiałem się, czy programiści php włączają lub wyłączają raportowanie błędów w php.ini po dostarczeniu strony?


title: Najlepsze IDE dla HTML, CSS i JavaScript dla Mac

text: Obecnie szukam przejścia do korzystania z IDE do tworzenia sieci web. Rozważam następujące opcje: 1. Aptana Studio 2. Coda 3. Expresso Proszę oprzeć swoje odpowiedzi na następujących kryteriach, w porządku malejącym według ważności: 1. Obsługuje HTML, CSS, JavaScript 2. Potężny (z dobrym uzupełnianiem kodu, dobry debugger, świetne podświetlanie składni itp. 3. Szybki i lekki 4. Obsługuje HTML5, CSS3 i główne struktury JavaScript (JQuery lub YUI) 5. Świetny projekt (zarówno użyteczność, jak i estetyka) 6. Obsługuje PHP, Ruby i Python 7. Czy Git jest zintegrowany Zaktualizowałem pytanie, aby było bardziej obiektywne. Głównie szukam odpowiedzi, która odnosi się do tego, jak dobrze każde z IDE spełnia moje kryteria.


title: Jaka jest różnica między zwykłym sprzętem a maszyną z mikrokodem w "A Critique of Common Lisp"?

text: Czytałem ten artykuł: A Critique of Common Lisp i trudno mi było określić dokładną definicję „maszyny magazynowej” i jej różnicy w stosunku do maszyn „mikrokodowanych”. Próbowałem bezskutecznie szukać precyzyjnej definicji tego pierwszego. To, co obecnie rozumiem jako maszynę magazynową, to to, że odnosi się ona do powszechnie dostępnego na rynku chipsetu komputerowego (bez większego dostosowania). Skoro więc chciałbym zapytać, co oznacza maszyna magazynowo-sprzętowa (w kontekście artykułu) i czym różni się od maszyny mikrokodowanej?


title: Najlepsze praktyki dotyczące kopiowania statycznej zawartości między projektem internetowym a samodzielnym projektem EXE

text: Mam rozwiązanie Visual Studio, które ma między innymi następujące trzy projekty: * **NamespacePrefix.NancyFX.csproj:** Niektóre moduły Nancy * **NamespacePrefix.NancyFX.IISHosting.csproj:** Rozwiązanie internetowe do hostowania nancy modules * **NamespacePrefix.NancyFX.Selfhost.csproj:** Exe do obsługi modułów nancy Oprócz usług pozostałych w folderach Views/, Scripts/ i Content/ znajduje się trochę html javascript i css. Chcę, aby ta zawartość była dostępna zarówno w hostingu usług IIS, jak i w projekcie hostingu samodzielnego. Obecnie przechowuję pliki w projekcie sieci Web i kopiuję je do projektu samoobsługowego, edytując plik xml csproj w następujący sposób: <Target Name="BeforeBuild"> <ItemGroup> <ContentItems Include="..\NamespacePrefix.NancyFX. IISHosting\Content\**\*.*" /> <ScriptItems Include="..\NamespacePrefix.NancyFX.IISHosting\Scripts\**\*.*" /> <ViewItems Include="..\NamespacePrefix.NancyFX. IISHosting\Views\*.*" /> </ItemGroup> <Copy SourceFiles="@(ContentItems)" DestinationFiles="$(TargetDir)\Content\%(RecursiveDir)%(Filename)%(Exte nsion)" /> <Copy SourceFiles="@(ScriptItems)" DestinationFiles="$(TargetDir)\Scripts\%(RecursiveDir)%(Filename)%(Extension)" /> <Copy SourceFiles="@(ViewItems)" DestinationFolder="$(TargetDir)\Views" /> </Target> Działa to dobrze, ale czy jest lepszy sposób? Wydaje mi się, że to daje mi najlepszą inteligencję itp.


title: Jak uniknąć „menedżerów” w moim kodzie

text: Obecnie przeprojektowuję swój system Entity System dla C++ i mam wielu menedżerów. W moim projekcie mam te zajęcia, aby powiązać moją bibliotekę. Słyszałem wiele złych rzeczy, jeśli chodzi o zajęcia „menedżerskie”, być może nie nazywam swoich zajęć odpowiednio. Jednak nie mam pojęcia, jak je nazwać. Większość menedżerów w mojej bibliotece składa się z tych klas (choć trochę się różni): * Kontener - pojemnik na obiekty w menedżerze * Atrybuty - atrybuty obiektów w menedżerze W moim nowym projekcie dla mojego biblioteki, mam te specyficzne zajęcia, aby powiązać moją bibliotekę. * ComponentManager - zarządza komponentami w Entity System * ComponentContainer * ComponentAttributes * Scene* - odniesienie do Sceny (patrz poniżej) * SystemManager - zarządza systemami w Entity System * SystemContainer * Scene* - odniesienie do Sceny (patrz poniżej) * EntityManager - zarządza encjami w Entity System * EntityPool - pula encji * EntityAttributes - atrybuty encji (dostępne tylko dla klas ComponentContainer i System) * Scene* - odniesienie do Sceny (patrz poniżej) * Scena - wiąże wszystkich menedżerów razem * ComponentManager * SystemManager * EntityManager Myślałem o umieszczeniu wszystkich kontenerów/pul w samej klasie Scene. tj. Zamiast tego: Scena sceny; // utwórz scenę // UWAGA: // Technicznie mógłbym owinąć ten wiersz w wywołaniu createEntity() w klasie Scene Entity = scene.getEntityManager().getPool().create(); Byłoby to tak: Scena sceny; // utwórz encję Scene Entity = scene.getEntityPool().create(); Ale nie jestem pewien. Gdybym miał zrobić to drugie, oznaczałoby to, że miałbym wiele obiektów i metod zadeklarowanych w mojej klasie Scene. ## UWAGI: 1. System encji to po prostu projekt, który jest używany do gier. Składa się z 3 głównych części: komponentów, jednostek i systemów. Komponenty to po prostu dane, które można „dodawać” do encji, aby encje się wyróżniały. Jednostka jest reprezentowana przez liczbę całkowitą. Systemy zawierają logikę dla encji z określonymi komponentami. 2. Powodem, dla którego zmieniam projekt dla mojej biblioteki, jest to, że myślę, że można go dość dużo zmienić, w tej chwili nie podoba mi się jego odczucie/przepływ.


title: Pytanie o przejście na systemy wbudowane

text: Obecnie pracuję jako programista .net i mam do 3 lat doświadczenia w branży, a także stopień naukowy w dziedzinie informatyki, w szczególności inżynieria oprogramowania (wiem, że to nic nie znaczy, ale chciałem tylko wyjaśnić, że nie jestem twoją ogólną tylną sypialnią programista). Kiedy skończyłem Uni, zacząłem kontraktować dla firmy. Nie wspomnę ich imienia, ale niektórzy z Was mogli o nich słyszeć po opisie. Zasadniczo przyjmują świeżo upieczonych absolwentów iw zamian za szkolenie i doświadczenie w kontraktowaniu trzeba jeździć do klientów, o których mówią, na minimum dwa lata. Nie mogę powiedzieć, że to było świetne, ale czuję, że wiem więcej niż ludzie z takim samym wieloletnim doświadczeniem jak ja. Problem polega na tym, że zacząłem podążać ścieżką tworzenia stron internetowych z powodu braku wyboru u klientów. Jak trudno jest przejść z dziedziny .net na programowanie osadzone/niskopoziomowe? Mam do tego entuzjazm i dążenie, ale nie do końca wiem, jak się zabrać do przeprowadzki. W przeciwieństwie do tworzenia aplikacji, znajomość języka i odrobina etykiety biznesowej nie wydaje się wystarczać. > Na przykład pod względem sprzętowym mogę skonfigurować komputer, ale nie wiem jak ręcznie podłączyć przewody i zaprogramować te systemy. Czy ten rodzaj wiedzy > jest konieczny? Z góry dziękuję. Również jeśli ktoś ma podobne doświadczenie w wymianie, czy powinienem? tl;dr Programista, który nie wie, jak przejść z ról programistycznych do systemów wbudowanych. Edycja:: Dziękuję wszystkim za radę.


title: Czy ktoś inny może opatentować mój algorytm o otwartym kodzie źródłowym?

text: Napisałem rekurencyjny algorytm wyszukiwania, aby znaleźć granice struktury danych woksela, aby renderować ją bardziej wydajnie. Rozejrzałem się i albo jest to tak prosta i oczywista technika, że nikt nie zadał sobie trudu, żeby ją opatentować, albo jest to nowość i nikt wcześniej tego nie robił. Jest otwarcie „opublikowany” na GitHub i chroniony na licencji GPL. Chciałabym pokazać to innym, zobaczyć czy da się to ulepszyć, jednak... Obawiam się, że chociaż to napisałem i opublikowałem, ktoś może próbować opatentować ten sam pomysł. Czy jestem bezpieczny, chroniony przez banery oprogramowania o otwartym kodzie źródłowym, czy też muszę próbować się chronić, jak robią to wielkie armaty i trolle patentowe? Wierzę, że patenty na oprogramowanie są złe i że aby napisać najlepsze oprogramowanie, wiele oczu musi to zobaczyć. Obawiam się jednak, że może to być dość naiwny punkt widzenia na to, jak pisane jest oprogramowanie, i jestem ciekaw, co myślą inni.


title: Gdybyś miał dwa projekty o tej samej specyfikacji i tylko jeden został opracowany przy użyciu TDD, jak mógłbyś to rozpoznać?

text: To pytanie zadano mi w wywiadzie i od tamtej pory dręczy mnie ono. > Masz dwa projekty, oba o tej samej specyfikacji, ale tylko jeden z nich > został opracowany przy użyciu Test Driven Development. Otrzymasz > źródło obu, ale z testami usuniętymi z projektu TDD. Jak możesz > stwierdzić, który został opracowany przy użyciu TDD? Jedyne, co udało mi się zebrać, to coś, że klasy są bardziej „podzielone” na mniejsze kawałki i mają bardziej widoczne interfejsy API, a nie mój najbardziej dumny moment. Byłbym bardzo zainteresowany, aby usłyszeć _dobrą_ odpowiedź na to pytanie.


title: Sugerowany kod stanu HTTP REST dla „osiągnięto limit żądań”

text: Przygotowuję specyfikację usługi REST, której część będzie obejmować możliwość ograniczania użytkowników w całej usłudze oraz w grupach zasobów lub w poszczególnych zasobach. Podobnie limity czasu dla nich można skonfigurować dla zasobu/grupy/usługi. Właśnie przeglądam specyfikację HTTP 1.1 i próbuję zdecydować, w jaki sposób przekażę klientowi, że żądanie nie zostanie spełnione, ponieważ osiągnął swój limit. Początkowo pomyślałem, że to jest kod klienta `403 - Forbidden`, ale to, ze specyfikacji: > Autoryzacja nie pomoże i prośba NIE POWINIEN mi się powtarzać. Wygląda na to, że `503 - Usługa niedostępna` jest lepszym rozwiązaniem - ponieważ pozwala na przekazanie czasu ponowienia poprzez użycie nagłówka `Retry-After`. Możliwe, że w przyszłości będę chciał obsługiwać „kupowanie” większej liczby żądań za pośrednictwem eCommerce (w takim przypadku byłoby dobrze, gdyby kod klienta „402 – Wymagana płatność” został sfinalizowany!) – ale myślę, że może to być również ściśnięte na odpowiedź 503. Jak myślisz, którego powinienem użyć? A może jest inny, którego nie brałem pod uwagę?


title: Czy są jakieś konkretne przykłady tego, w których równoległy kompilator zapewniłby wartość dodaną?

text: Paul Graham argumentuje, że: > Byłoby wspaniale, gdyby startup mógł przywrócić nam coś ze starego > Prawa Moore'a, pisząc oprogramowanie, które sprawi, że duża liczba procesorów będzie wyglądała dla dewelopera jak jeden bardzo szybki procesor. ... Najbardziej ambitne jest zrobienie > tego automatycznie: napisanie kompilatora, który będzie dla nas paralelizować nasz kod. > Istnieje nazwa tego kompilatora, wystarczająco inteligentny kompilator, i jest on synonimem niemożliwości. Ale czy to naprawdę niemożliwe? Czy ktoś może podać **konkretny przykład**, w którym paralelizujący kompilator rozwiązałby problem? Aplikacje internetowe nie wydają się być problemem: po prostu uruchom kilka procesów węzła. Raytracing w czasie rzeczywistym nie stanowi problemu: programiści całkiem szczęśliwie piszą wielowątkowy język asemblerowy SIMD (w rzeczywistości niektórzy mogą narzekać, jeśli zrobimy to łatwiej!). Świętym Graalem jest możliwość przyspieszenia dowolnego programu, czy to MySQL, Garage Band czy Quicken. Szukam środka: czy istnieje **problem w prawdziwym świecie, którego doświadczyłeś**, w którym „wystarczająco inteligentny” kompilator przyniósłby realną korzyść, tj. że ktoś zapłaciłby za niego? **Dobra odpowiedź** to taka, w której komputer działa na 100% CPU na jednym rdzeniu przez bolesny okres czasu. Czas ten może wynosić 10 sekund, jeśli zadanie ma być szybkie. Jeśli zadanie ma być interaktywne, może to zająć 500 ms. To może być 10 godzin. Proszę opisać taki problem. Naprawdę, to wszystko, czego szukam: **obszary kandydujące do dalszego zbadania**. (Dlatego raytracing jest wyłączony z listy, ponieważ wszystkie nisko wiszące owoce zostały ucztowane.) **Nie interesuje mnie, dlaczego nie można tego zrobić.** Jest milion osób gotowych wskazać rozsądne powody, dla których to jest nie może być zrobione. Takie odpowiedzi nie są przydatne.


title: Jak zarządzać Zapytaniami więcej niż jednego produktu?

text: Nie potrafię odgadnąć idealnego tytułu tego pytania, więc przeczytaj moją sprawę i pomóż mi. Mamy 4 różne produkty. Każdy ma własną witrynę i bazę danych, co oznacza, że jest całkowicie niezależny. Teraz chcę mieć wspólny system, który może zarządzać zapytaniami na stronie "skontaktuj się z nami". Ponadto mogę wyciągnąć zapytania kontaktowe z każdej bazy danych. I nawet ja powinienem być w stanie wysłać do nich wszystkich masową pocztę. itd. itd. Więc co to za aplikacja? Czy jest dostępne jakieś oprogramowanie? Jeśli tak, to które to są? A może muszę stworzyć nową niestandardową aplikację? Proszę doradź..


title: Testy jednostkowe i wywołania funkcji natywnych dla języka

text: Czy istnieje najlepsza praktyka dotycząca wywoływania funkcji natywnych dla języka podczas pisania testowalnego kodu? Poeksperymentowałem trochę z kodem php i wymyśliłem dwie metodologie: * utworzyć klasę opakowującą dla wszystkich funkcji natywnych i naśladować to opakowanie podczas pisania testów * używając "magii przestrzeni nazw": wywoływanie wszystkich funkcji natywnych bez określania globalnej przestrzeni nazw (` aFunction` zamiast `\aFunction`), a następnie napisanie kodu pośredniczącego metody w podanej przestrzeni nazw podczas testowania, co spowoduje testowanie kodu przy użyciu kodu pośredniczącego zamiast funkcji natywnej. Czy jest bardziej powszechnie stosowane podejście? Jakie są zalety i wady najczęściej używanych metodologii testowania wywołań funkcji natywnych dla języka?


title: Czy SQL jest deklaratywny?

text: Pytam, ponieważ tak wiele pytań, które widzę w SQL, brzmi: "To jest powolne. Jak to przyspieszyć"? Czy samouczki mówią: „Zrób tak, a nie w ten sposób, ponieważ jest to szybsze”. Wydaje mi się, że duża część SQL polega na tym, aby wiedzieć, jak wyrażenie będzie wykonywane i z tej wiedzy wybrać style wyrażeń, które działają lepiej. To nie zgadza się z jednym aspektem programowania deklaratywnego - pozostawieniem systemu, aby decydował, jak najlepiej wykonać obliczenia, po prostu określając, co obliczenia powinny dać. Czy silnik SQL nie powinien dbać o to, czy użyłeś `in`, `exists` lub `join`, jeśli jest to naprawdę deklaratywne, czy nie powinien po prostu dać poprawnej odpowiedzi w rozsądnym czasie, jeśli to możliwe, za pomocą którejkolwiek z trzech metod? Ten ostatni przykład został podsunięty przez ten ostatni post, który jest typu wspomnianego w moim akapicie otwierającym. **Indeksy** Chyba najprostszy przykład, jakiego mogłem użyć, dotyczy tworzenia indeksu dla tabeli. Gumph tutaj na w3schools.com próbuje nawet wyjaśnić to jako coś niewidocznego dla użytkownika, co jest tam ze względu na wydajność. Ich opis wydaje się umieszczać indeksy SQL w obozie niedeklaratywnym i są one rutynowo dodawane ręcznie ze względów czysto wydajnościowych. Czy jest tak, że jest gdzieś idealną bazą danych SQL, która jest znacznie bardziej deklaratywna niż cała reszta, ale ponieważ jest tak dobra, nie słyszy się o tym?


title: Architektura pośrednia dla aplikacji klient-serwer na iOS?

text: Widzę dwa oczywiste podejścia do architektury aplikacji na iOS, która musi komunikować się z serwerem, aby wykonać swoją pracę. **Udawaj, że jest przeglądarką internetową** W tym podejściu aplikacja pobiera porcję danych (zazwyczaj JSON) z serwera w odpowiedzi na akcję użytkownika (przejście do nowego kontrolera widoku, dotknięcie „Aktualizuj”, cokolwiek) , umieszcza pokrętło lub inny wskaźnik postępu, a następnie aktualizuje widok po zakończeniu żądania. Klasy „modelu” są mapowane bezpośrednio z przychodzącego JSON, a być może nawet niezmienne, i wyrzucane, gdy użytkownik opuści ekran, który został pobrany do wypełnienia. W „czystej” wersji tego podejścia ustawiasz odpowiednie nagłówki na serwerze i pozwalasz NSURLSession i znajomym obsługiwać buforowanie. Działa to dobrze, jeśli można założyć, że użytkownik ma szybką łączność sieciową o niskich opóźnieniach i głównie odczytuje dane z serwera, a nie zapisuje. **Synchronizacja** Dzięki podejściu „synchronizacji” aplikacja utrzymuje lokalny magazyn danych podstawowych obiektów modelu, które mają być wyświetlane użytkownikowi. Odświeża to w odpowiedzi na działanie użytkownika lub okresowo i aktualizuje interfejs użytkownika (za pośrednictwem KVO lub podobnego), gdy model się zmienia. Gdy użytkownik modyfikuje model, zmiany te są wysyłane do serwera asynchronicznie; musi istnieć mechanizm rozwiązywania konfliktów. To podejście jest bardziej odpowiednie, gdy aplikacja musi działać w trybie offline lub w kontekstach sieci o dużym opóźnieniu/wolnej pracy, lub gdy użytkownik zapisuje dużo danych i musi zobaczyć zmiany modelu bez oczekiwania na ruch w obie strony serwera. * * * Czy istnieje trzeci sposób pośredni? Co jeśli mam aplikację, która jest _głównie_, ale nie zawsze czyta, ale tam, gdzie są zapisy, użytkownik powinien natychmiast zobaczyć te aktualizacje w interfejsie użytkownika. Aplikacja powinna nadawać się do użytku w sytuacjach niskiego poziomu / braku sieci (pokazując wszelkie wcześniej zbuforowane dane, dopóki żądanie do serwera nie zdąży odpowiedzieć). Czy mogę uzyskać to, co najlepsze z obu światów bez przechodzenia do pełnego wagi ciężkiej i trudne do uzyskania), ale bez nieumyślnego zaimplementowania wadliwego i niekompletnego klonu Core Data?


title: Najlepsze podejście do testowania szybkości zapytań do bazy danych ravendb

text: Przez jakiś czas szukałem w Internecie, ale nie jestem w stanie znaleźć żadnych przykładów, jak przetestować szybkość zapytań ravenDb. To, co próbuję osiągnąć, to porównanie dwóch sesji session.query i ustalenie, która z tych dwóch ma najlepszą szybkość działania. Jak mogę to zrobić? //Dzięki EDYCJA: Buduję aplikację Notatki mvc, w której użytkownik może utworzyć konto i zapisywać notatki. Powiedzmy, że mam te dwie klasy: public class SingleNote : ContentPage { public string Header { get; ustawić; } ciąg publiczny Uwaga { get; ustawić; } ciąg publiczny Kategoria { get; ustawić; } } I to: public class LoginViewModel { [Wymagane] [Display(Name = "Username")] public string UserName { get; ustawić; } [Wymagane] [DataType(DataType.Password)] [Display(Name = "hasło")] ciąg publiczny Hasło { get; ustawić; } } Czy najlepiej jest umieścić Listę użytkowników singleNotes w LoginViewodel i przechowywać tam wszystkie notatki użytkownika, czy też umieścić właściwość w SingleNote-ravenDocument, która odnosi się do użytkownika. To, co wtedy staram się osiągnąć, to przetestowanie ich pod kątem różnych typów zapytań i uzyskanie z nich najlepszej szybkości działania. Czy mogę więc przetestować to i porównać te dwa zapytania, które uzyskują najlepszą szybkość działania: Przypadek 1: gdzie umieściłem ciąg właściwości UserThatOwnsTheDoc w klasie SingleNote `var listOfSpecificUsersDocuments = RavenSession.Query<SingleNote>() .Where( o => o.UserThatOwnsTheDoc == User.Identity.Name) .ToList();` Przypadek 2: gdzie umieściłem prop List SingleNotes w LoginViewModel var userDocumentWitchIncludesAListOfSingleNotes = RavenSession.Load<LoginViewModel>("UserName/1") ;


title: RSpec vs Test::Jednostka w szynach

text: Nigdy nie byłem tak naprawdę przekonany o korzyściach, jakie uzyskasz przełączając się na RSpec z Test::Unit w Ruby on Rails (pomimo czytania od czasu do czasu o RSpec). Co takiego jest w RSpec, że większość projektów Railsowych go używa? (niektóre przykłady kodu wyraźnie wskazujące na przewagę jednego nad drugim byłyby mile widziane)


title: jeden skompresowany plik js VS skompresowane pliki modułu requiredjs

text: Właśnie zacząłem używać requirejs i uwielbiam to. Mam jednak jedną obawę. Kompresowałem wszystkie moje pliki js do jednego pliku. Nawet z wymaganym optymalizatorem muszę od czasu do czasu ładować pliki modułów z serwera i jestem tym zajęty. Jeśli chodzi o wydajność i wygodę użytkownika, który z nich jest lepszy?


title: Jakie czynniki należy wziąć pod uwagę przy wyborze nazw identyfikatorów?

text: Jakie czynniki muszę wziąć pod uwagę przy wyborze nazw identyfikatorów, takich jak zmienne? Martwi mnie kwestia miejsca, czyli dodatkowego zużycia pamięci przy wyborze dłuższych nazw. Jako przykład weźmy te dwie zmienne: bool noExp = true; bool willNotExpireEver = true; Każdy z nich zajmie pamięć rozmiaru `bool`. Ale co z nazwami zmiennych? Są to przecież postacie, które trzeba gdzieś przechowywać. Gdzie jest przydzielane miejsce dla nich? Czy marnuję tempo, wybierając dłuższe nazwy?


title: Mapa funkcji a instrukcja switch

text: Pracuję nad projektem, który przetwarza żądania, a żądanie składa się z dwóch komponentów: polecenia i parametrów. Obsługa każdego polecenia jest bardzo prosta (< 10 linii, często < 5). Jest co najmniej 20 poleceń, a prawdopodobnie będzie ich więcej niż 50. Wymyśliłem kilka rozwiązań: * jeden duży przełącznik/jeżeli-jeszcze na poleceniach * mapa poleceń do funkcji * mapa poleceń do klas statycznych/ singletony Każde polecenie wykonuje małą kontrolę błędów, a jedynym bitem, który można wyabstrahować, jest sprawdzanie liczby parametrów, która jest zdefiniowana dla każdego polecenia. Jakie byłoby najlepsze rozwiązanie tego problemu i dlaczego? Jestem również otwarty na wszelkie wzorce projektowe, które mogłem przeoczyć. Dla każdego wymyśliłem następującą listę pro/con: **przełącznik** * plusy * utrzymuje wszystkie polecenia w jednej funkcji; ponieważ są proste, sprawia to, że jest to wizualna tabela przeglądowa * nie trzeba zaśmiecać źródła tonami małych funkcji/klas, które będą używane tylko w jednym miejscu * wady * bardzo długa * trudno programowo dodawać polecenia (potrzeba do łączenia przy użyciu domyślnej wielkości liter) **polecenia map -> funkcja** * plusy * małe, wielkości kęsa * można programowo dodawać/usuwać polecenia * wady * jeśli zrobione w linii, tak samo wizualnie jak przełącznik * jeśli nie zostało zrobione w- linia, wiele funkcji używanych tylko w jednym miejscu **polecenia map -> static class/singleton** * plusy * mogą używać polimorfizmu do prostego sprawdzania błędów (tylko jak 3 linie, ale nadal) * podobne korzyści do map -> funkcja rozwiązanie * wady * wiele bardzo małych klas będzie zaśmiecać projekt * implementacja nie wszystkie w tym samym miejscu, więc nie jest tak łatwo zeskanować implementacje **Dodatkowe uwagi:** Piszę to w Go, ale nie sądzę rozwiązanie jest specyficzne dla języka. Szukam bardziej ogólnego rozwiązania, ponieważ być może będę musiał zrobić coś bardzo podobnego w innych językach. Polecenie to ciąg, ale w razie potrzeby mogę go łatwo zmapować na liczbę. Sygnatura funkcji wygląda mniej więcej tak: Odpowiedz Command(List<String> params) Go ma funkcje najwyższego poziomu, a inne platformy, które rozważam, również mają funkcje najwyższego poziomu, stąd różnica między drugą a trzecią opcją.


title: Czy wzorzec Strategia można wdrożyć bez znaczących rozgałęzień?

text: Wzorzec Strategia działa dobrze, aby uniknąć ogromnych konstrukcji if...else i ułatwić dodawanie lub zastępowanie funkcji. Jednak moim zdaniem nadal pozostawia jedną wadę. Wygląda na to, że w każdej implementacji wciąż potrzebna jest konstrukcja rozgałęziająca. Może to być fabryka lub plik danych. Jako przykład weźmy system zamówień. Factory: // Wszystkie te klasy implementują przełącznik OrderStrategy (orderType) { case NEW_ORDER: return new NewOrder(); case CANCELLATION: zwróć nowe Cancellation(); case RETURN: zwróć nowe Return(); } Kod po tym nie musi się martwić, a teraz jest tylko jedno miejsce na dodanie nowego typu zamówienia, ale ta sekcja kodu nadal nie jest rozszerzalna. Wyciągnięcie go do pliku danych nieco poprawia czytelność (wiem, że dyskusyjne): <strategies> <order type="NEW_ORDER">com.company.NewOrder</order> <order type="CANCELLATION">com.company.Cancellation </order> <order type="RETURN">com.company.Return</order> </strategies> Ale to wciąż dodaje standardowy kod do przetwarzania pliku danych - przyznany, łatwiej testowalny jednostkowo i stosunkowo stabilny kod, ale dodatkowy niemniej jednak złożoność. Również tego rodzaju konstrukcja nie sprawdza się dobrze w testowaniu integracji. Każda pojedyncza strategia może być teraz łatwiejsza do przetestowania, ale każda nowa strategia, którą dodasz, to dodatkowa złożoność testowania. To mniej, niż miałbyś, gdybyś _nie_ użył_ wzoru, ale wciąż tam jest. Czy istnieje sposób na wdrożenie wzorca strategii, który łagodzi tę złożoność? A może jest to tak proste, jak to tylko możliwe, a próba pójścia dalej dodałaby tylko kolejną warstwę abstrakcji, przynosząc niewielkie lub żadne korzyści?


title: Czy projekt na licencji BSD wymaga podpisanego oświadczenia od każdego kontrybutora?

text: Dzisiaj przeczytałem na liście mailingowej Fossil SCM: > Problem z BSD polega na tym, że naprawdę powinieneś otrzymać podpisany formularz od każdego > kontrybutora, stwierdzający, że jego wkład to BSD. Jest to automatyczne z > GPL, ponieważ udostępnienie swojego wkładu na > kompatybilnej licencji jest warunkiem wstępnym przeglądania kodu na GPL. To sprawia, że GPL świetnie nadaje się do > środowiska współpracy, z wieloma współtwórcami. BSD jest bardziej liberalne > (mniej uciążliwe) dla czytelników, ale to sprawia, że jest to trochę trudniejsze dla pisarzy, ponieważ muszą teraz wysłać trochę papierkowej roboty. Czy ktoś mógłby wyjaśnić dlaczego i jakie są możliwe konsekwencje braku tak podpisanego oświadczenia od współtwórców projektu?