title: Jak powinienem uporządkować słowa zdania, aby uzyskać lepsze wyniki/utrzymanie i wydajność?

text: Mając to zdanie (zastanów się nad wieloma zdaniami w przyszłości) > David Henderson Houston opatentował pierwszy film rolkowy do kamer w 1881 roku. Mogę zadać pytania typu 1\. Kto opatentował folię rolkową? 2\. Kiedy opatentowano pierwszy film rolkowy do aparatów fotograficznych? 3\. Co opatentował David Houston (w 1881 r.)? Odpowiedź zwróci część lub całość powyższego zdania w formie odpowiedzi kto, kiedy i co. Moje pytanie (i co staram się osiągnąć) to rozdzielić to zdanie w taki sposób, abym mógł je zapisać w DB, mądrze i sprawnie. Pomyślałem o zredagowaniu tego zdania, pozostawiając tylko główne słowa kluczowe/fakty; powiedzmy, że „David Houston opatentował film rolkowy w 1881 roku”. Po tym pomyślałem, że muszę uporządkować słowa. Rozwiązaniem może być więc utworzenie tabel dla rzeczowników, czasowników, przymiotników... oddzielając zdanie we właściwej tabeli. Każde słowo będzie miało swój unikalny identyfikator. W tabeli "odpowiedzi" odpowiedź zostanie zapisana w postaci 2,23,64,4 każdy identyfikator to słowo... i przy odrobinie agorytmu i magii sql (nie o to mi teraz chodzi) zwróci `David Houston opatentował film rolkowy w 1881` na pytanie `kto`. Co myślisz o moim myśleniu o oddzieleniu zdań, tak jak napisałem powyżej? Co sądzisz o tym, jak mam uporządkować słowa, aby uzyskać do nich dostęp za pośrednictwem bazy danych? Czy całkowicie zszedłem z właściwej ścieżki?


title: Policz prawdziwe elementy tablicy

text: W moim kodzie (Python + numpy lub Matlab, ale problem może dotyczyć dowolnego języka programowania tablic), często muszę policzyć liczbę elementów w tablicy, w której elementy są prawdziwe. Zwykle implementuję to jako `sum(x>0.5)`, ale może to być uznane za niewłaściwe. Zobacz _Czy poprawne jest dodawanie wartości logicznych w celu policzenia liczby prawdziwych wartości w wektorze?_. Numpy ma `count_nonzero`, ale jeśli nie ma funkcji specjalnego przeznaczenia, jaki byłby właściwy sposób na napisanie tego? Na przykład w programie `Matlab` mogę napisać `sum(x>.5)` lub `length(find(x>0.5))`. Ta pierwsza jest nieco szybsza, ale może być uznana za niewłaściwą (patrz wyżej). Czy istnieją inne alternatywy dla zliczania liczby prawdziwych wartości w tablicy i jakie powinny być moje kryteria wyboru jednej z nich? (W języku niskiego poziomu można by napisać wyraźną pętlę for, ale jest to wyjątkowo nieefektywny sposób zaimplementowania tego w języku programowania tablic wysokiego poziomu)


title: Klasa tablicy w C# — pytania dotyczące implementacji

text: Uczę się klasy `Array` w C#. Poniżej znajduje się implementacja klasy `System.Array`: [SerializableAttribute] [ComVisibleAttribute(true)] public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable Mam dwa pytania na ten temat: 1. Przeczytałem ta klasa `System.Array` pochodzi od `System.Object`. Ale dlaczego nie widać tego w powyższej definicji? 2. ICloneable jest zaimplementowany w celu umożliwienia głębokiego kopiowania tablicy w przypadku serializacji XML. ICloneable udostępnia tylko jedną metodę - Clone(). Jaka jest zaleta jawnego wdrożenia ICloneable? Dlaczego metoda Clone() nie mogła być bezpośrednio zaimplementowana? Czy jest to rodzaj dostarczania wzorca Marking Interface, w którym określony interfejs jest implementowany tylko w celu przekazania określonej cechy klasy?


title: Zagnieżdżony typ Enum w C++ lub C#?

text: Natknąłem się na powtarzający się problem w kilku moich ostatnich projektach, w których używam wyliczeń do reprezentowania stanu, typu lub czegoś innego, i muszę sprawdzić kilka warunków. Niektóre z tych warunków obejmują wiele wyliczeń, więc kończę z ładunkiem logiki w blokach `switch` i `if`, co mi się nie podoba. Jest to szczególny problem, gdy musisz rzucać rzeczy do i z enum, na przykład gdy enum jest używane do sprawdzania int, które otrzymujesz z żądania internetowego lub obliczenia. Czy w C++ lub C# jest coś, co może być używane jako zagnieżdżone wyliczenie? Coś takiego: enum Zwierzę { Ssak { Kot, Pies, Niedźwiedź }, Ptak { Gołąb, Jastrząb, Struś }, Ryba { Złota Rybka, Pstrąg, Rekin }, Dziobak //srsly co to za rzecz }; Oczywiście może to być deklarowane lub nie, ale masz pomysł. Chodzi o to, że w kodzie można go użyć tak jak `Zwierzę toZwierzę = Zwierzę.Ssak.Kot` a później sprawdzić `if (thisAnimal.IsMember(Animal.Mammal))` lub coś w tym rodzaju. Widziałem EnumSet Javy i uznałem je za całkiem przydatne, ale nie sądzę, aby dokładnie pasowały do funkcjonalności, o którą mi chodzi. W tym przykładzie musiałbyś zadeklarować wyliczenie ze wszystkimi zwierzętami na jednym poziomie, a następnie dodać je wszystkie do odpowiednich zestawów. Oznaczałoby to, że przy użyciu oryginalnego wyliczenia rzeczy z wyższego poziomu, takie jak „Ssak” lub „Bezkręgowiec” pojawiałyby się na tym samym „poziomie”, co coś bardzo specyficznego, jak „Afrykańska jaskółka”, co sugerowałoby, że tak jest (do pewnego stopnia ) wymienne, co nie jest prawdą. Teoretycznie struktura zagnieżdżona, jak powyżej, może pozwolić ci określić wymagany poziom „specyficzności”, więc możesz otrzymać to: enum Animal::Kingdom.Order.Family.Genus.Species { /*rzeczy*/ } Organizm:: Kingdom.Phylum.Class.Order.Family thisThing; taRzecz = Animalia.Cordata; //błąd kompilatora thisThing = Animalia.Chordata.Aves.Passeri.Hirundinidae; //kompilacja OK Czy taka struktura istnieje gdzieś? Jeśli nie, w jaki sposób mogę zbudować jeden dla C++ i/lub C# i pozostawić go tak generycznym i wielokrotnego użytku, jak to tylko możliwe?


title: Rozważania przy projektowaniu typu pliku

text: Mam zamiar zacząć pisać proces zapisywania pewnej struktury danych z kodu do pliku jakiegoś zastrzeżonego, jeszcze niezdefiniowanego typu. Jednak nigdy wcześniej nie projektowałem typu pliku ani struktury. * Czy są jakieś rzeczy, ogólnie rzecz biorąc, które powinienem rozważyć przed rozpoczęciem projektowania? * Czy są tu jakieś przyjęte dobre praktyki? Złych praktyk, których powinienem unikać? * Jakieś absolutne nakazy i zakazy? * Czy ktoś może polecić jakąś dobrą lekturę na ten temat?


title: Delphi nie ma wyrażeń lambda i jestem programistą Delphi, czego mi brakuje?

text: Nie mam pojęcia, czym jest wyrażenie lambda, ale trudno mi uwierzyć, że nie mógłbym wymyślić czegoś z tym samym efektem w Delphi (choć z 900% większym kodem). Jaka jest wielka zaleta wyrażeń lambda, czego mi brakuje i czy jest coś w ulepszeniach RTL po Delphi 2009, które zbliżają się do emulacji mocy C# w tym zakresie?


title: Skąd czerpiesz nowe pomysły na oprogramowanie?

text: Świat tworzenia oprogramowania jest bardzo konkurencyjny. Słyszałem, że aby odnieść sukces, musisz być pierwszym z pomysłem. Każdy wie, jak Bill Gates stworzył IBM DOS na jednej maszynie, jednocześnie budując MS-DOS na innej maszynie (i wszyscy wiemy, jak to się skończyło). Aby być pierwszym, który wymyśli nowe oprogramowanie, gdzie szukasz świeżych pomysłów? **Aktualizacja 26.06.2013:** Przeredagowano to pytanie, próbując je ponownie otworzyć. Bill Gates opracował MS-DOS w tym samym czasie, kiedy został zatrudniony do opracowania IBM DOS. Jako społeczność programistów wszyscy zyskalibyśmy dzięki zrozumieniu, jak wymyślać świetne pomysły na oprogramowanie. Jako programiści zwykle tkwimy w naszych myślach... odświeżające jest słyszeć, jak inni programiści odpadli i wpadli na swoje pomysły. Jest mało prawdopodobne, że będziemy mieli okazję do MS-DOS jak Bill Gates. Zagłosuj na ponowne otwarcie.


title: Jakie korzyści zapewniłby interfejs API do przesyłania strumieniowego na Twitterze?

text: Jestem na bardzo wczesnym etapie pisania aplikacji do wydobywania danych z Twittera w poszukiwaniu określonych typów informacji. Używałem Twitterizera, który okazał się skuteczny w pobieraniu informacji (zapewnia interfejsy do "starego" API opartego na REST i nowszego do strumieniowania). Byłoby to tylko do użytku osobistego, więc nie sądzę, abym zmaksymalizował liczbę wywołań API na godzinę w starym API i wydaje się, że API strumieniowe jest nieco wolniejsze. Na pierwszy rzut oka wydaje się, że REST pasowałby do mnie lepiej, ale zastanawiam się, czy brakuje mi ukrytych zalet korzystania z API przesyłania strumieniowego, które mogłyby przynieść korzyści mojej aplikacji.


title: Programowanie w dziedzinie bezpieczeństwa?

text: Czy istnieje taki rynek dla programistów zainteresowanych bezpieczeństwem (exploity, antywirusy, zapory sieciowe itp.)? Powodem, o który pytam, jest to, że naprawdę kocham tworzenie oprogramowania i interesuję się również bezpieczeństwem. Zastanawiam się, czy mogę zrobić karierę w tej dziedzinie. Jeśli istnieje taki rynek, jakich koncepcji i tematów powinienem się uczyć? Jakieś języki lub system operacyjny? Znam kilka podstawowych pojęć sieciowych, C, Unix..


title: Czy istnieje API do określania okręgów kongresowych?

text: Chcę określić okręg kongresowy na podstawie adresu podanego przez mojego użytkownika. Pozwoli to uniknąć konieczności samodzielnego wyszukiwania przez użytkownika. Czy istnieje takie API? **Uwaga** Próbując go znaleźć, natknąłem się tylko na następujące: * http://www.govtrack.us/developers/api (jednak nie jestem pewien, jak przesłać adres lub kod pocztowy) > następujące zasoby są dostępne w API > > ...Rachunki i uchwały w Kongresie USA od 1973 r. (93. > Kongres). > > ...Para (rachunek, osoba) wskazująca na współsponsorowanie, z datami > dołączenia i wycofania. > > ...Członkowie Kongresu i prezydenci USA od założenia narodu. > > ... Kadencje sprawowane przez członków Kongresu i prezydentów USA. Każda kadencja odpowiada wyborom, co oznacza, że każda kadencja w Izbie trwa dwa lata (jeden „Kongres”), cztery lata jako prezydent, a w Senacie sześć lat (trzy „Kongresy”). > > ... Imienne głosy w Kongresie Stanów Zjednoczonych od 1789 r. Dostęp do sposobu głosowania można uzyskać > przez Vote_voter API. > > ...Jak ludzie głosowali w głosowaniu imiennym w Kongresie Stanów Zjednoczonych od 1789 roku. Zobacz > Vote API. Filtruj pole głosowania, aby uzyskać wyniki konkretnego > głosowania... * http://www.opencongress.org/api (wydaje się być sposobem na znalezienie informacji o kongresie, ale nie okręgach) > Ten interfejs API zapewnia programistom uporządkowany dostęp do wszystkich danych na > OpenCongress, od oficjalnych informacji o rachunkach po wiadomości i relacje na blogach > do generowanych przez użytkowników głosów na rachunki i wiele więcej... > > Ten interfejs API domyślnie zwraca XML. Wszystkie zapytania mogą również zwracać JSON... * https://groups.google.com/forum/?fromgroups=#!topic/opendems-discuss/CeKyi_aANaE (podobne pytanie, brak rozwiązania) > Przeglądałem Open Dems , i zobaczenie, co jest w tym momencie widoczne >, a co nie. Współpracuję z Democrats Abroad i jestem zainteresowany > wykorzystaniem materiałów z laboratorium na ich stronach. >> Szybko przejrzałem API Precinct, które robi więcej i mniej niż > to, czego bym potrzebował. Idealnym zasobem byłby jakikolwiek sposób tłumaczenia adresów przynajmniej na CD (uzyskanie danych okręgu stanowego również byłoby dobre), ponieważ ułatwiłoby to członkom DA dokonanie zmian w wyścigach, takich jak NY26 z zeszłego miesiąca. wyścig... **Aktualizacja** Szukam źródła strony govtrack.us i funkcja 'doGeoCode' może się przydać. view-source: http://www.govtrack.us/congress/members Jeśli nikt nie ma żadnych sugestii, postaram się odejść od tego, co robią.


title: Miara tempa rozwoju

text: Widziałem wiele testów mierzących szybkość wykonywania języków programowania, ale nigdy nie znalazłem testów mierzących szybkość programowania. Słyszałem, że podczas pracy z językami dynamicznymi prędkość programowania wzrasta, ale czy jest na to jakiś dowód? Nie mówię, że języki dynamiczne nie są wydajne, ale chciałbym zobaczyć wyniki badań naukowych, jeśli coś takiego istnieje. Jeszcze lepsze byłyby informacje o obiekcie obsługi technicznej. Czy niektóre języki są łatwiejsze do debugowania niż inne? EDYCJA: Najbardziej interesują mnie różnice między dwoma językami, które są bliskie składni. Na przykład, myślę, że programowanie w C będzie zwykle wolniejsze niż programowanie w Javie; ale czy programowanie w Javie jest szybsze niż programowanie w C#?


title: Czy porównywanie cloud computing do mainframe to zła analogia?

text: Obydwa można postrzegać jako scentralizowane przetwarzanie, ale czy z punktu widzenia programisty jest to powrót do czasów, kiedy dostęp do komputerów, które można było samodzielnie zaprogramować, był ograniczony i kosztowny? Dla mnie to był problem, który rozwiązał komputer. Słyszałem to na http://thisdeveloperslife.com/ 1.0.6 Abstrakcja.


title: klasa wiadomości i stan globalny

text: Jest to projekt front-end, który używa socket.io do całej komunikacji z serwerem. Pozwala to na pchanie, co jest dobre, ale ostatnio poproszono nas o udostępnienie przycisku pauzy. Przycisk pauzy ma na celu zatrzymanie zmiany danych w interfejsie użytkownika, jeśli użytkownik nie chce, aby robił to automatycznie. Obecnie mamy klasę, która otacza gniazdo sieciowe i zapewnia bardzo minimalne zawijanie socket.io. Problem w tym, że nie możemy po prostu wyłączyć gniazdka. Interakcje użytkowników muszą nadal działać, a różne widoki mają różne specyfikacje dotyczące tego, jakie wiadomości należy ignorować. Ostatecznie jest to duża globalna wartość logiczna, bez względu na to, jak ją pokroisz, a to jest do bani. Wolałbym, żeby tak naprawdę nie była to zmienna globalna, więc oto pomysł, który do tej pory miałem: * * * **Narsty Global** // Niewstrzymane gniazdo słuchacza.on('myEvent', function(data ){ // zrób coś }); // gniazdo słuchacza z możliwością wstrzymania.on('myPausable', function(data){ if(window.isPaused){ return false; } // zrób coś }); * * * **Passed Value** // Gniazdo słuchacza, którego nie można wstrzymać.on('myEvent', function(data){ // do rzeczy }); // gniazdo słuchacza z możliwością wstrzymania.on('myPausable', function(data, isPaused){ if(isPaused){ return false; } // zrób coś }); * * * **Wrapped Method** // Gniazdo słuchacza, którego nie można wstrzymać.on('myEvent', function(data){ // do rzeczy }); // gniazdo słuchacza z możliwością wstrzymania.onLive('myPausable', function(data){ // zrób coś }); * * * **Separate Class** // Gniazdo słuchacza, którego nie można wstrzymać.on('myEvent', function(data){ // do rzeczy }); // Wstrzymany detektor liveData.on('myPausable', function(data){ // zrób coś }); Obecnie przez gniazdo odbywa się DUŻO wiadomości, a w interfejsie użytkownika będzie tylko jeden przełącznik „PAUSE”, więc należy to zrobić ostrożnie. Doceniane są porady i najlepsze praktyki. Dzięki ludzie.


title: Czym w praktyce jest Domain Driven Development?

text: O Domain Driven Development usłyszałem od dewelopera w okolicy. Mówił to tak, jakby chodziło tylko o srebrną kulę do zmieniających się wymagań. Przeczytałem wiki. Wciąż niezbyt jasne. Czym jest „3D” w praktyce? Czy to naprawdę takie niesamowite, że teraz diagramowanie klas UML jest po prostu przestarzałe?


title: Odpowiednik typowych działań IntelliJ w vim dla rozwoju C

text: Próbuję przejść z IntelliJ IDEA na vim, głównie do rozwoju C. Jakie są odpowiedniki następujących wspólnych funkcji/zadań IntelliJ w vim (i jaka wtyczka jest wymagana, jeśli w ogóle)? **Nawigacja w źródłach** 1) Znajdź plik w projekcie według nazwy (Ctrl + Shift + N) 2) Przejdź do Deklaracji [Function] (Ctrl + B / Ctrl + Prawy przycisk myszy) 3) Wyskakujące okienko struktury pliku (Ctrl + F12 ) 4) „Do przodu” (Ctrl + Alt + W prawo) 5) „Wstecz” (Ctrl + Alt + W lewo) **Refaktoryzacja** Pamiętaj, że w przypadku poniższych czynności nie chcę tylko „znaleźć/zamienić”. Jeśli zmienię definicję pojedynczej funkcji, chcę, aby wszystkie wystąpienia tej funkcji zostały zaktualizowane w projekcie (jako pojedyncze polecenie). 6) Zmień nazwę pliku / funkcji / zmiennej (Shift + F6) 7) Zmień sygnaturę funkcji (Ctrl + F6) 8) Funkcja wbudowana (Ctrl + Alt + N) 9) „Bezpieczne usuwanie” (Alt + Delete) Bezpieczne usuwanie pomaga usunąć plik / funkcja / zmienna bez przerywania kompilacji. Tak więc (dla C) możesz usunąć plik *.h ze swojego projektu, z operacją wyświetlającą inne pliki, które importują funkcje zdefiniowane w tym nagłówku i dając szansę na anulowanie usuwania. **Inne** 10) Pokaż użycie (Ctrl + Alt + F7) To coś innego niż „grep”, ponieważ daje opcję wykluczenia dopasowań w komentarzach, dokumentacji itp. 11) Otocz za pomocą... (Ctrl + Alt + T) W IntelliJ najczęściej używam tego do otaczania wywołań metod za pomocą „try/catch/finally”. Może nie jest to coś, co jest bardzo potrzebne w rozwoju C? 12) Szybka dokumentacja (Ctrl + Q) IntelliJ wyskakuje JavaDoc w małym oknie, dając ci możliwość wyboru spośród możliwych dopasowań (jeśli jest więcej niż jedno). Tutaj spodziewałbym się równoważności, z wyjątkiem nowo otwartego podzielonego bufora. 13) Używanie Control-Space do uzupełniania słów kluczowych.


title: Podziel repozytorium git na dwie części?

text: Prawie rok temu zacząłem pisać grę. W tamtym czasie tylko się bawiłem, ale teraz podchodzę do tego całkiem poważnie. W miarę rozwoju przejmuje obowiązki głównego silnika gry, a także logiki rzeczywistej gry. W pewnym momencie zdecydowałem, że powinienem je rozdzielić i wyznaczyć grę oraz silnik gry. Pamiętałem o tej separacji, gdy programowałem przez ostatnie 8 miesięcy, ale nigdy ich nie rozdzieliłem. Teraz zamierzam w końcu ruszyć z tym do przodu. Projekt znajduje się teraz w jednym repozytorium git. Chciałbym mieć dwa repozytoria; jeden dla silnika gry i jeden dla gry. Mam dwa konkretne pytania: 1) Jak podzielić repozytorium? Chciałbym zachować historię, więc myślę, że po prostu skopiuję repozytorium, przycię dwa, a potem się zamelduję. Jakieś lepsze pomysły? 2) Czy powinienem dodać moje zasoby gry (modele, obrazy, dźwięki...) do repozytorium gier, czy powinienem zrobić trzecią dla nich? Mam sporo zalet, a wiele z nich może ulec zmianie, więc może to powodować niewygodną ilość hałasu.


title: Czy mogę używać CodeSynthesis XSD (mapowanie C++/drzewa) razem z biblioteką na licencji GPLv3?

text: Czy można napisać projekt open source, który wykorzystuje wygenerowany kod z CodeSynthesis XSD (C++/Tree), a następnie połączyć go z biblioteką innej firmy, która jest licencjonowana na podstawie **GPL w wersji 3**? Kilka podstawowych informacji: CodeSynthesis XSD jest objęty licencją **GPL w wersji 2**, ale z dodatkowym wyjątkiem FLOSS (http://www.codesynthesis.com/projects/xsd/FLOSSE). Kod źródłowy C++ wygenerowany z CodeSynthesis XSD (C++/Tree) musi być połączony z **Xerces** (http://xerces.apache.org/xerces-c/) na licencji **Apache License 2.0** . **Aktualizacja** Podobne pytanie umieściłem na liście dyskusyjnej xsd-users dwa lata temu, ale nie do końca zrozumiałem odpowiedzi. W tym wątku e-mail napisałem: _Myślę, że jest to oprogramowanie na licencji GPL w wersji 3, które nie pozwala na łączenie się z oprogramowaniem, którego nie można „relicencjonować” na GPL w wersji 3 (na przykład oprogramowanie GPL w wersji 2). Obejmuje to również XSD, ponieważ wyjątek FLOSS nie daje pozwolenia na „ponowną licencję” XSD na GPL w wersji 3._


title: Czy algorytm genetyczny jest właściwym podejściem do tego problemu?

text: Próbuję obliczyć zestaw przedmiotów, które powodują największe obrażenia w grze wideo. Istnieje około 50 różnych przedmiotów, z których możesz wybrać 6. Każdy przedmiot stwarza różne warunki. Piszę małą aplikację w javascript, która oblicza twoje obrażenia na podstawie przedmiotów. Czy mogę wykorzystać algorytm genetyczny, aby dowiedzieć się, które kombinacje przedmiotów są najsilniejsze? A może brutalna siła jest akceptowalna dla tego rozmiaru problemu? Czy jest inny sposób?


title: Od czego zacząć analizę i projektowanie oprogramowania?

text: Rozpoczynam rozwój dużego projektu oprogramowania zorientowanego na bazy danych. Mam na myśli pełny obraz oprogramowania. Muszę wykonać projektowanie przy użyciu UML. Ponieważ w UML istnieją różne narzędzia, takie jak przypadek użycia, diagram klas, wykres stanu, diagram komponentów, diagram wdrażania, diagram aktywności i tak dalej, od czego powinienem zacząć moje projektowanie. Czy powinien pochodzić z Usecase czy z Class Diagram, czy z State Chart? Jakie podejście pomoże mi umieścić obraz mojego umysłu w projekcie?


title: Jaki jest najlepszy zestaw narzędzi do pisania długich tekstów technicznych?

text: Poszukuję zestawu narzędzi w postaci jednej lub kilku aplikacji, które można wykorzystać do pisania długich tekstów technicznych (np. wprowadzenie do języka programowania). * Jakie aplikacje (lub kombinacje) są do tego odpowiednie? * Jak należy skonfigurować wspomniane aplikacje (na przykład jak skonfigurować MS Word, aby najlepiej pasował do pisania tekstu technicznego)? * Jak radzisz sobie z kodem źródłowym, kolorowaniem składni i formatowaniem? * W przypadku kilku aplikacji, jak współdziałasz między nimi?


title: Czy istnieje bardziej wydajny sposób filtrowania dużych tablic niż preg_match()?

text: Mam dziennik, który buduje nasza aplikacja internetowa. Każdego miesiąca zawiera około 16 000 wpisów ciągu o średniej wartości zdania tekstu. Aby filtrować/przeszukiwać je w naszym panelu administracyjnym, skrypt używa `preg_match()`, ale wydaje się, że trwa to wieki i przekracza limit 30 sekund. Wyizolowałem, że rzeczywiście jest to `preg_match()`, który powoduje przekroczenie limitu czasu. Czy istnieje wydajniejszy sposób przeszukiwania wartości w dużej tablicy dla danych wejściowych użytkownika?


title: Funkcje obliczane w pętli

text: Właśnie czytałem rozdział o funkcjach obliczanych przez LOOP i mam następujące pytanie: Czy można ponumerować każdy program LOOP za pomocą algorytmu? Formalnie: Czy można mieć program LOOP M, s.t M(n,m)=P_n(m) (wejście to n,m. wyjście to P_n(m), gdzie P_n jest numeracją programów pętli).


title: Obieg aplikacji

text: Jestem w trakcie planowania nowej aplikacji, aplikacja będzie napisana w PHP (przy użyciu frameworka Symfony 2), ale nie jestem pewien, na ile to jest istotne. Aplikacja będzie oparta na przeglądarce, chociaż w końcu będzie dostęp API dla innych systemów do interakcji z danymi przechowywanymi w aplikacji, ponownie prawdopodobnie nie ma to znaczenia w tym momencie. Aplikacja zarządza kartami SIM wielu różnych dostawców — każda karta SIM należy do jednego dostawcy, ale jeden klient może mieć wiele kart SIM u wielu dostawców. Aplikacja pozwala użytkownikowi na wykonywanie działań na karcie SIM - na przykład Aktywuj, Zablokuj, Sprawdź jej stan itp. Niektórzy dostawcy udostępniają API do tego celu - czyli jeden punkt dostępowy z wieloma metodami, np. `activateSIM`, `getStatus`, `barrSIM` itp. Nazwy metod różnią się dla każdego dostawcy, a niektórzy dostawcy oferują metody dodatkowych funkcji, których inni nie oferują. Niektórzy dostawcy nie mają interfejsów API, ale oferują te metody, wysyłając wiadomości e-mail z załącznikami — załączniki to zwykle plik CSV, który zawiera odniesienie do karty SIM i wymagane działanie — wiadomość e-mail jest przetwarzana przez dostawcę i udzielana odpowiedź po zakończeniu czynności . Dla przykładu – frontend mojej aplikacji dostarczy klientowi listę posiadanych przez niego kart SIM i da mu dostęp do działań, które są dostarczane przez dostawcę każdej konkretnej karty SIM – niektóre metody mogą wymagać dodatkowych danych, które będą przechowywane w backendzie lub pobierane z frontendu użytkownika. Gdy użytkownik wybierze swoją akcję i doda wymagane dane, zajmę się procesem w backendzie i przekażę albo natychmiastową informację zwrotną, w przypadku dostawców z API, albo rozpocznę proces wysyłając e-mail i czekając na odpowiedź przed przetwarzanie go i aktualizowanie backendu, aby przy następnym sprawdzeniu przez użytkownika karty SIM jej stan był poprawny (tj. zaktualizowany przez proces backendu). Moim powodem stworzenia tego pytania jest to, że utknąłem !! Nie rozumiem, jak podejść do rzeczywistej logiki przepływu pracy. Myślałem o stworzeniu interfejsu dostawcy z najczęstszymi metodami `getStatus`, `activateSIM` i `barrSIM`, a następnie implementacją tego interfejsu dla każdego dostawcy. Więc `class Provider1 implementuje Provider` \- Następnie użyj Factory, aby utworzyć wymaganą klasę w zależności od wybranej przez użytkownika karty SIM i wywołania wybranej metody. Działałoby to dobrze, gdyby wszyscy dostawcy oferowali te same metody, ale nie — istnieje podzbiór, które są wspólne, ale niektórzy dostawcy oferują dodatkowe metody — jak mogę to elastycznie zaimplementować? Jak poradzić sobie z procesami, w których przepływ pracy jest inny - tj. niektóre metody wymagają zwrócenia wywołania i wartości API, a niektóre wymagają wysłania wiadomości e-mail, a kolejny etap procesu nie rozpoczyna się do momentu otrzymania odpowiedzi e-mail? . Proszę pomóż ! (Mam nadzieję, że to czytelne pytanie i że jest to właściwe miejsce, w którym należy zadać pytanie) **Aktualizacja** Wydaje mi się, że staram się uniknąć dużego stwierdzenia `if` lub `switch`/`case` - niektóre wzorzec projektowy, który daje mi elastyczne podejście do wdrażania tego rodzaju przepływu pracy płynów .. ktoś?


title: Szyfrowanie adresów URL a kodowanie

text: W tej chwili informacje, które nie są lub częściowo wrażliwe, są przesyłane z jednej strony na drugą za pośrednictwem GET w naszej aplikacji internetowej. Takich jak identyfikator użytkownika lub żądany numer strony itp. Czasami przekazywane są nieco bardziej wrażliwe informacje, takie jak typ konta, uprawnienia użytkownika itp. [EDYTUJ: Mogłem to źle sformułować, nie przekazuję identyfikatora sesji ani rzeczywistych uprawnień użytkownika, po prostu NIE -dane wrażliwe - po prostu nie chcę, aby użytkownik łatwo widział słowa, nie ma znaczenia, czy bardziej techniczny użytkownik może je odczytać, ponieważ nie może wyrządzić żadnych szkód i spowodować obaw o bezpieczeństwo. _readthe chat with @delnan_] Obecnie używamy base64_encode() i base64_decode() tylko do odczłowieczenia informacji, aby użytkownik końcowy nie był zaniepokojony. Czy jest to dobra praktyka lub powszechne miejsce, aby adres URL GET był szyfrowany, a nie tylko PHP base64_encoded? Być może używając czegoś takiego: $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); $odszyfrowane = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($klucz), base64_decode($zaszyfrowane), MCRYPT_MODE_CBC, md5(md5($klucz))), "\0"); Czy to za dużo, czy za mało mocy dla czegoś tak powszechnego jak URL GET.


title: Czy możesz mieć problemy z korzystaniem z forów programistycznych lub pytań i odpowiedzi w pracy?

text: **Czy możesz mieć kłopoty z używaniem forów programistycznych w pracy?** Chciałbym wiedzieć, kiedy jest to akceptowalna praktyka i ile kosztuje **za dużo**, gdy zamierza używać StackOverflow lub Programrs.SE, dla przykład. Deweloperzy i menedżerowie mogą mieć na to różne perspektywy.


title: Dlaczego Scheme jest moim pierwszym językiem na uniwersytecie?

text: Codziennie słyszę o C, C++, Javie, gdy ludzie zaczynają mówić o informatyce, ale na moich pierwszych zajęciach z informatyki jesteśmy proszeni o pisanie w Scheme (DrRacket). Dlaczego? Jakie wpłynie to na moje przyszłe rozumienie programowania? AKTUALIZACJA: Skończyłem pierwszy semestr, ale nie skończyłem do końca ze Scheme. W moim drugim semestrze (obecnym) zabraliśmy się do programowania w C. Na początku uczenie się wskazówek było frustrowane, ale teraz czuję się znacznie lepiej. Nie ma nic więcej do powiedzenia. Próbuję nauczyć się Javy (lub C++?) dla części OOP, której mi brakuje. Póki co najbardziej lubię programowanie funkcjonalne. Lambda jest po prostu fascynująca. :)


title: Uogólnić czy rozwiązać problem?

text: Który z tych dwóch programistów jest „lepszy” z menedżerskiego punktu widzenia? Pierwszym programistą jest Albert. Każesz Alowi zrobić system, który poda ci sól przy stole. Robi to w niecały dzień. To działa dobrze. Drugim programistą jest Ben. Benowi _mówiono_, że ma stworzyć program do przekazywania soli, a po dwóch dniach nadal nad tym pracuje. ![Ogólny problem](http://i.stack.imgur.com/FZKx7.png) Na dłuższą metę zaoszczędzi to czas...jeśli potrzebujesz pieprzu, ketchupu itp. Nie ma żadnych wyraźnych wskazówek że będzie taka potrzeba, ale nie jest to nieprawdopodobne. Kto jest lepszym programistą do pracy pod tobą, jako menedżer?


title: Jak intuicyjnie zezwolić na filtrowanie Filmów w mojej aplikacji? (projekt GUI)

text: Nie jestem pewien, czy to jest właściwe miejsce, aby o to zapytać, ale napisałem aplikację, która pokazuje wszystkie filmy na komputerze z odpowiednimi informacjami, takimi jak gatunek, reżyser, ocena itp. Zastanawiam się, jak mogę to zrobić, aby użytkownik może je filtrować na podstawie kryteriów, takich jak gatunek, ocena itp.? Większość z nich to wyliczenia i myślałem o użyciu do nich `ComboBox`, ale powinny one być w stanie określić więcej niż 1 gatunek. Czy więc powinienem używać dla nich kontrolek `ListBox`? Wtedy trudniej będzie przedstawić wszystkie te opcje w listach. Nie widziałem żadnych przykładów aplikacji robiących podobne rzeczy, dlatego nie jestem pewien. Jakieś pomysły? ![tutaj podaj opis obrazu](http://i.stack.imgur.com/FXk8Q.png)


title: Projektowanie złożonych konstruktorów zapytań w java/jpa/hibernate

text: Muszę programowo budować złożone zapytania sql w oparciu o duże warunki filtrowania. Na przykład poniżej znajduje się kilka przykładowych/hipotetycznych warunków filtrowania, na podstawie których muszę pobrać użytkowników Kraj: indie Stany: Andhra Pradesh(AP), Gujarat(GUJ), karnataka(KTK) Dzielnice: Wszystkie dystrykty w AP z wyjątkiem 3 dystryktów, 5 dowolnych powiatów z GUJ, wszystkie powiaty z KTK z wyjątkiem 1 powiatu Miasta: Wszystkie miasta w AP, wszystkie miasta z wyjątkiem kilku, obejmują tylko 50 konkretnych miast z KTK Wsie: podobne warunki jak powyżej z różnymi kombinacjami... Obecnie mamy zapytanie builder, który jest bardzo złożony i niełatwy do modyfikacji/przefabrykowania w celu ulepszeń. Myśląc więc o całkowitym przeprojektowaniu tego. Jakieś sugestie dotyczące tego, jak programowo zbudować tego rodzaju złożone konstruktory zapytań, korzystając z najlepszych praktyk/wzorców projektowych?


title: Wykorzystywanie kreatywności z „czasem wolnym”

text: Niektóre firmy odkryły, ku swojemu zdziwieniu i zyskowi, że programiści to bardzo kreatywni ludzie. Myślę na przykład o Google i Atlassian, które zezwalają na regularne (comiesięczne, jak sądzę) „darmowe dni”, podczas których programiści mogą pracować nad tym, co chcą (za zgodą), a firma czerpie korzyści. Przytoczone przykłady to nowe produkty, poprawki błędów, których nikt wcześniej nie chciał poprawiać, tworzenie nowych zespołów itp. Innym rezultatem (i być może pierwotnym celem) jest to, że przez pozostałe dni między wolnymi czasami programiści mają większą motywację. Czy jest więcej poparcia dla tej teorii, że umożliwienie „kontrolowanej” twórczości jest dobre dla motywacji i morale, czy więcej przykładów sukcesów przy takim podejściu?


title: Czy mogę zmienić nazwę projektu w codeplex przed publikacją?

text: Rozpocząłem repozytorium projektu na codeplex i jeszcze go nie opublikowałem. Zdałem sobie sprawę, że nazwa, którą mu nadałem, nie jest odpowiednia i chciałbym zmienić nazwę projektu przed jego publikacją (mają termin 30 dni). Nazwa katalogu, którego potrzebuje klon hg, tj. `dirname` w `https://hg01.codeplex.com/dirname` jest ok, ale projekt pojawia się pod inną nazwą w codeplex, a jest to nazwa I chcesz się zmienić. czy to możliwe?


title: CSS dla osób niedowidzących?

text: Więc kiedy uczyłem się HTML, natknąłem się na CSS. To ciekawe, ponieważ dzięki CSS możesz sprawić, że strona internetowa będzie fajniejsza lub piękniejsza. Ale ponieważ chodzi bardziej o kolory, wzory, style itp., nie mogę poznać wyników moich kodów CSS. Jako osoba niedowidząca, dlaczego mam uczyć się CSS, skoro osoby widzące zawsze mogą zaprojektować stronę internetową lepiej ode mnie, ponieważ widzą? 1. Czy są tu niewidomi programiści, którzy piszą CSS? Jak to zrobiłeś? 2. Czy powinienem całkowicie zignorować CSS i pozostawić go widzącym programistom? A może są rzeczy w CSS, które mogę zrobić bez pytania ludzi, żeby zajrzeli na moją stronę, żeby wiedzieć, czy jest dobrze zaprojektowana?


title: Programowanie dla iPhone'a

text: Jaki jest najlepszy sposób na rozpoczęcie tworzenia iPhone'a, jeśli jesteś doświadczonym programistą C++ lub C#? Większość książek zakłada, że nie wiesz nic lub coś. Jakie są kroki, aby to osiągnąć? Np. najpierw naucz się celu C (powiedzmy), potem naucz się kakao... Interesują mnie książki/zasoby. Przeczytałem Pierwsze kroki z tworzeniem iPhone'a z Oreilly (brakująca książka z podręcznikami), ale to tylko przegląd programowania i skoncentrowało się bardziej na wprowadzeniu Twojej aplikacji do sklepu z aplikacjami. Potrzebuję zasobów, które pomogą mi zacząć kodować. Inne pytania: Ile z celu C musisz znać? Jak rozpocząć naukę podstaw kakao? Czy mogę bezpośrednio rozpocząć pracę z kakaowym dotykiem, czy też muszę najpierw poznać strukturę MAC kakao? Dane wejściowe od kogoś, kto był w tej samej sytuacji (znaj c++/c#, ale nie masz pojęcia o programowaniu w macie/celowym c/cocoa) bardzo by pomogły.


Pracuję jako programista od ponad 10 lat. W tym czasie miałem własne małe projekty, w których tworzyłem narzędzia, aplikacje i gry. Nie znalazłem żadnego solidnego rozwiązania do przechowywania mojej pracy. Zawsze fajnie jest wrócić do kodu i zobaczyć, jak radziłeś sobie wcześniej i jak byś to zrobił teraz. To po prostu praca, której niefortunnie się traci. Istnieje rozwiązanie SVN, takie jak Google Project Hosting. Jednak nie jestem zainteresowany udostępnianiem mojego kodu ani tworzeniem go jako open source. Obecnie hostuję własny serwer SVN. Oto moje pytanie: Jak i gdzie przechowujesz swoją prywatną pracę/kod źródłowy? Wymagania: * Wersjonowanie kodu źródłowego * Kopia zapasowa * Preferuje bezpłatne * **Edycja:** Zdalny dostęp **Edycja:** Użyłem Dropbox + TrueCrypt + SVN. Niestety jesteś ograniczony do 5 GB.


title: Kiedy używasz Java Persistence API (JPA), która warstwa jest właścicielem encji?

text: Czy podczas pracy z adnotacjami na encjach w JPA encje te należą do warstwy modelu czy warstwy trwałości? Czy musi istnieć jakiś klon encji (prosty JavaBeans) w warstwie modelu, aby można go było całkowicie oddzielić od JPA? Jaka jest tutaj najlepsza praktyka?


title: Czy programowanie lub informatyka w ogóle dotyczy algorytmów?

text: Jako doktorant coraz częściej uznaję, że prestiżowe firmy (takie jak Google, Facebook, Microsoft,...) umieszczają pytania dotyczące algorytmów w swoich testach i rozmowach kwalifikacyjnych. Kilka startupów, do których aplikowałem, również pytało o algorytmy. Zastanawiam się, czy płynność algorytmów jest najważniejsza dla programisty w tych firmach? Jeśli odpowiedź brzmi „tak”, jaka jest najlepsza metoda lub zasoby, aby można było skutecznie uczyć się i ćwiczyć algorytmy? Wydaje mi się, że nie interesuje mnie rozwiązywanie pozornie zbyt skomplikowanych problemów, które można znaleźć w większości podręczników lub stron internetowych. Chociaż łatwo zrozumieć podstawowe algorytmy (takie jak sortowanie szybkie, sortowanie bąbelkowe,...), ogromnie trudno mi je później zapamiętać i ponownie wykorzystać. Dziękuję. P/S: Jeśli pytasz mnie, co lubię, to budowanie dobrego oprogramowania, które innowacyjnie rozwiązywać problemy użytkowników. Przypuszczam, że niekoniecznie oznacza to, że oprogramowanie musi być bardzo skomplikowane.


title: Czy powinienem wymagać od użytkowników rejestracji, aby korzystać z mojej aplikacji?

text: Jestem więc bardzo blisko wydania aplikacji, nad którą pracowałem, a serwer, z którym się integruję, pozwala mi rejestrować użytkowników. Zastanawiałem się więc, czy powinienem wymagać od użytkowników zarejestrowania się w aplikacji przed jej użyciem. Aplikacja nie „potrzebowałaby” rejestracji dla żadnej z funkcji (chociaż mam pewne pomysły na przyszłe aktualizacje, w których dane użytkownika mogą być zapisywane na jego koncie w chmurze), ale nadal byłoby miło mieć listę Zarejestrowani Użytkownicy. Jednym z powodów, dla których powinienem wymagać od użytkowników rejestracji, jest to, że przy pierwszym uruchomieniu aplikacji użytkownik musi zaakceptować moją politykę prywatności i warunki użytkowania; więc gdybym zrobił ekran rejestracji, może to być łatwiejsze i prostsze, niż bombardowanie użytkownika grubym językiem prawniczym. Ale obawiam się, że wymaganie rejestracji użytkownika będzie mnie kosztować niektórych użytkowników. Kiedyś pobrałem aplikację i chciałem, żebym się zarejestrował, ale nigdy nie byłem leniwy. Czy to uzasadniona obawa przed wymaganiem rejestracji? Dziękuję! **Edytuj:** Aby wyjaśnić, czy mam wymagać rejestracji, jakie informacje mam zebrać: imię i nazwisko, adres e-mail, hasło? inny? I wcale nie spamowalibyśmy ich e-mailami. Mamy również bardzo silną politykę prywatności i bezpiecznie przechowujemy wszystkie dane.


title: Jak trudno byłoby firmie Microsoft wspierać wdrażanie aplikacji .net na OSX i Linux?

text: Biorąc pod uwagę zapowiedź wersji tabletu z systemem Windows 8 i więcej szczegółów na temat sklepu z aplikacjami, byłoby niesamowite, gdyby ta infrastruktura mogła zostać wykorzystana na pulpicie OSX lub MonoTouch. http://www.wired.com/gadgetlab/2011/09/windows-8-experience/ Technicznie jak trudno byłoby to zrobić firmie Microsoft? Czy jedyny problem jest strategiczny? Wiem wszystko o Mono, to jest pytanie o obsługę Microsoft bezpośrednio z Visual Studio.


title: Dlaczego nazywa się to „tablicą mieszającą” lub „funkcją mieszającą”? Hash nie ma tu dla mnie żadnego sensu

text: To już około 4 lata rozwoju, którego używam, słucham, mówię i wdrażam tablice haszujące i funkcje haszujące. Ale naprawdę nigdy nie rozumiem, dlaczego nazywa się to haszem? Pamiętam pierwsze dni, w których zacząłem programować, ten termin był dla mnie trochę **kłopotliwą terminologią**. Nigdy nie domyśliłem się, co to jest, **na podstawie jego nazwy**. Właśnie eksperymentalnie zrozumiałem **co robi** oraz **dlaczego i kiedy powinniśmy go używać**. Jednak wciąż czasami próbuję dowiedzieć się, dlaczego nazywa się to **hash**. Nie mam problemu z **tabeli** lub **funkcją** i szczerze mówiąc, są to dość dedukcyjne, racjonalne terminy. Myślę jednak, że zamiast skrótu można użyć lepszych słów, takich jak **klucz** lub **wyjątkowość**. Nie **tabeli kluczy** ani **tabeli wyjątkowości**. Według mojego słownika hasz oznacza: 1. Smażone danie z ziemniaków i mięs (bardzo nieistotne) 2. Symbol # (znak liczby AKA, znak funta itp.) (nadal nieistotny, może po prostu błędne nazewnictwo) 3. Zastosuj algorytm do ciągu znaków (nadal nie ma nic wspólnego z **wyjątkowością** , która jest najważniejszą cechą tablicy haszującej) 4. Wytnij jedzenie 5. Inny termin na haszysz Czy ktoś wie, dlaczego nazywa się to haszem?


title: Jakie są konsekwencje uruchomienia Hash-Life w O(log n)?

text: Po przeczytaniu o algorytmie HashLife odkryłem, że działa on w O(log n). Gra w życie jest również Turing Complete, więc teoretycznie powinniśmy być w stanie uruchomić dowolny algorytm na „komputerze” skonstruowanym w GoL. Czy w konsekwencji złożoności czasowej HashLife algorytmy mogą działać szybciej? np. jeśli algorytm potrzebuje 10 sekund na uruchomienie na komputerze, czy może działać szybciej w HashLife na tym samym komputerze? Przykład: uruchomiony algorytm wymaga wykonania 1000 instrukcji. Pewien komputer może przetwarzać 1 instrukcję na sekundę. Tak więc uruchomienie tego algorytmu zajmuje 1000 sekund. Teraz, jeśli weźmiemy ten sam algorytm i uruchomimy go na "komputerze" w GoL. Czy ze względu na to, że HashLife jest O(log n) zajęłoby to 3 sekundy? (zakładając O(log₁₀n)) Prawdopodobnie coś przeoczam, ponieważ byłoby to bardzo ważne odkrycie, ale mimo to myślałem, że zapytam o to tutaj.


title: testowanie: które warstwy kodu powinienem przetestować?

text: Powiedz, że mam ten kod: Projekt { public function load() { $this->loadProduct(); $this->loadService(); ... } public function loadProduct() { try { $this->product = new Product(); $this->product->spec = $this->product->loadSpecs($this->a, $this->b, $this->c); } catch (\BadFunctionCallException $e) { $this->error = true; $this->emsg = $e->getMessage(); } } } Pytania: 1. Czy testuję tylko funkcję `loadProduct`? 2. Czy testuję tylko klasę `Product`? 3. Czy mam przenieść kod `loadProduct` do `load` (tym samym usuwając funkcję `loadProduct` z istnienia i testując większą funkcję `load` (jako część klasy `Design`)? Powiedzmy, że mogę chcieć to zrobić w ramach czyszczenia/reorganizacji starszego kodu 4. Coś jeszcze?


title: Zmiana rozmiaru obrazu z niecałkowitym współczynnikiem konwersji

text: Zmieniam rozmiar obrazu na podstawie niecałkowitego współczynnika konwersji (w rzeczywistości obrazu bmp). Rozumiem, jak działa zmiana rozmiaru, tylko bez liczby dziesiętnej. Na przykład, gdyby współczynnik wynosił 2, po prostu zapisywałbym poszczególne piksele dwukrotnie w pliku wyjściowym. Tak naprawdę nie można napisać 1,5 piksela, jeśli współczynnik wynosiłby, powiedzmy, 1,5. Koncepcyjnie, jak to może się rozegrać?


title: Jaka jest różnica między wydaniem kodu na licencji BSD a udostępnieniem go jako domeny publicznej?

text: Możesz używać kodu na licencji BSD dla **wszystkich** , nawet komercyjnego oprogramowania o zamkniętym kodzie źródłowym. Czym się to różni od udostępnienia go jako domeny publicznej?


title: Czy pętle komunikatów Win32 mogą przetrwać po przeniesieniu do natywnego Linuksa?

text: Chciałbym przenieść dużą bibliotekę DLL Win32 do macierzystego systemu Linux w C++. Nie sądzę, abym mógł używać Wine do biblioteki DLL takiej jak moja, ponieważ użytkownicy tej biblioteki musieliby wtedy również być w Wine, a wtedy wszyscy jęczeliby ... Jako programista Windows C++, nie robię tego (jeszcze ) znać usługi interfejsu GUI w Linuksie, ale jeśli logicznie działa na czymś takim jak pętle komunikatów win32, czcionki, mapy bitowe, regiony unieważniania, wywołania getmessage() i tak dalej, powinno to być dość proste ponowne mapowanie mój istniejący kod. Więc na co tu patrzę, remapę czy przepisanie? Ścieżka do takich rzeczy musi być już przetarta.


title: Co zaimplementować najpierw: GUI czy backend?

text: Mogę więc kodować oba, ale jakiej bazy użyć do programowania? Jeśli chodzi o TDD, czy minimalne aspekty GUI powinny być używane jako ziarno, z którego można rozwijać logikę backendu? czy też backend powinien dać początek logice kontrolującej GUI?


title: Jak modelować dane więcej niż jedno „nazwisko”?

text: W krajach hiszpańskojęzycznych używamy więcej niż jednego nazwiska, na przykład: > Imię ↘ ↙ Nazwisko > **Pedro Arturo Rodríguez Loyola** > Drugie imię ↗ ↖ (?) Próbuję modelować dane dla imienia pacjenta, w nasz kraj jest ważny, więc nie mogę pominąć drugiego nazwiska, ale chciałbym zbudować aplikację, która będzie miała sens dla innych programistów, szczególnie z krajów anglojęzycznych. * * * Stworzyłem podobne pytanie na English.SE, zawiera ono pewne informacje na temat tego, dlaczego ważne jest utrzymywanie obu wartości.


title: Czy robię to źle z warstwą Hibernate DAO? tj. Rozdęcie funkcji

text: Do szybkiego prototypowania aktywnie wykorzystuję Hibernate. Ostatnio wróciłem do starego projektu i zastanawiałem się, dlaczego mam dużo DAO z tym, co, jak podejrzewam, jest powszechnie nazywane rozdęciem funkcji. Np. Mam DAO dla pojedynczych podmiotów, które zawierają od 15 do 20 metod każda. Ostatnio używam Hibernate Generic D.A.O. Framework, ale nadal uważam, że ten sam problem pojawia się, gdy próbuję stworzyć niestandardową logikę dostępu do danych, a mój kod Olfaction zaczyna wykrywać nieprzyjemne zapachy. Czy istnieją wytyczne dotyczące tych scenariuszy?


title: Czy istnieją standardy oddzielania różnych rodzajów komentarzy (objaśniające, debugujące, do zrobienia itp.)?

text: Od jakiegoś czasu mam w zwyczaju rozróżniać różne rodzaje komentarzy w moim kodzie. //to jest komentarz wyjaśniający //!ten wiersz został wykomentowany w celach debugowania, NIE WYSYŁAJ Z TYM KOMENTARZEM NA MIEJSCU //?ten kod został przetestowany i poprawnie wykonany w wersji 2.3 uS To zaoszczędziło mi wiele kłopotów, ponieważ mogę szybko odróżnić komentarze debugowania od komentarzy wyjaśniających. Szczególnie miło jest mieć pewność, że wszystkie moje komentarze dotyczące debugowania zniknęły i żaden nie został przypadkowo pozostawiony na miejscu przed opublikowaniem mojego kodu. Czy to powszechna praktyka? Jeśli tak, czy istnieje standardowy sposób różnicowania komentarzy? A może są lepsze sposoby na osiągnięcie tego, co staram się osiągnąć?


title: Potrzebujesz pomocy w zrozumieniu kilku pojęć związanych z OOP i programowaniem

text: Miałem problemy ze zrozumieniem kilku pojęć, ale jeszcze bez sukcesu. Czy ktoś może mi pomóc to zrozumieć za pomocą prostego przykładu i definicji. 1 — Delegaci w .NET 2 — Abstrakcja 3 — Architektura trójwarstwowa Dzięki


title: Równość między pojęciami arności i stopni w teorii relacji

text: Czytałem książkę "SQL and Relational Theory: How to Write Accurate SQL Code" autorstwa CJ Date. Nie mam formalnego wykształcenia w CS, nie mówiąc już o teorii relacyjnej. W połączeniu z faktem, że angielski nie jest moim językiem ojczystym, mam mały problem ze zrozumieniem wypowiedzi. W pewnym momencie (s. 17) autor stwierdza: > ...liczba atrybutów w nagłówku to stopień (czasami > arność) ... Czy to oznacza, że pojęcie "stopień" jest tożsame z pojęciem "arność" (tzn. mogę używać tych słów zamiennie) czy to oznacza, że czasami te pojęcia są sobie równe (ale nie zawsze)?


title: Nazewnictwo klas: liczba pojedyncza czy mnoga?

text: Zawsze trudno mi wybrać między liczbą pojedynczą a mnogą dla nazw klas: > > CustomerRepository vs. CustomersRepository > CustomerService vs CustomersService > CustomerController vs CustomersController > A dla nazw złożonych jest jeszcze trudniej: > OrderCustomerRepository vs OrderCustomersRepository vs > ZamówieniaKlienciRepozytorium Jakie podejście preferujesz i dlaczego?


title: Klasa Java Boolean - dlaczego nie enum?

text: Wydaje mi się, że klasa Boolean jest idealnym kandydatem do implementacji jako enum. Patrząc na kod źródłowy, większość klasy to metody statyczne, które można przenieść bez zmian do enum, reszta staje się znacznie prostsza jako enum. Porównaj oryginał (usunięto komentarze i metody statyczne): public final class Boolean implementuje java.io.Serializable, Comparable<Boolean> { public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); prywatna końcowa wartość logiczna; public Boolean(wartość logiczna) { this.value = value; } public Boolean(String s) { this(toBoolean(s)); } public boolean booleanValue() { zwraca wartość; } public String toString() { zwraca wartość ? "prawda fałsz"; } public int hashCode() { zwraca wartość ? 1231:1237; } public boolean equals(Object obj) { if (obj instanceof Boolean) { zwracana wartość == ((Boolean)obj).booleanValue(); } zwróć fałsz; } public int CompareTo(Boolean b) { return Compare(this.value, b.value); } } z wersją enum: public enum Boolean implementuje Comparable<Boolean> { FALSE(false), TRUE(true); private Boolean(wartość logiczna) { this.value = value; } prywatna końcowa wartość logiczna; public boolean booleanValue() { zwraca wartość; } public String toString() { zwraca wartość ? "prawda fałsz"; } } Czy jest jakiś powód, dla którego Boolean nie mógł stać się enum?


title: Jak rejestrować zmiany konfiguracji lub zachowania kodu w sposób niezakłócający pracy?

text: Prawdopodobnie wszyscy byliśmy w sytuacji, w której chciałbyś powiadomić członków swojego zespołu o jakiejś zmianie („Zmieniłem X, więc teraz działa co godzinę zamiast codziennie”). Jednak zmiana nie jest pilna, a poczta e-mail może być destrukcyjna – lub może zostać wyłączona. Każdy ma jakieś techniki, dzięki którym zespół może mieć bieżący dziennik zmian, o których każdy powinien być świadomy i który może przejrzeć w wolnym czasie – a przynajmniej, gdy podejrzewa, że coś jest na rzeczy?


title: Czy białe znaki w identyfikatorach były kiedykolwiek idiomatyczne?

text: Styl C# sugeruje użycie CamelCase w identyfikatorach do rozgraniczenia słów. Tradycja Lisp sugeruje używanie zamiast tego myślników. Czy kiedykolwiek istniał język programowania, w którym używanie spacji w identyfikatorach było nie tylko dozwolone, ale powszechnie używanym idiomem przy stosowaniu identyfikatorów wielowyrazowych? Możliwe jest posiadanie identyfikatorów ze spacjami w niektórych implementacjach Scheme, ale nie jest to powszechnie stosowana praktyka. Oto przykład: Petite Chez Scheme Wersja 8.4 Copyright (c) 1985-2011 Cadence Research Systems > (zdefiniuj |hej tam| 100) > (zdefiniuj |x y z| 200) > (lista | hej tam| |x y z|) (100 200 )


title: Idealna struktura danych do przechowywania danych map?

text: Zapytano mnie o to w teście podczas rozmowy kwalifikacyjnej. Zrobiłem test dobrze, ale nie wiedziałem wystarczająco dużo, aby odpowiedzieć na to pytanie. Jestem ciekaw, jakich struktur danych mogę użyć do szybkiego przeszukiwania danych. Zasadniczo chodzi o to, aby odcinki dróg (linie składające się z punktów) były przechowywane w pewnego rodzaju strukturze danych. Zapytanie, które odcinki (lub punkty) dróg znajdują się w określonej odległości od punktu (promienia), powinno być szybkie.


title: Czy deklarowanie zmiennych STL w definicji klasy jest zbyt odkrywcze?

text: Jeśli próbujesz ukryć implementację, czy deklarowanie zmiennych STL byłoby zbyt odkrywcze? // w Word_Bucket.h class Word_Bucket { private: std::vector<std::string> content; ...etc } ... ale jeśli to zawiniesz, aby ukryć implementację, czy i tak nie będziesz musiał ujawniać tego w interfejsie wrappera? // w Word_Bucket.h class Word_Bucket { private: Zawartość zasobnika; ...etc } // w klasie Bucket.h Bucket { private: std::vector<template_stuff> content; ...itd }


title: Co jeśli klient potrzebuje możliwości odzyskania haseł?

text: Obecnie odziedziczyłem aplikację w pracy i ku mojemu przerażeniu zdałem sobie sprawę, że hasła użytkowników przechowywane w bazie danych są szyfrowane przy użyciu wewnętrznej funkcji szyfrowania, która obejmuje również możliwość odszyfrowania. Tak więc wszystko, co ktoś naprawdę musi zrobić, to skopiować tabelę użytkowników i skopiować zestaw szyfrowania (każdy, kto ma dostęp produkcyjny do bazy danych), a następnie będzie miał dostęp do 100 000 adresów e-mail i potencjalnych haseł. Próbuję wyjaśnić firmie, dlaczego to nie jest dobry pomysł, ale koncepcje bezpieczeństwa wydają się przerastać, ponieważ nie są tak technicznie nastawione (to dla rządu). Dodatkowo w aplikacji istnieje funkcjonalność umożliwiająca administratorom odzyskanie haseł użytkownika, aby zalogować się jako oni i robić rzeczy (które, jak powiedzieli, wymagają). Więc nie rozumieją implikacji bezpieczeństwa. Aby wdrożyć silniejszą politykę bezpieczeństwa (haszowanie haseł, aby nie można było ich łatwo odzyskać), muszę usunąć dla nich istniejące funkcje. Co powinienem zrobić? W pierwszej kolejności nie zbudowałem systemu haseł, więc to nie tak, że nie mogę być obwiniany, jeśli coś pójdzie nie tak. Z drugiej strony nie czuję się z tym dobrze i nie chcę mieć dostępu do 100 000 potencjalnych loginów e-mail.


title: Jak profilować program internetowy Perl + FastCGi + StarRunner?

text: Napisałem rozszerzenie do RequestTrackera dla klienta, ale mówi, że wydajność nie jest wystarczająco dobra. Chciałbym wykonać profilowanie, ale nie jestem pewien, jak podłączyć profiler (powiedzmy na przykład NYTProf)? Próbowałem tego, co mówi strona podręcznika i umieściłem `PerlModule Devel::NYTProf::Apache` w mojej konfiguracji Apache, ale wszystko, co otrzymuję w wynikach, to moduły Apache2:XSLoader, Devel::NYTProf::Apache i ModPerl::Util w wyniki, a ani moje, ani moduły RT.


title: Zarządzanie wersjami bazy danych w aplikacjach mobilnych

text: Zaraz zacznę budować aplikację mobilną (iOS/Android), która korzysta z lokalnej bazy danych (prawdopodobnie sqlite). Ponieważ jest to moja pierwsza „prawdziwa” aplikacja mobilna, zastanawiam się, jakie są standardowe podejścia do zarządzania wersjami bazy danych. Myślę, że zrobiłbym to: * dołączyć skrypt SQL do tworzenia bazy w zasobach aplikacji. Obejmuje to utworzenie tabeli „wersje”, która zawierałaby jeden rekord dla każdej wersji aplikacji. * dla każdej nowej wersji aplikacji dołącz odpowiedni skrypt SQL aktualizacji. Jako minimum, ten skrypt wstawi nowy wpis do tabeli `versions` * zapisuje usługę zarządzania magazynem danych. Ta usługa byłaby odpowiedzialna za utworzenie początkowej bazy danych (za pomocą skryptu tworzenia), raportowanie bieżącej wersji bazy danych i jej uaktualnienie w razie potrzeby (za pomocą skryptów aktualizacji) * wykorzystanie usługi zarządzania magazynem danych podczas inicjowania aplikacji w celu utworzenia/uaktualnienia bazę danych w razie potrzeby. Byłoby to oczywiście zrobione asynchronicznie iz interfejsem użytkownika informującym użytkownika, co się dzieje. Czy takie podejście jest rozsądne? Czy przeoczam coś oczywistego?


title: Dlaczego wartość logiczna jest przechowywana jako bajt wewnątrz komputera, gdy wymaga tylko jednego bitu?

text: Niedawno zacząłem uczyć się pisać kod iw mojej książce natknąłem się na to pytanie. „Dlaczego wartość logiczna jest przechowywana jako bajt wewnątrz komputera, skoro wymaga tylko jednego bitu?” czy ktoś może rzucić więcej światła na to pytanie?


title: DRY na specyfikacjach API?

text: Tworząc nową aplikację RESTful, generalnie: * Definiuję testy * Definiuję trasy [ np.: RESTful CRUD; namespace w `/api/users` ] * Zdefiniuj modele [ np.: "Użytkownicy" ] * Zdefiniuj formularze [ np.: w JavaScript (AngularJS), HTML5 i CSS ] Obecnie zastanawiam się nad wrzuceniem eksploratora API do miksu… który byłby kolejnym trochę podwójnego pisania. * * * Najlepszy sposób, jaki przychodzi mi do głowy, to: 1. Zdefiniuj raz nowy schemat; przy użyciu notacji schematu JSON 2. Zaprojektuj generator kodu do generowania testów; i kilka losowych danych z poprawnymi typami dla danych wejściowych 3. Opracuj generator kodu do tworzenia tras RESTful ze schematu JSON 4. Użyj czegoś takiego jak metawidget do generowania formularzy frontendowych z oddzielonego backendu * * * Czy to najlepszy sposób na zachęcanie do DRY; czy istnieje lepszy/alternatywny sposób, w jaki możesz wymyślić/najlepsze praktyki branżowe?


title: Dlaczego Java nie pozwala na obecność definicji funkcji poza klasą?

text: W przeciwieństwie do C++, w Javie nie możemy mieć tylko deklaracji funkcji w klasie i definicji poza klasą. Dlaczego tak jest? Czy to podkreślać, że pojedynczy plik w Javie powinien zawierać tylko jedną klasę i nic więcej?


title: Importowanie java.awt.* nie powoduje automatycznego importowania java.awt.event.*?

text: Dlaczego w języku programowania Java importowanie pliku java.awt.* nie powoduje automatycznego importu pliku java.awt.event.*? Teraz możecie powiedzieć, że to dlatego, że jest to java.awt.*, a nie coś takiego jak java.awt. _._ ale jeśli jakakolwiek ładna, właściwa aplikacja java wymagająca java.awt.* wymaga również java.awt.event.* to dlaczego nie mieć ich jako jednej jednostki?


title: Dlaczego sizeof nazywa się operatorem czasu kompilacji?

text: Pierwotnie jest to część innego pytania. Dlaczego `sizeof` nazywa się operatorem czasu kompilacji? Czy to nie jest **właściwie** operator czasu pracy? A jeśli rzeczywiście jest to operator czasu kompilacji, w jaki sposób pomaga w tworzeniu przenośnego kodu, który działa tak samo na różnych komputerach? Proszę szczegółowo wyjaśnić.


title: Czy nadal używany jest język programowania C?

text: Jestem programistą C# i większość moich prac dotyczy stron internetowych wraz z kilkoma aplikacjami Windows. Jeśli chodzi o C, to dawno go nie używałem, bo nie było takiej potrzeby. Zaskoczyło mnie, gdy jedna z moich koleżanek powiedziała, że musi nauczyć się C do pracy testowej, podczas gdy ja pomagałem jej w nauce C#. Doszedłem do wniosku, że ktoś nauczy się C tylko do testowania tylko wtedy, gdy programowanie odbywa się w C. Według mojej wiedzy, cały rozwój związany z COM i projektowaniem sprzętu odbywa się również w C++. Dlatego nauka C nie ma sensu, jeśli musisz używać C++. Ja też nie wierzę w znaczenie historyczne, więc po co tracić czas i pieniądze na naukę C? Czy C jest nadal używany w jakichkolwiek nowych programach lub czymkolwiek innym?


title: Uwierzytelnianie „uczestników” a „użytkowników”

text: Tworzę witrynę, która pozwala użytkownikom planować wywiady/konferencje z osobami trzecimi i zastanawiam się, jaki jest najlepszy sposób na zapewnienie bezpieczeństwa wokół doświadczenia uczestnika przy jednoczesnym zapewnieniu najmniejszej możliwej bariery użyteczności. Obecnie wysyłam maila z linkiem i 5-cyfrowym kodem autoryzacyjnym. Link otwiera stronę, uczestnik wpisuje kod autoryzacji i jest tymczasowo zalogowany na czas rozmowy/konferencji. Z punktu widzenia bezpieczeństwa uważam, że kod autoryzacji jest zbędny i wprowadza trudności dla uczestnika, który może nigdy nie mieć powodu, aby ponownie odwiedzić moją witrynę i może nie być biegły technicznie. Link, który wysyłam w ramach zaproszenia zawiera losowy ciąg, więc mógłbym po prostu zwiększyć jego długość o 5 znaków i mieć taką samą przestrzeń wyszukiwania dla potencjalnych napastników. Minusem jest to, że potencjalnie musiałbym ograniczyć szybkość odpowiedzi dla adresów URL z zaproszeniami, więc nie jestem pewien, czy z perspektywy złożoności/linii kodu przyniesie to jakiekolwiek korzyści. Kod bez autoryzacji wydaje się mniej bezpieczny, ale wiem, że to irracjonalne. Jakieś przemyślenia na temat najlepszego podejścia?


title: Co jest złego w zwracaniu tablicy haszującej z metody publicznej i kiedy ma to sens?

text: Jakie są problemy projektowe w zwracaniu tablicy mieszającej z metody publicznej, gdy chcesz zwrócić wiele elementów zamiast tworzyć klasę i zwracać jej obiekt? Jeśli ma problemy, to w jakich okolicznościach ma to sens? Jak zmienia się odpowiedź na to pytanie w zależności od tego, czy język jest dynamiczny, czy nie? **Edytuj:** ma to na celu wyjaśnienie, że klucze będą stałe i są częścią kodu, a nie danych. Coś, do czego zwykle tworzymy klasę. Pytanie brzmi, dlaczego niewłaściwe byłoby używanie tablicy mieszającej, jeśli tworzenie klasy rzeczywiście wydaje się właściwym wyborem.


title: Jak zaimplementować zasadę DRY przy użyciu słowa kluczowego 'using'?

text: Rozważ następujące metody: public List<Employee> GetAllEmployees() { using (Entities units = new Entities()) { return units.Employees.ToList(); } } public List<Job> GetAllJobs() { using (Entities encje = new Entities()) { return entity.Jobs.ToList(); } } public List<Task> GetAllTasksOfTheJob(Job job) { using (Entities entity = new Entities()) { return entity.Tasks.Where(t => t.JobId == job.Id).ToList(); } } Użycie bloku jest takie samo i zostało tutaj powtórzone 3 razy (oczywiście ponad 100 razy w rzeczywistej aplikacji). Jak można zaimplementować zasadę DRY (Don't Repeat Yourself) do bloku `using`? Czy jest to w ogóle uważane za naruszenie zasady DRY? Aktualizacja: nie mówię o tym, co zostało zaimplementowane w bloku `using`. Właściwie to mam tutaj na myśli `używanie (Entities units = new Entities())`. Ten wiersz jest powtarzany 100 razy lub więcej.


title: W której warstwie należy obsłużyć błędy usługi?

text: Koduję w architekturze wielowarstwowej w Javie i wykonuję zapytanie do usługi sieciowej. Czy lepszą formą dla błędów zwracanych przez usługę jest obsługa w warstwie dostępu do danych czy w warstwie biznesowej? Na przykład usługa rejestruje odpowiedź podobną do tej: <?xml version="1.0" kodowanie="UTF-8"?> <ReturnCode>[integer]</ReturnCode> <ReturnMessage>[String odpowiadający ReturnCode]</ ReturnMessage> <UpdateTimestamp>[dateTime - obecne tylko, jeśli ReturnCode == 0]</UpdateTimestamp> <UpdateUser>[string - obecne tylko, jeśli ReturnCode == 0]</UpdateUser> </xml> Jeśli obsłużyłem błędy w danych warstwy dostępu, mój kod Java chciałby coś takiego: Logika błędów w DAO. (zauważ, że typ danych nie ma pól `returnCode` ani `returnMessage`) Gdybym obsługiwał błędy w warstwie biznesowej, kod wyglądałby tak: Logika błędów w BO. (zauważ, że typ danych zawiera pola `returnCode` i `returnMessage`)


title: Czy kompetentny programista powinien być w stanie wymyślić własny algorytm najkrótszej ścieżki?

text: Przeżywam kryzys wiary w moje umiejętności jako programista komputerowy. Wczoraj próbowałem wymyślić własny algorytm najkrótszej ścieżki do wykresu i po kilku godzinach po prostu rzuciłem ręcznik i nauczyłem się algorytmu Dijkstry. Czy to jest coś, co dobry programista powinien być w stanie „wymyślić” w ciągu kilku godzin, czy też jestem nierealistyczny? No cóż, przynajmniej udało mi się na nowo wymyślić sortowanie bąbelkowe :D


title: Obsługa wdrażania w wielu środowiskach

text: Jak powinienem poradzić sobie z wdrażaniem aplikacji internetowych na wielu serwerach? **Ograniczenia** Mam środowisko programistyczne, testowe i produkcyjne. Brak dostępnego serwera kompilacji. Deweloperzy nie mogą wdrażać w programie prod. Osoby, które wdrażają w środowisku produkcyjnym, kopiują pliki z testu do producenta. Nie mają zainstalowanego VS. **Obecnie** jest to obsługiwane za pomocą przekształcenia web.config. Jednak wdrożenie do prod polega na umieszczeniu kodu prod na serwerze testowym, gdzie jest on kopiowany. **Problem** Czasami popełniane są proste błędy, takie jak zapominanie o zmianie środowiska testowego z powrotem na właściwe środowisko po wdrożeniu. Lub konfiguracja testowa zostanie przeniesiona do prod zamiast do konfiguracji prod. **Rozwiązanie** Więc pytanie brzmi, jaki jest najlepszy sposób na zapobieganie błędom? Moja pierwsza myśl to pozwolić aplikacji określić, na którym serwerze jest w czasie wykonywania i użyć odpowiednich ustawień/stringów połączenia/itd... Jednak nazwy serwerów mogą się zmienić w niedalekiej przyszłości. Jeśli więc wiele aplikacji jest zakodowanych na sztywno, oznaczałoby to zaktualizowanie ich wszystkich. Najłatwiejszym sposobem poradzenia sobie z tą sytuacją byłoby umieszczenie biblioteki DLL w GAC, która określa środowisko. Czy są jakieś wady lub możliwe komplikacje, które mogłoby to spowodować? A może istnieje lepsze rozwiązanie problemu niż to?


title: Jak rozwiązać problem niejawnego blokowania i wykonywania równoległego?

text: Gdzie kod jest: function A() { lock() doCoś() unlock() } Możemy wywołać `A` bezpiecznie z wielu wątków, ale nigdy nie będzie ono wykonywane równolegle . Aby wykonać równoległe, musimy obejść cały ten kod. Ale problem polega na tym, że nigdy nie wiemy, czy „A” jest blokowane, czy nie. Jeśli mamy kod źródłowy (może szczęśliwy przypadek), musimy zdekodować cały kod, aby wiedzieć, że blokowanie się dzieje, czy nie. To jest do bani. Ale co gorsza, zwykle nie mamy kodu źródłowego. A co do przypadku zamka istnieje na bazie biblioteki? Jest oczywiste, że ten rodzaj ukrytych zamków stanie się wąskim gardłem równoległego wykonywania, nawet wszystkie inne części są zaprojektowane do pracy równoległej. A także (1) W przypadku blokad wykonanie nie może być równoległe. (2) I nie mogę wiedzieć, czy zamki są używane, czy nie w jakimkolwiek kodzie. (3) Defensywnie mówiąc, nie mogę zrobić niczego równoległego! Te fakty doprowadzają mnie do szału. Jak rozwiązujesz ten problem?


title: Co powinieneś zrobić, jeśli Twój junior nie przyjął Twojej sugestii?

text: Kieruję zespołem 3-4 młodszych programistów. Moją pracą – poza pisaniem kodu – jest zapewnienie nadzoru i wskazówek dla juniorów. Ale w pełni rozumiem, jak bardzo programiści cenią sobie autonomię w swojej pracy i nie chcę niszczyć ich wewnętrznej motywacji, karmiąc ich łyżką moimi myślami i moimi algorytmami; Chcę, aby badali problem na swój własny sposób i sami o tym myśleli i przychodzili do mnie tylko wtedy, gdy naprawdę mają do czynienia z problemami nie do pokonania. Kiedy przychodzą do mnie, czasami musiałbym zaproponować zupełnie inny algorytm, aby rozwiązać problem, ponieważ ich algorytm nie jest wystarczająco solidny (pamiętaj, jestem starszy i widziałem więcej niż oni). Oczywiście wyjaśniłbym to w miły sposób, aby nie zranić ich uczuć, i delikatnie nakreśliłbym, że moje rozwiązanie jest znacznie lepsze niż ich, bez protekcjonalnego tonu i potępiających słów. Mimo to czasami niechętnie akceptują moją sugestię, po części dlatego, że zainwestowali tak dużo we własny algorytm, a po części z obawy, że zastosowanie nowej metody będzie wymagało więcej czasu na naukę i sprawi, że będą się wydawać kierownictwu nigdzie się nie wybierają. Ale w głębi serca wiem bardzo dobrze, że mój algorytm jest znacznie lepszy niż ich i powinni go po prostu zaadoptować. Co powinienem zrobić, jeśli nie przyjęli mojej sugestii? Czy powinienem poprosić ich, aby poszli moją drogą, czy po prostu pozwolić im jeszcze wiele razy uderzać głową w ścianę i czekać, aż wrócą do mnie? Wykonanie pierwszego czyni mnie dyktatorem, ale wykonanie drugiego kosztowałoby nas cenny czas na rozwój i poniosłoby koszty naprawy błędów. Naprawdę mam tutaj dylemat.


title: Projektowanie komunikacji pod kątem rozszerzalności

text: Pracuję nad etapami projektowania aplikacji, która a) będzie zbierała dane z różnych źródeł (w moim przypadku są to dane naukowe z portów szeregowych), śledziła wiek danych, b) generowała statystyki w czasie rzeczywistym (np. bieganie średnie) c) wyświetlać, rejestrować i w inny sposób przetwarzać dane (i statystyki). Przewiduję, że z czasem będę dodawał zarówno producentów danych, jak i konsumentów, i chciałbym zaprojektować tę aplikację w sposób abstrakcyjny, tak abym mógł w trywialny sposób dodawać funkcjonalność za pomocą niewielkiej ilości kodu interfejsu. To, na czym się potykam, to decyzja, jakiej infrastruktury komunikacyjnej powinienem użyć do obsługi interfejsów. W szczególności, w jaki sposób należy udostępnić przetworzone dane i statystyki wielu konsumentom? Kilka rzeczy, które brałem pod uwagę: * Zapis do kilku nazwanych potoków (liczba zmiennej). Każdy konsument czyta z jednego z nich. * Użycie FUSE do stworzenia systemu plików w przestrzeni użytkownika, w którym `read()` zwraca ostatnią linię danych, nawet jeśli inny proces już ją odczytał. * Tworzenie serwera TCP i indywidualne łączenie się konsumentów i żądanie danych. * Po prostu pisząc konsumentów w ramach tego samego programu, który agreguje dane. Chciałbym więc usłyszeć wszystkie rady dotyczące decydowania o tym, jak najlepiej połączyć te funkcje, aby zachować je oddzielnie i pozostawić miejsce na rozszerzenia.


title: Jakie kroki należy wykonać, aby rozpocząć tworzenie aplikacji internetowych?

text: Tworzę **aplikacje desktopowe** od około 4 lat, używając .NET, C++, C i trochę Pythona. Wiele tematów poruszyłem podczas tworzenia aplikacji, a nawet technologii webowych (cookies, metody GET/POST, przy programowaniu niektórych scraperów/crawlerów). Zawsze czekałem na rozpoczęcie tworzenia stron internetowych, najlepiej przy użyciu **PHP** \+ **MySQL** , chociaż inne porady będą mile widziane, aby to pytanie było bardziej przydatne i ogólne dla innych. Wiem, że mógłbym używać **CMS** zamiast zaczynać od zera, ale czasami nie potrzebuję całego CMS do robienia drobnych rzeczy... **Jakie kroki powinienem wykonać, aby stworzyć stronę internetową?** Załóżmy, że Mam projektanta stron internetowych. Przede wszystkim projektant projektuje całą stronę internetową (CSS, itp.), a potem robię rzeczy programistyczne, takie jak dynamiczne ładowanie rzeczy z baz danych, robienie rzeczy po stronie klienta z javascriptem itp.? Albo jak najlepiej to zrobić? **Edytuj** : Nie szukam propozycji narzędzi/frameworków/języków. Chcę wiedzieć, jak zespół (lub programista z projektantem) zaczyna tworzyć stronę internetową. **Kroki**, które wykonują, jakie zadania wykonują najpierw, jak integrują pracę itp. Przykładową odpowiedzią może być: 1) Zaprojektuj całą witrynę z dobrymi praktykami CSS, używając w niektórych przypadkach kontenerów zamiast tabel , itp. 2) Używaj tego projektu i rozwijaj logikę lub funkcjonalności witryny. Oczywiście to tylko przykład. Szukam dobrego sposobu, żeby do tego podejść, bo chciałem zacząć od tego, ale nie bardzo wiem, jak dokładnie zorganizować pracę :/


title: Czy powinienem porzucić AJAX w tworzeniu stron internetowych po stronie klienta, gdy mam otwarte gniazdo sieciowe?

text: Pomyślałem, że może powinienem zapomnieć o żądaniach AJAX (HTTP), gdy mam otwarte gniazdo sieciowe między klientem a serwerem, ale zdecydowałem, że powinienem zapytać tutaj, czy może to być zła praktyka z jakiegoś powodu, że ja' nie myślę o. Gdy gniazdo jest otwarte, jest mniej składni (często oznacza prostszą obsługę błędów) związanej z przekazywaniem informacji między klientem a serwerem za pomocą Socket.io (tylko jeden przykład gniazda sieciowego). * * * Czy jest jakaś oczywista sytuacja, w której gniazdo sieciowe (na przykład Socket.io) nie będzie w stanie obsłużyć funkcjonalności, którą łatwo może wykonać żądanie AJAX?


title: Logowanie i łączność z bazą danych w systemie Android

text: Jestem zupełnie nowy w programowaniu Androida i czytałem wiele artykułów w **witrynie Androida** i gdzie indziej. Istnieje wiele artykułów, które podają bardzo konkretne przykłady, ale nie natknąłem się na artykuły wyjaśniające następujące kwestie: **Logowanie:** Nie zauważyłem aplikacji rynkowych zmuszających mnie do tworzenia danych logowania (per se) , tylko weryfikacja dostępu do typów uprawnień. Jednak z pewnością muszą potrzebować poświadczenia logowania. Oznacza to, że Android zapewnia ten dostęp (jakoś). Jak? Jaki proces? **Lokalizacja bazy danych:** Niektóre artykuły, które przeczytałem, „sugerują”, że kopia bazy danych aplikacji znajduje się w telefonie (samej), inne sugerują, że baza danych znajduje się gdzie indziej (chmura itp.). Wreszcie inne sugerują, że używają zarówno lokalnej bazy danych do szybkich aktualizacji, jak i zdalnej bazy danych do synchronizacji i analizy błędów. Czy istnieje wspólna baza danych dostępna dla wszystkich? * Nie „myślę”, więc czy za każdym razem generujesz kopię lokalną automatycznie? * Wydaje się marnotrawstwem, ponieważ musisz po prostu odtworzyć całość i ponownie zsynchronizować KAŻDĄ jednostkę… ale widziałem artykuły, które ją promują. Z jakich baz danych korzystasz? Jakich najlepszych praktyk używasz do synchronizacji? **Ostatnie:** Jeśli to forum nie jest właściwe, chętnie przeniosę to pytanie. Spojrzałem na forum **Android Enthusiast** i też nie wyglądało na prawidłowe.


title: Jak grzecznie odmówić rekrutacji?

text: Ostatnio otrzymałem e-maile od rekruterów technologicznych z pytaniami, czy chciałbym przeprowadzić rozmowę kwalifikacyjną na rozmowę kwalifikacyjną. Główne problemy, jakie mam z tymi e-mailami, to: 1. Jestem studentem i nigdzie nie wskazałem, że chcę pracować na pełny etat, ale wszystkie te możliwości dotyczą pracy na pełny etat. 2. Opisy stanowisk są tak niejasne, że mogą odnosić się do wielu, wielu osób. 3. Oprócz punktu 2, większość e-maili wydaje się być generowana przez maszyny i nieufnie podchodzę do ludzi, którzy po prostu wysyłają masowe e-maile. Nie chcę wyłączać opcji „otrzymuj e-maile od innych” i nie mam nic przeciwko rekruterom technicznym, ale nie chcę aplikować na stanowisko i zdecydowanie nie chcę wysyłać do nich swojego CV . W tym wątku dotyczącym nawiązywania relacji z niezamówionymi rekruterami pojawia się wiele negatywnych punktów dotyczących rekruterów, a to szczególnie mnie wyróżniało: > P.S. Kiedyś bardzo niefortunnie nawiązałem "związki" z dwoma > centrami spamowymi zwanymi komputerowymi przyszłościami i progresywną rekrutacją i od tego czasu nie byłem w stanie usunąć moich danych z ich systemów. Okresowo spamują > nietrafne reklamy i ignorują wszystkie moje prośby o usunięcie danych i zapewnienie zgodności. > To nie jest związek, którego szukasz. :) > > P.S.#2. Poradę. Za każdym razem, gdy zdecydujesz się opublikować swoje CV w środowisku >, dobrym pomysłem jest usunięcie stamtąd swojego numeru telefonu. Skutecznie powstrzyma drony telefoniczne, które polegają na możliwości nękania i ściskania przez telefon w poszukiwaniu nazwisk i referencji współpracowników. Okazuje się jednak, że > nie są skłonni do marnowania czasu i angażowania się w długą wymianę e-maili > z tobą, którzy wolą po prostu przejść do następnego celu. Spowoduje to zmniejszenie > ręcznej filtracji i zaoszczędzi wiele godzin spędzanych przez telefon. Wygląda na to, że rozmowa z rekruterami to strata czasu i potencjalnie duży kłopot, ale nie chcę też po prostu ignorować e-maili. **Jak powinieneś grzecznie odmówić rekrutera, aby móc się z nim skontaktować, kiedy chcesz, ale nie musisz się martwić, że zostaniesz przez nich bombardowany? Czy to w ogóle możliwe, czy też zignoruj i zapomnij o najlepszej opcji?**


title: Kupić TextMate lub PhpStorm do programowania?

text: mam zamiar kupić TextMate lub phpStorm. Zanim to zrobię, chcę zapytać społeczność, który z nich jest WYBÓR. Utrzymuję istniejący kod php+xml+html+yaml, tak aby rozwijać nowe funkcjonalności dla tego samego istniejącego systemu. Czasami uruchamianie zapytań dotyczących postawy lub tworzenie widoków. Często pracuję z Subversion, czasem z Git. Bardzo często używam szybkiego otwierania dla klas i plików. Następnie piszę, aby powiedzieć, jakie mam założenia i dowiedzieć się, które z nich są poprawne, a które nie, lub myśli, których mi brakuje Niestety spóźniłem się na próbę z TextMate, więc nie mogę go przetestować pod kątem mojej pracy **TextMate** _Dlaczego kupować_ * każdy programista na Macu, jak widzę, ma TextMate, z którego czerpię pewne cechy * niektóre z moich projektów są w Railsach, które TextMate również obejmuje _Dlaczego nie kupować_ * brakuje mi skoku do definicji * wygląda na to, że TextMate nie ma zintegrowanej kontroli wersji (zmienione/nowe linie, różnice między poszczególnymi wersjami), ale ma być zintegrowany w niektórych przyszłych wersjach (ale kiedy jest?) **phpStorm ** _Dlaczego kupować_ * zintegrowana kontrola wersji * zintegrowane narzędzie do zapytań db * phpDoc * generowanie * odczyt (uzupełnianie metod, typ zmiennej, itp.) _Dlaczego nie kupować_ * cena


title: Czy Modele świadome sesji to zła rzecz?

text: Myślę tutaj konkretnie w Railsach, ale podejrzewam, że jest to szersze pytanie. W aplikacji webowej Rails używam danych z sesji w modelach, aby modele wiedziały, kto jest zalogowany. Używam tego w metodzie, która odfiltrowuje niektóre dane z bazy danych w zależności od bardzo prostego systemu uprawnień. Chodzi o to, że używanie sesji w modelach w Railsach wymaga pewnego obejścia. To działa, ale mam wrażenie, że to coś, czego nie powinienem robić i martwię się, że brakuje mi jakiejś wielkiej łajby. Przypuszczam, że właściwą rzeczą do zrobienia byłoby zwrócenie wszystkich danych i odfiltrowanie niechcianych bitów w kontrolerze przed przekazaniem ich do widoku, ale wykonanie tego w modelu wydaje się unikać znacznego powielania kodu i tak się czuje "odkurzacz." Czy ktoś może mi powiedzieć, dlaczego lub nie powinien tego robić? Albo że to nie problem?


title: Jakie języki programowania istnieją dla celów mechatronicznych?

text: Czy jest jakiś konkretny język przeznaczony do programowania mechatronicznego? Wiem o LabView, który jest językiem przepływu danych, ale nie mam pewności co do jego głównej platformy. Czy możesz mi polecić niektóre języki oprócz c/c++? Dowolny język używany w temacie mechatroniki (robotyka, programowanie czujników itp.).


title: Co jest specjalnego w curry lub częściowej aplikacji?

text: Czytam codziennie artykuły na temat programowania funkcjonalnego i staram się zastosować niektóre praktyki w jak największym stopniu. Ale nie rozumiem, co jest wyjątkowe w curryingu lub częściowej aplikacji. Weźmy ten kod Groovy'ego jako przykład: def mul = { a, b -> a * b } def tripler1 = mul.curry(3) def tripler2 = { mul(3, it) } Nie rozumiem, jaka jest różnica między „potrójny1” i „potrójny2”. Czy nie są takie same? „Currying” jest obsługiwane w czystych lub częściowych językach funkcjonalnych, takich jak Groovy, Scala, Haskell itp. Ale mogę zrobić to samo (left-curry, right-curry, n-curry lub częściowa aplikacja) po prostu tworząc inną nazwaną lub anonimową funkcja lub zamknięcie, które przekaże parametry do oryginalnej funkcji (takiej jak `tripler2`) w większości języków (nawet C.) Czy czegoś tu brakuje? Są miejsca, w których mogę użyć curryingu i częściowej aplikacji w mojej aplikacji Grails, ale waham się, ponieważ zadaję sobie pytanie "Jak to jest inaczej?" Proszę, oświeć mnie. EDYCJA: Czy mówicie, że częściowa aplikacja/przeprowadzanie jest po prostu bardziej wydajne niż tworzenie/wywoływanie innej funkcji, która przekazuje domyślne parametry do oryginalnej funkcji?


title: MVP: Wiele kontrolerów stron dla strony?

text: I 'm refaktoryzacji wielkoskalowej aplikacji ASP.NET napisanej za pomocą WebForms, która ma bardzo nieelastyczny projekt widoku + kod-za. Dla tego refaktora używam architektury MVP (Model-View-Presenter), która używa podejścia kontrolera strony dla stron i kontrolek. Pisząc kontrolery stron, zmierzyłem się z problemem ponownego wykorzystania. Poniższy diagram przedstawia małą próbkę, która zilustruje mój problem: ![http://i61.tinypic.com/atoltt.jpg](http://i.stack.imgur.com/LZo8i.jpg) RegistrationView to widok z formularzem umożliwiającym rejestrację użytkownika (wprowadzanie danych takich jak Nazwa, Adres, Kraj... a następnie modyfikowanie tych danych za pośrednictwem kontrolera). EditAddressView pobiera już istniejące dane o użytkowniku, pozwala na modyfikację, a następnie modyfikuje dane z powrotem do modelu. Jak widać, w kontrolerach są pewne elementy wspólne (a dokładniej przechowywanie danych). Chciałbym ponownie wykorzystać część kodu, w której przechowywane są dane, więc rozważyłem trzy opcje, aby sobie z tym poradzić: * Utwórz nadklasę, która zawiera kod do ponownego wykorzystania, a następnie spraw, aby kontrolery odziedziczyły tę klasę i korzystały ze sklepu algorytm. * Stwórz rodzaj warstwy „bibliotecznej” (tj. UserManagerLibrary), z której oba kontrolery skorzystałyby i wykonałyby do niej odpowiednie wywołania. * Zaimplementuj nieco system komponentów i stwórz kontrolery, które będą zarządzać tymi „komponentami”. Ten diagram ilustruje moje podejście: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/ttzt5.jpg) UWAGA: CountryRetriever pobiera listę krajów do wypełnienia menu rozwijanego. W tym podejściu dopasowuję widoki do kilku interfejsów, które razem definiują widok. Następnie wiążę każdy widok z kilkoma kontrolerami stron w zależności od interfejsów, które implementują widoki. Myślę, że w ten sposób mógłbym łatwo tworzyć nowe widoki i rozszerzać funkcjonalności już istniejących (np. mógłbym rozszerzyć EditAddressView o funkcjonalność usuwania poprzez implementację interfejsu IUserDelete). Myślę, że takie podejście pozwoliłoby mi zmaksymalizować możliwość ponownego wykorzystania kodu i zasadę pojedynczej odpowiedzialności w architekturze MVP, ale mam wrażenie, że w jakiś sposób naruszam wzorzec kontrolera strony i mam wrażenie, że to podejście może mieć dużą wadę przyszłość dla mnie (nie wiem, dlatego pytam, czy moje rozwiązanie jest dobre). Czy ktoś może mnie oświecić w tej sprawie? Dziękuję Ci


title: Zastanawiasz się nad gotowym projektem bez innych uwag technicznych?

text: Jestem spółdzielnią (na studiach, ale pracuję 3 miesiące, potem prowadzę zajęcia przez 3 miesiące, znowu pracuję przez 3 miesiące itd. do ukończenia studiów) w firmie w ich dziale IT. Moja praca zwykle wiąże się z pisaniem oprogramowania, ale nie jesteśmy firmą programistyczną i większość oprogramowania, które jest pisane w Indiach. W tym semestrze (3 miesiące) otrzymałem duży projekt, polegający na zaprojektowaniu oprogramowania do wizualizacji danych pobranych z innego z naszych systemów. Skończyłem pod koniec tego semestru z dwoma programami, jednym w 100% gotowym (dane ściąganie zaplecza), a drugim w 80% (interfejs graficzny). Jak zawsze dobrze się bawiłem i dużo się nauczyłem, ale nie jestem zbyt zadowolony z wyników pod względem kodu. Nigdy nie dostałem szansy na przegląd kodu ani na naukę o strategiach projektowania i analizy z powodu, o którym wspomniałem powyżej w roku, w którym tu jestem (4 semestry). Oto jak przebiegał projekt i odzwierciedla to, jak zrobiłem prawie każdy projekt do tej pory, chociaż w tym projekcie jest to bardziej jasne, ponieważ jest to największa rzecz, jaką zrobiłem do tej pory. Pierwszą rzeczą, jaką zrobiłem, było nakreślenie schematu działania całego systemu z wysokiego poziomu. Zwykle tego nie robię, ale mój szef poprosił mnie o to. Potem od razu zagłębiłem się w problem i zacząłem walić. Uważam, że pomaga (i jest jednocześnie fajniej) zrobić coś w dół i pracować nad zmianą organizacji wkrótce po tym, abym mógł kontynuować w zorganizowany sposób. Od tego momentu budynek nieco zwolnił, gdy projekt się rozrósł. Byłbym bardziej zdezorientowany, ale najpierw zacząłbym tworzyć diagramy więcej rzeczy, zatrzymując się na myślenie o tym, jak to, co obecnie buduję, będzie pasować do całego systemu. Trwało to przez chwilę, aż moja 3-miesięczna kadencja prawie się skończyła. Tutaj, **zacząłem się spieszyć, aby załatwić sprawy. Zacząłem niszczyć część organizacji na rzecz szybkich rzeczy, aby uzyskać działający prototyp** (poproszono mnie tylko o prototyp, więc uznałem, że to w porządku, a jeśli projekt pójdzie do przodu, zawsze będę mógł go zmienić). W tym momencie cała moja sprawa zaczęła się rozpadać, ponieważ tak naprawdę nie miałem czasu, aby odpowiednio przemyśleć, jak wiele z tego, co kodowałem, wpłynęłoby na wszystko inne. Czuję, że teraz, na końcowym etapie, mam dużo mieszanki luźno i ściśle powiązanego kodu z ledwo działającym prototypem. Z perspektywy czasu, oto co widzę: * Wykonałem dobrą robotę na oryginalnym przeglądzie i to też mi pomogło, ponieważ mogłem rozbić całość na kilka głównych części. Problemy zaczęły się pojawiać, gdy poznałem szczegóły każdego kawałka. **Istniał dobry pomysł na zestaw dotyczący tego, co zrobi każdy element, ale nie konkretne części, które sprawiły, że ten element zadziałał** (nie wiem, co mogłem zrobić więcej, aby wyjaśnić każdy element. Znajduję, kiedy to sprowadza się do takich konkretów, dowiaduję się, jak idę). * Było wiele rzeczy dotyczących systemu, z których wyciągałem dane, o których nie wiedziałem na samym początku i powinienem był uzyskać dużo więcej informacji na temat działania systemu jako całości. Jednak na początku semestru zawsze jestem nieśmiała i raczej nie zadaję pytań. To prawdopodobnie przyczyniło się również do tego, że zwykle nie znam szczegółów każdego utworu, dopóki ich nie zrobię. * Byłem także ofiarą trochę pełzania zakresu, ponieważ kilka funkcji zostało dodanych do listy rzeczy do zrobienia na około półtora miesiąca przed końcem. * Wydaje mi się, że nigdy nie wiem dokładnie, dokąd chcę się udać w poszczególnych częściach. Próbuję czegoś, a jeśli to nie działa, próbuję czegoś innego, aż zadziała lub dostanę coś ładniejszego. Czy to właściwy sposób na robienie rzeczy? Moje pytania: **Co mogłem zrobić lepiej?** Wiem, że nikt tutaj nie będzie znał specyfiki mojego projektu, ale nie ma nikogo, kto zna się na kodowaniu, kto mógłby mi powiedzieć, jak mógłbym się rozwijać w tej sytuacji. **Jak mógłbym lepiej ocenić siebie?** Skoro tak naprawdę nikt inny nie sprawdza mojego kodowania i nie współpracuję bezpośrednio z żadnymi innymi programistami, jak mógłbym lepiej odzwierciedlić swój własny projekt, zarówno po, jak i w trakcie projekt? Pytanie o to, co mógłbym zrobić lepiej, jest skierowane głównie do pogrubionych fragmentów mojego wyjaśnienia, w których najbardziej martwię się o to, jak podszedłem do problemu.


title: Czy istnieje uzasadniona sytuacja, w której dwa składniki są od siebie zależne?

text: Zależności to usługi wymagane przez obiekt do wykonywania swoich obowiązków. W kontekście OOP może być traktowany jako parametr w konstruktorze. Z mojego doświadczenia nigdy nie znalazłem przypadku dla poprawnej cyklicznej zależności `A <--> B`. Za każdym razem okazuje się, że jest to jeden z dwóch przypadków: * `A` i `B` powinny być właściwie jednym składnikiem (`AB`) * jeden ze składników narusza zasadę pojedynczej odpowiedzialności i powinien być podzielony na oddzielne ( `A1 --> B --> A2`) Żeby było jasne, nie mówię o cyklach w obiektach używanych do struktur danych. Interesują mnie komponenty, które zapewniają zachowanie i współpracują między sobą.


title: Pytania dotyczące OO Design w rozmowach technicznych

text: Uczestniczyłem ostatnio w kilku wywiadach i firmy prosiły mnie o odpowiedzi na pytania „zaprojektuj [wstaw model]” więcej niż kilka razy. 1. Czy to obecnie normalne w branży? Jestem w świecie oprogramowania od ponad dwóch dekad i uczestniczyłem w moich wywiadach, ale widzę, że ten wzorzec pojawia się dopiero niedawno. 2. Uważam, że pytanie jest bardzo otwarte. Na przykład: Poproszono mnie o narysowanie diagramu klas do „Zaprojektuj parking”. Nie jestem pewien, jakiego poziomu szczegółowości oczekuje ankieter. To było w teście internetowym, w którym oczekiwano, że dołączyłem diagram visio, więc nie mogłem ich zapytać, jakie są ich oczekiwania. 3. Czy używasz tego rodzaju pytań podczas rozmowy kwalifikacyjnej? Czy odnoszą się tylko do diagramów klas, czy też pytasz o sekwencję, schematy blokowe i ERD (oczywiście w oparciu o charakter stanowiska) Czy były one skuteczne w procesie rekrutacji? *** Edytuj w celu uzyskania odpowiedzi Kevina *** Na przykład: Kompletne pytanie może brzmieć: „Zaprojektuj system zarządzania parkingiem, który może być użyty do znalezienia wolnych miejsc” Można to zrobić za pomocą 2 klas, `ParkingLot` i `Slot` lub Mógłbym przejść dalej, aby dodać klasy „IVehicle” i „Vehicle” oraz „Car” i „Motocycle”. Gdzie mam narysować linię? parking klasy publicznej { IVPojazd Pojazd {zestaw; get;} List<Slot> GetEmptySlots() { }; } klasa publiczna Pojazd : IVehicle { Slot SlotNum {set; get;} } public class Slot { int Row {set; get;} int Kolumna {zestaw; Dostawać; } }


title: Javascript i zastrzeżone algorytmy

text: Będę dość do rzeczy, czy jest jakiś sposób, aby JavaScript był nieco bardziej ukryty niż zwykle, czy też JavaScript jest zawsze otwarty i otwarty, jeśli zajrzysz do kodu źródłowego? Chodzi o ukrywanie zastrzeżonych algorytmów, które udostępniałyby usługę, która jeszcze nie istnieje (o ile mi wiadomo) na rynku i nie jest tak naprawdę prosta. Wiem, że patentowanie jest możliwe, ale nie wchodzimy w to.


title: Czy możliwość nadpisywania funkcji w JavaScript jest mocna czy słaba?

text: Niedawno natknąłem się na następujący kod (z liferay.js), gdy pracowałem z Liferay: .... if (!Liferay._ajaxOld) { Liferay._ajaxOld = jQuery.ajax; } if (Liferay._ajaxOld) { jQuery.ajax = function(options) { if (Liferay.Util) { options.url = Liferay.Util.getURLWithSessionId(options.url); } return Liferay._ajaxOld(opcje); }; } .... Jak widać, powyższy kod nadpisuje funkcję "jQuery.ajax" do modyfikacji "options.url". Można powiedzieć, że jest to mocna strona języka, ponieważ możemy łatwo nadpisywać i dostosowywać istniejące funkcje. Jednak wyobrażam sobie, że ta zdolność może łatwo doprowadzić do problemu. Na przykład mój kod może nadpisać tę samą funkcję „jQuery.ajax”, aby zmodyfikować „options.url” inaczej niż powyższy kod. W rezultacie każdy kod, który oczekuje zachowania określonego przez „liferay.js”, może przestać działać zgodnie z oczekiwaniami. Uważam to za słabość języka, ponieważ nie zapewnia odpowiedniej enkapsulacji. Jaka jest zgoda co do tej funkcji/możliwości języka w terenie?


title: Techniki blokowania

text: Biblioteki Delphi RAD implementują wiele przyjaznych dla wątków obiektów w sposób, który wymusza zadeklarowanie innego obiektu do przechowywania referencji zwróconej przez metodę blokowania tego obiektu. W ten sposób obiekt zasadniczo hermetyzuje obiekt główny, który jest zwracany po zablokowaniu. Na przykład; Lista := ThreadList.Unlocklist; // zrób coś z List ThreadList.LockList; Dlaczego przyjęto takie podejście? Dlaczego odradza się dziedziczenie po obiekcie podstawowym, dodawanie obiektu blokującego, nadpisywanie konstruktorów i destruktorów? Na przykład następująca implementacja dodaje TMREWSync do listy; IMREWS = interfejs ['{5B6DE5FA-847B-42D5-8BF4-9EB20A452C54}'] procedura BeginRead; funkcja BeginWrite: Boolean; procedura EndRead; procedura EndWrite; koniec; TThreadList = klasa ( TList, IMREWS ) prywatny FLock : TMREWSync; konstruktor publiczny Utwórz; destruktor Zniszcz; nadpisanie; właściwość Lock : odczyt TMREWSync FLock implementuje IMREWS; koniec; konstruktor TThreadList.Create; rozpocznij FLock := TMREWSync.Create; dziedziczny; koniec; destruktor TThreadList.Destroy; zacząć dziedziczyć; FLock.Free; koniec; // Użycie: ThreadList.BeginWrite; // Zrób coś z ThreadList ThreadList.EndWrite;


title: Jak nazywa się pętla „while(true)” z „break” w środku?

text: Załóżmy, że mam pętlę w C++ lub C#, która wygląda tak: while(true) { doSomething(); if( warunek() ) { przerwa; }         Zrób coś innego(); } Jest to powszechnie nazywane „nieskończoną pętlą”. Jednak technicznie nie jest nieskończony – zatrzyma się, gdy kontrola przepłynie przez „przerwę”. Jaki jest termin na taką pętlę - która ma w środku instrukcję sterowania pętlą "loop forever" i "break"?


title: Kilka klas enum, które deklarują stałe o tych samych nazwach

text: Pracuję nad biblioteką Java dla sortów Magic: the Gathering. Cóż, nie wchodząc w szczegóły, w grze występuje pięć różnych kolorów magii: „biały”, „niebieski”, „czarny”, „czerwony” i „zielony”. To dość proste, to podręcznikowy przykład wyliczenia. Jest jednak pewien problem: istnieje kilka odmian tych kolorów. Są twoje standardowe warianty, warianty „jednobarwnej hybrydy” i warianty „phyrexian” (nie pytaj). Więc moje pytanie brzmi, które z nich jest lepszym podejściem? Pomysł 1: wyliczenie Symbol { WHITE, BLUE, BLACK, RED, GREEN, MONOCOLORED_HYBRID_WHITE, MONOCOLORED_HYBRID_BLUE, ... PHYREXIAN_WHTIE, PHYREXIAN_BLUE, ... } Pomysł 2: interfejs Symbol { method1() method2() ... } enum Podstawowe implementacje Symbol { WHITE, BLUE, ... } enum MonocoloredHybrid implements Symbol { WHITE, BLUE, ... } enum Phyrexian implements Symbol { ... Używam pierwszego sposobu od jakiegoś czasu, ale zaczynam myślę, że drugi sposób może być lepszy. Pokazuje wyraźniej, że te klasy symboli są różne, ale nadal kompatybilne, ponieważ implementują ten sam interfejs. Spowoduje to trochę zwykłego kodu (tylko kilka pól), ale moim głównym problemem jest to, że mam trzy stałe wyliczenia o nazwie `WHITE`. Teraz zawsze będę odwoływał się do nich za pomocą nazwy klasy, np. „Primary.WHITE”, ale to nadal wydaje się trochę niezręczne. Ale może jest to lepsze niż „nazywanie Smerfów”, które musiałbym wykonać w pierwszej technice. (Nie mogę też użyć ich w EnumMap/ EnumSet w drugi sposób, ale myślę, że to nie przeszkadza.) Więc, które jest lepsze podejście? Czy można mieć kilka klas enum, które deklarują stałe o tej samej nazwie? Czy istnieje trzecia alternatywa, która jest jeszcze lepsza?


title: Metalicencjonowanie aplikacji

text: Obecnie oceniam rozwiązania do zarządzania licencjami dla naszych niestandardowych i opartych na projektach aplikacji, które są obsługiwane przez jeden serwer w intranecie klienta. Aplikacje wykorzystują wspólne funkcjonalności udostępniane przez serwer (obsługa sesji, synchronizacja danych, możliwości zarządzania itp.) i są instalowane na urządzeniach mobilnych. Umożliwiamy naszym klientom uruchamianie aplikacji na urządzeniach X i chcemy sprawdzić na serwerze, czy klient trzyma się tego limitu (na podstawie sesji). Nie chcemy, aby oprogramowanie licencyjne było instalowane na samych urządzeniach (na przykład dostarczając klientowi seriale X), ani nie chcemy hostować dodatkowego serwera do licencjonowania w intranecie klienta. Jeśli klient się połączy, nasz serwer powinien załadować licencję dla aplikacji działającej na kliencie i zweryfikować, czy pozostały sesje. Menedżerowie licencjonowania, którym przyjrzałem się (12 produktów do tej pory) skupiają się na samej aplikacji i nie pozwalają mi na zaimplementowanie takiego zmiennego zachowania, jak opisano powyżej. Na przykład, to oprogramowanie może być z łatwością użyte do stworzenia „Edycji Standardowej” lub „Edycji Profesjonalnej” naszego oprogramowania serwerowego, co nie jest naszym zamiarem. W XHEO DeployLX znajduje się "Session Limit", który pozwala ograniczyć licencję do aktualnie ustanowionych sesji w ASP.NET, co jest bardzo bliskie moim potrzebom. Obecnie myślę o zaimplementowaniu niestandardowego rozwiązania, które pozwoli mi na wczytywanie i egzekwowanie niestandardowych licencji na aplikację po stronie serwera oraz prostego edytora do definiowania takich licencji (który zawierałby typ i sam limit), ale Byłbym wdzięczny za istniejące, łatwe do zintegrowania rozwiązanie komercyjne. Myślę, że można by użyć DeployLX do tego zadania, ale sam wydałbym dużo pieniędzy na wdrożenie większości rozwiązania (poza edytorem). Z góry dziękuję za wszelkie sugestie lub wskazówki. Gen


title: Programowanie uwzględniające rozróżnianie wielkości liter w adresach e-mail

text: Podobnie jak wiele stron internetowych, używamy adresów e-mail jako identyfikatorów użytkowników do logowania. RFC 5321 [#2.3.11] stwierdza, że lokalne części adresów e-mail: > MUSZĄ być interpretowane i przypisywane semantyce tylko przez hosta określonego w części domeny > adresu Oznacza to, że aplikacje przetwarzające adresy e-mail nie mogą się domyślać, na przykład sposób, w jaki Gmail będzie ignorował kropki podczas określania nazw użytkowników. Oznacza to również, że aplikacje muszą traktować lokalne części adresu e-mail jako wrażliwe na wielkość liter, ponieważ tak określa się część lokalną. Jednak użytkownicy są głupi, a w ostatnim przypadku użytkownik, który zarejestrował się za pomocą adresu e-mail pisanego wielkimi literami (i pomyślnie otrzymał i kliknął e-mail weryfikacyjny), stwierdził, że nie może się zalogować, ponieważ używa teraz formatu pisanego małymi literami adres zamieszkania. Nigdy nie spotkałem się z serwerem pocztowym, który wymuszał rozróżnianie wielkości liter w swoich skrzynkach odbiorczych. Nie wątpię, że niektóre z nich gdzieś istnieją, ale zastanawiam się, czy rezygnacja z rozróżniania wielkości liter w naszych nazwach użytkowników poczty e-mail nie przynosi większej korzyści niż problemy z ich utrzymaniem. Nie posunąłbym się tak daleko, aby naśladować przetwarzanie kropek w Gmailu lub jakikolwiek rodzaj adresowania plus, ponieważ nie wydają się one być tak wszechobecne ani tak automatycznie zakładane jak rozróżnianie wielkości liter. Jednak zdaję sobie sprawę, że nie jest to czarno-biały scenariusz, więc ciekawi mnie, czy ktoś wie, jak rozpowszechnione są w rzeczywistości adresy e-mail z rozróżnianiem wielkości liter.


title: Czy komentarze do kodu powinny mieć zakres?

text: Pytam o to, ponieważ widziałem miejsca, w których ktokolwiek kodował początkowo miał odpowiednie komentarze, ale później dokonywano modyfikacji kodu, ale komentarze pozostały nietknięte. Pamiętam, że czytałem gdzieś "Nie daj się zwieść komentarzom, tylko debuguj kod". Czy jest to więc dobry/odpowiedni/praktyczny pomysł, który określa zakres komentarzy, tak aby skłonić programistę do edycji komentarza. Twoje myśli.


title: Odpowiednik „Memorandum of Understanding” dla programistów?

text: Kiedy jedna firma nabywa inną, korzysta z Memorandum of Understanding, które jest w zasadzie umową określającą obowiązki każdej ze stron itp. Mam zamiar rozpocząć ogromny projekt tworzenia stron internetowych dla klienta – z jaką równoważną umową skorzystałbym ich?


title: Dlaczego niemożliwe jest wytworzenie liczb naprawdę losowych?

text: Próbowałem rozwiązać problem hobby, który wymagał wygenerowania miliona losowych liczb. Ale szybko zdałem sobie sprawę, że trudno jest uczynić je wyjątkowymi. Sięgnąłem po Podręcznik projektowania algorytmów, aby przeczytać o generowaniu liczb losowych. Ma następujący akapit, którego w pełni nie jestem w stanie zrozumieć. > Niestety, generowanie liczb losowych wygląda o wiele łatwiej niż jest w rzeczywistości. Rzeczywiście, zasadniczo niemożliwe jest wytworzenie naprawdę losowych liczb > na jakimkolwiek deterministycznym urządzeniu. Von Neumann [Neu63] ujął to najlepiej: „Każdy, kto > rozważa arytmetyczne metody tworzenia losowych cyfr, jest oczywiście > w stanie grzechu”. Najlepsze, na co możemy liczyć, to liczby pseudolosowe, > strumień liczb, które wyglądają tak, jakby były generowane losowo. Dlaczego niemożliwe jest wytworzenie liczb naprawdę losowych w żadnym urządzeniu deterministycznym? Co oznacza to zdanie?


title: Jakiego języka powinienem używać do tworzenia biblioteki międzyplatformowej?

text: Chcę zbudować bibliotekę analizującą SyncML ( **bez interfejsu użytkownika**), która powinna być w stanie tworzyć wiadomości na podstawie informacji dostarczonych przez aplikację hosta, karmionych przez metody biblioteki. Ponadto biblioteka powinna być w stanie wykonać wywołania zwrotne do metod w aplikacji hosta. Chcę mieć możliwość skompilowania tego i udostępnienia go na jak największej liczbie platform: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry. Zasadniczo jak najwięcej platform. Priorytetem jest udostępnienie tego na urządzeniach mobilnych. **Pytania:** 1. Jakiej konfiguracji mam użyć? (języki programowania, kompilatory, IDE itp.) 2. Jak skompilować tę bibliotekę dla tych różnych platform i jak się z nią połączyć? 3. Jakieś inne informacje? np. artykuły poruszające temat rozwoju międzyplatformowego? Nie robiłem wcześniej tego rodzaju projektu wieloplatformowego, więc wszelkie dostępne informacje, które poprowadzą mnie we właściwym kierunku, byłyby mile widziane. Ja mam tło w C#/.NET i Objective-C.


title: Czytanie kodu źródłowego do nauki

text: Rozwijając się jako programista, programista lub koder IMHO, zaczynasz dostrzegać różne (najlepsze lub najgorsze) praktyki, różne algorytmy i „więcej niż jeden sposób na zrobienie tego”. Zobaczenie tego kodu może być dla Ciebie świetną nauką, nawet jeśli nie napisałeś kodu. Ale czy zrobienie tego tylko cię zdezorientuje? Załóżmy na przykład, że masz bibliotekę w dowolnym języku, która została utworzona przez współpracownika, i używasz jej od jakiegoś czasu. Decydujesz się spojrzeć na rzeczywisty kod źródłowy, niezależnie od tego, jak obszerny jest, i lepiej przyjrzeć się, jak ta biblioteka jest napisana. Dla przykładu, najczęściej używaną funkcją z tej biblioteki jest funkcja `max`, która znajduje największą z dwóch liczb. Ale ta funkcja jest o wiele bardziej skomplikowana niż powinna. Sposób, w jaki jest napisany, bardzo cię myli, a ty nie wiesz, jak to działa. Czy dzięki temu będziesz lepszym programistą, bo zdajesz sobie sprawę, jak skomplikowane jest to dla tak prostej funkcji, czy też gorszym koderem, bo czujesz się mniej zaufany? Więc moje ogólne pytanie brzmi: ** czy czytanie kodu źródłowego czyni cię lepszym programistą, a jeśli tak, to w jaki sposób? Jeśli nie, dlaczego ludzie nadal to robią?**.


title: Dlaczego paradygmaty zorientowane obiektowo tak długo przeszły do głównego nurtu?

text: Przeczytałem to pytanie i zacząłem myśleć o innej dość niedawnej sprawie. Języki obiektowe. Nie jestem pewien, kiedy powstał pierwszy, ale dlaczego zajęło to tak dużo czasu, zanim weszły do głównego nurtu? * C stał się bardzo popularny, ale nie stał się C++ zorientowanym obiektowo przez lata (dziesiątki?) później * Żaden język głównego nurtu przed latami 90. nie był zorientowany obiektowo * Zorientowanie obiektowe naprawdę wydawało się wystartować z Javą i C++ mniej więcej w tym samym czasie Teraz , moje pytanie, dlaczego trwało to tak długo? Dlaczego C nie był pierwotnie pomyślany jako język obiektowy? Wzięcie bardzo małego podzbioru C++ nie wpłynęłoby zbytnio na język podstawowy, więc dlaczego ten pomysł nie był popularny aż do lat 90.?