title: Czy mogę użyć licencji MIT, aby przekazać pracodawcy część mojego poprzedniego pisemnego kodu, aby chronić się i nie utracić swoich praw autorskich?

text: Moja sytuacja: * Przed rozpoczęciem nowej pracy napisałem framework. Posiadam prawa autorskie. * Ma w sobie mnóstwo logiki szablonowej, jak każde oprogramowanie. (duh!) * Nie chcę używać całego frameworka w mojej nowej pracy, ale **Muszę ponownie wykorzystać niektóre jego części** w podobnym frameworku, który tworzę dla mojej nowej pracy. * Ponowne wdrożenie/przemyślenie całej logiki od podstaw jest niepraktyczne. Jest dużo logiki, a logika jest logiką, nie da się tego zmienić. Na przykład, ile różnych wersji HashMap można zakodować? Założę się, że będą bardzo podobne, a trzecia wersja może twierdzić, że naruszyłeś prawa autorskie pierwszej wersji. :( * Próba ponownego wymyślenia API jest niepraktyczna. Czy możesz ponownie wymyślić API HashMap? Może możesz zmienić `put(k,v)` na `add(k,v)`, ale nie znacznie więcej.Mój pomysł na zabezpieczenie siebie i mojego poprzedniego kodu: powiem pracodawcy, że buduję nowy framework na podstawie poprzedniego, który napisałem na licencji MIT.Więc w przyszłości, jeśli użyję mojego poprzedniego framework gdzie indziej, **lub nawet inna jego wersja pochodna** , która ma kilka fragmentów kodu podobnych do tego nowego frameworka, który teraz buduję dla pracodawcy, nie będą mogli powiedzieć, że używam ich kodu, jeden, który dla nich napisałem. Moje pytania: * Nie udostępniam nikomu mojego kodu. Nie muszę nikomu rozpowszechniać mojego kodu na licencji MIT, jeśli posiadam prawa autorskie, prawda? To znaczy, czy ktoś może poprosić o zwolnienie mój kod, o którym teraz twierdzę, że jest na licencji MIT?To nie byłby koniec świata i na pewno zgodziłbym się to zrobić pod groźbą prawną.* Czy ta strategia ma jakiekolwiek znaczenie sens? Moim ostatecznym celem jest możliwość korzystania z pochodnej wersji mojego poprzedniego zakodowanego frameworka bez utraty do niego praw autorskich. Jednocześnie nie chcę nikomu rozpowszechniać tego kodu jako projektu open source. Mam inne projekty open-source, które swobodnie rozpowszechniam, ale ten chciałbym zachować dla siebie, aby móc korzystać z moich prac (nie dla wykonawców). To tak, jakby **twierdzić, że masz framework na licencji MIT, bez faktycznego rozpowszechniania i/lub pokazywania nikomu**. Jeśli jest dostępny, bezpłatny i łatwo dostępny, moi pracodawcy już mnie nie potrzebują. Mogą po prostu wziąć kod i przekazać go komuś innemu, aby z niego skorzystał. Uwagi: * Wymieniłem ten framework jako poprzedni wynalazek przed rozpoczęciem pracy. * Nigdzie nie udostępniłem tego kodu. Jest w moim prywatnym repozytorium SVN, które hostuję na moim prywatnym serwerze. Mój pomysł w pigułce: * Moim planem jest zachowanie poprzedniego kodu dla siebie, wykorzystanie jego części w nowym frameworku, który tworzę dla pracodawcy i **powiedzenie pracodawcy, że jest to praca pochodząca z licencjonowanego frameworka MIT, który zakodowałem wcześniej i nie rozpowszechniałem nikomu** ". Nie jestem zmuszony do rozpowszechniania oprogramowania, które zakodowałem na licencji MIT, prawda? Jeśli później zdarzy się jakieś roszczenie prawne (mam nadzieję, że nie), mogę natychmiast wkleić licencję na wszystkie źródła i pokaż/zwolnij kod.


title: Jaki jest dobry format do dokumentowania setek plików danych?

text: Kilka rządów zaczyna publikować **otwarte dane** : zbiory danych generowane przez rząd, które są bezpłatnie udostępniane obywatelom do wykorzystania w celu tworzenia aplikacji o wartości dodanej, analiz i informacji zwrotnych. Na przykład otwarty katalog danych miasta Vancouver (Kanada) publikuje 130 zbiorów danych. Tematyka obejmuje zarówno akta tabelaryczne danych kontaktowych radnych miejskich, jak i zbiory danych geograficznych rejonów zagospodarowania przestrzennego. Formaty obejmują wartości od wartości rozdzielanych przecinkami (CSV), SHP, KML i nie tylko. Byłoby dobrze, gdyby każdy z tych portali z otwartymi danymi posiadał zbiór zbiorów danych: ich katalog zbiorów danych w formie ustrukturyzowanego pliku danych. Katalogowy zbiór danych powinien zawierać metadane opisujące każdy zbiór danych (nazwa zbioru danych, adres URL strony pobierania, formaty, w których zbiór danych jest dostępny, może opis formatu zbioru danych i atrybutów lub adres URL do tego samego. Co to jest dobry model danych i dobry format dla takiego zbioru danych katalogowych? Jeśli jest to rozwiązany problem, sugeruję, aby Vancouver ponownie wykorzystało to rozwiązanie, zamiast je wymyślać. **Aktualizacja**: w odpowiedzi na pytanie, dlaczego warto mieć katalog jako uporządkowany zbiór danych, myślę o trzech klasach przypadków użycia 1. Analiza wszystkich zbiorów danych dostawcy danych.Wygodnie jest uzyskać listę wszystkich zbiorów danych, z linkami do opisów itp., które mogę importować do arkusza kalkulacyjnego i dodawać adnotacje. Ktoś inny może chcieć policzyć całkowitą liczbę opublikowanych rekordów lub zakres działalności rządu objętej danymi. W moim przypadku pracuję nad _spisem ludności w mieście Vancouver Open Data_. 2. Analiza odpowiednich zestawy danych w wielu danych p łapacze. Na przykład można chcieć zagregować listę wszystkich zestawów danych dotyczących granic stref opublikowanych przez miasta kanadyjskie. Jest to łatwiejsze, jeśli można przeszukiwać listy zestawów danych maszynowo, a nie ręcznie. 3. Analiza zmian katalogu zbiorów danych w czasie. Interesujące może być przeanalizowanie wzrostu Open Data z roku na rok. Katalogi strukturalne ułatwiają automatyzację.


title: Jakie są najlepsze algorytmy do pobierania danych z systemu plików?

text: To jest mój przypadek użycia: przemierz system plików, zmierz jego cały rozmiar, a następnie prześlij go do Dropbox. Wygląda dość łatwo i jest całkiem proste. Teraz, jeśli zrobię to za pomocą selera i odradzam wątek dla każdego folderu (z plikami podrzędnymi), łatwiej będzie zebrać wszystkie dane i zmierzyć rozmiar, a następnie przesłać je do skrzynki. Ale czuję, że robię tu coś złego. Jeśli zaimplementuję to na serwerze, z pewnością przeciążę go, tworząc wątek dla każdego folderu, który tam jest. W związku z tym, jakich algorytmów powinienem użyć, aby przyspieszyć ten proces? Zarówno jako pobieranie danych, jak i przesyłanie danych. Linki/Referencje pomogłyby.


title: Konfigurujesz środowisko programistyczne w chmurze?

text: Jestem zainteresowany przeniesieniem mojego środowiska programistycznego do chmury. Obecnie używam VirtualBox z Vagrant do zarządzania oddzielnymi maszynami wirtualnymi dla każdego indywidualnego projektu. Jaka byłaby optymalna konfiguracja hostowania tych maszyn wirtualnych w chmurze? Biorąc pod uwagę, że mam prawie tuzin maszyn wirtualnych, konfigurowanie osobnej instancji EC2 dla każdej z nich nie jest ekonomiczne. Tańszą opcją może być zdobycie taniego VPS od jednego z wielu tanich dostawców VPS. Minusem, poza niezawodnością, jest to, że nie potrzebuję wszystkich moich maszyn wirtualnych przez cały czas. Na przykład maszyny wirtualne, których używam jako środowiska pomostowe, muszą być włączone w najlepszym przypadku tylko kilka razy w tygodniu. Jako alternatywę pomyślałem o uruchomieniu VirtualBox i Vagrant na potężnym pudełku z wystarczającą ilością pamięci, aby obsługiwać wiele maszyn działających jednocześnie. Czy to sprytna konfiguracja, czy są jakieś zastrzeżenia, których nie brałem pod uwagę? Na marginesie powyższej opcji, czy istnieje alternatywa dla VirtualBox, która byłaby mądrzejszym wyborem?


title: Przypisywanie lokalnego identyfikatora do użytkownika

text: Tworzę serwis mydlany, w którym użytkownicy będą mogli komunikować się ze sobą. Będą mieli listę kontaktów, na której można dodawać osoby. Jednym ze środków bezpieczeństwa (inne też są wdrożone) jest przypisanie lokalnego identyfikatora do kontaktu. Aby proces był przejrzysty, wyobraź sobie następujący scenariusz: $UserA prosi, aby $UserB został dodany do listy kontaktów $UserA. $UserB akceptuje, a $UserA otrzymuje lokalny identyfikator, który będzie używany jako identyfikator użytkownika odnoszący się do kontaktu. Baza danych zawiera tabelę o nazwie USER_MAP(LocalID,UserID). Dwa pytania: 1) Czy uważasz, że jest to właściwe podejście do kwestii bezpieczeństwa identyfikatorów użytkowników? Jeśli nie, dlaczego? 2) Jeśli uznasz to za prawidłowe, czy możesz zaproponować formułę generowania wspomnianych identyfikatorów? W tej chwili idea formuły jest następująca: ($UserA_ID+$UserB_ID)*($UserA_RegDate+$UserB_RegDate) Rozważ RegDates jako „liczbę dni od wartości daty 0”. Każdy użytkownik może mieć 1..N lokalnych identyfikatorów w zależności od tego, ilu użytkowników chce dodać. Identyfikator lokalny jest lokalny dla użytkownika, ale globalny w przestrzeni użytkownika, tj. dla każdej interakcji między użytkownikami używany jest ten sam identyfikator lokalny. Aby było jaśniej: jeśli $UserA zażąda zobaczenia profilu $UserB, przekaże lokalny identyfikator użytkownika, który zostanie zmapowany na poziomie serwera na poprawny identyfikator. Żeby było jasne: przyszłość nie oznacza „za długi czas, może, kto wie”, raczej oznacza: „jest zaplanowane, chcę to zrobić, chcę się upewnić, że mam gotowe kawałki i WTEDY Zrobię to” :) Nie jest to więc kwestia „może”, a raczej kwestia KIEDY. Najwyraźniej ktoś ma problemy ze zrozumieniem logiki stojącej za podejściem lokalnego identyfikatora. Kilka pomysłów, które pomogą Ci zrozumieć, dlaczego to dobry pomysł (moim zdaniem): * Jeśli Twój identyfikator jest lokalny, a nie globalny, masz _tylko_ dostęp do własnych zasobów/kontaktów. Przydatne na przykład w celu uniknięcia programowego uzyskiwania dostępu do profilu, którego nie można by zobaczyć. To w przypadku stron trzecich _może_ stanowić problem, szczególnie w przypadku nieuczciwego użycia * Jeśli Twój identyfikator jest lokalny, możesz użyć go jako skrótu do lokalnych danych zamiast przechodzenia do oryginalnego konta. Lista kontaktów może na przykład zawierać niektóre oryginalne dane, które się nie zmienią. * Jeśli masz identyfikator lokalny, znacznie łatwiej jest "przeciąć drut", ponieważ wystarczy skasować jeden lub dwa rekordy. Powiedz, że użytkownik chce usunąć kontakt. Wszystko, co będę musiał zrobić, to usunąć _w najlepszym razie_ dwa rekordy, wszystkie inne dane pozostaną tam nietknięte i po prostu odfiltrowane przez zapytania. Lepiej teraz? Dziękuję za Twój czas!


title: Jaki jest pożytek z niezerującego słabego odniesienia?

text: Czytając o różnych opcjach pracy z takimi rzeczami jak ARC / GC, często spotykam się z wyraźnymi sformułowaniami o tym, które słabe referencje są zerowane (tj. twoje odwołanie staje się zero/null/0, gdy obiekt jest zbierany), a które niezerowanie ( otrzymasz zwisający wskaźnik). To skłania mnie do pytania: jaki możliwy byłby użytek z niezerującego słabego wskaźnika? Nie możesz go użyć do niczego, jeśli nie jesteś pewien, czy jest dobry, prawda? A jak sprawdzisz jego ważność bez ryzyka zrzutu rdzenia / segfault? Dodatek: Rozumiem, że są one przydatne w środowiskach z odniesieniem i możesz chcieć ich użyć podczas pisania kodu biblioteki, który może być w nich użyty, ale nie widzę dla nich dobrego powodu z wystarczająco inteligentnym ARC lub przeniesienie kolektora. Jaki jest pożytek z referencji, na których nie można polegać?


title: Dlaczego wykorzystanie nowego API plików Java 7 jest wciąż tak rzadkie?

text: Nawet nie wiem, czy jest to właściwa witryna StackExchange, aby zadać takie pytanie, ale oto jest ... Głównie czaję się na StackOverflow; i jestem szczerze zdumiony liczbą pytań na tej stronie w odniesieniu do obsługi plików nadal przy użyciu starego API plików. Ale jestem jeszcze bardziej zbulwersowany liczbą odpowiedzi, które _nadal_ dają rozwiązanie wykorzystujące to API, nawet nie pytając, czy OP używa Javy 7+, która wyszła praktycznie od zarania 2012 roku. Dlaczego? Bo po prostu nie ma porównania. Oto kilka przykładów: * nowe API daje znaczące wyjątki: `AccessDeniedException`, `NotDirectoryException`, `FileAlreadyExistsException`, `AtomicMoveNotSupportedException`, itd.; * typowe operacje na plikach, takie jak usuwanie, tworzenie, zmiana nazwy itp., wyrzuć wyjątek zamiast zwracać wartość logiczną; * nowe API systemu plików pozwala na dostęp w zasadzie do wszystkiego przez `FileSystem`; JDK Oracle zapewnia dostęp `FileSystem` do plików ZIP (a więc także jars, wars, ears), Google dostarcza system plików w pamięci, a ja nawet przygotowałem `FileSystem` przez FTP; * dzięki nowemu interfejsowi API możesz wyszukiwać i ustawiać atrybuty plików „w świecie rzeczywistym”, takie jak mtime, atime, ctime, właściciel, grupa, listy ACL itp.; * kiedy mamy do czynienia z plikami tekstowymi, `Pliki` nie pozostawia miejsca na błędy, ponieważ wymaga podania `Charset`, w przeciwieństwie do wszystkich innych `Reader` akceptujących `Plik` jako argumenty; * nowe API obsługuje dowiązania symboliczne i tzw. „twarde dowiązania” (które w rzeczywistości są dowiązaniami do systemu plików); * istnienie nazwy pliku poprawnie zależy od bieżącego kodowania znaków. Dlaczego więc ten interfejs API jest tak mało używany?


title: Ile czasu programiści muszą spędzać poza pracą na uczeniu się nowego materiału?

text: Rozważam powrót do college'u, aby uzyskać dyplom z informatyki, aby móc zostać programistą. (Nawiasem mówiąc, mam tylko 23 lata.) Głównym powodem, dla którego nie chcę studiować CS, jest to, że przeczytałem to, ponieważ technologia zmienia się tak szybko, że twórcy oprogramowania muszą spędzać dużo czasu na uczeniu się nowego materiału. Na przykład ktoś na tej stronie stwierdził, że wszystko, czego nauczą się studenci, będzie przestarzałe do czasu ukończenia studiów. Ktoś inny stwierdził, że połowa wszystkiego, co wie informatyk, będzie przestarzała za 18-24 miesiące. Zresztą, ile czasu poza pracą programiści muszą poświęcić na naukę nowych technologii? Byłbym wdzięczny za wszelkie wskazówki.


title: Jak zarządzać bardzo dużym zestawem reguł i magicznych liczb w moim programie?

text: Jestem trochę nowy w programowaniu (jestem inżynierem mechanikiem z zawodu) i podczas mojego przestoju opracowuję mały program, który generuje część (solidworks) na podstawie danych wejściowych od różnych osób z całego zakładu. W oparciu o zaledwie kilka danych wejściowych (dokładnie 6), muszę wykonać setki wywołań API, z których każde może przyjąć do kilkunastu parametrów; wszystko wygenerowane przez zestaw zasad, które zebrałem po rozmowie ze wszystkimi, którzy zajmują się daną częścią. Sekcja reguł i parametrów mojego kodu ma 250 linii i rośnie. Jaki jest więc najlepszy sposób, aby mój kod był czytelny i łatwy w zarządzaniu? Jak podzielić wszystkie moje magiczne liczby, wszystkie zasady, algorytmy i proceduralne części kodu? Jak radzić sobie z bardzo szczegółowym i szczegółowym interfejsem API? Moim głównym celem jest móc przekazać komuś moje źródło i sprawić, by zrozumieli, co robię, bez mojego udziału.


title: Dlaczego podstawowe uwierzytelnianie http zawsze mówi o nazwie użytkownika?

text: W RFC 2617 HTTP Authentication: Basic and Digest Access Authentication zawsze mówią o nazwie użytkownika i haśle do uwierzytelniania. Dlaczego powinienem wybrać nazwę użytkownika jako identyfikator witryny? Często trudno jest wybrać nazwę użytkownika, która nie istnieje lub jest unikalna. Ale każdy, kto ma gdzieś konto, ma unikalny adres e-mail. Dlaczego RFC nie mówi o czymś abstrakcyjnym, takim jak unikalny identyfikator ciągu? To miałoby dla mnie znacznie większy sens, gdyby każdy logował się na swoje konto za pomocą swojego adresu e-mail... Gdy ktoś zaczyna od bezpieczeństwa/uwierzytelniania, pierwszą rzeczą, która pomyśli czytając RFC 2617, jest to, że nie może wykonać podstawowego uwierzytelniania, ponieważ chcę e-mail + hasło . Czego mi tu brakuje?


title: Jakie są ważne względy podczas tworzenia DBaaS (DataBase as a Service)

text: Jestem zainteresowany tworzeniem bazy danych jako usługi. Chcę, aby użytkownicy serwisu mogli zrobić kilka pozornie niezbyt prostych rzeczy. Zarejestruj się i uzyskaj dostęp do magazynu danych JSON, do którego mogą łatwo wysyłać zapytania z interfejsu API RESTful. Teraz zaimplementowałem zarządzanie kontem RESTful za pomocą Eve w pythonie, dzięki czemu użytkownik może zarejestrować się i uzyskać dostęp do jednej globalnej kolekcji, z dostępem do zapisu i odczytu do własnych elementów. Teraz piękno / prostota Eve wydaje się kolidować z moim przypadkiem użycia, aby włączyć `POST` / `PUT` na punkcie końcowym, musi być zdefiniowany schemat z góry. Aby obejść ten problem, właśnie stworzyłem prosty element z typem danych string, który umożliwia trwałość całego obiektu JSON. Oznacza to jednak, że użytkownik utraciłby możliwość zadawania zapytań o przechowywane obiekty i musiałby pobrać wszystkie swoje obiekty, przeanalizować je, a następnie zapytać o nie po stronie aplikacji. Co nie wydaje się być usługą, którą chcieliby przyjąć użytkownicy.


title: Rozwijanie dynamicznego języka

text: Stworzyłem kilka ręcznie pisanych kompilatorów dla bardzo prostych języków, ale teraz chcę spróbować swoich sił w tworzeniu dynamicznego języka, podobnego do uproszczonego Pythona lub Ruby. Jednak łatwo było mi zastanowić się, jak działają kompilatory. Prymitywne kompilatory po prostu tłumaczą. Ale nie mogę tego zrobić, jeśli język jest dynamiczny. Muszę napisać interpreter lub maszynę wirtualną, która śledzi informacje w czasie wykonywania i wkłada o wiele więcej pracy we mnie. Krótko mówiąc, czy są jakieś zasoby, które powinienem sprawdzić, biorąc pod uwagę, że wiem, jak działają kompilatory, ale chcę przejść na tworzenie interpretera? Istnieje kilka maszyn wirtualnych dla języków dynamicznych, ale nie mam problemu z rozwijaniem własnych. To wszystko tylko dla mojego osobistego doświadczenia. **EDYTUJ:** Szukam informacji o tym, jak przejść od kompilatora do interpretera. Jeśli stworzyłem już kompilator dla języka X, ale teraz co napisać interpreter, co należy zrobić i czy są jakieś zasoby, które przechodzą przez ten proces? Nie chcę obszernych lub abstrakcyjnych zasobów dotyczących sposobu działania kompilatorów lub maszyn wirtualnych. Mam mnóstwo podręczników na ten temat. Wszystkie zasoby, które znalazłem w Internecie, albo zakładają, że masz 0 doświadczenia i rozpoczynają cię od analizy leksykalnej lub składniowej, albo są bardzo abstrakcyjne. Mam działający kompilator, ale teraz chcę go przekształcić w interpreter i dodać dynamiczne funkcje do języka. Nie mogłem znaleźć zasobów na temat tego procesu, może on być zbyt ograniczony w zakresie lub zasobów na „zapleczu” tłumacza, który nie jest zbyt teoretyczny, dlatego opublikowałem tutaj.


title: Opracowane przez społeczność najlepsze praktyki open source

text: Czy istnieją obecnie jakieś najlepsze praktyki dotyczące projektów open source budowanych przez społeczność? Po pierwsze, nie jest to krytyka, tylko obserwacja: kod open source nie ma prawie żadnych komentarzy. Jest projekt open source, który chcę debugować, ale brak komentarzy przeraża mnie do poświęcania mniej czasu, ponieważ będę musiał godzinami nadrabiać zaległości. Moim początkującym zdaniem wydaje się, że czasy rozwoju skróciłyby się, gdyby nowy programista mógł z łatwością cofnąć się i zobaczyć, jak wszystko działa po przybyciu. Rozumiem, że prawdopodobnie nie jest to zrobione teraz, ponieważ wszyscy pracują za darmo i mają życie i rachunki, więc nigdy nie odważyłbym się krytykować kogoś, kto pracuje dla „mnie” jako użytkownik open source za darmo. Mówię tylko, że może to być po prostu przeoczone w pośpiechu z publikowaniem kodu, a może być zaskakująco wydajniejsze, aby opublikować mniej kodu, ale więcej komentarzy. Jestem nowicjuszem i nie mam możliwości tego potwierdzić. Proszę poinformuj mnie, jeśli się mylę. Znalazłem to również, co wydaje się być świetnym zarysem, gdy sam kontrolujesz program, ale zastanawiam się, czy może czegoś brakuje w projekcie open source z różnymi współtwórcami. Czy istnieje standard dla projektów open source budowanych przez społeczność? Jeśli tak, to gdzie?


title: Czy ma sens tworzenie wersji mojej aplikacji na Androida?

text: Jestem nastoletnim hobbystą w liceum i głównie udostępniam swoje oprogramowanie jako open source; dlatego mam niewielkie doświadczenie w sprzedaży oprogramowania, nie mówiąc już o konkretnym obszarze – telefonach z Androidem. Teraz otrzymałem prośby od kilku użytkowników jednej z moich aplikacji (w zasadzie zaawansowanego kalkulatora) o stworzenie jej wersji na Androida. Jest napisany w C, ale widziałem Android NDK i wygląda na to, że mógłbym go _stosunkowo_ łatwo przeportować; Uważam też, że posiadanie takiej aplikacji na telefonie miałoby sens. Sam nie mam telefonu z Androidem, więc zachętą są po prostu potencjalne przychody z aplikacji. Mam jednak kilka pytań, na które sam nie jestem w stanie odpowiedzieć. Więc po pierwsze, czy uważasz, że to w ogóle ma sens? Czy taka aplikacja wygenerowałaby wystarczające przychody, aby zrekompensować czas przeniesienia? Mówiąc bardziej ogólnie, jakich przychodów można oczekiwać od aplikacji na Androida (po prostu szukam przybliżonego przybliżenia, naprawdę nie mam o tym pojęcia)? Po drugie, czy takie przeniesienie jest możliwe bez faktycznego posiadania telefonu z Androidem (mogę uzyskać dostęp do niektórych do końcowych testów, ale nie będę miał go na pełny etat), po prostu używając emulatora? I na koniec, przeczytałem standardowe słowa Google, że publikowanie jest bardzo łatwe itp. Czy to prawda? Na przykład, czy aby projekt zakończył się sukcesem, konieczne jest wykonanie znacznych prac reklamowych? Wielkie dzięki!


title: Bezpieczne wysyłanie danych z udostępnionego hostowanego skryptu PHP do lokalnego MSSQL

text: Próbuję dodać dane z elementu webhook (z koszyka sieci web) do lokalnego programu Microsoft SQL Server. Wygląda na to, że najlepszą drogą dla mnie jest użycie skryptu PHP do nasłuchiwania nowych danych (POST jako json), przeanalizowanie ich, a następnie zapytanie w celu dodania do MSSQL. Nie jestem zaznajomiony z zabezpieczeniami dotyczącymi połączenia między skryptem PHP (który znajdowałby się na stronie udostępnionego hosta) a lokalną bazą danych MSSQL. Po prostu utrzymywałbym skrypt PHP działający na tym samym lokalnym hoście (miej Apache działający w systemie Windows), ale identyfikator URI dla webhooka musi być publicznie dostępny. Alternatywnie zakładam, że mógłbym po prostu zaplanować skrypt z lokalnego hosta, aby okresowo sprawdzać aktualizacje za pośrednictwem interfejsu API kart internetowych, chociaż webhooki wydają się być bardziej niezawodne dla programisty-amatora, takiego jak ja. Jakie kroki mogę podjąć, aby zapewnić bezpieczeństwo podczas używania PHP na zdalnym, współdzielonym hoście do łączenia się z MSSQL na moim lokalnym komputerze?


title: Wydajny programista Java

text: W mojej lokalnej społeczności technicznej pojawił się szum na temat bycia „Efficient Java Programmer” czy ktoś może mi wyjaśnić, co to jest Efficient Java Programmer? jaka jest ich różnica między przeciętnymi programistami java? jak możesz być wydajnym programistą Java? (Jestem jeszcze na studiach, chcę przyzwyczaić się do wykonywania odpowiednich praktyk, jeśli chodzi o programowanie) i jak możesz powiedzieć komuś, że jest wydajnym programistą java?


Pracuję w dużej firmie (ponad 8000 pracowników) od prawie 2 lat i zostałem zatrudniony zaraz po ukończeniu studiów. Wszyscy tutaj muszą codziennie zmagać się ze starszym kodem, który często jest bardzo źle zaprojektowany i pełen hacków. Na początku trzymałem się cicho, starając się nie krytykować zbyt wiele rzeczy. Ale sytuacja w obecnej postaci stała się bardzo trudna do życia i wydaje się, że nikt nie chce ulepszać/zamieniać używanych przez nas narzędzi. Aby być bardziej precyzyjnym, mamy: * Przestarzałe narzędzie do kontroli źródeł (Visual SourceSafe) * Zwykłe stare pliki makefile, które obsługują tylko pełną przebudowę * Pliki `.def`, które muszą być utrzymywane ręcznie i oddzielnie dla wszystkich istniejących architektur * Monolityczne pliki nagłówkowe i projekty z bardzo mało różnych plików (ale każdy ma około 3000 linijek kodu, co czasami zajmuje się bardzo różnymi zadaniami) * brak korzystania z "nowych" udogodnień językowych (no cóż `std::string` nie jest takie nowe, ale nikt oprócz mnie nie używa to) Kilka miesięcy temu postanowiłem coś z tym zrobić, projektując nowe środowisko kompilacji. Mogłem uzyskać niezawodne kompilacje przyrostowe, szybsze czasy kompilacji, lepiej ustrukturyzowane projekty, automatyczne generowanie plików `.def`. Stworzyłem nawet most z/do Git do/z Visual SourceSafe. Pokazałem swoje osiągnięcia kilku kolegom i naszemu szefowi, ale to było tak, jakby nikogo to nie obchodziło. Wszyscy mówili: „Cóż… ludzie są teraz przyzwyczajeni do robienia tego w ten sposób. Dlaczego mielibyśmy to zmieniać?” Zasugerowane przeze mnie zmiany zostały zaprojektowane tak, abyśmy mogli łagodnie przejść ze starego systemu do nowego. Każde ulepszenie można było zastosować oddzielnie i bezpiecznie. Próbowałem nawet zaangażować niektórych moich współpracowników w zmiany. Ale jak dotąd bez sukcesu. Czy spotkałeś się już z podobną sytuacją? Co można zrobić, gdy „prowadzenie przykładem” nie działa?


title: Jak dziecko są Twoje dziecko-kroki w TDD?

text: Dzisiaj trenowaliśmy TDD i znaleźliśmy następujący punkt nieporozumienia. Zadanie polega na tym, że wejście "1,2" zwraca sumę liczb, która wynosi 3. To, co napisałem (w C#) to: numbers = input.Split(','); return int.Parse(liczby[0]) + int.Parse(liczby[1]); //zadanie powiedział, że mamy dwie liczby, a dane wejściowe są poprawne. Ale inni woleli zrobić to w inny sposób. Najpierw dla wejścia "1,2" dodali następujący kod: if (input == "1,2") return 3; Następnie wprowadzili jeszcze jeden test dla wejścia "4,5" i zmienili implementację: if (input == "1,2") return 3; else if (input == "4,5") return 9; A potem powiedzieli „OK, teraz widzimy wzorzec” i zaimplementowali to, co początkowo zrobiłem. Myślę, że drugie podejście lepiej pasuje do definicji TDD, ale... czy powinniśmy być tak surowi? Dla mnie nie ma nic złego w omijaniu trywialnych małych kroków i łączeniu ich w „dwukroki”, jeśli mam pewność, że niczego nie ominę. Czy się mylę? **Aktualizacja.** Popełniłem błąd, nie wyjaśniając, że nie był to pierwszy test. Było już kilka testów, więc "return 3" nie był tak naprawdę najprostszym fragmentem kodu spełniającym wymagania.


title: Co może zrobić REST API, czego nie może zrobić interfejs API korzystający z ciągów zapytań adresu URL HTTP?

text: Uczę się o REST i miałem okazję zbudować podstawowy REST API. Po wykonaniu tej czynności większość przeczytanego przeze mnie materiału została zinternalizowana i teraz lepiej go rozumiem. Jednak nie widzę jeszcze żadnej prawdziwej różnicy, jeśli chodzi o **namacalne** korzyści z używania REST w stosunku do starego sposobu, w jaki robiłem rzeczy, czyli prostych ciągów zapytań URL. Wygląda na to, że oboje robią dokładnie to samo. Ale dzięki REST jest czystszy i ustandaryzowany. Myślałem, że REST ma dodatkowe korzyści techniczne. Jeśli tak, to czym są? A może to po prostu REST - uzgodniony sposób implementacji i API?


title: Czy można kontrolować numery sekwencji TCP/IP i potwierdzeń?

text: Normalnie numery sekwencji TCP/IP i potwierdzenia są 32-bitowe. Jednak potrzebuję sposobu, aby skrócić je do 24 bitów (jest to eksperyment w zaporach ogniowych z głęboką inspekcją). Pytanie: Czy jest możliwe skrócenie rozdzielczości bitowej numerów Seq/Ack w oknach bez znajomości aplikacji? (którym w tym przypadku jest IIS) Chcę użyć tych pierwszych 8 bitów do przechowywania niektórych informacji o sesji.


title: Czy najlepiej jest używać "get" jako przedrostka dla getterów?

text: gdybym miał wartość logiczną (właściwość) `shouldAutoLogin`, czy lepiej nazwać getter `getShouldAutoLogin` czy po prostu `shouldAutoLogin`, aby czytać bardziej jak angielski? np : if(shouldAutoLogin){ ... } lub if(getShouldAutoLogin){ ... }


title: Klient kupuje oprogramowanie do funkcji, której nie może wykonać, a następnie narzeka. Jak rozwiązać?

text: Zetknąłem się z tym kilka razy, sprzedając gotowe rozwiązanie. Klient kupuje pakiet, który jasno określa, że może zrobić XYZ, ale klient chciał, żeby zrobił ABC. Klient następnie wysyła e-maile z prośbą o pomoc. Informuję klienta, że produkt nigdy nie był zaprojektowany do celu, jaki sobie założył (zintegrowanie go z innym produktem). Klient prosi o zwrot pieniędzy, ponieważ nie może korzystać z produktu. W tym miejscu jestem w dwóch umysłach. Po pierwsze, produkt jest w pełni funkcjonalny i otrzymali kod źródłowy (skrypt PHP). Skąd mam wiedzieć, że i tak z niego nie skorzystają, a mimo to chcą otrzymać zwrot pieniędzy? Po drugie, żal mi klienta. Jeśli są uczciwi, a większość jest, to nie mogą używać produktu i dlatego „zmarnują” pieniądze w ich oczach. Ale to nie była moja wina. Do tej pory zwracałem pieniądze na żądanie, ale teraz porównuję to, co robię, z tym, jak większe firmy radzą sobie z tego rodzaju sytuacją. Co by zrobili? Może dlatego, że są więksi, nie dbają o kilka zwrotów od czasu do czasu, ale dla takiego jednoosobowego zespołu jak ja, każda sprzedaż jest potrzebna! Jaki jest najlepszy sposób radzenia sobie z taką sytuacją?


title: Podnoszenie poziomu mojego kodu C/C++

text: Programuję od 3-4 lat i czuję, że nie mogę już nazywać się początkującym, ale czytam kilka pytań na tej stronie i myślę, że WTF oni mówią? W dzisiejszych czasach czuję się tak samo, kiedy sięgam po książki o programowaniu. Przeczytałem kilka książek o programowaniu dla początkujących, niektóre o C/C++, a inne o grach. Napisałem kilka bardziej złożonych rzeczy, takich jak bardzo prosty interfejs AI, szeregowy i TCP/IP. Planuję zostać programistą gier, ale ostatnio zainteresowałem się systemami wbudowanymi po tym, jak miałem okazję nad nimi pracować (interfejs szeregowy). Znalezienie materiałów do kontynuowania nauki po ukończeniu wstępu i książek dla początkujących jest bardzo trudne, ponieważ nie mogę znaleźć żadnych średniozaawansowanych książek C++. Jaką radę dałbyś, aby rozwijać i poszerzać moją wiedzę i umiejętności? Szczególne zasoby byłyby bardzo mile widziane.


title: Czy Entity Framework Code First jest nieco bez znaczenia/bezużyteczne w produkcji i jaka jest dobra strategia EF dla produkcji?

text: Ostatnio programowałem z Entity Framework 4.1 Code First i uwielbiam go do rozwoju, ale mając tylko plan końcowy i szybko zmieniającą się listę funkcji, stale modyfikuję klasę/bazę danych, aby spełniała potrzeby aplikacji. W fazie rozwoju nie ma żadnych danych na żywo i mogę po prostu usunąć całą bazę danych, aby została odtworzona z nowym schematem, ale oczywiście na żywo - to bardzo źle! Jedyne rozwiązania, które widzę, to upuszczenie tabeli metadanych i ręczne zsynchronizowanie bazy danych lub po prostu upuszczenie i ponowne załadowanie. Osobiście wolę pierwszą metodę, ponieważ myślę, że znacznie łatwiej będzie dodać kolumnę/tabelę niż odtwarzać i migrować dane, ale jeśli czegoś nie przegapię, jest to całkowicie odejście od Code First. Tak naprawdę pytanie brzmi, czy Code First dotyczy tylko początkowego rozwoju i jaka jest dobra strategia zarządzania EF dla środowiska produkcyjnego?


title: Zrozumienie i zapamiętywanie parametrów rebase git

text: Jak dotąd najbardziej mylącą częścią git jest rebazowanie na inną gałąź. W szczególności mylące są argumenty wiersza poleceń. Za każdym razem, gdy chcę zmienić podstawę małego fragmentu jednej gałęzi na końcówkę innej, muszę przejrzeć dokumentację git rebase i zrozumienie, jaki powinien być każdy z 3 głównych argumentów, zajmuje mi około 5-10 minut. `git rebase <upstream> <branch> --onto <newbase>` Jaka jest dobra zasada, która pomoże mi zapamiętać, jaki powinien być ustawiony każdy z tych 3 parametrów, biorąc pod uwagę jakąkolwiek zmianę bazy na inną gałąź? Pamiętaj, że przejrzałem dokumentację git-rebase raz za razem, raz za razem, raz za razem (i raz), ale zawsze jest to trudne do zrozumienia (jak nudny dokument naukowy lub coś takiego). W tym momencie czuję, że muszę zaangażować innych ludzi, aby pomogli mi to zrozumieć. Moim celem jest, abym nigdy nie musiał przeglądać dokumentacji pod kątem tych podstawowych parametrów. Do tej pory nie byłem w stanie ich zapamiętać, a zrobiłem już mnóstwo przesunięć. Więc to trochę niezwykłe, że do tej pory byłem w stanie zapamiętać każde inne polecenie i jego parametry, ale nie mogłem zmienić bazy za pomocą `--onto`.


title: ChunkDB do obsługi usługi internetowej JSON o dużym natężeniu ruchu? Alternatywy?

text: Projektuję usługę sieciową o dużej objętości, która będzie opierać się na centralnej bazie danych zawierającej obiekty jednego typu JSON. Obecnie rozważam użycie ChunkDB do przechowywania obiektów i pobierania obiektów za pomocą widoków (RESTful API). Niektóre poglądy mogą być złożone. Ilość danych przechowywanych w bazie danych będzie ograniczona, ponieważ obiekty będą „wygasać”. Czy rozsądne podejście do problemu? Jakie są inne opcje?


title: Dlaczego strona logowania do aplikacji jednostronicowej jest osobną stroną?

text: Zastanawiam się, dlaczego wydaje się, że popularne jest, aby strona logowania do SPA była osobną stroną, która nie jest stroną SPA (jak w przypadku załadowania i wysyłania danych za pośrednictwem żądań ajax)? Jedyne, o czym myślę, to bezpieczeństwo, ale nie mogę wymyślić konkretnego powodu bezpieczeństwa. Chodzi mi o to, że jedyną rzeczą, która przychodzi mi do głowy, jest to, że jeśli twoja strona logowania w części SPA, wysyła nazwę użytkownika/hasło przez ajax, co można zobaczyć za pomocą takich narzędzi, jak firebug lub inspektor sieci, jednak nawet jeśli wyślesz je w normalny sposób Żądanie POST, istnieją inne narzędzia, które mogą łatwo przechwytywać te dane (takie jak skrzypek, httpscoop itp.). Czy czegoś mi brakuje?


title: Rozważania dotyczące projektu hierarchii kontraktu/projektu/elementów zamówienia

text: Obecnie posiadamy aplikację, która umożliwia użytkownikom tworzenie „Umów”. Umowa może zawierać 1 lub więcej „Projektu”. Projekt może mieć 0 lub więcej podprojektów (które mogą mieć własne podprojekty itd.) oraz 1 lub więcej linii. Linie mogą mieć dowolną liczbę podlinii (które mogą mieć własne podlinii itd.). Obecnie nasz projekt zawiera cykliczne odniesienia i chciałbym od tego uciec. Obecnie wygląda to trochę tak: public class Contract { public List<Project> Projects { get; ustawić; } } public class Projekt { public Contract OwningContract { get; ustawić; } publiczny Projekt Nadrzędny Projektu { get; ustawić; } public Lista<Projekt> Podprojekty { get; ustawić; } public List<Linia> Linie { get; ustawić; } } public class Line { public Project OwningProject { get; ustawić; } public List ParentLine { get; ustawić; } public List<Line> SubLines { get; ustawić; } } Używamy „wzoru” M-V-VM i używamy tych modeli (i powiązanych z nimi modeli widoku) do wypełnienia dużego ekranu „edycji”, gdzie użytkownicy mogą modyfikować swoje kontrakty i właściwości wszystkich obiektów. Sytuacja zaczyna być dla mnie zagmatwana, gdy dodajemy na przykład właściwość `Cost` do `Line`. Problem odzwierciedla na najwyższym poziomie (umowa) zmiany dokonane na najniższym poziomie. Szukasz przemyśleń, jak zmienić ten projekt, aby usunąć okrągłe odwołania. Jedną z moich myśli było to, że kontrakt będzie miał „Słownik<Guid, Projekt>”, który będzie zawierał WSZYSTKIE projekty (niezależnie od ich poziomu w hierarchii). `Projekt` miałby wtedy właściwość Guid o nazwie „Parent”, która mogłaby być użyta do przeszukania słownika kontraktu w celu znalezienia obiektu nadrzędnego. Tę samą logikę można zastosować na poziomie linii. Dziękuję! Każda pomoc jest mile widziana.


title: Zasada REST API dotycząca tunelowania

text: Po prostu przeczytaj to w REST API Rulebook: **GET i POST nie mogą być używane do tunelowania innych metod żądań**. > Tunelowanie odnosi się do **wszelkiego nadużycia** HTTP, które maskuje lub fałszywie przedstawia intencje wiadomości i podważa przejrzystość protokołu. REST API nie może > narażać swojego projektu przez niewłaściwe użycie metod żądań HTTP w celu > **przystosowania klientów z ograniczonym słownictwem HTTP**. Zawsze stosuj właściwe > metody HTTP zgodnie z zasadami opisanymi w tej sekcji. [podkreśla > przeze mnie] Ale wiele frameworków używa _tunelowania_ do ujawnienia interfejsów REST za pomocą formularzy HTML, ponieważ `<form>` wie tylko o `GET` i `POST`. Mój najnowszy przykład to `MethodRewriteMiddleware` dla flask (przesłany przez autora frameworka): http://flask.pocoo.org/snippets/38/. Jakieś sposoby na przestrzeganie „reguły” bez hacków lub dodatków w frameworkach internetowych?


title: MVC lub wyodrębnianie warstwy usług

text: mamy aplikację zbudowaną z .Net MVC. Teraz mamy za zadanie ujawnić API osobom trzecim. Członkowie naszego zespołu chcą po prostu kontynuować naszą obecną ścieżkę i po prostu korzystać z większej liczby kontrolerów, abyśmy mogli ponownie wykorzystać zaplecze naszej obecnej aplikacji. Logika mówi mi, że musimy utworzyć oddzielną warstwę usług, gdy więcej klientów będzie miało do niej dostęp, ale wydaje się, że .Net MVC zajmuje się tym wszystkim. Czy naprawdę akceptowalna jest architektura, aby używać kontrolerów w samodzielnej aplikacji w celu ujawnienia API i jakie byłyby potencjalne korzyści z wyodrębnienia warstwy usług?


title: Dobry wzór (wzorce) do wskazywania na stan zmienny

text: Zadałem to pytanie raz tutaj, ale wierzę, że pytanie było niejasne. Jednak trudno mi wyodrębnić ogólny problem z mojego konkretnego przypadku. **AKTUALIZACJA:** Poniżej odpowiedziałem na moje własne pytanie. Czytaj dalej, jeśli lubisz czytać. Może ma charakter edukacyjny, a może nie :) Piszę sekwencer muzyczny. Niektóre istniejące komponenty to: * Sequence -- Kolekcja SequenceEvents (nuty, metrum, tempo itp.) * Sequencer -- Zarządza synchronizacją odtwarzania * ScoreView -- Renderuje sekwencję * NeckView -- Pokazuje odtwarzanie na gryfie gitary * GUI -- Zarządza mniejszymi kontrolkami, w tym wyświetlaniem zegara aktualnej pozycji odtwarzania Obecnie wszystkie te komponenty są bardzo luźno połączone, używając pub/sub do wysyłania i reagowania na zdarzenia. Wyjątkiem jest to, że Sequencer posiada odniesienie do Sekwencji i publikuje zdarzenia, gdy logiczny "głowica odtwarzania" porusza się lub gdy napotkane są zdarzenia sekwencji. Zapytania sekwencyjne muszą być szybkie podczas odtwarzania na żywo, dlatego ważne jest, aby jeden komponent zarządzał takimi zapytaniami. Niektóre planowane funkcje wymagają, aby wiele komponentów pokazywało dane związane z bieżącą pozycją głowicy odtwarzania, a także „obszar kroku”, który jest przekrojem czasowym większym niż pojedyncza pozycja czasowa, np. miara. Pytanie, które mi się nasuwa, to jak najlepiej reprezentować „głowy odtwarzania” i „region kroku”. Nie podoba mi się pomysł, że każdy składnik utrzymywałby zduplikowany stan tych pozycji czasowych i powiązanych zdarzeń sekwencji. Nawet posiadanie przez każdy komponent odniesień do obiektów „głowica odtwarzania” i „regionu kroku” wydaje się naruszeniem DRY. Jednak zwykłe konsumowanie zdarzeń przejściowych nie działa dobrze. Rozważmy następujący przykład: 1. Sequencer przechodzi do pomiaru 3, rytm 1 i wysyła (publikuje) zdarzenie. 2. ScoreView obsługuje to zdarzenie, przesuwając wyświetlacz głowicy odtwarzania. 3. Sekwencer pyta swoją Sekwencję o dane zdarzenia w 3:1.0, znajduje akord z trzema nutami, wysyła zdarzenia 3 nutowe. 4. Synth obsługuje te zdarzenia, grając nuty. 5. NeckView obsługuje te zdarzenia, animując notatki. Jak dotąd wszystko działa dobrze. Ale... 6. Użytkownik edytuje partyturę, dodając czwartą nutę przy 3:1.0 7. Sekwencja wywołuje zdarzenie sequenceEventAdded. **Skąd NeckView wie, że dodana nuta znajduje się w „bieżącym” czasie głowicy odtwarzania?** Albo skąd ma wiedzieć, że dodana nuta nie znajdowała się w bieżącej głowicy odtwarzania, ale w bieżącym regionie kroku, również wyświetlanym? To jeden z przykładów ilustrujących problem, który szerzej próbuję rozwiązać. Posiadanie wielu komponentów utrzymujących własne dane „głowica odtwarzania” i „regionu kroku” wydaje się nadmiarowymi obowiązkami i stanem. Ale robienie tego wszystkiego z przejściowymi zdarzeniami zaczyna wydawać się zbyt wieloma typami zdarzeń, a także niezbyt pasującym. Moją najlepszą próbą uogólnienia tego jest pytanie, jakie są dobre sposoby reprezentowania współdzielonego stanu mutacyjnego? Zarówno „głowica odtwarzania” jak i „region kroku” reprezentują wycinki czasu w sekwencji, ale w tych wycinkach czasu zdarzenia sekwencji mogą być dodawane/usuwane, a elementy obserwowane muszą o tym wiedzieć. Każdy sposób, w jaki na to patrzę, wydaje mi się niewłaściwy. Inną myślą jest posiadanie rzeczywistych obiektów dla Playhead i StepRegion. Każdy zawiera punkt(y) czasowe i podzbiór zdarzeń sekwencji z Sekwencji. Każdy mógł słuchać Sekwencji dla dodanych/usuniętych wydarzeń i ponownie je opublikować. Jednak takie podejście oznacza, że wiele komponentów ma teraz odniesienia do Playhead i StepRegion, co wydaje się powielaniem obowiązków. Ale jeśli tylko Sekwencer przechowuje te obiekty (który zarządza czasem i logicznie ma aktualną pozycję odtwarzania), to skąd inne komponenty wiedzą, że mają się aktualizować, kiedy nuty są dodawane/usuwane w tych regionach czasowych (w przeciwieństwie do innych regionów czasowych Sekwencji )? Im bardziej staram się zadać to pytanie, tym głupio to brzmi, ale nie pytałbym, gdyby odpowiedź była dla mnie oczywista! Oto kilka rozwiązań wielokrotnego wyboru: 1. **Sekwencja wywołuje zdarzenia _playhead_ i _stepRegion_**. Jeśli dane sekwencji ulegną zmianie dla dowolnego z tych przedziałów czasu, wywoła nowe zdarzenie _playhead_ i _stepRegion_, z których każde zawiera bieżące odpowiednie dane sekwencji. Obserwowanie składników, takich jak NeckView, może traktować te zdarzenia jako idempotentne i pozostawać bezstanowe w odniesieniu do czasu. 2. **Dodaj klasy _Playhead_ i _StepRegion_. Wiele komponentów może przechowywać odniesienia do nich i nasłuchiwać dodanych/usuniętych zdarzeń z tych instancji**. Wiąże się to z dużą ilością nowych obiektów podczas odtwarzania, prawdopodobnie nie jest to duży problem GC, ale brzydko pachnie. 3. **Playhead i StepRegion to singletony**. Jest to gorsza wersja #2 i wymaga, aby te obiekty utrzymywały odniesienia do Sekwencji, a także obserwowały zdarzenia z Sekwencera i ponownie publikowały zdarzenia z obu. Testowanie staje się problematyczne. 4. **Zdarzenia dodane/usunięte w sekwencji zawierają odniesienie do obiektu Sequence**. Chociaż wydaje się to rozsądne i powszechne podejście, zachęca wiele komponentów do wykonywania potencjalnie kosztownych zapytań (nadmiarowo) w sekwencji tak często, jak przy każdym tiku podczas odtwarzania w czasie rzeczywistym. Jest to jeden z powodów, dla których tylko Sequencer bezpośrednio zarządza Sekwencją. 5. **Wszystkie elementy obserwacji zachowują swoje własne punkty czasowe dla głowicy odtwarzania, stepRegionStart, stepRegionEnd**. Wszelkie zdarzenia sequenceEventAdded/Removed mogą być odpowiednio obsługiwane lub ignorowane. Oznacza to stan nadmiarowy, ale stan ten można całkowicie zaktualizować za pomocą zdarzeń. To długie pytanie. jakieś pomysły?


title: Czy nauka C++ poprzez Qt Framework naprawdę uczy się C++?

text: Problem, jaki mam, polega na tym, że większość czytanych przeze mnie książek o C++ prawie wiecznie poświęca się składni i podstawom języka, m.in. „for” i pętle „while”, tablice, listy, wskaźniki itp. Ale nigdy nie wydają się tworzyć niczego, co jest wystarczająco proste w użyciu do nauki, a jednocześnie wystarczająco praktyczne, aby zrozumieć filozofię i moc języka. Potem natknąłem się na QT, która jest niesamowitą biblioteką! Ale pracując nad demami, które mają, wydaje mi się, że mam teraz odwrotny dylemat. Czuję się jak syn bogacza, jeżdżący sportowym samochodem dotowanym przez ojca. Jakbym mógł zbudować fantastyczne oprogramowanie, ale nie mam pojęcia, co się dzieje pod maską. Jako przykład mojego dylematu weź zadanie zbudowania prostej przeglądarki internetowej. W czystym C++ nie wiedziałbym nawet od czego zacząć, ale z biblioteką Qt można to zrobić w kilku linijkach kodu. Nie narzekam na to. Zastanawiam się tylko, jak wypełnić lukę wiedzy między podstawową strukturą języka a interfejsem wysokiego poziomu, który zapewnia framework Qt?


title: Pytanie o wstępną rozmowę o pracę

text: Więc czuję się trochę głupio, że muszę o to zapytać, ale jutro mam rozmowę telefoniczną z dobrą firmą. Same rozmowy telefoniczne nie są dla mnie wielkim problemem, ale muszę im powiedzieć, jakie są moje oczekiwania dotyczące wynagrodzenia. Stanowisko, o które się ubiegam, to inżynier oprogramowania średniego szczebla, spełniam wszystkie wymagania (w żadnym wypadku nie mam przesadnych kwalifikacji) i chcę mieć pewność, że nie proszę o kwotę, która byłaby bądź absurdalny lub za mało. Teraz, zakładając, że dostanę drugą rozmowę i będę musiał ukończyć jakąś łamigłówkę/kod/pracę, mogą mi zapłacić +/- wszystko, o co poprosiłem na podstawie ich oceny mojej pracy. Chciałbym wiedzieć, o jaką kwotę należy prosić? A może całkowicie się mylę z moimi założeniami? Tak czy inaczej, niektóre porady byłyby bardzo mile widziane!


title: Jak zostać web developerem od podstaw bez dyplomu?

text: > **Możliwy duplikat:** > Najlepsze podejście do nauki programowania stron internetowych Jestem bardzo zainteresowany tworzeniem stron internetowych, chociaż o kodzie wiem bardzo mało. Na mojej uczelni/uniwersytecie nie czytałem informatyki. Teraz jestem bardzo zdeterminowany, aby nauczyć się rozwoju po stronie serwera i chcę rozpocząć karierę w terenie, od czego powinienem zacząć? Mam prawie rok wolnego czasu i mogę bardzo ciężko pracować, prowadź mnie proszę, dziękuję.


title: Jaka jest korzyść z posiadania prywatnego repozytorium dla osobistych projektów?

text: Dlatego właśnie stworzyłem swoje pierwsze repozytorium GitHub i zacząłem się zastanawiać, czy jest jakiś powód, dla którego ktoś nie powinien publikować swojego kodu. Nie mam na myśli rzeczy oczywistych, takich jak kod, którym jest cudze IP lub jakakolwiek inna możliwa sytuacja prawna; Mówię o nowicjuszu, który publikuje swój własny, choć okropny kod. Kilka razy słyszałem na tej stronie, że jedną z rzeczy, które robią niektórzy menedżerowie ds. Rekrutacji, jest sprawdzanie osoby na Github (lub podobnej stronie), więc co z tego, że brakuje kodu? Czy pożądane stanowisko — na przykład, jeśli zamierzam zająć stanowisko młodszego programisty zamiast starszego programisty — ma znaczenie?


title: dokumentacja kodu maszynopisu

text: moje pytanie jest raczej krótkie: Jak prawidłowo udokumentować kod maszynopisu? Dowiedziałem się, że w przypadku projektów, które stają się coraz większe, ważne jest, aby spojrzeć na funkcję i od razu poznać jej parametry, to, co zwraca, skutki uboczne itp. To męczące, aby mieć tylko kilka komentarzy przed funkcją, większość Czasem te „klocki” wyglądają nawet inaczej w stylu. To, czego szukam, to narzędzie do dokumentacji, takie jak javadoc lub doxygen dla maszynopisu. Czy jest tam coś? A może jest możliwe „nadużycie” narzędzia dokumentacji i zmuszenie go do pracy z maszynopisem?


title: Kiedy mam ugryźć kulę i zatrudnić programistę?

text: Mam świetny adres URL, mam go od połowy lat 90-tych i aż do około 2002 roku świetnie się bawiłem pisząc recenzje i funkcje muzyczne na statycznych stronach oraz dodając adresy URL do statycznych stron indeksowych i wszystko było po prostu świetne. Potem sprawy bardzo szybko się skomplikowały iz tego czy innego powodu przekazałem stronę bardzo utalentowanemu przyjacielowi, który przekształcił ją w witrynę opartą na bazie danych, prowadzoną przez cf. Teraz, około dwanaście lat później składam to wszystko z powrotem za pomocą mysql, php i css na zasadzie potrzeby do nauczenia i chociaż jestem bardzo blisko tego, gdzie chcę, zdaję sobie sprawę, erm, powinno zostały napisane przy użyciu mysqli itp. ad infinitum. Zastanawiam się więc, w którym momencie po prostu poddam się i zatrudnię programistę do przejęcia, ile to nawet kosztuje i skąd mam wiedzieć, że pracuję z kimś, kto jest lepszy ode mnie?


title: Współpraca przy użyciu github i testowanie kodu

text: Procedura w moim zespole polega na tym, że wszyscy przekazujemy nasz kod do tej samej gałęzi programistycznej. Mamy serwer testowy, który uruchamia zaktualizowany kod z tej gałęzi, abyśmy mogli przetestować nasz kod na serwerach. Ten serwer testowy jest udostępniany w Internecie, dzięki czemu możemy testować wywołania zwrotne z usług innych firm, takich jak sendgrid. (gdzie podajesz adres URL dla sendgrid, aby informować Cię o statusie wysłanych e-maili) Problem polega na tym, że jeśli chcemy połączyć gałąź deweloperską z gałęzią master w celu publikowania nowych funkcji na naszych serwerach produkcyjnych, niektóre funkcje mogą nie były gotowe zostaną zastosowane na serwerach produkcyjnych. Rozważamy więc, aby każdy programista pracował nad gałęzią funkcji/tematów, gdzie każdy z nich pracuje nad swoimi własnymi funkcjami i kiedy jest gotowy, łączy ją z gałęzią deweloperską w celu przetestowania, a następnie z gałęzią główną. Ponieważ jednak nasz serwer testowy pobiera tylko zmiany z gałęzi deweloperskiej, programiści nie mogą testować ich funkcji. Chociaż nie jest to duży problem, ponieważ mogą przetestować go na swoim lokalnym komputerze, **jedynym problemem, który przewiduję, jest testowanie wywołań zwrotnych z usług stron trzecich przy użyciu naszego serwera testowego podczas opracowywania funkcji**. Jak poradzić sobie z tym problemem? Uwaga: nie jesteśmy zaawansowanymi użytkownikami git. Używamy aplikacji Github dla MacOSX i Windows, aby wykonać naszą pracę. Konfiguracja: Jest to projekt PHP. Nie mamy żadnej formy konfiguracji CI i nie mamy wiedzy, aby to zrobić. Ostatecznie chcemy użyć Jenkinsa, ale w tej chwili skupiamy się tylko na tym, aby wypuścić nasz minimalny opłacalny produkt.


title: Oprogramowanie posiada podczęść licencji Apache v2 i inną podczęść licencji GPL v2

text: Po pierwsze przepraszam, że nie do końca rozumiem zasady licencjonowania. Dlatego chcę tutaj zapytać o moją ciekawość dotyczącą licencjonowania rzeczy. Oto przypadek. Tworzę motyw WordPress, który używa underscores.me jako motywu startowego. Posiada licencję GPL v2. A potem buduję motyw za pomocą Twitter Bootstrap. Posiada licencję Apache v2. Szukałem obu licencji. Odkryłem, że Apache v2 jest kompatybilny tylko z GPL v3, a nie z GPL v2. Jaką licencję mogę umieścić w moim kodzie? Apache? GP? Czy po prostu nie mogę go wydać, ponieważ Apache v2 i GPL 2 są niekompatybilne? Wreszcie, czy ma znaczenie, czy zmodyfikuję kod, czy nie?


title: Jak działają internetowe interfejsy API?

text: Słyszałem o wielu internetowych interfejsach API, takich jak Facebook, Twitter itp., które pomagają osobom trzecim uzyskać dostęp do danych i manipulować nimi. Chciałbym wiedzieć, jak działa internetowy interfejs API. Jakie są podstawy internetowego interfejsu API? Jeśli chcę utworzyć interfejs API dla mojej witryny, aby ludzie mieli do niego dostęp lub mogli go aktualizować, od czego będę potrzebować?


title: Problemy z wielowątkowymi aplikacjami graficznymi z interfejsem użytkownika

text: Zajmuję się tworzeniem bogatego projektu UI: aplikacji na komputery stacjonarne. Aplikacja korzysta z wywołań asynchronicznych iz kolei powinna być gotowa do przetwarzania zewnętrznych komunikatów (zdarzeń). Problem jest jasny: na początku zbudowano go jako prosty prototyp, nie poddano go testom wytrzymałościowym i wszystko było w porządku. Następnie aplikacja została rozbudowana: liczba połączeń do serwera i liczba zdarzeń z serwera jest wysoka, a wydajność niska. Co więcej, użytkownicy zauważyli, że czasami wydajność jest ekstremalnie niska. Wywołania asynchroniczne oparte na puli wątków (BeginInvoke, EndInvoke), zdarzenia zewnętrzne przechodzą z usługi WCF (.NET 3,5). Moim celem jest synchronizacja wszystkich zadań i nadawanie priorytetów każdemu wykonaniu w **aplikacji desktopowej**. Moje pytanie brzmi: czy jest jakaś praktyka, jak osiągnąć mój cel: _wzorce_ , _lista priorytetów zadań_ , inne? Co powinienem zrobić za pierwszym, drugim i następnym razem? Dziękuję


title: W przypadku tworzenia podklas lepiej jest „Kopiuj, wklej, a następnie refaktoruj” lub „Refaktoruj, a następnie zaimplementuj”

text: Obecnie mam klasę `Foo`, zdecydowałem, że potrzebuję drugiego typu `Foo` gdzie chcę przetestować znacząco inną implementację. Bez wątpienia podzieli pewną funkcjonalność z `Foo`, więc będę musiał utworzyć rodzica klasy abstrakcyjnej dla obu z nich. Na koniec procesu chcę mieć: * `AbstractFoo`: klasa abstrakcyjna * `FooBoo`: funkcjonalnie identyczna z oryginalnym `Foo` * `FooBar`: nowa podklasa AbstractFoo, którą stworzyłem. Można to zrobić na dwa sposoby: **Kopiuj Wklej, a następnie Refaktoruj** 1. Utwórz kopię `Foo` i nazwij ją `FooBar` i zmień nazwę `Foo` na `FooBoo` 2. Edytuj `FooBar` z nową implementacją 3. Sprawdź, `FooBar` i `FooBoo`, przenieś te same metody między nimi do klasy abstrakcyjnej `AbstractFoo`, które obie dziedziczą po **Refactor, a następnie Implement** 1. Zmień nazwę `Foo` , `FooBoo` 2. Zastanów się, jakie metody nie są związane z częścią implementacji, w której `FooBoo` i `FooBaz` będą się różnić. Przenieś je do `AbstractFoo` 3. Utwórz `FooBaz` i ponownie zaimplementuj wszystkie metody które pozostają w `FooBoo` **Który jest preferowany?** * _Czy jest inna metoda?_ * Ostatnim razem musiałem to zrobić, ponieważ zdecydowałem, że `Foo` ma 2 różne tryby, co zostało określone przez wartość logiczną przekazywaną do konstruktora. Tym razem (na innej klasie) to dlatego, że chcę wypróbować inny silnik pod spodem, który może być szybszy. Chcę zachować `FooBoo`, ponieważ ma podklasę, która moim zdaniem będzie znacznie trudniejsza do zaimplementowania dla `FooBaz`, a także chcę mieć możliwość sprawdzenia, czy ostatecznie zachowują się tak samo.


title: Jakie są zalety i wady korzystania z paradygmatu programowania zorientowanego aspektowo?

text: Ok, więc oto pytanie: jakie są zalety i wady korzystania z paradygmatu programowania zorientowanego aspektowo. Moje dotychczasowe zalety i wady: ## Zalety: * Uzupełnia orientację obiektową. * Modularyzuje zagadnienia przekrojowe, poprawiając łatwość konserwacji i zrozumiałość kodu. ## Wada: * Nie najłatwiejszy do uchwycenia koncept - nie tak dobrze udokumentowany jak O-O * O-O idzie wystarczająco daleko w separacji obaw... Czy ktoś chciałby zakwestionować którekolwiek z nich/dodać własne? Wielkie dzięki, J


title: Kiedy używać silników przepływu pracy?

text: W przeszłości pracowałem nad niektórymi silnikami przepływu pracy jako programista, ale nigdy nie miałem jasności, dlaczego wybraliśmy silniki przepływu pracy na pierwszym miejscu. Jako programista wiem, że jest co najmniej 100 sposobów na zrobienie czegokolwiek podczas pisania kodu, ale tylko kilka z nich jest najlepszych! Nadal nie rozumiem, które przypadki użycia są najlepiej rozwiązywane przez silniki przepływu pracy (a raczej ich koncepcję) niż projektowanie dobrej aplikacji obsługującej DI. Poszukuję ogólnych charakterystyk przypadków użycia neutralnych dla domeny, w których silniki przepływu pracy są jedną z najlepszych opcji. Więc moje pytanie brzmi: Jakie są ogólne cechy wymagania, które mogą być traktowane jako sygnał do wyboru dobrego silnika przepływu pracy i kodowania wokół niego?


title: Obawy programistów dotyczące ograniczeń eksportowych ze Stanów Zjednoczonych

text: Jakie aspekty należy wziąć pod uwagę podczas projektowania i publikowania oprogramowania, które musi spełniać amerykańskie ograniczenia eksportowe dotyczące oprogramowania kryptograficznego? Wikipedia podaje, że istnieją różne kategorie, które można przypisać do oprogramowania kryptograficznego. Dużą rolę odgrywa również kierunek eksportu (np. Chiny, Rosja). Ale tak naprawdę nie rozumiałem tych ograniczeń i ich wpływu na moją pracę. Czy ktoś może mi to wyjaśnić? Pytam, ponieważ jeśli próbujesz opublikować swoją aplikację (np. w Apple App Store lub Android's Market) musisz upewnić się, że Twoja aplikacja spełnia amerykańskie ograniczenia eksportowe. A aplikacji, które oferują bezpieczne przechowywanie informacji, jest wiele, m.in. dla haseł. Czy wszyscy powiadomili rząd i poprosili o rewizję? Oczywiście nie możesz wiedzieć, czy to zrobili. Ale czy muszą to zrobić?


title: Jak mogę skutecznie programować podczas przerwy w dostępie do Internetu?

text: Tak wiele prac rozwojowych odbywa się teraz online, aby skorzystać z wzajemnych połączeń i współdzielonych zasobów. Jak poradzić sobie z brakiem tego połączenia w przypadku przedłużającej się przerwy w dostępie do Internetu? Czy istnieją sposoby na powtórzenie lub obejście niezliczonych korzyści, jakie Internet wnosi do rozwoju?


title: prace nieprogramistyczne wykorzystujące umiejętności programistyczne?

text: > **Możliwy duplikat:** > Zawody z programowaniem, które nie są związane z sektorem technologicznym Mam umiejętności programowania, ale nie chcę siedzieć przed komputerem 8 godzin dziennie. Czy mogę rozważyć inne opcje kariery, które również wykorzystują moje dotychczasowe umiejętności? A co powinienem zrobić, aby dostać te prace? Jestem otwarty na wszystko, co nie wymaga intensywnego korzystania z komputera, a także coś, co wykonuje rutynę, a nie projekty (nie lubię myśleć o projekcie w wolnym czasie, ponieważ nikt mi za to nie płaci, ja wierzę, że stąd bierze się stres). Byłoby też miło, gdyby praca nie wymagała dyplomu CS, bo ja go nie mam.


title: Zdarzenie JavaScript w Innerhtml wynikające ze skryptu PHP Server

text: Tworzę (bardzo powoli) stronę internetową i tworzę wyszukiwarkę bazy danych, która jest niezbędna do uporządkowania zależności podczas wprowadzania danych. W każdym razie chciałbym wpisać kilka słów kluczowych w pole, wyświetlić menu z różnymi wynikami wyszukiwania i wypełnić pole numerem identyfikacyjnym wybranego wpisu po kliknięciu. Obecnie mam dokument o nazwie search.php, który wypełnia div o nazwie search-output przy użyciu xmlhttp.open() i właściwości innerhtml. Wszystko działa idealnie, z wyjątkiem wypełnienia oryginalnego pola wyszukiwania numerem ID po kliknięciu. Moją pierwszą próbą było dodanie zdarzenia onclick do każdego wpisu w danych wyjściowych z search.php. Niestety odkryłem, że javascript wstawiony do innerhtml nie jest uruchamiany ze względów bezpieczeństwa. Googluję od godzin, ale nie udało mi się znaleźć rozwiązania. Jak mogę sprawić, by oryginalne pole tekstowe wyszukiwania zostało wypełnione poprawnym identyfikatorem po kliknięciu? Czy to, co robię, jest dobrą konfiguracją pożądanych wyników, czy też istnieje lepszy sposób na zintegrowanie funkcji wyszukiwania z wprowadzaniem danych?


title: Czy powinienem używać konwencji nazewnictwa członkowskiego i statycznego w systemie Android?

text: Kod źródłowy systemu Android oraz wiele aplikacji i bibliotek typu open source dla systemu Android używa prefiksu m dla pól składowych i prefiksu s dla statycznych pól składowych: private static boolean sStarted; prywatny długi mTimestamp; Osobiście nie lubię tego, ponieważ wygląda brzydko i jest zbędny – moje IDE już używa innego koloru i formatowania dla lokalnych, składowych i statycznych zmiennych składowych. Co jest najbliżej prawdy? 1. To dobra praktyka. 2. To zła praktyka, ale i tak powinieneś jej używać, aby zachować spójność z większością kodu Androida. 3. To zła praktyka i nie powinieneś jej używać.


title: Dlaczego Internet Explorer ma tak wiele niezgodności z innymi przeglądarkami?

text: Internet Explorer ma szereg własnościowych funkcji, których nie można znaleźć w innych przeglądarkach, a także szereg niezgodności ze standardami. Czy ktoś ma pojęcie, co jest przyczyną tych niezgodności? Na przykład: opracowuję rozszerzenie przeglądarki za pomocą frameworka Crossrider. Rozszerzenie działa dobrze ze wszystkimi kombinacjami [Windows | Mac OS | Linux] i [Chrome | Firefox], ale nie działa z IE, ponieważ IE obsługuje `$(window).height()` i `$(window).scrollTop()` nieco inaczej. Czy jest znana dogłębna analiza tej sytuacji lub wywiad z informatorem, który wyjaśni przyczynę? Czy jest to kultura korporacyjna, proces projektowania, wada kontroli jakości, czy jakieś okropne, nieznane dziedzictwo?


title: Jak uporządkować różne elementy w zwinnym środowisku?

text: Starając się, aby nasz sklep był zwinnym środowiskiem, zmagamy się z niektórymi kawałkami tego świata. Chociaż nie robimy tego w sposób wodospadowy, musimy mieć jakieś porozumienie co do tego, co musi zrobić nowa funkcja. Kierujemy się zasadą KISS i "minimalnie opłacalny produkt". Mimo to, po omówieniu historii, otrzymujemy: * Projekt UI/UX * Kryteria akceptacji * Ograniczenia * Przypadki użycia * Kilka dodatkowych specyfikacji (np. jakie pola pokazać w tabelach itp.) Jako narzędzi używamy JIRA, Greenhopper, Balsamiq, Glyphy i Confluence i działają bardzo dobrze, ale nie jesteśmy do końca pewni, gdzie przechowywać które bity i jak sprawić, by to dobrze ze sobą współpracowało. Jak do tego podchodzicie. Podaj szczegóły dotyczące tego, jak daleko posuniesz się, opisując funkcję przed rozpoczęciem rozwoju.


title: Dlaczego potrzebujesz float/double?

text: Oglądałem http://www.joelonsoftware.com/items/2011/06/27.html i śmiałem się z żartu Jona Skeeta o tym, że 0.3 nie jest 0.3. Osobiście nigdy nie miałem problemów z liczbami dziesiętnymi/podwójnymi, ale pamiętam, że nauczyłem się 6502 bardzo wcześnie i nigdy nie potrzebowałem liczb zmiennoprzecinkowych w większości moich programów. Jedyny czas, w którym go używałem, dotyczył grafiki i matematyki, gdzie niedokładne liczby były w porządku, a dane wyjściowe były dla ekranu i nie były przechowywane (w bazie danych, pliku) lub zależne od. Moje pytanie brzmi, gdzie są miejsca, w których zwykle używałeś liczb zmiennoprzecinkowych/dziesiętnych/podwójnych? Więc wiem, żeby uważać na tych łajdaków. Z pieniędzmi używam długich i przechowuję wartości co do centa, dla prędkości obiektu w grze dodaję int i dzielę (lub przesuwam bit) wartość, aby wiedzieć, czy muszę przesunąć piksel, czy nie. (Zrobiłem obiekt w 6502 dni, nie mieliśmy podziału ani pływaków, ale mieliśmy przesunięcia). Więc byłam głównie ciekawa.


title: Redystrybuujesz oprogramowanie na licencji BSD?

text: Czy dopuszczalne jest rozpowszechnianie niezmodyfikowanego oprogramowania na licencji BSD (pyglet) z oprogramowaniem na licencji GPL, które stworzyłem? BSD pozwala na sprzedaż zmodyfikowanego oprogramowania, wiem, ale czy pozwala na ponowne licencjonowanie niezmodyfikowanego? Wydaje się, że w ogóle pokonuje cel posiadania licencji.


title: Automatyczne uruchamianie fragmentów kodu rozprowadzanych w systemie

text: Mam fragmenty kodu napisane w javie, które mogę przekonwertować w jar i uruchomić z terminala. Mam też skrypt node.js, który chciałbym uruchomić przed uruchomieniem tych plików jar. Proces uruchamiania mojego projektu wygląda następująco: > Uruchom mongodb z terminala->Uruchom skrypt Node.js-> Uruchom kod java (jar > plik) Chcę wiedzieć, czy jest sposób na zautomatyzowanie mojego projektu przez po prostu dzwonisz do jednego pliku zamiast uruchamiać tak wiele plików osobno? Jeśli tak to jak?


title: Czy wyświetlacze laptopów o wyższej rozdzielczości mają znaczenie dla programistów?

text: Kupuję nowy laptop, którego będę używał głównie do programowania. Kilka opcji, które naprawdę mnie intrygują, to Asus Zenbook UX31A i nowy Macbook Pro Retina. Oczywiste jest, że wyświetlacze o wysokiej rozdzielczości w tych laptopach są przydatne do rozrywki, edycji zdjęć i innych rzeczy. Moje pytanie brzmi: czy te wyświetlacze przynoszą jakieś korzyści programistom? Czy te wyświetlacze ułatwiają odczytywanie kodu? Czy po całym dniu wpatrywania się w ekran poprawiają wzrok?


title: Czy są jakieś języki, które można zastąpić lub konkurować z JavaScript?

text: Raz po raz jestem zaskoczony, jak trudny jest Javascript w utrzymaniu lub pisaniu odpowiednich programów, głównie dlatego, że jest tak słabo napisany. Naprawdę uważam to za podobne do pisania programów w asemblerze. Jasne, jest w tym trochę inteligencji i możesz zdobyć narzędzia, które to ułatwią. Możesz nawet użyć takich rzeczy jak jQuery, aby uczynić go bardziej niezależnym od platformy. Ale czy istnieje jakiś język (silnie typizowany), w którym mógłbym pisać, składnia podobna do Javy lub C#, który mógłby "kompilować" do JavaScript? A może istnieją narzędzia, które sprawią, że JavaScript będzie silnie typowany i wykryje błędy, które wykryłby kompilator C#? Nie próbuję po prostu nienawidzić JS tutaj, ale zastanawiam się, czy jest jakaś blokada, która temu zapobiega. A może zrobienie tego sprawiłoby, że JS byłby trudny w użyciu w sieci. Edycja: Chociaż mogłem wskazywać bezpośrednio na javascript, myślę, że moje szersze pytanie, czy istnieje powód, dla którego Javascript jest jedyną grą w mieście? I czy jest coś nieodłącznego w kodzie po stronie klienta, co sprawia, że javascript taki jest?


title: Co to jest zamknięcie i jak jest zaimplementowane w Rubim?

text: W kontekście języka programowania Ruby, czym jest zamknięcie i kiedy go używasz? Jakie są tego zastosowania w Railsach?


title: Tabela schematów dla tokenów multiintegracyjnych

text: Projektuję tabelę schematu, która będzie zarządzać tokenami uwierzytelniania dla integracji // aplikacji z sieciami społecznościowymi. W tej chwili tylko dla Twittera i Facebooka. Myślę w tym trybie id social tw_token tw_token_auth tw_secret tw_secret_key fb_token fb_secret 1 twitter aaa bbbb cccc dddd NULL NULL 2 facebook NULL NULL NULL NULL AAA1 bbb3 nie lubię tak wielu NULL nie realizuj innej tabeli dla sieci społecznościowych. Jak zrobić to lepiej niż teraz?


title: Jak przetłumaczyć Lisp na Javascript?

text: Mam starszy kod, który używa _Lisp_ jako języka skryptowego. Aby poszerzyć, ułatwić i przyspieszyć pisanie skryptów, chciałbym zastąpić _Lisp_ przez _Javascript_. Aby móc budować na wszystkich obecnych plikach skryptów, najpierw muszę przetłumaczyć wszystkie `lsp` na `js`. Teraz znalazłem _parenscript_, ale nie jestem jeszcze pewien, do czego jest dobry (wydaje się modyfikować JavaScript, aby móc uruchomić lisp, co nie jest tym, czego chcę). W sieci jest też kilka konwerterów, które wydają się działać całkiem dobrze. Czy ktoś już to zrobił i może podzielić się swoimi doświadczeniami, najlepszymi praktykami i narzędziami?


title: Praktyczny system programowania Meta (MPS)

text: Dotyczy to Meta Programming System lub MPS firmy JetBrains. Do tej pory, z moich wysiłków, aby nauczyć się korzystać z MPS, poznałem tylko jego podstawowe przeznaczenie i to, że jest bardzo złożony. Czy warto się uczyć MPS? Czy jest ktoś, kto już efektywnie używa MPS do tworzenia własnych języków i edytorów dla tych języków i używa tych stworzonych edytorów jako podstawowego sposobu programowania? Jeśli tak, jakie typy programów zrobili z tym? Jakie są zalety i wady pracy z MPS?


title: Czy interfejsy API REST powinny być niezależne od kontekstu czy zależne?

text: Załóżmy, że mam kilku użytkowników i każdy z nich ma `user_id` oraz `friends` Aby uzyskać dostęp do swoich przyjaciół, powinni oni być zalogowani, aby została nawiązana sesja z serwerem. Czy REST API dla ich znajomych to `user/:user_id/friends` czy po prostu `friends`?


title: Czy pakiety redystrybucyjne Visual C++ są wstecznie zgodne?

text: Do mojego oprogramowania dołączam dwa programy. Jeden z nich wymaga VC10, a drugi VC11. Moje pytanie brzmi, czy jeśli program napisany dla VC10 będzie działał na VC11 czy muszę dołączyć zarówno VC10 jak i VC11


title: Używanie Vima podczas kodowania aplikacji na dużą skalę

text: Zaczynam się uczyć Vima i stosuję się do kilku rad podanych tutaj w stackexchange. Zaczynam go używać w niektórych projektach z zabawkami i jestem z tym fajny. Ale zacząłem się zastanawiać, jak możesz być produktywny bez ciągłego otwierania innych plików, tylko po to, by wiedzieć, jaka jest nazwa tej klasy, co to makro zawiera w innym pliku itp. itd. Jakie są wspólne rady, które możesz udzielić?


title: W jaki sposób pary pojęciowe Abstrakcyjny/Konkretny, Ogólny/Konkretny i Złożony/Prosty są powiązane ze sobą w architekturze oprogramowania?

text: (= 2 (+1 1)) weź powyższe. Wymóg predykatu „=” jest taki, aby jego argumenty były porównywalne. W tym przypadku dowolne dwie struktury są porównywalne, więc umowa/wymaganie jest dość ogólne. Predykat „+” wymaga, aby jego argumentami były liczby. To jest bardziej szczegółowe. (protokół typu domeny gniazda) argumenty tutaj są znacznie bardziej szczegółowe (mimo że argumenty są nadal tylko liczbami, a sama funkcja zwraca deskryptor pliku, który sam jest int), ale argumenty są bardziej abstrakcyjne, a implementacja jest zbudowana od innych funkcji, których abstrakcje są mniej abstrakcyjne, które same są zbudowane z coraz mniej abstrakcyjnych abstrakcji. Do momentu, w którym wymagania są czymś w rodzaju przechodzenia z jednej lokalizacji do drugiej, obserwuj, czy przełącznik w tej lokalizacji jest włączony, czy wyłączony, włącz lub wyłącz przełącznik, czy zostaw go bez zmian itp. Ale funkcji też coraz mniej skomplikowane, im mniej abstrakcyjne są? I czy istnieje związek między liczbą i zakresem argumentów funkcji a złożonością jej implementacji, gdy przechodzisz od bardziej abstrakcyjnej do mniej abstrakcyjnej i odwrotnie? (= 2 (+1 1) 2r10) predykat „=” jest bardziej ogólny niż predykat „+”, a zatem może być bardziej złożony w implementacji. Kontrakt predykatu „+” jest mniej ogólny, więc jego implementacja może być mniej skomplikowana. Czy to choć trochę poprawne? A co z funkcją „gniazda”? Każdy z tych argumentów jest swego rodzaju liczbą. Reprezentują jednak coś bardziej wymyślnego. Zwraca również liczbę (podobnie jak inne), która jest również reprezentacją czegoś koncepcyjnie znacznie bardziej rozbudowanego niż liczba. Podsumowując, pytam, czy istnieje związek między następującymi wymiarami i dlaczego: 1. Abstrakcyjny/Konkretny 2. Złożony/Prosty 3. Ogólny/Konkretny A dokładniej, czy różne konfiguracje tych wymiarów mają specyficzną mierzalny wpływ na liczbę i zakres argumentów (czyli kontraktu) funkcji?


title: Dobry sposób na obsługę licznika powiadomień, tak jak robi to Facebook

text: Chcę zbudować podobny mechanizm powiadomień, który obsługuje Facebook. ![tutaj wpisz opis obrazu](http://www.techlicious.com/images/computers/facebook-notification- icon-100px.jpg) Właściwie przechowuję powiadomienie użytkownika w tabeli SQL (właściwie jest to baza danych wykresów, ale wszyscy podstawowe warunki RDBMS). Interesuje mnie przypadek, w którym użytkownik kliknie ikonę: Licznik powinien wewnętrznie uzyskać wartość 0 i wizualnie zniknąć. Jak należy dokonać rozliczenia tego licznika? * Po kliknięciu wywołaj interfejs API Rest, który oznacza każde powiadomienie jako „przeczytane” (kolumna tabeli „READ”)? Wadą byłoby to, że zajęłoby trochę czasu, gdyby istniała duża liczba powiadomień do oflagowania, aby licznik wynosił 0 i zniknął. * Posiadanie rodzaju kolumny dla każdego użytkownika o nazwie `HAS_NEW_NOTIFICATION`, która jest przypisywana jako `false` za każdym kliknięciem ikony (poprzez wywołanie REST API), jeśli licznik był obecny. W ten sposób licznik byłby obecny tylko wtedy, gdy wartość flagi jest „prawda”. Jaka byłaby dobra praktyka?


title: Pomoc w projektowaniu bazy danych ze ścisłym i ustrukturyzowanym podzbiorem danych klinicznych

text: Opracowuję aplikację do przechowywania niektórych danych u przewlekle chorych, dane pochodzą z bardzo ścisłego podzbioru danych, parametrów życiowych, badań itp. Na pierwszy rzut oka pomyślałem o stworzeniu modelu Pacjenta z has_wielu spotkań i umieszczeniu każdej informacji w innym polu, takim jak (wiek, wzrost, waga, EC), ale zaowocuje to dużym modelem. Zastanawiałem się więc nad osadzaniem, aby ułatwić utrzymanie i skalowanie, jeśli za kilka miesięcy będę musiał zarejestrować nowy egzamin, teraz zastanawiałem się nad czymś takim: ### Imię i nazwisko pacjenta: string, adres: string, phone: integer, diagnoza: string, etc... ### Spotkania patient_id: ObjectID, wiek: Integer, vital_signs: [ { wzrost, waga, bmi, ciśnienie_skurczowe, ciśnienie_rozkurczowe } ], egzaminy: [ { kreatynina, cholesterol całkowity.. . } ], next_encounter: Data Będę nadal potrzebował dostępu do `bmi`, na przykład, jeśli chcę dowiedzieć się, ile osób w społeczności jest otyłych (wskazówka: strasznie dużo), więc osadzenie może nie jest zbyt dobry pomysł. W każdym razie cała „analiza” będzie wykonywana tylko co miesiąc (lub mniej). Wybrałem mongodb, ponieważ obawiam się, że wymagania dla tej bazy danych będą się od czasu do czasu zmieniać, więc elastyczność jest ważna. Może w tym przypadku skoro dane są ustrukturyzowane, każdy dokument będzie miał te same typy pól, a relacyjna baza danych mogłaby być lepsza? Nie sądzę, aby używanie bazy danych nosql w sposób sql miało sens, prawda? PS.- Przeczytałem ten artykuł z bloga mongodb i jestem bardziej zdezorientowany, czy to naprawdę jest najlepsze podejście.


title: Stworzyłem program na podstawie projektu LGPL i nie mogę publikować kodu źródłowego

text: Myślałem, że LGPL jest licencją liberalną, podobnie jak MIT, BSD czy Apache. Ale dzisiaj przeczytałem, że tylko _linkowanie_ do LGPL (biblioteki itp.) jest dozwolone z zamkniętego kodu źródłowego - poza tym jest to copyleft - więc muszę publikować kod oparty na programie LGPL. Stworzyłem program dla mojego pracodawcy, który jest oparty na programie LGPL, ale ma w nim spore modyfikacje. Oczywiście nie wolno mi umieszczać tam zmodyfikowanego kodu źródłowego. Jednocześnie muszę, jeśli to rozprowadzam (prawda?). Zastanawiam się więc, czy istnieje obejście tego, abym mógł zachować to zamknięte źródło (chciałbym móc opublikować źródło) - jakieś sugestie? Mój pomysł: czy mogę umieścić większość funkcji oryginalnej aplikacji LGPL w zewnętrznej bibliotece, napisać rdzeń wykonywalny od zera, ale odwołać się do biblioteki dla wszystkich funkcji, których nie zmodyfikowałem? Obecnie wszystko jest w pliku .jar (jest to Java/Swing). jeśli uważasz, że mój pomysł jest prawnie/technicznie wykonalny - ile wysiłku wymagałoby oddzielenie tego, co napisałem, od oryginału? Nie jestem najbardziej obeznany w Javie.


title: Czy możesz być jednocześnie menedżerem i programistą?

text: Zarządzanie innymi programistami, gdy sam jesteś częścią zespołu programistycznego. To bardzo powszechny schemat, przynajmniej w firmach, w których pracowałem. Czy możesz być dobrym programistą lub dobrym menedżerem, jeśli robisz jedno i drugie w tym samym czasie? Kwestionuję skuteczność osoby, która musi pełnić dwie bardzo różne role, wymagające bardzo różnych umiejętności, środowiska, koncentracji, organizacji itp. **AKTUALIZACJA** : moje pytanie dotyczy zarządzania firmą (tak jest w moim przypadku ), a nie konkretnie zarządzanie zespołem. Ale jestem oczywiście zainteresowany obydwoma.


title: Funkcje automatyczne w c++

text: Nie znam się na C++. Czy ktoś może mi powiedzieć, co robi ta linia (szczegółowo): auto add_element = [&rows,&cols,&values](size_t row, size_t col, double value) { rows.push_back(int(row)); cols.push_back(int(col)); wartości.push_back(wartość); }; Wiersze, kolumny, wartości są oczywistymi wektorami. Czy to to samo co void add_element (wektor i wiersze, wiersz size_t, .....)


title: Źródło nieefektywności (programisty)

text: Interesuje mnie dokładniejszy wgląd w możliwe przyczyny osobistej nieefektywności jako programistów (i tylko w programowaniu) z powodu – po prostu – naszych własnych błędów (bo jesteśmy ludźmi – no, prawie wszyscy). Nie interesuje mnie, na ile jesteśmy produktywni ani o ile korekt klient prosi, kiedy praca jest wykonana, ale gdzie i jak każdy z nas spędza tę część swojego czasu na zadaniach, które są nieproduktywne i nie ma kogo za to winić z wyjątkiem nas samych. Wyłączając ego - karmienie i / lub samozaspokojenie, to, co staram się uzyskać (dla nas wszystkich), to: jakie są wspólne problemy z jedzeniem naszego czasu; wgląd w przyczyny tych problemów; określić prosty sposób dla nas, osobiście (nie delegowanie działań innym lub naszym organizacjom), na naprawienie własnych problemów. Proszę nie myśleć w kategoriach akademickich, ale dążyć do możliwości porównania naszych codziennych doświadczeń i zrozumienia, czym są i jak staramy się naprawić nasze osobiste braki. Jeśli jesteś zainteresowany odpowiedzią na ten post, prosimy: * dołączyć listę, jeśli zauważysz, że czegoś ważnego (lub oczywistego) brakuje; * podkreśl lub uczciwie nazwij swój pierwszy problem, opisując sposób, w jaki _ty_ próbujesz rozwiązać _swój_ problem działając na siebie i na siebie tylko w rodzaju „ciągłej poprawy jakości” Moje kryteria przyjęcia odpowiedzi to: wybrać najlepsze rozwiązanie (wykonalność i użyteczność ), aby naprawić jeden (lub więcej) problemów z listy. Oczywiście wybór błędu nie jest głosowaniem nad naszymi umiejętnościami: może jesteśmy hiper-profesjonalnymi programistami i tracimy tylko dziesięć minut każdego roku lub jesteśmy strasznie nieefektywni, tracąc kilka dni w tygodniu: przyczyny nieefektywności mogą być naprawdę takie same - ale w innej skali. Możliwa lista: * Zwykły błąd w nazwach (zmienne, funkcje). * Niemożność zobaczenia oczywistości w kodzie. Mylna interpretacja. Brak koncentracji. * Próbujesz użyć technologii, której nie opanowałeś. * Błędy z typami danych. * Czas potrzebny na zrozumienie poprzedniego kodu lub dokumentacji. * Próbujesz zrobić coś więcej niż jest to wymagane, ponieważ Ci się to podoba * Używanie rozwiązań bardziej skomplikowanych niż wymagane, ponieważ Ci się to podoba. * Zwykłe błędy logiczne. * Błędy z Twojej winy w komunikacji. * Rozproszenie Mój pierwszy osobisty problem: „Próba użycia technologii, której nie opanowałeś”. Codziennie muszę korzystać z kilku technologii i często muszę poświęcać dużo czasu na poprawianie kodu, ponieważ moje założenia były po prostu błędne. Powody tego: potrzeby produkcyjne wywierają dużą presję i utrudniają znalezienie czasu na naukę. Staram się zająć tym czytając książki techniczne – tyle, ile mogę – nawet jeśli faktycznie zajmuje to dużo czasu.


title: Czy zwiększenie liczby klas zwiększa złożoność kodu?

text: Aby zilustrować pytanie, powiedzmy, że mamy dwóch programistów o porównywalnych umiejętnościach, którzy rozwiązują ten sam problem. Okazuje się, że kod ma mniej więcej te same wiersze kodu, ale jeden programista używa 5 klas, podczas gdy inny programista używa 20. Oba zestawy kodu uzyskują porównywalne wtfs na minutę podczas przeglądu kodu, co oznacza, że kod nie jest trudny do naśladowania i nie nie robić nic głupiego. Czy kod z 20 klasami jest bardziej złożony niż kod wykorzystujący 5?


title: Udostępnianie e-booków w dużych zespołach programistycznych

text: Mamy kilkuset programistów i chcemy legalnie udostępniać eBooki w taki sam sposób, w jaki dzieliliśmy się książkami w wersji papierowej (ktoś je kupuje i ląduje na półce). Czy ktoś rozwiązał to w nowatorski sposób? Rozumiem, że dostępne są opcje subskrypcji, które licencjonują je dla Ciebie, ale chcę czegoś, co jest tak łatwe i tanie, jak nasza poprzednia metoda.


title: czy kod gpl może zawierać bardziej restrykcyjnie licencjonowany kod? (CC BY-NC-ND 3.0)

text: Istnieje motyw wordpress, który modyfikuję, aby stworzyć własną pochodną pracę. Ten oryginalny motyw wordpress ma licencję GPLv2 w swoim katalogu głównym, więc zakładam, że cały motyw jest kodem GPL. Istnieje konkretny plik php, który w pierwszych kilku wierszach ma następujące napisane: // Ten kod jest chroniony na licencji Creative Commons: http://creativecommons.org/licenses/by-nc-nd/3.0/ Czy jest to legalne dla zrobić część kodu na bardziej restrykcyjnej licencji? Wspomniana licencja CC jest bardziej restrykcyjna, ponieważ zakazuje prac pochodnych, ale właśnie to robię, tworząc pracę pochodną. Oto moje dwa pytania: * Czy posiadanie pełnej licencji GPL (wersja 2) w katalogu głównym katalogu motywu jest prawnie wiążącym sposobem powiedzenia, że kod jest objęty licencją GPL2? * Czy legalne jest, aby ten plik był objęty tą konkretną licencją CC? Ostatecznie zależy mi na tym: chcę się upewnić, że to, co robię, jest technicznie legalne :) EDIT: Żaden z plików źródłowych nie _mówi_, że jest na licencji GPL; z wyjątkiem tego, że motyw zawiera wtyczki jQuery i jQuery (pod MIT i GPL2), a także thumb.php, które wyraźnie mówi, że jest na licencji GPL2.


title: Czy istnieje wspólna matematyczna symbolika zbiorów?

text: Zostałem poproszony o zdefiniowanie kilku moich algorytmów w kategoriach matematycznych, aby opisać moją pracę klientowi. Próbuję ustalić, czy ktoś wie, czy zostały zdefiniowane wspólne operatory dla kolekcji, takie jak sekwencje, listy, krotki itp. Jeśli tak, czy jest jakieś dobre odniesienie, na które mógłbym się zwrócić. Dziękuję. Interesują mnie faktycznie używane symbole. Zastanawiam się, czy poniższy tekst miałby sens lub pasowałby do kogoś. Biorąc pod uwagę dwa ciągi (lub ciągi): S = (A, B, C) i T = (A, D, H) Moim zdaniem przecięcie tych ciągów wyglądałoby tak, jak S ∩ T = (A) i suma te sekwencje to S ∪ T = (A, B, C, A, D, H)


title: Czy istnieje termin „Użyj procedur wykonujących pojedyncze zadanie”?

text: Prowadzę dyskusję z innym deweloperem i próbuję to uargumentować w formie krótkiego „terminu”. SoC (Separation of Concerns) jest dość prostą praktyką projektową, ale tkwi głębiej. Jeśli chcemy sięgnąć po najgłębsze zakamarki, możemy to wygooglować i pojawia się mnóstwo artykułów, a po rzuceniu okiem wiemy o wiele więcej i możemy znaleźć kilka przykładów. Ale co z „Użyj procedur, które wykonują jedno zadanie”? Jest to również świetna zasada projektowania do wykorzystania podczas pisania aplikacji i staje się to coraz bardziej satysfakcjonujące, im większa staje się aplikacja. Czy istnieje termin określający _Użyj procedur wykonujących pojedyncze zadanie_?


title: Zabezpieczanie poświadczeń przekazywanych do usługi internetowej

text: Usiłuję zaprojektować pojedynczy znak w systemie do użytku w architekturze rozproszonej. W szczególności muszę zapewnić sposób, aby witryna internetowa klienta (tj. witryna internetowa w innej domenie/serwerze/sieci) umożliwiała użytkownikom rejestrowanie kont w moim systemie centralnym. Tak więc, gdy użytkownik podejmuje działanie w witrynie klienta i uznaje się, że działanie to wymaga konta, klient utworzy stronę (w swojej witrynie/domenie), na której użytkownik może zarejestrować nowe konto, podając adres e-mail i hasło. Klient musi następnie wysłać te informacje do usługi sieciowej, która zarejestruje konto i zwróci pewną wartość typu tokenu sesji. Klient będzie musiał zahaszować hasło przed wysłaniem go przez sieć, a usługa sieciowa będzie wymagać https, ale wydaje się, że nie jest to wystarczająco bezpieczne i potrzebuję porady, jak mogę to zaimplementować w najbezpieczniejszy możliwy sposób. Kilka innych istotnych informacji: * Najlepiej byłoby nie udostępniać żadnego kodu klientowi * Rozważaliśmy przekierowanie użytkownika na bezpieczną stronę na tym samym serwerze, co usługa internetowa, ale prawdopodobnie zostanie to odrzucone z przyczyn nietechnicznych. * Prawie na pewno musimy zasolić hasło przed zahaszowaniem i przekazaniem, ale wymaga to od klienta albo a) wygenerowania soli i przekazania nam jej, albo b) przyjścia i poproszenia nas o sól - obaj czują się brudni. Jakakolwiek pomoc lub porada są mile widziane.


title: Czy doświadczenie w wielu językach/frameworkach programowania pomogłoby w zostaniu architektem oprogramowania?

text: Czy przy ubieganiu się o stanowisko architekta oprogramowania przydatne byłoby posiadanie doświadczenia w wielu językach/frameworkach/stosach programowania? Na przykład połączenie doświadczenia w C#/.NET z Java/J2EE. Jak cenne byłyby powyższe w tym kontekście?


title: Kiedy przeciążanie metod jest właściwe?

text: Załóżmy, że pracuję na istniejącym, dość dużym systemie. Mam obiekt `myObject` klasy `MyClass` (dla przykładu załóżmy, że pracuję w Javie). `myObject` to kompozycja zawierająca `Collection`, powiedzmy `List` i inne obiekty, które (chyba) są nieistotne. Zawiera metody delegatów, które służą jedynie do wywoływania metod `List`, z których się składa, aby upewnić się, że `List`, który ma nie jest ujawniona (przepraszam, jeśli pomyliłem się w terminologii). Powiedzmy, że ta `List` jest `List<String>`, ale z jakiegoś powodu główna metoda dostępu jest metodą maski dla klasy `SomeOtherClass`. Gdybym chciał wstawić nową parę wartości do mojej `List`, miałbym obiekt `SomeOtherClass` o nazwie `someObject`. Wywołałbym `myObject.insert(someObject)` i wewnątrz metody `insert` byłaby jakaś magia, która pobierałaby `String` do umieszczenia w `List<String>`. Przypuśćmy teraz, że mam tylko wartość `String` i nie ma obiektu `SomeOtherClass` do wstawienia. Zakładając, że nie mogę zmodyfikować metody `insert`, ponieważ zepsułoby to wszystko w tym systemie. Czy powinienem przeciążyć metodę `insert`? A może powinienem utworzyć nowy obiekt `SomeOtherClass` za każdym razem, gdy chcę wywołać `insert`? Myślę, że gdybym go przeciążył, wyglądałby mniej więcej tak... public void insert(String s) { ... } public void insert(SomeOtherObject obj) { this.insert(obj.magicStringMethod()); } (Ten przykład jest wymyśloną łamigłówką opartą na podobnej (nieco bardziej złożonej) sytuacji dotyczącej przeciążenia, którą napotkałem wczoraj. Rozwinię ją, jeśli będzie coś niejasnego) Czy to byłoby odpowiednie miejsce do przeciążenia metody? Jeśli nie, kiedy należy przeciążyć metodę?


Jaka jest różnica między przeciążeniem metody a nadpisaniem jej w Javie? Czy istnieje różnica w sygnaturze metody, specyfikatorze dostępu, typie zwracanym itp.?


title: Różnice między dynamicznym wysyłaniem a dynamicznym wiązaniem

text: Szukałem w Google wyraźnego rozróżnienia z przykładami, ale nie mogłem znaleźć żadnych. Próbuję zrozumieć różnice między Dynamic Dispatch i Dynamic Binding w językach zorientowanych obiektowo. O ile rozumiem, dynamiczne wysyłanie jest tym, co dzieje się, gdy wywoływana metoda konkretna jest podejmowana w czasie wykonywania, na podstawie konkretnego typu. Na przykład: public void doStuff(SuperType object){ object.act(); } `SuperType` ma kilka podklas. Konkretna klasa obiektu będzie znana tylko w czasie wykonywania, a więc o wywołaniu konkretnej implementacji `act()` zostanie podjęta decyzja w czasie wykonywania. Nie jestem jednak pewien, co oznacza Dynamic Binding i czym różni się od Dynamic Dispatch. Proszę wyjaśnić dynamiczne powiązanie i czym różni się od dynamicznego wysyłania. Przykłady Java byłyby mile widziane.


title: Klasa równoważności dla tego wymagania

text: Zautomatyzowany system dzwonków Stateless University powinien dzwonić co godzinę w poniedziałki, środy i piątki. Powinien dzwonić co 90 minut we wtorki i czwartki, aw weekendy w ogóle nie dzwoni Tak więc zajęcia równoważne dla tych to: poniedziałki, środy, piątki, wtorki i czwartki, soboty i niedziele 90 minut 60 minut Czy mam rację?? czy czegoś mi brakuje?


title: Zrozumienie wzorca projektowego mostu

text: W ogóle nie rozumiem wzorca projektowego „most”. Przejrzałem różne strony internetowe, ale one nie pomogły. Czy ktoś może mi pomóc w zrozumieniu tego?


title: Jak dołączyć licencje dla zewnętrznych zależności Maven?

text: Tworzę plik binarny do dystrybucji dla mojego projektu Java. Udostępniam go na dwa sposoby: 1. Maven Central 2. Spakowany do dystrybucji na kod Google Mój projekt jest na licencji Apache 2.0. Korzystam z niewielkiej liczby stron trzecich, z których jedna ma licencję MIT. Uważam, że moim obowiązkiem jest poinformowanie użytkowników mojego projektu o treści licencji, na podstawie następującego tekstu licencji: > Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu powinny być dołączone do > wszystkich kopii lub istotnych części Oprogramowania. Jak najlepiej odnieść się do tego w moim źródle i moich elementach dystrybucyjnych? Obecnie myślę: 1. Moje pliki źródłowe nie muszą się do niczego odwoływać. Zawierają tylko moją notatkę o schemacie Apache 2.0. 2. Dodaję plik LICENSE.txt w katalogu głównym mojego projektu, w tym tekst licencji Apache 2.0. 3. Do mojego skompresowanego pakietu dystrybucyjnego muszę również dodać _coś_, co wskazuje, że składnik jest objęty licencją MIT. Może plik NOTICE? 4. W przypadku mojej dystrybucji Maven Central nie muszę nic robić, ponieważ mój artefakt po prostu deklaruje swoje zależności, ale tak naprawdę ich nie zawiera. Czy to wygląda na poprawny plan? Jeśli tak, czy ktoś może doradzić, jak wykonać punkt 3.


title: Jak należy TDD gry Yahtzee?

text: Powiedzmy, że piszesz w stylu TDD gry Yahtzee. Chcesz przetestować część kodu, która określa, czy zestaw pięciu rzutów kostką to ful. O ile mi wiadomo, podczas TDD postępuj zgodnie z następującymi zasadami: * Najpierw pisz testy * Napisz najprostszą możliwą rzecz, która działa * Udoskonalanie i refaktoryzacja Tak więc wstępny test może wyglądać mniej więcej tak: public void Returns_true_when_roll_is_full_house() { FullHouseTester sut = nowy FullHouseTester(); var rzeczywista = sut.IsFullHouse(1, 1, 1, 2, 2); Potwierdzenie.Istnieje(rzeczywiste); } Postępując zgodnie z "Napisz najprostszą możliwą rzecz, która działa", powinieneś teraz napisać metodę `IsFullHouse` w następujący sposób: public bool IsFullHouse(int roll1, int roll2, int roll3, int roll4, int roll5) { if (roll1 = = 1 && rzut2 == 1 && rzut3 == 1 && rzut4 == 2 && rzut5 == 2) { return true; } zwróć fałsz; } Powoduje to zielony test, ale implementacja jest niekompletna. Czy powinieneś testować jednostkowo każdą możliwą prawidłową kombinację (zarówno wartości, jak i pozycji) dla fulla? Wygląda to na jedyny sposób, aby mieć absolutną pewność, że Twój kod `IsFullHouse` jest w pełni przetestowany i poprawny, ale wydaje się to również dość szalone. Jak byś przetestował coś takiego? ## Aktualizacja Erik i Kilian zwracają uwagę, że używanie literałów w początkowej implementacji w celu uzyskania zielonego testu może nie być najlepszym pomysłem. Chciałbym wyjaśnić, dlaczego to zrobiłem, a to wyjaśnienie nie pasuje do komentarza. Moje praktyczne doświadczenie z testowaniem jednostkowym (zwłaszcza z podejściem TDD) jest bardzo ograniczone. Pamiętam, jak oglądałem nagranie TDD Masterclass Roya Osherove'a w Tekpub. W jednym z odcinków buduje styl String Calculator TDD. Pełną specyfikację kalkulatora ciągów można znaleźć tutaj: http://osherove.com/tdd-kata-1/ Zaczyna się od takiego testu: public void Add_with_empty_string_should_return_zero() { StringCalculator sut = new StringCalculator(); int wynik = sut.Dodaj(""); Assert.AreEqual(0, wynik); } Wynikiem tego jest pierwsza implementacja metody `Add`: public int Add(string input) { return 0; } Następnie dodawany jest ten test: public void Add_with_one_number_string_should_return_number() { StringCalculator sut = new StringCalculator(); int wynik = sut.Dodaj("1"); Assert.AreEqual(1, wynik); } Refaktoryzacja metody `Add`: public int Add(string input) { if (input.Length == 0) { return 0; } return 1; } Po każdym kroku Roy mówi „Napisz najprostszą rzecz, która zadziała”. Pomyślałem więc, że spróbuję tego podejścia, próbując stworzyć grę Yahtzee w stylu TDD.


title: Bezpieczna zmiana konfiguracji systemu z aplikacji internetowej

text: Muszę napisać aplikację internetową, która działa jako interfejs konfiguracyjny dla niektórych usług systemowych. Oznacza to, że prawdopodobnie zmieni jakiś plik konfiguracyjny i będzie musiał zrestartować usługi systemowe (linux). Zastanawiałem się, jak zaprojektować coś takiego w bezpieczny sposób. Jest bardzo podobny do interfejsów sieciowych routera i tym podobnych, więc rzuciłem okiem na niektóre z nich, a także na webmina. Zasadniczo mógłbym uruchomić usługę sieciową/CGI-Script/etc. z uprawnieniami roota, filtruj dane wejściowe tak dobrze, jak to możliwe i po prostu pisz do systemu i uruchamiaj dowolny program, który chcę. Nie wydaje się to zbyt bezpieczne. Chciałbym osiągnąć pewien rodzaj separacji przywilejów. Być może posiadanie mojej aplikacji sieciowej działającej jako nieuprzywilejowany użytkownik i przekazywanie informacji do jakiegoś uprzywilejowanego demona/usługi, np. posiadanie aplikacji sieciowej w Pythonie, która zapisuje informacje do pliku i powiadamia demona lub używa gniazd unixowych do komunikacji z tym programem zaplecza. Jakieś pomysły lub doświadczenia, którymi mógłbyś się podzielić w związku z tym problemem? Z góry bardzo dziękuję.


title: Korzystanie z debugera (pytanie do rozmowy kwalifikacyjnej)

text: Podczas rozmowy telefonicznej, którą odbyłem, ankieter zadawał mi pytania dotyczące mojej poprzedniej pracy jako web developer. Po omówieniu, w jaki sposób używałem Eclipse do pisania serwletów Java, zadał mi pytanie, czy znam debugger, „wiesz, przechodzenie przez kod, ustawianie punktów przerwania i tak dalej”. Odpowiedziałem, mówiąc coś w stylu, że używam debuggera prawie codziennie w pracy, aby śledzić wszelkie błędy, które mogą się pojawić. Patrząc wstecz, brzmi to tak, jakby powiedzenie „Używam debuggera prawie codziennie” sprawia, że wydaje się, że piszę słaby kod, który ciągle muszę debugować. Tak więc moje pytanie brzmi: **Czy używanie debuggera często jest oznaką złego programowania, czy tylko naturalną częścią procesu rozwoju?**


title: Czy obiekty domeny w projekcie opartym na domenie mają być tylko do zapisu?

text: Czytałem o projektowaniu opartym na domenie od prawie dwóch lat i ostrożnie wprowadzałem pewne koncepcje do mojej codziennej pracy lub przynajmniej planowałem, w jaki sposób rzeczy, które robię regularnie, mogą być wykonywane w ramach projektu opartego na domenie. Jeden wniosek, do którego zacząłem dochodzić, zwłaszcza w odpowiedzi na czytanie więcej o źródle zdarzeń i segregacji odpowiedzialności za zapytania poleceń (CQRS), że być może obiekty domeny są przeznaczone tylko do celów zapisu. Aby być bardziej przejrzystym, wydaje się, że to, co ludzie subtelnie sugerują w dużej części dokumentacji, którą czytałem, że obiekty domeny są odpowiedzialne za wykonywanie operacji/obliczeń domenowych, walidację, a następnie są głównie po to, aby zapewnić drogę do trwałości poprzez infrastruktury dostarczonej w ramach wdrożenia Repozytorium. Chociaż podoba mi się fakt, że może to znacznie uprościć model domeny, ponieważ odcina odpowiedzialność za ujawnianie stanu. Jeśli rzeczywiście jest słuszne, że obiekty domeny mają być używane głównie jako obiekty tylko do zapisu, to rodzi się dla mnie kilka pytań, na które mam nadzieję, że ktoś mógłby odpowiedzieć. 1. W jaki sposób można wykonać testy jednostkowe na obiekcie, który ma settery lub metody, które modyfikują stan obiektu, ale które nie zapewniają zewnętrznego interfejsu publicznego do odczytu stanu, takiego jak pobierające właściwości w C#? Czy można ujawniać stan wyłącznie w celu umożliwienia testowania tego obiektu? 2. Jak pokazać użytkownikowi wyniki obliczeń lub operacji wykonanych w domenie bez konieczności ich utrwalania, a następnie wyciągnąć wyniki z magazynu utrwalania poza kontekst domeny? Czy można eksponować stan wyłącznie w celu pokazania wyników. Czy obowiązuje zasada, że jedynymi pobierającymi właściwości (pobierającymi akcesory) powinny być te, które są również zapisywalne w domenie? Lub mówiąc inaczej, czy właściwości tylko do odczytu powinny być jedyną rzeczą, której należy unikać, ponieważ są one dostępne tylko do celów odczytu, a zatem nie odgrywają niezbędnej roli w rzeczywistym modelu domeny? Materiały powiązane: 1. TDD, DDD i enkapsulacja


title: Małe projekty C

text: Jestem profesjonalnym programistą, który generalnie używa języków wysokiego poziomu z zarządzaniem pamięcią. Jednak coraz bardziej wstydzę się mojej niekompetencji w językach niskiego poziomu, takich jak `C`, których nie używałem od czasu moich kursów systemowych na studiach. Chcę na nowo nauczyć się niektórych bardziej wyrazistych części języka `C`, ale nie mam zbyt wiele czasu na pracę hobbystyczną. Jakie są małe projekty, które podkreślają niskopoziomowe aspekty języka, aby pomóc mi ożywić moją wiedzę?


title: Jakie istnieją metody oceny zdolności rozwojowych organizacji?

text: W tej chwili mam nie lada wyzwanie w pracy. Obecnie (i faktycznie od pewnego czasu) doświadczamy następujących problemów z niektórymi utrzymywanymi wewnętrznie aplikacjami: * Defekty (czasem całkiem poważne) są wprowadzane do produkcji; * Klient (tj. odpowiednia jednostka biznesowa) nieustannie zmieniający zdanie (lub pozornie, że tak robi) co do tego, nad którym problemem będzie dalej pracować; * Sytuacja, w której wszyscy przez większość czasu wydają się być w trybie „gaszenia pożaru”; * Personel ds. rozwoju odpowiadający na żądania operacyjne od użytkowników biznesowych; („operacyjny” oznacza tutaj coś, co należy zrobić, aby kontynuować działalność, a może po prostu uczynić życie użytkownika biznesowego nieco mniej bolesnym, w przeciwieństwie do naprawienia błędu w aplikacji lub ulepszenia aplikacji); Teraz jestem pewien, że dla większości uczestników tej witryny z pytaniami i odpowiedziami nie brzmi to szczególnie nowe lub zaskakująco i nie ma nagród za zidentyfikowanie „zwykłych podejrzanych”, jeśli chodzi o przyczyny źródłowe. Moje wyzwanie polega na tym, że muszę przekonać zwierzchników do robienia _niewygodnych_ rzeczy, aby zająć się tym wszystkim. Ludzie, których muszę przekonać, wywodzą się z mieszanki dwóch następujących kultur: * Księgowość; * Infrastruktura IT. Zdecydowałem się zatem na strategię, która czerpie z rzeczy, z którymi ludzie z takiej kultury byliby najwygodniejsi (przynajmniej w mojej ocenie), a mianowicie: liczby i namacalne. Oczywiście współcześni praktycy rozwoju wiedzą aż za dobrze, że tego rodzaju rzeczy nie da się łatwo rozwiązać przy użyciu analitycznego nastawienia (niektórzy twierdzą, że _ten_ sposób myślenia jest w rzeczywistości całkowicie niewłaściwy). Niemniej jednak jest to dychotomia, z którą się zmagam, więc to jest kołek, który wbiłem w ziemię. Chciałbym móc prowadzić badania i wykorzystywać wyniki do przedstawiania wyników w postaci metryk i miar. Trudno mi jednak znaleźć uzgodnioną metodologię i zestaw szablonów do oceny zdolności rozwojowych organizacji – jedyną rzeczą, która wydaje się odpowiednia, jest model dojrzałości zdolności (Software Engineering Institute). Ta ostatnia wydaje się jednak przestarzała, a nawet wtedy dość niejasna. Pytanie zatem brzmi: Jak mam ocenić możliwości naszej organizacji w zakresie inżynierii oprogramowania, aby móc przedstawić wyniki w sposób konkretny i odwołujący się do ogólnie przyjętego standardu branżowego? **AKTUALIZACJA:** Robiąc trochę więcej badań, natknąłem się na tę małą oazę \- FAQ CMMI sformułowany w kategoriach laika--po prostu rodzaj użytecznego zasobu, którego potrzebujesz w tej dziedzinie ... i _bezpłatnie_.


title: Projektowanie modeli osadzonych - od góry do dołu czy od dołu do góry?

text: Staram się nauczyć RoR i rozwijać aplikację internetową. Mam kilka modeli, o których pomyślałem dla tej aplikacji i są one dość osadzone. Na przykład (proszę wybaczyć mój brak składni RoR): Model: tytuł podręcznika: ciąg znaków: ciąg has_many: rozdziały Model: treść rozdziału: tekst has_one: sekcja_recenzji Model: sekcja_recenzji tytuł:ciąg has_many: pytania has_many: odpowiedzi , poprzez :pytania Model : pytania... Model: odpowiedzi... **Moje pytanie na przykładzie, który podałem, czy powinienem zacząć od najwyższego modelu (podręcznik) czy od najniższego (odpowiedzi)?**


title: TRS-80 Color BASIC jako inspiracja dla nowego języka programowania

text: Od jakiegoś czasu chciałem stworzyć własny język programowania. Mam 17 lat i jedynym językiem jaki znam to Color BASIC. Wiem, że w porównaniu z dzisiejszymi skomplikowanymi językami jest dość słaby. Ale zastanawiałem się, czy trudno byłoby stworzyć język, który przypominałby color BASIC/BASIC i jak bym go zaczął? Co zrobić lub co muszę zrobić, aby nauczyć się tworzyć własny język programowania?