title: Sortowanie tablicy, gdy wartości są zmniejszane przez każdą zamianę

text: Ostatnio w wywiadzie natrafiłem na pytanie: > Mamy nieposortowaną tablicę, musimy ją posortować z minimalną liczbą swapów. > Mamy w pewnym sensie „podatek” w wysokości 1 jest odliczany od liczby, którą wymieniamy. więc załóżmy, że początkowo mamy tablicę jako 2 4 1 3 5 ^ ^ po zamianie powiedzmy 2 i 1, nowy stan tablicy to: 0 4 1 3 5 // 'podatek' 1 jest odejmowany od 1 i 2 ^ ^ // więc mamy 0 i 1 w tym miejscu po zamianie Więc musimy posortować tablicę w min. numer wymiany. Jakieś sugestie dotyczące projektu algorytmu? Myślałem o zrobieniu tego z rodzajem fuzji, ale nadal nie jestem pewien, czy jest to najlepsze podejście.


title: PHP: częsty zapis systemu plików

text: Buduję grę opartą na PHP i MySQL. Zasadniczo istnieje tryb gracz kontra gracz, ale pomyślałem, że powinienem dodać również tryb gracz kontra komputer, ponieważ gracze mogą nie być online przez cały czas, zwłaszcza na początku. Zasadniczo jest to gra typu walki, w której gracze mają do 2 postaci i mogą walczyć ze sobą na zmianę. Postanowiłem zapisać jednostki komputera w systemie plików zamiast w bazie danych. Istnieją różne obozy potworów, które gracze mogą atakować. Jeśli kilku graczy zaatakuje ten sam obóz, tworzone są oddzielne instancje. Mam jednak wątpliwości, czy powinienem zapisywać pełne informacje o jednostkach w instancji, czy tylko właściwości, które mogą się zmienić w trakcie bitwy. Podam przykład. Oto klasa jednostki klasa Unit { // Generic protected $id = null; funkcja publiczna getID(){ return $this->id; } publiczny $właściciel = null; publiczne $nazwa; // Witalność public $HP = 100; publiczne $HPmax = 100; $energia publiczna = 100; publiczne $NRGmax = 100; // Fizyczna publiczna $siła = 0; publiczna $wytrzymałość = 0; // Psychiczna publiczna $wiedza = 0; publiczna $mądrość = 0; // ... } A tak wygląda struktura plików /PvC/prototypes/ /PvC/clones/ w prototypach zapisywane są predefiniowane ustawienia poszczególnych jednostek, natomiast w klonach są zapisywane instancje, z którymi gracze walczą aktualnie. Jak to działa w tej chwili to w klonach zapisuję `serialize($computer->units)` co wstawia pełne informacje o jednostce. Obawiam się, że niektóre właściwości, takie jak nazwisko, właściciel i inne, nigdy się nie zmienią podczas bitwy, więc przepisywanie ich za każdym razem jest bezcelowe. Powiedziałbym, że plik instancji jest przepisywany dość często, prawie z każdym żądaniem podczas bitwy. Aby uniknąć ciągłego nadpisywania, mogłem serializować tylko te właściwości, które mogą się zmienić podczas bitwy, a następnie załadować jednostkę z prototypu w takiej postaci, w jakiej jest, a następnie nadpisać ją właściwościami z klonu. Jednak problem polega na tym, że ładuję 2 pliki zamiast jednego, a następnie ładuję kilka danych z pierwszego pliku, którego nie użyję, i zostanie on nadpisany. Wiem, że to naprawdę nie jest coś, co miałoby znaczenie, ponieważ rozmiar pliku rzadko przekracza 10kb, ale to po prostu bardzo mnie denerwuje. Jakie są twoje przemyślenia na ten temat, jestem otwarty na porady. Dziękuję!


title: Rozszerzenie Internet Explorera o obsługę bankomatu do obsługi kart kredytowych i szuflady na gotówkę

text: Mam aplikację, która jest obecnie aplikacją formularzy wygranych, korzystającą z wbudowanej kontrolki przeglądarki internetowej IE. Aplikacja win form zapewnia dostęp do podłączonego automatu do kart kredytowych i szuflady kasowej do strony internetowej działającej w IE. Robi to, tworząc obiekty JavaScript w kontrolce przeglądarki internetowej IE, które aplikacje internetowe wywołują w celu wykonania operacji, takich jak przeciągnięcie karty kredytowej lub otwarcie szuflady na gotówkę. Te obiekty js są mapowane na metody w aplikacji formularzy wygranej, która następnie wchodzi w interakcję z urządzeniami. Jest to całkiem fajne rozwiązanie, z wyjątkiem tego, że wbudowanej kontroli sieciowej IE brakuje wszystkich wspaniałych narzędzi programistycznych standardowego okna przeglądarki internetowej. A więc... Chcę przenieść aplikację internetową, aby była używana w normalnym oknie przeglądarki internetowej (pozostawanie z IE jest w porządku dla tego klienta), jednocześnie mając dostęp do automatu do kart kredytowych i szuflady na gotówkę. Więc moje pytanie brzmi... Jakie rozwiązanie jest najlepsze lub nawet możliwe? * Active X Control - nie podoba mi się ta opcja * Aplet Java * Flash * Utwórz rozszerzenie IE - z rozszerzeniem IE można zrobić coś, co robimy z naszym obecnym rozwiązaniem? - Preferowana opcja, jeśli to możliwe. Czy ktoś ma z tym doświadczenie lub jakieś pomysły? Bardzo ci dziękuje za pomoc!


title: Czy osiągamy rozwiązanie 100% Persistence Ignorance, jeśli nie używamy obiektów POCO ORM do modelowania domeny?

text: Ignorancja trwałości to zdolność do pobierania/utrzymywania standardowych obiektów, przy czym obiekty standardowe są uważane za klasy skupione na konkretnym problemie biznesowym, a zatem nie zawierają żadnej „logiki związanej z infrastrukturą”. W DDD _Wzorzec repozytorium_ jest używany do osiągnięcia PI. Zakładając, że nie używamy obiektów POCO ORM do modelowania _Domen_ , to nasze _Obiekty domeny_ nie muszą spełniać wymagań projektowych konkretnego O/RM (takich jak używanie _domyślnego konstruktora_ lub oznaczanie właściwości jako `wirtualne`). Takie _obiekty domeny_ byłyby uważane za _ignorujące trwałość_. Ale jeśli chcemy, aby te _Domain Objects_ wspierały również funkcje takie jak _leniwe ładowanie_ , to ich właściwości muszą zawierać pewną logikę, która w pewnym momencie będzie musiała sprawdzić, czy powiązane dane zostały już załadowane, a jeśli nie, skontaktuje się z odpowiednim _Repozytorium_ i zażądać powiązanych danych. Teraz, mimo że te _Obiekt domeny_ są całkowicie nieświadome tego, w jaki sposób są utrwalane i jako takie, ich _Domena_ jest całkowicie oddzielona od podstawowego _dostawcy DAL_ , nie możemy nadal twierdzić, że takie _Obiekty domeny_ zawierają `logikę związaną z infrastrukturą`, a zatem nadal naruszają _LICZBA PI_? Dziękuję Ci


title: Dlaczego funktory Haskella mają tylko typy pochodne w swojej kategorii docelowej?

text: W Haskell funktor typeklasy Functor definiuje się następująco (patrz np. Haskell wiki): class Functor (f :: * -> *) gdzie fmap :: (a -> b) -> f a -> f b O ile rozumiem (proszę mnie poprawić, jeśli się mylę), taki funktor może mieć jako kategorię docelową tylko kategorię skonstruowaną za pomocą konstruktora typu, np. `[]`, `Może` itd. Z drugiej strony można pomyśleć o funktorach posiadających dowolną kategorię jako cel funktora, np. kategoria wszystkich typów Haskella. Na przykład `Int` może być obiektem w docelowej kategorii funktora, a nie tylko `Może Int` lub `[Int]`. Jaka jest motywacja tego ograniczenia na funktorach Haskella?


title: Standardy w rozwoju przedsiębiorstw

text: Czy może nadszedł czas, aby systemy korporacyjne zostały opracowane zgodnie z surowymi, narzuconymi standardami? Wiele książek wymienia opcjonalne „standardy” i najlepsze praktyki, ale są to czysto sugerowane praktyki. Mimo to, za każdym razem, gdy patrzę na kod systemu korporacyjnego, którego nie byłem częścią, spędzam dużo czasu na dopracowywaniu architektury. Czy nie powinniśmy mieć jakiejś formy akredytacji ISO dla naszych systemów? Moglibyśmy mieć wybór standardowych architektur, takich jak model domeny, skrypt transakcji itp., ale kiedy już wybierzemy jedną z nich, musimy postępować zgodnie ze ścisłym szablonem architektonicznym. Systemy mogłyby zostać poddane audytowi, aby upewnić się, że pracujemy zgodnie z tymi standardami, a nasze firmy będą posiadać tę akredytację. Byłoby to lepsze dla programistów, ponieważ gdy podejmiemy się pracy ze starszymi wersjami, które zostały napisane przez inną firmę, nie będziemy musieli tracić czasu na rozszyfrowywanie architektury. Byłoby to korzystne dla klientów, ponieważ wiedzieliby, że gdyby skorzystali z usług akredytowanej firmy deweloperskiej, mogliby skorzystać z innej firmy do jej utrzymania/zmiany, a nie być związani z pierwotnymi programistami.


title: Po co optymalizujesz?

text: Ogólnie rzecz biorąc, do jakiego rodzaju optymalizacji zazwyczaj dążysz podczas projektowania oprogramowania? Czy jesteś typem, który woli optymalizować swój projekt * pod kątem czasu opracowywania (tj. szybkiego pisania i/lub łatwiejszego w utrzymaniu)? * Czas przetwarzania * Przestrzeń dyskowa (pamięć RAM, DB, dysk itp.) Oczywiście jest to bardzo subiektywne w stosunku do rodzaju rozwiązywanych problemów i związanych z nimi terminów, więc chciałbym usłyszeć o powodach, które skłoniłyby Cię do wyboru jedna forma optymalizacji nad inną.


title: Dlaczego C# zezwala na właściwości w interfejsach?

text: W C# następujący kod jest prawidłowym interfejsem I{ int property{get;set;} } Co nie ma dla mnie żadnego sensu. Wydaje się to łamać jedną z najważniejszych zasad interfejsów: brak stanu (innymi słowy brak pól). Czy właściwość nie tworzy niejawnego pola prywatnego? Czy nie byłoby to naprawdę złe dla interfejsów?


title: Wady GNU LGPL v3 kontra GNU LGPL v2.1?

text: Po pierwsze, zdaję sobie sprawę, że jest to strona z pytaniami i odpowiedziami dotyczącymi programowania, a nie miejsce na porady prawne... Próbuję tylko uzyskać podstawowe pojęcie o wadach korzystania z biblioteki LGPLv3. Jakie są różnice między GNU LGPL v2.1 a GNU LGPL v3? W szczególności wiem, że zwykła GPLv3 zawiera wiele klauzul anty-drm i antypatentowych. Zasadniczo nie mam nic przeciwko tym klauzulom, ale nagle zastosuję je do głównej aplikacji, jeśli zdecyduję się na użycie biblioteki LGPLv3. Wydaje się, że zasady LGPL v2.1 dotyczą tylko biblioteki, której używasz lub modyfikujesz. Nie mówi nic o głównej aplikacji. (Zakładając brak statycznego linkowania itp.) Tak więc w niszowym dostawcy oprogramowania, w którym pracuję, regularnie korzystamy (i przyczyniamy się do) licencjonowanych bibliotek LGPL, bez konieczności otwierania naszej głównej aplikacji. Czy to się zmienia w LGPLv3? Pytanie http://stackoverflow.com/questions/1108238/differences-between-gnu-lgpl-v2-1-and-gnu-lgpl-v3 otrzymało kilka odpowiedzi, ale żadnej, która odnosiłaby się do jakichkolwiek nowych zobowiązań, które główna aplikacja może mieć. Dla wyjaśnienia: pytam o LGPL v3, a nie o zwykłą GPLv3. Czy któryś z wymogów Tivoization / przyznania patentu „przepływa” z biblioteki LGPLv3 do aplikacji hosta?


title: Relacja i różnice między SGML, XML, HTML i XHTML

text: 1. Zastanawiałem się, co oznacza „profil” w Wikipedii: > XML jest profilem standardu ISO SGML, a większość XML pochodzi z SGML > bez zmian. 2. Według http://xml-tips.assistprogramming.com/sgml-xml-html-xhtml-all-together.html: > HTML jest podzbiorem SGML. >> XML jest wysoce funkcjonalnym podzbiorem SGML. > > XHTML rozszerza i podzbiory HTML. Czy „jeden jest podzbiorem drugiego” oznacza, że kod w pierwszym jest również poprawny składniowo i semantycznie taki sam jak w drugim? Tak jak w sensie elementarnej teorii zbiorów, * czy HTML, XML i XHTML są różnymi podzbiorami SGML? * czy XML i HTML prawie się nie przecinają? * czy XHTML jest nadzbiorem XML i HTML? 3. Czy mogę oczekiwać bardziej zwięzłego i jasnego podsumowania różnic w celach tych czterech i/lub kiedy użyć którego, niż powyższy link? Jestem naprawdę zdezorientowany, jeśli chodzi o wyraźną granicę między ich zamierzonymi celami. 4. Według http://xml-tips.assistprogramming.com/sgml-xml-html-xhtml-all-together.html: > XML nie jest pojedynczym językiem znaczników. Jest to metajęzyk, który pozwala użytkownikom > projektować własny język znaczników. Zastanawiałem się, jak zrozumieć XML i HTML są podzbiorami SGML, ale HTML jest językiem znaczników, podczas gdy XML nie jest językiem znaczników, ale metajęzykiem do projektowania języków znaczników? Czy SGML i XHTML są również metajęzykiem do projektowania języka znaczników? 5. Tak jak w obu linkach wspomnij, że HTML jest aplikacją SGML, a także podzbiorem SGML, a XHTML jest aplikacją XML. Zastanawiam się, jakie są różnice między stwierdzeniem, że jeden język jest zastosowaniem innego, a jeden język jest podzbiorem innego? Dziękuję i pozdrawiam!


title: Czy powinienem komentować tabele lub kolumny w mojej bazie danych?

text: Lubię komentować swój kod różnymi informacjami i myślę, że obecnie większość ludzi robi to podczas pisania kodu. Ale jeśli chodzi o tabele lub kolumny bazy danych, nigdy nie widziałem, aby ktoś ustawiał jakieś komentarze, a szczerze mówiąc, nawet nie myślę o szukaniu tam komentarzy. Zastanawiam się więc, czy niektórzy ludzie komentują tutaj swoją strukturę bazy danych i czy powinienem zawracać sobie głowę komentowaniem, na przykład podczas tworzenia nowej kolumny do istniejącej tabeli?


title: Czy samotny programista może zostać programistą średniego lub wyższego poziomu bez mentora?

text: **Pytanie:** Czy programista na poziomie podstawowym może zostać programistą średniego lub wyższego poziomu, który pracuje w firmie jako jedyny programista bez mentora? **Tło:** Zostałem zatrudniony jako programista na poziomie podstawowym w średniej wielkości firmie, która nie zajmuje się programowaniem poza wewnętrznymi programami. Jestem uważany za geniusza w firmie z przyzwoitą pensją, ale po 2 latach zdecydowałem, że chcę przenieść się do rzeczywistej firmy programistycznej. Procesy rozmów kwalifikacyjnych były niezwykle demoralizujące, ponieważ chociaż pisałem wewnątrzfirmowe aplikacje korporacyjne, wywiady te uświadomiły mi, jak niewiele faktycznie wiem.


title: Darmowe narzędzie do projektowania interfejsów użytkownika Java

text: Podczas opracowywania GUI dla mojego projektu Java, zastanawiam się, czy jest coś, co pozwala wizualnie zaprojektować GUI dla Javy i odpowiednio generuje potrzebny kod, tylko po to, aby przyspieszyć zadanie. Używam Eclipse i próbowałem już Window Builder, ale nie podoba mi się kod, który generuje. Czy ktoś zna jakieś alternatywy (prawdopodobnie niekomercyjne)?


title: Jak zamieścić przykładowe kodowanie przy ubieganiu się o stanowisko programowania na poziomie podstawowym?

text: Wkrótce rozpocznę proces aplikowania na stanowiska programistyczne na poziomie podstawowym. Na razie nie mam doświadczenia w kodowaniu, więc wszystko, co muszę pokazać, to kilka osobistych projektów i próbki kodu, aby pokazać, do czego jestem zdolny. Jak mam zaprezentować potencjalnemu pracodawcy takie rzeczy jak próbki kodu, moja konkretna praca przy projektach opartych na współpracy, projekty osobiste itp.? Coś jak cyfrowa wizytówka? link w CV do strony, na której wszystko jest ułożone? linki do poszczególnych stron projektu? Zasadniczo, czy istnieje preferowana metoda wypisywania lub wyświetlania tego, co zrobiłem, poza kilkoma linijkami w CV, które to opisują?


title: Jaki jest przyjazny dla Content-Security-Policy sposób przekazywania danych z serwera do przeglądarki podczas ładowania strony?

text: Tworząc dla sieci, często łapię się na tym, że chcę przekazać kilka zmiennych ze skryptów serwera do mojego javascriptu – dane pobierane z bazy danych i ustawiane inaczej na różnych stronach uruchamiających w zasadzie ten sam kod. (Zazwyczaj jest to coś w stylu `example.com/slideshows/1`, gdzie trzeba wiedzieć, że pokaz slajdów 1 zawiera 8 obrazów i jakie są ich adresy URL, ale to tylko przypadkowy przykład; szukam ogólnego Odpowiedź.) Moje normalne podejście polega na dołączeniu krótkiego bloku wbudowanego javascriptu, który ustawia kilka zmiennych globalnych lub wywołuje niektóre funkcje inicjujące, co jest proste i skuteczne. Nie jest to jednak przyjazne dla Content Security Policy, ponieważ wbudowany javascript jest domyślnie blokowany i nie bez powodu. (Wiem, że zasady można ustawić tak, aby zezwalały na wbudowany javascript, jeśli masz do niego dostęp, ale nawet jeśli to zrobisz, otwierasz potencjalne problemy z bezpieczeństwem.) Potrzebuję strategii, która dobrze współpracuje z odpowiednimi dostawcami CSP. Wiem, że można to zrobić za pomocą wywołania ajax, ale to przesada w przypadku czegoś, co trzeba ustawić tylko raz i dodaje dodatkowe wywołanie, które spowalnia ładowanie strony. W niektórych przypadkach, takich jak pokaz slajdów, o którym wspomniałem, można sobie z tym poradzić, jeśli javascript sprawdzi inne dynamicznie konstruowane elementy strony w celu zrekonstruowania żądanych danych, co jest w porządku, ale nie jest to bardzo ogólne rozwiązanie. Jak najlepiej sobie z tym poradzić? (Prawie wysłałem to pytanie na SO, ale wydaje się to trochę subiektywne; mogę wymyślić sposoby na zrobienie tego, po prostu nie lubię żadnego z nich.)


title: Organizowanie podmiotów biznesowych i prezentacyjnych

text: **Tło** Rozwijam projekt WPF. Oto podstawowa struktura: * **Interfejs użytkownika** (Projekt WPF); * **Interfejsy** (biblioteka klas, zawiera wszystkie interfejsy i encje używane przez aplikację; * **Moduły** (każdy moduł zawiera logikę konkretnego argumentu, np. Zarządzanie plikami i ewentualnie może zawierać Kontrole użytkownika Wpf W kontrolkach WPF, aby ułatwić operacje wiązania, stworzyłem klasę BaseViewModel, która zawiera metodę Raise automatyzującą mechanizm wiązania (do dalszych szczegółów użyłem techniki podobnej do tej opisanej w tym artykule).* * * **Problem** Zrozum, w jaki sposób najlepiej oddzielić Formularz Prezentacyjny od Biznesowego w klasach encji.* * * **Przypadek** W projekcie **Interfejsy** mam np. klasę `User` public class User { public virtual string Name { get; set; } // Inne właściwości } W jednym z modułów muszę użyć klasy `User` i powiązać jej właściwości z kontrolkami interfejsu użytkownika. muszę użyć niestandardowego impleme wpisanie słów kluczowych `get` i `set`. W pierwszej chwili pomyślałem o stworzeniu w Module klasy o nazwie np. ClientUser i nadpisaniu potrzebnych mi właściwości: public class ClientUser : User { private string name; public override string Nazwa { get { return name; } set { Raise(out name, value); } } // Inne właściwości } Problemem jest metoda Raise, która jest zadeklarowana w klasie `BaseViewModel`, ale ze względu na ograniczenie pojedynczego dziedziczenia C# nie mogę dziedziczyć z obu klas. Jaki jest właściwy sposób na zaimplementowanie tej architektury?


title: Jak uzyskać dostęp do usługi internetowej z aplikacji mobilnej Windows 8.1?

text: Przez ostatnie kilka miesięcy tworzyłem aplikację Windows Phone 8.1 Runtime. Mam z tym niewielkie doświadczenie (chociaż sporo innych doświadczeń w programowaniu), ale udało mi się przebić. Teraz jednak uderzyłem w ścianę. To, co muszę zrobić, to wysłać zapytanie z aplikacji mobilnej do jakiegoś serwisu internetowego, który wykona pewne czynności z zapytaniem opartym na bazie danych i zwróci wynik. Problem polega na tym, że nie mam żadnego doświadczenia z jakąkolwiek usługą internetową i chociaż jestem dość pewny, że potrafię to zrobić, gdy już wiem, co robię, w ciągu ostatnich kilku dni wpadałem na kwestia tego, co konkretnie powinienem robić. Jest wiele opcji, których trudno mi odróżnić, i niewiele wstępnych wyjaśnień, do których należy użyć i gdzie. Pojawia się również ten problem, który ciągle się pojawia: http://social.msdn.microsoft.com/forums/windowsapps/en-US/9ab43a4c-499a-4f2e-81e5-c1ab5acbe9bf/wcf-add-service-reference-not-supported -for-windows-phone-81-xaml-applications?forum=wpdevelop Tak więc w sumie nie wiem, w jakim kierunku mam zmierzać. Czy po stronie usługi sieci Web powinienem tworzyć aplikację WCF? ASP.NET? Po stronie telefonu, czy powinienem uzyskiwać dostęp do usługi sieci Web przy użyciu HttpClient? StreamSocket? Coś innego? Czy to ma znaczenie? Tak naprawdę pytam -- jakie są różnice między tymi opcjami i które z nich będą działać w tym, co próbuję zrobić?


title: Jakie wskazówki pomogły Ci nauczyć się pisania bezwzrokowego?

text: Uczę się pisania bezwzrokowego od około dwóch tygodni i jestem naprawdę zaangażowany w opanowanie tej umiejętności. Mimo, że już dobrze sobie radzę z prozą, zmagam się z **składnią programowania**, a jeszcze bardziej z **klawiszami**. Te odciągają cię od domowego rzędu bardziej niż zwykłe słowa i nie są tak łatwe do ćwiczenia. Dlatego często poluję i dziobam, aby po prostu to wydobyć, ale kiedy wracam do starych nawyków, trudno mi szybko wrócić do mentalności pisania bezwzrokowego. Jedna mała sztuczka, która pomogła mi do tej pory, gdy się gubię, polega na zmianie położenia każdego palca na klawiszu głównego wiersza i mentalnej wizualizacji odchylenia układu klawiatury, tj. wyrównania kolumn klawiszy w rodzaju odwrotnego ukośnika. Trudno to jednak opisać i prawdopodobnie trochę dziwne... Mam nadzieję, że macie lepsze wskazówki!


title: Czym jest niespójny stan?

text: Ostatnio próbowałem eksperymentować z testowaniem kodowanego interfejsu użytkownika (CUITS) i otrzymuję następujący błąd za każdym razem, gdy próbuję go utworzyć. > Nie udało się załadować następującego pakietu: C:\Users[File Path Goes > Here]\Microsoft.VisualStudio.TestTools.UITest.Extension.IE.dll. Kodowany interfejs użytkownika > Test jest teraz w niespójnym stanie. Usuń ten pakiet i uruchom ponownie program Visual > Studio, aby pracować z kodowanym testem interfejsu użytkownika. Mam pytanie na Stack Overflow dotyczące błędu, który wydaje się nie mieć rozwiązania, ale to sprawiło, że zacząłem się zastanawiać, co to właściwie jest niespójny stan? Nigdy wcześniej nie spotkałem się z tym błędem i nie widziałem dobrego wyjaśnienia, co on oznacza.


title: Jaka jest różnica między składnią a gramatyką?

text: Rozumiem różnicę między składnią a semantyką — **składnia** — w jaki sposób symbole są łączone w celu utworzenia prawidłowego wyrażenia lub instrukcji. **semantyka** - znaczenie tych symboli, które tworzą wyrażenie lub stwierdzenie. Ale jaka jest gramatyka? na przykład: Czasami słyszę, jak ludzie mówią, że jakaś konstrukcja jest „gramatycznie niepoprawna, ale pod względem składniowym jest poprawna” co to znaczy?


title: Zaleta nauki języka Lisp dla programisty Pythona

text: Jestem przede wszystkim programistą Python, Java, C++, a ostatnio zainteresowałem się językiem funkcjonalnym. Myślę o wybraniu dialektu LISP: Clojure. Teraz pracowałem nad samouczkami i tak dalej, ale zauważyłem, że poza różnicami składni, nie czuję, że uczę się jakiegoś fundamentalnie innego sposobu rozwiązywania problemów. Czy są jakieś zalety uczenia się Clojure po Pythonie w sposobie pisania programów?


title: Problem ze zrozumieniem definicji inżynierii oprogramowania IEEE

text: **Tło** _Inżynieria oprogramowania to zastosowanie systematycznego, zdyscyplinowanego, wymiernego podejścia do projektowania, rozwoju, obsługi i konserwacji oprogramowania oraz badanie tych podejść; to znaczy zastosowanie inżynierii do oprogramowania. Mój instruktor, wyjaśniając tę definicję, powiedział mi, że terminy „systematyczny”, „zdyscyplinowany” i „wymierny” oznaczają „jeden po drugim, uporządkowany”, „powtarzalny” i „ mierzalne” wśród różnych innych możliwych interpretacji. Jednak dezorientuje mnie druga część definicji. Mówiąc o tym, co oznacza „operacja”, opisał to w ten sposób: _„jest to proces utrzymania oprogramowania, jak aktualizacja lub łatanie jego fragmentów. Wcześniej usuwaliśmy całe oprogramowanie i zmienialiśmy źródła, przekompilowujemy je i instalujemy Ta część definicji ma mniej więcej znaczenie historyczne – sposób, w jaki myślano o inżynierii w innych dyscyplinach, takich jak inżynieria mechaniczna”._ **Pytanie** Naprawdę nie rozumiem, co definicja oznacza w odniesieniu do SE. * Jeśli „operacja” była tylko procesem utrzymywania oprogramowania, to po co włączać je do definicji niezależnie? * Jeśli nie, co oznaczają terminy „eksploatacja” i „konserwacja” w definicji? * Czy konserwacja i eksploatacja i wszystko nie jest w fazie rozwoju? Powiedzmy, że opracowujemy komponent automatycznego aktualizowania oprogramowania do konserwacji, czy nie oznacza to, że „opracowujemy” również część „utrzymania”? Po co zatem ująć pozostałe dwa w definicji? Proszę wyjaśnij mi, co naprawdę oznacza SE. Dziękuję!


title: Prawny dowód, kiedy funkcja została wdrożona

text: Z różnych powodów muszę dostarczyć „dowód” prawnikowi mojej firmy, że wdrożyłem funkcję w określonym terminie. Korzystam z kontroli źródeł od końca lat 90. i nawet najstarsze bazy danych nadal działają. Mam też wszystkie stare konfiguracje. Nasze informacje o wydaniu nie zawsze są tak jasne, jak mogłyby być, a większość z nich nie jest opatrzona datą, ale uporządkowana według numeru wersji. Domyślam się, zamiast zgadywać, że jako inny programista wiedzą, co jest zwykle dostarczane w tej sytuacji, biorąc pod uwagę to, co mam. Jestem szczególnie zdezorientowany, gdy funkcja jest rozłożona na kilka plików źródłowych. Jedna funkcja, którą musimy udokumentować, zależy nie tylko od algorytmu, ale także od interfejsu użytkownika i jest tam pół tuzina plików, które zostały do tego zmodyfikowane. **Aktualizacja** Do ukończenia, funkcja została przetestowana i udostępniona klientowi i zadziałała. I wymienione w informacjach o wydaniu. Również wręczyłem prawnikowi daty zwolnienia i notatki o zwolnieniu (jeśli istniały). To jednak nie wystarczyło. Muszę pokazać, jak mam randki. Wyciągnąłem je z moich baz danych kontroli źródła (Sourceforge, Subversion, Mercurical), więc jak umieścić dane w mojej kontroli źródła w formie zrozumiałej dla nietechnicznego laika. Uwaga: Jeśli zastanawiasz się, dlaczego mamy wiele baz danych, to dlatego, że oprogramowanie, o którym mowa, było stale rozwijane od późnych lat osiemdziesiątych.


title: W jaki sposób reguła łączenia statycznego i dynamicznego GPL ma zastosowanie do języków interpretowanych?

text: W moim rozumieniu GPL zabrania statycznego łączenia z kodu nie na GPL do kodu GPL, ale zezwala na dynamiczne łączenie z kodu bez GPL do kodu GPL. Więc co to jest, gdy dany kod nie jest w ogóle powiązany, ponieważ kod jest napisany w języku interpretowanym (np. Perl)? Wykorzystywanie tej reguły byłoby zbyt łatwe, gdyby uważano ją za dynamiczne łączenie, ale z drugiej strony wydaje się również niemożliwe legalne odwoływanie się do kodu GPL z kodu nie-GPL, gdyby był on uważany za statyczny! Języki kompilowane mają przynajmniej rozróżnienie między linkowaniem statycznym i dynamicznym, ale kiedy wszystkie "linki" to tylko uruchamianie skryptów, nie można powiedzieć, co jest intencją bez wyraźnej licencji! A może moje zrozumienie tego problemu jest nieprawidłowe, przez co pytanie jest dyskusyjne? Słyszałem również o „wyjątku ścieżki klasy”, który obejmuje dynamiczne łączenie; czy nie jest to część GPL, ale coś, co można do niej dodać, więc dynamiczne łączenie jest dozwolone tylko wtedy, gdy licencja zawiera ten wyjątek?


title: Dlaczego należy używać jednorazowej zmiennej tymczasowej?

text: Załóżmy, że mamy klasę o nazwie „Samochód” i mamy instancję tej klasy o nazwie „myCar”. Chciałbym zapytać, dlaczego musimy w zmiennej umieszczać wartości zwracane przez nasze metody? Dlaczego po prostu nie wywołamy metody? Na przykład, dlaczego należy pisać: string message = myCar.SpeedMessage(); Konsola.WriteLine(wiadomość); zamiast: Console.WriteLine(myCar.SpeedMessage());


title: Diagramy przepływu danych — różnica między liniami a strzałkami

text: Obecnie pracuję z Visio nad tworzeniem diagramów przepływu danych dla klasy analizy systemu i projektowania, ale nie jestem pewien, jaka jest różnica między `\------` a `\------>`. Mogę połączyć 2 kształty razem z linią (proces, jednostka, magazyn danych), ale czy pojedyncza linia łącząca dwa oznacza przepływ danych? Czy muszę jawnie używać strzałki przepływu danych, aby pokazać, w jaki sposób przepływają dane? (Wygląda na to, że nie ma tagów na ten temat, może jestem w złym miejscu?)


title: Miernik do pomiaru kosztów programowania wycinania i wklejania

text: Szukam miernika do pomiaru kosztów programowania typu „wytnij i wklej”. Używamy już narzędzi do wykrywania zduplikowanego kodu - ale jeśli nie wyczyścimy naszego zduplikowanego kodu, ile nas to będzie kosztować? Wiemy, że zasada DRY, Don't Repeat Yourself, jest podstawową zasadą ekstremalnego programowania. Jak faktycznie możemy zmierzyć wpływ kodu nie-DRY na nasze projekty? Mam na myśli najprostszy problem z duplikowanym kodem tych samych wyrażeń w dwóch lub więcej miejscach. Inne przypadki powielania, takie jak ta sama logika napisana różnie w różnych miejscach, są trudniejsze do wykrycia. Szukam metryki, solidnej liczby, którą mogę zaoferować zarządzanie. Znam metrykę „WTF” Roberta Martina, ale to nie jest wystarczająco precyzyjne. Jaki jest cel nalegania na metrykę? Kierownictwo nalega na tę metrykę i nie da się ich odwieść. Naprawdę obawiam się, że mogą nakazać, aby zduplikowany kod był redukowany przy każdym sprincie. Ponieważ jesteśmy tak zmuszeni do dostarczenia, programiści znajdą zduplikowany kod i zhakują go, aby nie został wykryty. To byłaby tykająca bomba!


title: Czy lepiej mieć oddzielne akcje Twórz i Edytuj, czy połączyć Twórz i Edytuj w jedno?

text: Używamy ASP.NET MVC 2 z warstwą i modelem prezentacji kontrolera/widoku, składającym się z warstwy logiki biznesowej, warstwy dostępu do danych [procedury składowane i klasy/metody do komunikacji z procedurami składowanymi]. W warstwie biznesowej i powyżej dla większości celów Edycja wydaje się być w stanie reprezentować zarówno tworzenie obiektu, jak i edycję obiektu. Jest to zgodne z naszym wzorcem projektowym repozytorium, który definiuje metodę „Zapisz”. Możemy po prostu sprawdzić w procedurze składowanej, czy identyfikator to 0, a następnie utworzyć nowy obiekt, jeśli ma on 0, w przeciwnym razie możemy po prostu zaktualizować istniejący obiekt, ponieważ identyfikator kategorii powinien pasować do jednego. **Głównym punktem dyskusji jest to, czy najbardziej sensowne jest podzielenie edycji, która obejmuje tworzenie, na oddzielne części tworzenia i edycji poza warstwą DAL.** Oczywistym przykładem mogą być ścieżki: _Create_ - http:// someurl/somearea/edit/0 _Edit_ – http://someurl/somearea/edit/254 **vs.** _Create_ – http://someurl/somearea/create _Edit_ – http://someurl/somearea/edit/254 **Czy istnieją jakieś ustalone standardy lub najlepsze praktyki w tym zakresie?** Wiem, że to drobny szczegół, ale myślę, że jest to ważny logistycznie.


title: Jak przeprowadzić refaktoryzację w toku?

text: Tak więc mam ten duży projekt, który jest w trakcie refaktoryzacji przeze mnie. Zmieniam wiele rzeczy, więc nie ma szans, aby w najbliższym czasie się skompilował. Mieszkam w specjalnej gałęzi git, którą nazwałem `cleanup` (która w końcu zostanie oczywiście połączona z `master`). Problem polega na tym, że ja/my mamy politykę, aby nigdy nie zatwierdzać niekompilującego kodu (idealnie powinno też działać, ale musi przynajmniej kompilować i linkować). Dopóki więc nie skończę z tym ogromnym zadaniem, nie jestem w stanie niczego popełnić (do recenzji lub do prowadzenia ksiąg rachunkowych). To nie jest sposób, w jaki lubię pracować (wierzę, że większość ludzi angażuje się przynajmniej raz dziennie). Co myślisz? Czy istnieje rozwiązanie, którego przeoczam? Czy mogę później powiedzieć gitowi, aby zagregował zatwierdzenia lub coś? Mógłbym żyć z niekompilującym się commitem tak długo, jak _pozostają_ w gałęzi `cleanup`. ## Edytuj Do tematu push/committing: Zdaję sobie sprawę, że jest to ogromna różnica, ale później pojawią się zepsute wersje, gdy połączę swoje rzeczy w `master`. Więc jeśli przeglądasz historię (lub `git bisect` ...), wtedy "lokalne" wersje będą dostępne na całym świecie. Tak więc same zobowiązania lokalnie, a nie forsowanie nie jest najlepszym rozwiązaniem, ponieważ spowoduje to później kłopoty (gdy temat zostanie zamknięty i zapomniany na jakiś czas). W skrócie: Lokalne zatwierdzenia zostaną w końcu wypchnięte. Historia globalna nie powinna pokazywać niekompilujących się zatwierdzeń.


title: Jaki jest limit liczby metod klasy?

text: W różnych książkach projektowych, które czytam, czasami duży nacisk kładzie się na liczbę metod, które musi posiadać klasa (rozważając język OO, na przykład java lub C#). Często przykłady przedstawione w tych książkach są bardzo zgrabne i proste, ale rzadko dotyczą „poważnej” lub złożonej sprawy. **Jednak zakres wydaje się wynosić od 5 do 8.** W projekcie stworzyłem klasę „Notatka” z jej atrybutami jako właściwościami: Tytuł, Opis, Data utworzenia itp. Następnie kilka podstawowych metod, takich jak: getRelations (jeśli notatka jest przypisana do różnych dokumentów), getExpiryDate, ect. Jednak postępując w rozwoju aplikacji, potrzebnych było więcej funkcjonalności, a co za tym idzie, więcej metod. Wiem, że im mniej metod ma klasa, tym luźniej jest powiązana. Jest to rzeczywiście dobra zaleta pod względem modułowości i ponownego wykorzystania, a także łatwiejsza do edycji. Nawiasem mówiąc, jeśli w naszym kontekście nie ma potrzeby (a nawet sensu) tworzenia podklas i wszystkie potrzebne funkcje są powiązane z tą klasą, ile metod możemy dalej dołączyć? Zgadzam się, że mając więcej niż 15 metod, może być konieczne niewielkie przeprojektowanie. Ale nawet w takim przypadku, jeśli usunięcie niektórych metod lub dziedziczenia nie jest opcją, który byłby właściwy sposób?


title: Jak zidentyfikować programistów z odpowiednimi zestawami umiejętności?

text: Byłbym wdzięczny za pomoc w opracowaniu zestawu kryteriów lub „zarysu” w celu określenia najbardziej odpowiednich programistów w mojej sytuacji, a także sposobów ich znalezienia. Stworzyłem w pełni funkcjonalną aplikację internetową, zbudowaną przy użyciu języków opartych na jvm, HTML, CSS i JavaScript. Mam doświadczenie w finansach i CS, w wyniku czego bardzo dobrze czuję się w programowaniu/informatyce. Na początkowym etapie muszę: zadbać o bezpieczeństwo, zrefaktoryzować obecną bazę kodu i zaimplementować dwie stosunkowo proste funkcje. Gdy kończę swój projekt/biznesplan, zmagam się z kryteriami, które należy zastosować, aby zidentyfikować programistów, których potrzebuję. Na wysokim poziomie wiem, że potrzebuję 2-3 (backendowych) programistów: * 1 "Senior" lub "Ekspert" programista * 1 do 2 "Średniego poziomu" lub "Kompetentny/Profesjonalny" programista(ów) Wiem, że powinienem (i znajdę) programistów, którzy pracowali nad podobnymi projektami, ale poza tym nie jestem pewien, na jakie kryteria zwrócić uwagę. Na przykład, czy starszy/ekspert programista powinien mieć 10, 15 lub więcej lat doświadczenia?


title: Rozszerzanie struktury. Używanie klas pomocniczych zamiast kompozycji

text: Mam strukturę, do której chcę dodać metody statyczne. Tak, dobrze zgadłeś, że mówię o „Datetime”. Dodanie MyCustomParse jest dość typowym wymogiem. Zdarza się, że zwraca `Datetime?`, więc nie jest to konstruktor, ale znajduje się w tym obszarze, jest statyczną metodą, która zwraca instancję. Treść tej metody została już napisana i obecnie szczęśliwie żyje jako metoda instancji klasy, która z niej korzysta. Chcę go wydobyć z tej klasy, abym mógł go użyć gdzie indziej. Tradycyjnie umieściłbym to w **klasie pomocniczej** (co właśnie zrobiłem tutaj), ale najwyraźniej są złe. To, co naprawdę chcę zrobić, to powiązać `Datetime.MyCustomParse(mystring)`. Ale jedynym sposobem, jaki widzę, jest **utworzenie nowej struktury, która składa się z `Datetime`**. Następnie dodaję moją metodę, piszę niejawne konwersje, a następnie wstawiam wszystkie inne metody `Datetime` itd. **Byłoby to kłopotliwe w kodzie** (Bycie gadatliwym powoduje również problemy z dokumentacją xml i naiwnymi metrykami pokrycia kodu, jeśli to się liczy). Rozważałem **metody rozszerzające** , ale nie sądzę, aby metody miały sens w przypadku instancji. **Jaka jest ścisła pozycja OO? Czy otrzymam przepustkę na pisanie metod, które powinny należeć do klas w oddzielnych klasach pomocniczych**, gdy chcę w ten sposób rozszerzyć struktury? **Jaka jest pozycja pragmatyczna** (nie mówię, że OO nie jest pragmatyczne), czy ten kod byś napisał, czy może przegapiłem jakiś trik? wewnętrzna klasa statyczna DateTimeHelper { public static DateTime? MyCustomParse(string utcDateTimeText, string[] formats) { DateTime utcDateTime; if (DateTime.TryParseExact(utcDateTimeText, formaty, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out utcDateTime)) { return utcDateTime; } zwraca null; } } PS Wiem, że istnieje więcej niuansów w klasach pomocniczych, ale nadal czuję, że muszę uzasadnić moje użycie tutaj.


title: Logika stylu „sformułowane pozytywnie” vs. „czyta się jak zdanie angielskie”

text: Przykro mi, jeśli ktoś poprawi tytuł tego pytania. Jakie są zalety i wady logiki „pozytywnie sformułowanej” w porównaniu z jej „czytelnością po angielsku”. Szukam ogólnego stanowiska, które można umieścić w wytycznych dotyczących kodu. Przykłady tego, co widzę jako "pozytywnie sformułowaną" logikę if ($obj->isValid()){ if ($found){ if ($first){ //nic nie rób }else{ doX(); } $this->useFields(array('a','b')); Przykłady logiki „sformułowanej negatywnie” if (!$first) doX(); } $this->unset(array('d','e','f','g')); Natomiast jeśli skupię się na "czytelnym po angielsku", uważam to za dobre: if (isValid()){ if ($found){ a to nie jest "czytelne po angielsku" if ($l){ if (isValid() || ! jestAktywny()){ doX(); }


title: Zagadnienia praktyczne dotyczące konwencji nazewnictwa HTML/CSS (składnia)

text: **Pytanie:** _jakie są praktyczne rozważania dotyczące składni w wartościach `class` i `id`?_ Zauważ, że nie pytam o _semantykę_ , tj. o rzeczywiste słowa, które są używane, jak na przykład opisano w ten wpis na blogu. Po tej stronie konwencji nazewnictwa jest już wiele zasobów, które w rzeczywistości zasłaniają moje poszukiwanie praktycznych informacji na temat różnych bitów _syntaktycznych_: wielkość liter, użycie interpunkcji (szczególnie myślnik `-`), konkretne znaki, których należy użyć lub których należy unikać itp. Podsumowując powody, dla których zadaję to pytanie: * _Ograniczenia_ nazewnictwa dotyczące id i class nie prowadzą w naturalny sposób do żadnych konwencji * Obfitość zasobów po stronie semantycznej konwencji nazewnictwa zaciemnia poszukiwania dotyczące rozważań składniowych * Mogłem ' nie znalazłem żadnego wiarygodnego źródła na ten temat * Nie było jeszcze żadnych pytań na temat SE Programistów na ten temat :) * * * Niektóre z konwencji, które rozważałem użycie: 1. `UpperCamelCase`, głównie jako zwyczaj cross-over kodowanie po stronie serwera 2. `lowerCamelCase`, dla spójności z konwencjami nazewnictwa JavaScriptu 3. `css-style-classes`, które jest zgodne z nazewnictwem właściwości css (ale może być denerwujące przy zaznaczeniu tekstu Ctrl+Shift+ArrowKey) 4 `z_pod_ scores`, których osobiście nie widziałem zbyt często 5. `alllowercase`, łatwe do zapamiętania, ale mogą być trudne do odczytania przy dłuższych nazwach 6. `DUPERCASEFTW`, jako świetny sposób na zirytowanie kolegów programistów (być może w połączeniu z opcją 4 dla czytelności) I prawdopodobnie pominąłem również kilka ważnych opcji lub kombinacji. A więc: jakie są względy dotyczące konwencji nazewnictwa i do jakiej konwencji prowadzą?


title: Jakie są najlepsze praktyki tworzenia bezpiecznego logowania w aplikacji klient-serwer?

text: Minęło trochę czasu, zastanawiając się, jaki byłby najlepszy scenariusz tworzenia bezpiecznego logowania w aplikacji klient-serwer działającej w Internecie lub innych sieciach! Wpadłem więc na pomysł, aby zadać to pytanie programistom i mam nadzieję, że to pytanie uświadamia nam nowe aspekty wątków i bezpieczeństwa tutaj poprzez jakąś burzę mózgów, naprawdę interesują mnie dobre i nowe odpowiedzi. Z góry dziękujemy za udział .


title: Co muszę wiedzieć ponownie. Frameworki JavaScript?

text: Niedawno zadałem to pytanie na SO, które szybko zostało odrzucone i zamknięte. Najwyraźniej brakuje mi głębszego zrozumienia JS, które mam nadzieję pomożesz mi wypełnić tutaj. Jestem doskonale zdolnym programistą stron internetowych i zbudowałem wiele przyjemnych wizualnie i funkcjonalnie stron internetowych, ale nie mogę zrozumieć, jak powinienem obsługiwać JS. Do tej pory naprawdę używałem jQuery do walidacji formularzy lub dostarczania funkcjonalności AJAX do formularzy/innych elementów strony. Wydaje się, że wokół frameworków JS jest dużo szumu - backbonejs, emberjs, itp., ale kiedy zajrzę do nich, wygląda na to, że są po prostu dobre, jeśli zamierzasz budować w nich pełne aplikacje. Cieszę się, że używam PHP/Symfony i po prostu chcę użyć JS, aby nadać moim aplikacjom sieciowym przyjemny interaktywny/responsywny 'odczucie'. Czy wyżej wymienione frameworki są dla mnie przydatne, czy mam rację, po prostu trzymam się jQuery?


title: Doświadczenie w eLance (i podobnych witrynach)

text: Rozważam freelance za pośrednictwem eLance.com (lub innej podobnej strony), aby pomóc opłacić rachunki podczas tworzenia gier (które ostatecznie zapłacą rachunki). **Jak wygląda praca przez elance?** Jakieś zalecenia lub strategie? Wszelkie opinie są mile widziane.


title: Jak najlepiej zbadać problem, aby określić, czy można/należy zastosować rekurencję?

text: W niektórych przypadkach nie widzę możliwości rozwiązania problemu metodą dziel i rządź. Aby dać konkretny przykład, kiedy badam problem znajdowania podtablicy max, moim pierwszym podejściem jest brutalne wymuszenie go za pomocą podwójnej pętli w celu znalezienia podtablicy max. Kiedy zobaczyłem rozwiązanie wykorzystujące podejście dziel i rządź, które jest oparte na rekurencji, zrozumiałem to, ale OK. Jednak z mojej strony, kiedy po raz pierwszy przeczytałem opis problemu, nie sądziłem, że rekurencja ma zastosowanie. Czy podczas badania problemu jest jakaś technika lub sztuczka, aby zobaczyć, czy można zastosować podejście oparte na rekurencji (tj. Dziel i rządź)?


title: ile czasu spędzasz na testach jednostkowych?

text: W firmie, w której pracowałem, dyrektorzy nalegali, aby pokrycie kodu testami jednostkowymi miało wynosić 99% lub więcej. Spowodowało to napisanie większej ilości testów niż kodu. Pisanie testów dla jednej klasy zajęło nam dosłownie 3 dni, których wdrożenie zajęło jeden dzień. W rezultacie jednak nauczyłem się dużo o TDD, narzędziach testowych, praktykach itp. W firmie, w której później pracowałem, testowanie jednostkowe było niewiadomą. To było coś, co ktoś może słyszał wcześniej. Usiłowałem wprowadzić ich w koncepcję testów jednostkowych, ale bez efektu. Teraz, jako samozatrudniony, zastanawiam się - ile czasu **naprawdę** trzeba poświęcić na testy jednostkowe? Będąc głównie programistą iPhone/Android, które części kodu powinny zostać objęte testami?


title: Czy NAN nadaje się do komunikowania, że w obliczeniach brał udział nieprawidłowy parametr?

text: Obecnie pracuję nad systemem przetwarzania numerycznego, który zostanie wdrożony w środowisku krytycznym dla wydajności. Pobiera dane wejściowe w postaci tablic numerycznych (używają one biblioteki `eigen`, ale dla potrzeb tego pytania jest to być może nieistotne) i wykonuje pewien zakres obliczeń numerycznych (iloczyny macierzy, konkatenacje itp.) w celu uzyskania danych wyjściowych. Wszystkie tablice są alokowane statycznie, a ich rozmiary są znane w czasie kompilacji. Jednak niektóre dane wejściowe _mogą_ być nieprawidłowe. W tych _wyjątkowych_ przypadkach nadal chcemy, aby kod był obliczany i nadal chcemy, aby dane wyjściowe nie były „zanieczyszczone” przez nieprawidłowe wartości. Jako przykład weźmy następujący trywialny przykład (to jest pseudokod): Macierz a = {1, 2, NAN, 4}; // to jest macierz "wejściowa" Skalar b = 2; Wyjście macierzy = b * a; // to daje {2, 4, NAN, 8} Pomysł jest taki, że 2, 4 i 8 są wartościami użytecznymi, ale NAN powinna sygnalizować odbiorcy danych, że ten wpis był zaangażowany w operację, która obejmowała nieprawidłowa wartość i powinna zostać odrzucona (zostanie to wykryte poprzez sprawdzenie `std::isfinite(wartość)` przed użyciem wartości). Czy jest to rozsądny sposób komunikowania i propagowania nieużytecznych wartości, biorąc pod uwagę, że wydajność jest krytyczna, a alokacja sterty nie wchodzi w grę (tak jak inne konstrukcje zużywające zasoby, takie jak `boost::opcjonalny` czy wskaźniki)? Czy istnieją lepsze sposoby na zrobienie tego? W tym momencie jestem całkiem zadowolony z obecnej konfiguracji, ale liczyłem na świeże pomysły lub produktywną krytykę obecnej implementacji.


title: Modele, kolekcje... i co dalej? Procesy?

text: Jestem twórcą stosu LAMP, który przez ostatnie kilka lat był bardziej po stronie JavaScript i naprawdę podoba mi się podejście Model + Collection do encji danych, których używa BackboneJS itp. Pomogło mi to zorganizować mój kod w taki sposób, aby był niezwykle przenośny, zachowując wszystkie moje właściwości i metody w zakresie (model, kolekcja itp.), w którym mają zastosowanie. Jedną rzeczą, która mnie denerwuje, jest to, jak zorganizować kolejny poziom wyżej, „warstwę procesu”, jak można ją nazwać, która może potencjalnie działać na instancjach modeli lub kolekcji lub cokolwiek innego. Gdzie powinny znajdować się metody takie jak find() (która zwraca kolekcję) i create() (która zwraca model)? Wiem, że niektórzy umieściliby funkcję create() w prototypie Collection, ale podczas gdy kolekcja działa na modelach, nie sądzę, aby ich tworzenie było właściwe. I chociaż find() zwróciłby kolekcję, nie sądzę, aby akcja ta była poprawna w samym prototypie kolekcji (powinna być o warstwę wyżej). Czy ktoś może podać kilka przykładów wzorców, które wykorzystują jakąś warstwę „procesu” przyjazną OOP? Przykro mi, jeśli jest to dość znana dyskusja, ale obawiam się, że nie mogę znaleźć terminologii do wyszukania.


title: Dlaczego naucza się Big O zamiast Big Theta?

text: Notacja Big O zapewnia **górne ograniczenie** funkcji, podczas gdy Big Theta zapewnia ścisłe ograniczenie. Jednak uważam, że notacja Big O jest zwykle (i nieformalnie) nauczana i używana, gdy naprawdę ma na myśli Big Theta. np. „Szybkie sortowanie to O(N^2)” może zostać przekształcone w znacznie silniejsze stwierdzenie „Szybkie sortowanie to Θ(N^2)” Chociaż użycie Big O jest technicznie poprawne, czy bardziej rozpowszechnione użycie Big Theta nie byłoby bardziej wyraziste i prowadzić do mniejszego zamieszania? Czy istnieje jakiś historyczny powód, dla którego to Big O jest częściej używane? Wikipedia zauważa: > Nieformalnie, zwłaszcza w informatyce, notacja Big O jest często > dopuszczana do pewnego nadużywania, aby opisać asymptotyczne ścisłe ograniczenie, gdzie > użycie notacji Big Theta Θ może być bardziej właściwe w danym kontekście.


title: Przekazywanie wiadomości: jak wykrywać i/lub radzić sobie ze „ślepymi zaułkami”

text: Bawię się modelem mentalnym dla rozproszonego systemu aktorskiego, który komunikuje się za pomocą komunikatów. W ten sposób aktor może stworzyć innego aktora. Spotkałem się z jedną konkretną sytuacją, w której nie jestem pewien, jak rozwiązać. Rozważ następującą sekwencję zdarzeń: 1. Aktor 1 żąda utworzenia Aktor 2. W ramach „konstrukcji” przekazuje swój własny identyfikator. 2. Akt 1 wnosi o własne skreślenie. 3. System wysyła wiadomość KILL do wszystkich Aktorów, którzy zasubskrybowali {Actor1|KILL} 4. Tworzony jest Aktor 2, zapisuje wysłane do niego ID "1" jako parametr konstrukcji. 5. Aktor 2 próbuje wysłać wiadomość do Aktora 1. 6. ??? 7. Aktor 2 wykrywa, że Aktor 1 zniknął i reaguje. Ponieważ Aktor 1 i 2 mogą znajdować się na fizycznie różnych komputerach, zapytanie „Czy Aktor X istnieje?” za każdym razem (lub przed każdą próbą wysłania wiadomości) wprowadzisz opóźnienia, które nie powinny występować w typowym przypadku. Podobnie blokowanie, dopóki nie dowiesz się, „Wyślij sukces” lub „Wyślij niepowodzenie” wydaje się złym pomysłem. Wydaje się również, że pisanie kodu z `if(send() == fail) { ... }` jest brzydkie i podatne na błędy. Czy istnieją znane rozwiązania, które pozwalają solidnie i czysto radzić sobie w tego typu sytuacjach?


title: Czy programista C ma jakąś korzyść z przeczytania K&R?

text: To pytanie dręczyło mnie, ponieważ czytam teraz Kernighana i Ritchie's: The C Programming Language (K&R), ale spotykam wielu, a mam na myśli DUŻO programistów C, którzy nigdy go nie czytali. Więc moje pytanie brzmi: Czy czytanie K&R ma jakieś zalety? Czy powinna być koniecznością?


title: Raportowanie błędów online bez dostępu do sieci

text: Opracowałem aplikację na Androida, która nie wymaga uprawnień, ale największym minusem tego jest brak raportowania błędów. Tak więc bawiłem się przez ostatni tydzień z wszelkimi alternatywnymi opcjami, które pozwoliłyby na zgłaszanie błędów bez uprawnień sieciowych i bez ryzyka prywatności. Wymyśliłem więc, co następuje: Błędy mogą być zgłaszane za pomocą niestandardowego interfejsu API Google Play, ale byłyby wyświetlane tylko raz, gdy więcej niż n użytkowników wywołałoby ten sam błąd i wyświetliłoby się tylko w sensie zbiorczym. To (wierzę) zapobiegłoby wykorzystywaniu, gdy aplikacja mogłaby wykorzystać to jako metodę przekazywania prywatnych danych. N byłoby zdefiniowane przez coś w stylu `max(10,liczba_użytkowników * 0,001)` lub coś w tym stylu. Więc moje pytanie brzmi, czy taka architektura byłaby bezpieczna, czy też przeoczam możliwe exploity? Jeśli nie, wydaje się, że ogromny android marnotrawny nie ma takiego interfejsu API, ponieważ obecnie praktycznie każda aplikacja wymaga dostępu do sieci właśnie z tego powodu. Podobny interfejs API można następnie wykorzystać do podstawowych statystyk, po raz kolejny bez wzlotów i upadków analiz umożliwiających identyfikację użytkownika, takich jak Google Analytics dla Androida.


title: Zasada substytucji Liskov przy wdrażaniu dwóch niepowiązanych interfejsów

text: Załóżmy, że mam dwa niezwiązane interfejsy z tą samą metodą: interface Table { /** * @param width (0 <szerokość <= 100) */ void setWidth(int width); } interface Square { /** * @param width (50 <= width <= 10000) */ void setWidth(int width); } Następnie tworzę klasę, która implementuje oba te interfejsy: class SquareTable implementuje Square, Table { void setWidth(int width) { warunek wstępny = ... if (!warunek wstępny) throw new PreconditionFailedException("Warunek wstępny nie powiódł się: ...") ; } } Jak należy łączyć wyrażenia warunków wstępnych, aby spełnić zasadę podstawienia Liskov? Czy powinni **i** ed czy **albo** ed? Tj. co powinno być napisane zamiast `...`: szerokość > 0 && szerokość <= 10000 // używając OR szerokość >= 50 && szerokość <= 100 // używając AND A której reguły należy użyć dla warunków końcowych? interface Table { /** * @return width (0 <szerokość <= 100) */ int getWidth(); } interface Square { /** * @return width (50 <= szerokość <= 10000) */ int getWidth(); } class SquareTable implementuje Square, Table { int getWidth() { postcondition = ... if (! postcondition) throw new PostconditionFailedException("Warunek końcowy nie powiódł się: ..."); } } szerokość > 0 && szerokość <= 10000 // użycie OR szerokość >= 50 && szerokość <= 100 // użycie AND


title: Jakie są warunki do nauki Go

text: Rozważam naukę Go. O ile mi wiadomo, jest to język systemowy nastawiony na programowanie równoległe. (popraw mnie, jeśli się mylę) * Czy powinienem dobrze rozumieć C, aby być dobrym programistą Go? * Ile koncepcji systemów (*koncepcji systemu operacyjnego Nix) muszę opanować przed zagłębieniem się w Go * Jakie inne rzeczy powinienem wiedzieć/nauczyć się przed rozpoczęciem Go


title: Akceptowalne zależności w architekturze zorientowanej na usługi, wewnętrzne w zespole

text: W architekturze zorientowanej na usługi podsystemy mogą zależeć od siebie na różnych poziomach: 1. Poziom bazy danych => klucze obce w celu wymuszenia integralności danych w usługach podczas usuwania i aktualizacji (kaskadowo) oraz widoków, które używają tabel z innych usług w celu zwiększenia wydajności 2. Ponowne użycie kodu => jak odniesienia DLL na platformie .NET, aby zmniejszyć ilość kodu i podążać za DRY 3. Wykorzystanie usługi => Aby wymusić centralizację biznesu; Każda usługa może korzystać z dowolnej innej usługi w schemacie podobnym do siatki 4. Ponowne wykorzystanie UI => Aby zapewnić spójność w UI i podnieść UX Które z tych zależności są zalecane, a które nie?


title: Styl kodowania dla połączonych wywołań funkcji

text: Powszechną rzeczą, którą musisz zrobić, jest wzięcie wartości, zrobienie czegoś z nią przez przekazanie jej do funkcji, a następnie zrobienie czegoś więcej ze zwracaną wartością w łańcuchu. Ilekroć natrafiam na tego typu scenariusz, nie jestem pewien, jak najlepiej napisać kod. Jako przykład, powiedzmy, że mam liczbę `num` i muszę wyciągnąć z niej pierwiastek kwadratowy z minimalną wartością i przekształcić go w łańcuch. Oto kilka możliwości (w JavaScript). Mógłbym po prostu przekazać `num` do jednej funkcji na raz i zastąpić `num` wartością zwracaną: function floorSqrt(num) { num = Math.sqrt(num); liczba = Matematyka.podłoga(liczba); liczba = ciąg(liczba); numer zwrotu; } Jest to miłe, ponieważ nie potrzebuję już oryginalnego `num`, ale w praktyce może być mylące, aby zacząć od jednej rzeczy (liczby), a skończyć na czymś zupełnie innym (łańcuch). Każdy krok mogę zapisać w nowej zmiennej: function floorSqrt(num) { var sqrtNum = Math.sqrt(num); var floorSqrt = Math.floor(sqrtNum); var stringNum = String(floorSqrt); zwróć stringNum; } Chociaż deklarowanie wszystkich tych zmiennych i wymyślanie dla nich dobrych nazw wydaje się marnotrawstwem. Albo mogę po prostu zrobić to wszystko w jednym wierszu: function floorSqrt(num) { return String(Math.floor(Math.sqrt(num))); } Ale dla więcej niż dwóch funkcji to podejście staje się niewiarygodnie nieczytelne, prawie jak golf kodowy. Wydaje mi się, że najpiękniejszym sposobem na to byłoby użycie języka opartego na stosie, który może wyglądać mniej więcej tak (pseudo kod): [sqrt floor toString] Czy istnieje sposób na zrobienie czegoś podobnego w JavaScript? Wymień kilka funkcji, uruchom jedną na raz i użyj wartości zwracanej przez każdą z nich jako argumentu dla następnej? Najbliżej jest to, jak niektóre biblioteki, takie jak jQuery lub Underscore.js, umożliwiają łączenie metod, mniej więcej tak: function floorSqrt(num) { return _.chain(num).sqrt().floor().toString().value( ); } Jestem pewien, że wielu mądrych ludzi pomyślało o tym mądre rzeczy. Jakie są przemyślenia na temat zalet i wad różnych stylów?


title: Czy utrwalona i „zakończona” transakcja według stanu może być edytowana dla dowolnego użytkownika?

text: To pytanie dręczy mnie od jakiegoś czasu. Pochodziłem z przeszłości, gdzie nauczałem, że gdy transakcja osiągnie pewien stan (ZAKOŃCZONA, WYDRUKOWANA, itp.), nie powinna już być otwierana do modyfikacji nawet dla administratorów. Ale oto ja, barbarzyńsko naprawiając ich błąd wprowadzania danych przez człowieka, usuwając wiersz w bazie danych i/lub zmieniając stan bieżącego elementu na poprzedni. W pewnym momencie popełnili nawet błąd we wprowadzaniu daty transakcji i po prostu zdali sobie z tego sprawę gdzieś później. I to naprawdę denerwujące. Czy oprogramowanie, zwłaszcza korporacyjne, powinno dawać użytkownikowi pełną swobodę, o jaką prosi? Jeśli tak, to po co jest transakcja? Aktualizacja : Tutaj przez transakcję rozumiem obiekt Transaction, który zazwyczaj zawierał odniesienie do obiektu Master i jego własne atrybuty, a nie transakcję bazy danych.


title: Czy regularnie planujesz aktualizacje aplikacji? A jeśli tak, jak radzisz sobie z błędami, które to robią?

text: Staramy się, aby nasze wydania były częstsze. W ramach tego zablokowaliśmy dzień tygodnia, w którym powiedzieliśmy użytkownikom, że będziemy robić aktualizacje. Podobnie jak Microsoft ma we wtorek łatę. Nawiasem mówiąc, dotyczy to aplikacji internetowej działającej całkowicie po stronie serwera. Aktualizacje nie stanowią więc dużego problemu we wdrażaniu. Chociaż mogą być czasochłonne. Czasami aktualizacja zawiera błąd, który należy naprawić, zanim pojawi się następne okno aktualizacji. Widzę dwie realne opcje: albo cofnąć aktualizację i przywrócić kopię zapasową poprzedniej wersji, albo zrobić poprawkę i wdrożyć ją poza zaplanowanym czasem. Dokonywanie poprawki wydaje się łatwe, ale często w kodzie wprowadzono inne zmiany. A poprawka wymaga przetestowania, zanim będzie mogła realistycznie wyjść. Wycofanie nie jest złą opcją, ale czasami spowoduje to usunięcie ostatnich funkcji lub przynajmniej opóźnienie ich do następnego tygodnia.


title: Rynki oprogramowania dla samodzielnego programisty

text: Chcę stworzyć coś pożytecznego własnego, z którego mogą korzystać inni. Może to być bezpłatne lub może zarobić trochę pieniędzy na utrzymanie rozwoju i niewielki wzrost dochodów. Jednak gdy pomyślę o rynku, to nie wiem na jakim rynku brakuje aplikacji, jakie rodzaje domen mogą być możliwe dla samodzielnego programisty lub małego dewelopera? Na przykład mogę stworzyć małą grę na rynek smartfonów, ze mną jako programistą, inna osoba jest grafikiem, a inna kompozytorem muzyki, aby stworzyć funkcjonalną i grywalną grę. Lub jakie rodzaje domen/rynków w tworzeniu stron internetowych są możliwe dla pojedynczego programisty do stworzenia aplikacji internetowej? A może powinienem uwzględnić czwartą osobę, biznesmena, aby to dla mnie zidentyfikować? Jeśli masz w tym doświadczenie, chciałbym i bardzo wdzięczny za udostępnienie dla mnie i wszystkich. _EDYTUJ:_ Chcę to robić jako pracę w niepełnym wymiarze godzin, a nie główną pracę, dopóki nie będzie to możliwe.


title: Zmiana klasy złożoności poprzez optymalizację kompilatora?

text: Szukam przykładu, w którym algorytm najwyraźniej zmienia swoją klasę złożoności ze względu na strategie optymalizacji kompilatora i/lub procesora.


title: Jakich domyślnych funkcji brakuje systemowi Windows, które są wymagane dla programistów?

text: Jakich funkcji brakuje w systemie Windows, które mogą poprawić produktywność programisty. Wiem, że wiele osób chciałoby, aby niektóre funkcje z Linuksa i OSX zostały przeniesione lub stworzone również dla Windows. Czego Ci brakuje? Przykładem może być opcja posiadania wielu obszarów roboczych. Gdy nie masz możliwości korzystania z dwóch monitorów, które mogą się przydać.


title: Jeden język, by nimi wszystkimi rządzić? (Są to platformy.)

text: Omawiałem projekt z klientem, który chce używać jednego języka do wdrażania na jak największej liczbie platform. (Nie jestem pewien, czy to taki dobry pomysł, ponieważ każda platforma oferuje inne wrażenia użytkownika i metaforę interfejsu użytkownika. W niektórych przypadkach rozmiary ekranu również się różnią. Ponadto iPhone nie działa bez względu na język, którego używamy. Ale , dygresja...) Projekt będzie codziennie wyświetlał dowolny blok tekstu i będzie śledził, czy użytkownik go "przeczytał". Niektóre inne funkcje na stole to „nagi” i możliwość przejścia do tekstu z innego dnia. Znam Flasha z czasów CS3 i myślę, że przekłada się to na AIR, ale nie wiem, czy AIR może robić to, co chcemy. Z drugiej strony mam (a) niewielkie doświadczenie z Javą lub Pythonem, ale te wydają się również dobrymi rywalami. Jakiego języka powinienem tutaj używać? Czemu? **Edytuj:** będzie działać również na platformach stacjonarnych.


title: Decyzja projektowa w składzie lub agregacji

text: Ostatnio miałem wątpliwości co do niektórych decyzji projektowych, które często podejmuję, więc tym razem postanowiłem poświęcić trochę czasu i spróbować to przeanalizować, aby znaleźć najlepsze rozwiązanie. Opiszę prosty scenariusz, w którym decyzja projektowa może być łatwo zrozumiana. :) Załóżmy, że tworzymy grę w Javie, w której gracze mogą mieć dowolną liczbę różnych rodzajów przedmiotów. /** Klasa reprezentująca typ przedmiotu istniejący w grze */ // możesz preferować wywołanie tego ItemType, // ale dla mnie dodanie słowa "Typ" nie jest konieczne class Item { private String descrip; prywatna ikona obrazu; } W tej sytuacji muszę śledzić, ile przedmiotów gracz ma w swojej torbie, więc trzymam ich kolekcję, w każdym elemencie, którego mam typ i ilość. Dodatkowo można pomyśleć o innych atrybutach, które należą do tej relacji (być może maksymalna pojemność), ale pytanie brzmi: jak ogólnie modelować ten scenariusz, ale z praktyczną implementacją w Javie? Oto dwa podejścia, które wymyśliłem: ### Używanie miejsca w klasie listy { private Item item; prywatna ilość int; /** Wygenerowane automatycznie */ public int hashCode() { int hash = 7; hash = 13 * hash + (this.item != null ? this.item.hashCode() : 0); skrót zwrotny; } /** Ta metoda jest również generowana automatycznie i po prostu porównuje Item, niezależnie od ilości */ public boolean equals(Object object) { if (!(object instanceof Slot)) { return false; } Inne gniazdo = obiekt (Slot); if ((this.item == null && other.item != null) || (this.item != null && !this.item.equals(other.item))) { return false; } zwróć prawdę; } } Powyższa klasa wiąże jeden element z ilością, a kolekcja `Slot`s jest podstawowym atrybutem klasy `Inventory`. Wady tego pojawiają się, gdy tylko zaprojektuję interfejs `Inventory` tak, aby nie ujawniać `Slot` klientowi (czynić `Slot` prywatnym lub ukrywać go w inny sposób): w tworzeniu prostego interfejsu, ale zapewniającego dostęp do wszystkich standardowych metody zbierania. Moim skromnym zdaniem nie ma w tym nic złego: /** Klasa reprezentująca torbę z przedmiotami gracza */ class Inventory { // ta kolekcja zawiera tylko jeden element dla każdego typu pozycji private ArrayList<Slot>; public Inventory() { slots = new ArrayList<Slot>(10); } public void add(Item item, int number) { Slot slot = new Slot(pozycja, ilość); // jeśli nie mamy jeszcze Slotu na dodany element, dodaj go if (!slots.contains(slot)) { slots.addElement(slot); } // jeśli mamy już Slot na dodany Element, zwiększ ilość else { Slot _slot = slots.elementAt(slots.indexOf(slot)); _slot.addQuantity(ilość); } } public void subtract(Item item, int number) { Slot slot = new Slot(item, 0); int index = slots.indexOf(slot); // tylko jeśli faktycznie mamy ten element if (index != -1) { Slot _slot = (Slot) slots.elementAt(index); _slot.ilość -= ilość; // jeśli mamy mniej elementu niż liczba do usunięcia, // usuń slot z kolekcji if (_slot.quantity <= 0) { slots.removeElementAt(index); } } } public void remove(Item item) { Slot slot = new Slot(item,0); slots.removeElement(slot); } public boolean hasItem(Item item) { Slot slot = new Slot(item,0); return slots.contains(slot); } } Jak widzisz, musimy przeskoczyć przez kilka kółek, aby zaimplementować pewne metody zbierania: w `hasItem` musimy stworzyć element `Slot` tylko dla tej operacji. W metodach add i subtract musimy stworzyć obiekt `Slot` tylko po to, aby sprawdzić, czy tam jest. Zastanawiam się, czy to naprawdę konieczne. Przypuszczam, że tak jest, jeśli chcemy zapewnić interfejs do standardowych metod gromadzenia. Być może możemy przenieść całą tę logikę do innej klasy (na przykład: `Slots`), odsłaniając czystszy interfejs, który pozwala nam wyszukiwać według pozycji bez konieczności tworzenia Slotów, ale po prostu przenosimy ten sam problem do innej klasy. Tam napotkamy ten sam problem, poza faktem, że „Inwentarz” jest w zasadzie zbiorem „Slotów”, tak naprawdę tworzymy kolejną klasę, która będzie dokładnie taka sama, co nie ma większego sensu ja. Czy lepiej byłoby zmienić interfejs tej klasy, aby działał bezpośrednio z klasą `Slot`? Oznacza to przejście od kompozycji (utworzenie „Slotu” w ekwipunku) do agregacji (utworzenie „Slotu” poza ekwipunkiem). Wynik może wyglądać tak: /** Klasa reprezentująca torbę z przedmiotami gracza */ class Inventory { private ArrayList<Slot> slots; public Inventory() { slots = new ArrayList<Slot>(10); } public void add(slot) { if (!slots.contains(slot)) { slots.addElement(slot); } else { Slot _slot = slots.elementAt(slots.indexOf(slot)); _slot.addQuantity(slot.getQuantity()); } } public void subtract(Slot slot, int number) // w jaki sposób klient otrzyma slot? { int index = slots.indexOf(slot); // tylko jeśli faktycznie mamy ten element if (index != -1) { Slot _slot = (Slot) slots.elementAt(index); _slot.ilość -= ilość; // jeśli mamy mniej elementu niż liczba do usunięcia, // usuń slot z kolekcji if (_slot.quantity <= 0) { slots.removeElementAt(index); } } } public void remove(Slot slot) // ponownie, w jaki sposób klient otrzyma slot? { sloty.removeElement(slot); } // Trudno tutaj zmienić typ parametru. To zdecydowanie sugeruje, że // jest błąd w projekcie. Zachowuję to tutaj tylko po to, aby przekazać obserwację publiczną wartość logiczną hasItem(Item item) { Slot slot = new Slot(item, 0); // tutaj nie mamy innego wyboru, jak tylko go stworzyć return slots.contains(slot); } } Ale znowu, czy to wygodne? Nieczęsto stosuję to podejście w praktyce, więc nie jestem pewien. ### Używanie odnośników Innym podejściem jest użycie czegoś takiego jak Hashtable z obiektami `Item` jako kluczami ilościami jako wartościami, więc tylko ilość jest powiązana z pozycjami, bez potrzeby używania klasy `Slot`. Implementacja `Inventory` używająca Hashtable może wyglądać tak: public class Inventory { private Hashtable items; public Inventory() { items = new Hashtable(10); } public void add(Pozycja, int ilość) { int stock = ilość; if (items.containsKey(item)) { stock += ((Integer) items.get(item)).intValue(); } items.put(item, new Integer(stock)); } public void odejmuj(pozycja pozycja, int kwota) { if (items.containsKey(item)) { int stock = ((Integer) items.get(item)).intValue(); zapas -= ilość; if (stock > 0) { items.put(item, new Integer(stock)); } else { items.remove(item); } } } public void usuń(element) { this.items.remove(item); } public boolean hasItem(Item item) { return this.items.containsKey(item); } } Wydaje mi się to znacznie lepsze niż użycie List, ponieważ nie ma potrzeby korzystania z klasy `Slot`, a wszystkie interakcje z kolekcją `Item` są znacznie prostsze, ale nie jestem pewien, czy mam rację. Ten sam rodzaj problemu jest również widoczny w tym scenariuszu: Załóżmy, że wdrażamy aplikację zamawiania dla pizzerii; każde zamówienie składa się z rodzajów i ilości pizzy. /** Rodzaj pizzy */ class Pizza { private String descrip; prywatna ikona obrazu; } /** Zapytanie klienta o pizzę */ class Zapytanie { // dla każdego rodzaju pizzy musimy liczyć ile klient zamówił } /** Zamówienie pizzy */ class Zamówienie { private Pizza pizza; prywatna kwota int; cena prywatna BigDecimal; } Wiedząc, jak rozwiązać pierwszy problem, mam wzorzec do wykorzystania w podobnej sytuacji; więc pytanie brzmi, jakie rozwiązanie jest najlepsze? Staram się wmówić sobie, że nie jestem jedyną osobą z tą troską, że zwykli ludzie, tacy jak ja, na bieżąco borykają się z tym problemem, więc mam nadzieję, że dowiem się, jak inni ludzie ten problem rozwiązują. Z drugiej strony wiem, że to pytanie jest dość duże i może trochę rozbudowane, więc może muszę podzielić je na kilka bardziej szczegółowych pytań. Może odpowiedź na ten problem jest prosta Zbyt komplikuję sprawy, a co gorsza, moje wątpliwości co do tego, jak sobie z tym poradzić, powstają, ponieważ tak naprawdę nie rozumiem jakiejś podstawowej zasady projektowania, jak kapitan na statku używający lunety w celu zobaczenia lądu, ale nie zdaje sobie sprawy, że jego statek utknął na twardym gruncie, który był blisko w chwili, gdy wyciągnął swoją lunetę, żeby spojrzeć. No dobra, dość taniej poezji (ale bez niej ciężko było opisać moje uczucia hehehe). Przepraszam za długość pytania i byłbym bardzo wdzięczny za pomoc w rozwiązaniu tego problemu.


title: Chcesz poznać problemy z wydajnością typów klas i modyfikatorów dostępu

text: Ktoś zaproponował mi oznaczenie klas jako SEALED, które nie są nigdzie dziedziczone. Używałem domyślnego stylu i nie interesowałem się typem klasy. Obecnie nie mam narzędzia porównawczego do badania przyrostów wydajności, ale przeczytałem gdzieś, że klasy zapieczętowane dają korzyści w zakresie wydajności. Czy ten problem z wydajnością dotyczy innych typów klas, takich jak: Abstract, Static, New itp., a także modyfikatorów dostępu, takich jak public, protected, internal, protected-internal i virtual? Jeśli ma to wpływ na wydajność, jakiego rodzaju optymalizacja jest wykonywana wewnętrznie?


title: Czy ma sens przeprowadzanie testów jednostkowych, które ogłuszają i wyśmiewają wszystko, co publiczne?

text: Kiedy przeprowadzam testy jednostkowe we „właściwy” sposób, tj. zatykam każde publiczne połączenie i zwracam ustawione wartości lub mocki, czuję, że tak naprawdę niczego nie testuję. Dosłownie patrzę na mój kod i tworzę przykłady oparte na przepływie logiki za pomocą moich publicznych metod. I za każdym razem, gdy zmienia się implementacja, muszę ponownie zmienić te testy, nie czując, że osiągam coś użytecznego (czy to w średnim, czy długim okresie). Wykonuję również testy integracyjne (w tym non-happy-paths) i nie mam nic przeciwko wydłużeniu czasu testowania. Dzięki nim czuję, że faktycznie testuję pod kątem regresji, ponieważ złapały one wiele, podczas gdy wszystkie te testy jednostkowe pokazują mi, że zmieniła się implementacja mojej metody publicznej, co już wiem. Testy jednostkowe to obszerny temat i czuję, że to ja czegoś tutaj nie rozumiem. Jaka jest decydująca przewaga testów jednostkowych w porównaniu z testami integracyjnymi (z wyłączeniem narzutu czasowego)?


title: Projektowanie skalowalnej architektury kolejki wiadomości

text: Niedawno zacząłem poznawać niuanse skalowalnej i korporacyjnej architektury komputerowej, a jednym z głównych komponentów jest kolejka wiadomości. Aby dowiedzieć się jak najwięcej z dowolnego paradygmatu programowania, staram się zaimplementować własną wersję usługi kolejki wiadomości. Jak dotąd, mój początkowy projekt działa na odbiorniku gniazda w wątku, ale aby zapobiec dwukrotnemu pobraniu tego samego komunikatu przez dwa oddzielne węzły przetwarzania, rejestr indeksu kolejki komunikatów jest blokowany po zainicjowaniu odczytu i odblokowywany po zaktualizowany. W związku z tym neguje to potrzebę wątkowania i oznacza, że istnieje limit rozmiaru systemu skalowalnego w oparciu o szybkość przetwarzania serwera, na którym działa usługa kolejki wiadomości. Sposobem na obejście tego byłoby uruchomienie usługi kolejki wiadomości na wielu serwerach, ale zwiększy to prawdopodobieństwo dwukrotnego pobrania tej samej wiadomości. Jedynym sposobem zapobieżenia występowaniu takich problemów byłoby włączenie wywołania zwrotnego odwołania, które (po zsynchronizowaniu informacji przez serwery lub nawet wątki na pojedynczym serwerze i wykryciu takiego ponownego wydania) nakazuje węzłowi przetwarzania zatrzymanie jego aktualne zadanie i ponownie odpytują kolejkę wiadomości o następną wiadomość, ale ponownie, istniałby pułap, w którym większość wysyłanego ruchu byłaby synchronizacjami i wywołaniami zwrotnymi odwołania, powodując wąskie gardło i spowalniając przetwarzanie informacji, tak że wiele węzłów przetwarzania wykonywałoby operacje zerowe i marnowało czas. Ostatnim sposobem, jaki przychodzi mi do głowy, aby obejść ten problem, jest to, aby każdy serwer kolejki wiadomości (i każdy wątek na każdym serwerze) miał określone przesunięcie dotyczące tego, gdzie w kolejce szuka, ale może to powodować problemy w oparciu o rodzaj aplikacji, zwłaszcza jeśli przetwarzanie jest wymagane w określonej kolejności. Tak więc, biorąc to wszystko pod uwagę, czy istnieją jakieś projekty architektury kolejki komunikatów, które mogłyby mi pokazać, w jaki sposób istniejące usługi kolejki komunikatów klasy korporacyjnej pozwalają uniknąć tych problemów?


title: Czy istnieje czystszy sposób buforowania danych?

text: Rozpoczęliśmy implementację kodu buforowania w naszym projekcie MVC. Wyprowadziliśmy się z ObjectCache .Net, aby przechowywać go w bazie danych SQL. To, co teraz robimy, to w każdej metodzie, którą chcemy buforować, mamy taki kod: public StatusCounts GetCounts() { var cache = new SqlCache<StatusCounts>("mykey"); if(cache.HasCachedData()) return cache.GetCachedData(); var data = StatusRepository.GetCounts(); cache.SetData(dane, DateTime.Now.AddHours(2)); } Jeśli chodzi o buforowanie, to działa. Ale martwię się, że teraz GetCounts ma wiele obowiązków. To już nie tylko obliczanie zliczeń, ale pobieranie ich z pamięci podręcznej (jeśli istnieją) i zapisywanie ich w pamięci podręcznej przed powrotem. Czy jest na to czystszy sposób?


title: Przykłady i zasoby do pisania propozycji rozwoju dla klienta

text: Przyglądamy się naszym procesom i relacjom z klientami w pracy, a częścią tego jest tworzenie standardowego szablonu naszych propozycji rozwoju, które wysyłamy do klientów. Obszary programistyczne, którymi się zajmujemy, to głównie tworzenie i projektowanie stron internetowych oraz tworzenie aplikacji mobilnych. Oprócz tego oferujemy również tworzenie oprogramowania natywnego dla małych i dużych firm. Naszym celem jest szablon dla każdego obszaru rozwoju, na którym możemy oprzeć przyszłe propozycje. Jak idziesz do pisania czegoś takiego? Czy zasoby do pomocy są w Internecie? Co ważniejsze, co według was jest ważne do uwzględnienia w propozycji? Zwykle jest to „dogłębna specyfikacja techniczna”, ale sugerowałbym (na przykład) włączenie makiety lub makiety gotowego produktu. Jak bardzo musisz być szczegółowy, aby przedstawić projekt klientowi i samemu zrozumieć potrzeby projektu, aby odpowiednio naliczyć opłatę?


title: Programista Windows Phone 7: C# czy silverlight dla prostej aplikacji?

text: Zamierzam zatrudnić programistę do tworzenia aplikacji na Windows Phone 7. Obecna aplikacja, która zostanie opracowana, jest dość prosta. * Aplikacja pobierze zawartość z internetowego interfejsu API. * Istnieją dwie listy do wyboru treści. * Istnieje jedna strona z zawartością przedmiotu. * Użytkownicy mogą oceniać zawartość i przesyłać zdjęcia. Ekrany wyprodukuje nasz artysta. Jestem prawie pewien, że większość dostępnych programistów nie zajęła się jeszcze rozwojem WP7. **Teraz pytania brzmią:** 1. Jaka technologia jest odpowiednia dla tego rodzaju aplikacji? 2. Jaka technologia wymaga mniej czasu na badania, naukę i produkcję? 3. Czy masz już doświadczenie z ograniczeniami silverlight w porównaniu do C#? (Myślę też o przyszłych projektach) 4. Domyślam się, że programiści Silverlight są bardziej doświadczeni w programowaniu interfejsu użytkownika niż programiści C#. Czy czujesz to samo?


title: W przypadku bardzo krótkich prac programistycznych, jak podejść do koncepcji umowy?

text: Zastanawiam się, co robią inni kontrahenci w dziedzinie wytwarzania oprogramowania, gdy potencjalny klient zwraca się do nich ze specyfikacją.. w zakresie umów. Z mojego doświadczenia wynika, że klienci często chętnie kontynuują współpracę bez formalnej umowy. Wiem, że jest to dość otwarte pytanie, więc podzielę je na serię pytań podrzędnych, na które można odpowiedzieć. Jeśli klient nie ma umowy do podpisania, czy przedstawiasz mu fizyczną umowę? Jeśli masz taką umowę do zaprezentowania klientom, to jak nabyłeś taką rzecz? Oczywiście można płacić przez nos za napisanie tego przez prawnika i inne oczywiste odpowiedzi, ale czy istnieją inne rozsądne (opłacalne?) rozwiązania na uzyskanie takiego kontraktu? Na jakim etapie, jeśli w ogóle, wymagalibyście od klienta fizycznego podpisania takiej umowy? (co jeśli praca trwa tylko jeden dzień?) W niektórych przypadkach oprogramowanie, które dostarczasz klientowi, jest dostosowaną wersją gotowego, otwartego lub zastrzeżonego oprogramowania wewnętrznego, jak to wpływa rzeczy? _Zdaję sobie sprawę, że najlepszą odpowiedzią jest prawdopodobnie „To zależy od klienta i innych czynników..”, nie musisz mi tego mówić. Ale jakie są Twoje doświadczenia i opinie na temat „najlepszych praktyk” w tym obszarze? A może, mówiąc programowo, masz niezawodny algorytm do zarządzania stroną kontraktową, tj. Uszczęśliwiania obu stron przez większość czasu?_


title: Wolisz algorytmy od ręcznie pisanych pętli?

text: Która z poniższych odpowiedzi jest dla Ciebie bardziej czytelna? Ręcznie napisana pętla: for (std::vector<Foo>::const_iterator it = vec.begin(); it != vec.end(); ++it) { bar.process(*it); } Lub wywołanie algorytmu: #include <algorytm> #include <funkcyjny> std::for_each(vec.begin(), vec.end(), std::bind1st(std::mem_fun_ref(&Bar::process), bar )); Zastanawiam się, czy `std::for_each` naprawdę jest tego wart, biorąc pod uwagę, że tak prosty przykład wymaga już tak dużo kodu. Jakie są twoje przemyślenia w tej sprawie?


title: Kiedy pominąć rozwiązywanie ogólnego problemu i zajęcie się konkretnym problemem?

text: Ciężko pracowałem nad opracowaniem ogólnego rozwiązania mojego problemu, ale nie wydaje mi się, aby sformułować dla niego odpowiedni algorytm, przynajmniej taki, który nie wymaga mnóstwa niedokładnej pracy gruntownej przy tworzeniu tabeli odnośników. Mam już rozwiązanie dla konkretnego wymagania, ale wymaga ono zmiany konfiguracji oprogramowania za każdym razem, gdy oprogramowanie jest ładowane z zestawami danych z innego obszaru geograficznego. Czy więc lepiej skończyć i na razie iść dalej, czy dalej próbować rozwiązać ogólny problem, wiedząc, że konkretne problemy będą się pojawiać?


title: Czy są jakieś kompilatory, które same próbują naprawić błędy składni?

text: Jakiś czas temu słyszałem, że kiedyś istniał kompilator, który próbował naprawić błędy składniowe, analizując kontekst i wnioskując, co było zamierzone. Czy taki kompilator naprawdę istnieje? Oczywiście ma to niewielką wartość praktyczną, ale byłoby bardzo ciekawą zabawą i nauką.


title: Czy testy selenowe powinny być pisane w trybie rozkazującym?

text: Czy tester automatyzacji powinien znać koncepcje OOPS i wzorców projektowych, aby pisać testy w sposób, w którym możliwe są zmiany i ponowne wykorzystanie kodu? Na przykład wybieram Javę, aby pisać definicje kroków ogórka, które instruują webdriver selenu. Czy powinienem używać dużo dziedziczenia, interfejsów, delegowania itp., aby ułatwić życie, czy byłoby to zbyt skomplikowane w przypadku czegoś, co powinno po prostu wiersz po wierszu?


title: Czy w sytuacjach krytycznych dla wydajności przechowywanie metadanych plików w bazie danych jest lepsze?

text: Zgodnie z tytułem tego pytania, w sytuacjach krytycznych dla wydajności, czy przechowywanie metadanych pliku (np. Lokalizacja, rozmiar, pobieranie itp.) w bazie danych pozwoli na lepszą wydajność niż próba pobrania go z samego systemu plików? Czy były jakieś studia przypadków dotyczące tego problemu? Aby zapewnić nieco więcej szczegółów na temat konkretnej sytuacji, aplikacja musi stale kopiować terabajty danych (setki plików) między zdalną witryną, a aktualna architektura programu używa poleceń systemu Unix (np. `ls`) w celu określenia, które pliki trzeba zaktualizować. Sam plik jest podzielony między klastry Isilon IQ i Sun Thumper, o których powiedziano mi, że mają dobrą przepustowość, ale słabą wydajność metadanych. Ponieważ aplikacja będzie jedynym procesem, który będzie miał uprawnienia do zapisu plików, nie przejmujemy się brakiem synchronizacji, ale martwimy się wydajnością, ponieważ obecnie przesyłanie danych zajmuje od sześciu do dziesięciu godzin.


title: Czy rozwiązanie typu open source może dorównać lub przewyższyć funkcje oprogramowania Team Foundation Server?

text: Team Foundation Server oferuje system kontroli wersji, ale z wieloma dodatkowymi funkcjami, takimi jak śledzenie błędów, historie użytkowników, planowanie projektów, a wszystko to jest zintegrowane z programem Visual Studio. Ktoś umieścił tutaj pełniejszą listę funkcji: Przez ostatni rok pracowałem z Mercurialem i od momentu wpisania „hg init” byłem zakochany. Moi nowi koledzy są przekonani, że chociaż inne rozwiązania scm są prawdopodobnie lepsze, TFS zapewnia lepszy kompletny pakiet dla zespołów. Chciałbym się dowiedzieć, czy lepiej po prostu użyć TFS, czy pójść drogą open source i wybrać różne rozwiązania i zintegrować je, aby uzyskać lepszy wynik, a jeśli to w ogóle możliwe, aby uzyskać taki poziom integracji? Podsumowując: czy da się to zrobić i czy lepiej wybrać różne narzędzia OSS?


title: Jakie jest rozsądne i bezpieczne hasło wymagane do rejestracji użytkownika?

text: Oto zasady dotyczące haseł, które właśnie otrzymałem od UPS (tylko w celu sprawdzenia statusu paczki): > Twoje hasło musi mieć od 8 do 26 znaków. Musi zawierać co najmniej trzy z następujących typów znaków: małe litery, duże > litery, cyfry, znaki specjalne lub spacje. Hasło nie może > zawierać identyfikatora użytkownika, imienia i nazwiska ani adresu e-mail. (SSO_1007) Właściwie muszę się trochę połamać, żeby wygenerować to hasło, ale nie tylko to, co najważniejsze, jestem pewien, że po 3 dniach zapomnę, jakie to hasło. Użytkownicy nie będą tak szczęśliwi. Resetowanie hasła może być częste. Myślę, że użytkownicy będą starali się unikać korzystania z witryny, chyba że będą musieli. Jaka jest rozsądna i bezpieczna polityka haseł przy zakładaniu strony internetowej? Myślę, że niektóre firmy mogą obawiać się, że niektórzy hakerzy próbują hasła milion razy lub więcej, więc dodają wszystkie te wymagania dotyczące „znaków specjalnych, małych liter, wielkich liter”, ale czy nie byłoby rozsądne wyłączanie konta lub po prostu wyłączanie hasło i wymagać zresetowania hasła, jeśli użytkownik próbował 30 lub 100 razy? Lub dodać 5-sekundowe opóźnienie za każdym razem, gdy użytkownik próbował 30 razy? Jeśli tak, to te znaki specjalne nie będą tak bardzo potrzebne.


title: Potrzebuję bardziej technicznej odpowiedzi na pytanie z rozmowy kwalifikacyjnej o to, jak działa internet od początku do końca

text: W ciągu ostatnich dwóch tygodni przeprowadziłem wywiady z pięcioma różnymi osobami i trzy z tych pięciu osób zadały mi następujące pytanie: _Wyjaśnij, co się dzieje między wejściem na „Google.com” a stroną pojawiającą się na ekranie._ Zasadniczo, jak Internet działa. Po trzech razach doszedłem do wniosku, że lepiej być przygotowanym, jeśli kiedykolwiek dostanę to pytanie. Wiem kilka rzeczy, ale nie jestem w pełni przekonany, że moja odpowiedź jest wystarczająco dobra. Zasadniczo wspominam, że serwer DNS tłumaczy „google.com” na adres IP. Trochę pomijam protokół TCP/IP, a następnie mówię o serwerze sieciowym dosłownie obsługującym żądane strony, które są wysyłane z powrotem do przeglądarki, którą przeglądarka następnie interpretuje i wyświetla. Jak powiedziałem wcześniej, nie jestem przekonany, że moja odpowiedź jest wystarczająco techniczna. Jakie kroki pomijam? Co jest warte, dwa z tych trzech razy były w tej samej firmie i jestem wezwany na trzecią rozmowę z nimi, więc nie mogę zbombardować tego _zbyt_ mocno.


title: Dlaczego wzorce projektowe nie są dodawane do konstrukcji językowych?

text: Ostatnio rozmawiałem z kolegą, który wspomniał, że jego firma pracuje nad dodaniem wzorca projektowego MVC jako rozszerzenia PHP. Wyjaśnił, że napisali kod w C do dodawania kontrolerów, modeli i widoków do konstrukcji języka w celu zwiększenia wydajności. Teraz wiem, że MVC to architektoniczny wzorzec projektowy, który jest szeroko stosowany w aplikacjach internetowych, ale wciąż muszę natknąć się na języki, które mają na przykład konstrukcję językową dla kontrolerów. IMHO integrując wzorce projektowe z językiem może podkreślić znaczenie dobrego projektu OO. Więc **Dlaczego najczęściej używane wzorce projektowe (MVC, Factory, Strategy,...itd.) nie są dodawane do konstrukcji języka?** Jeśli pytanie brzmi zbyt szeroko, możesz ograniczyć je tylko do PHP. **Edytuj:** nie sugeruję, że **musi** używać wzorca projektowego podczas tworzenia projektu. Właściwie to promuję metodologię, aby zachować prostotę tak długo, jak to działa.


title: Problem z adaptacją scrum przez zespół

text: Zajmuję się metodologią Scrum od półtora roku. Używam VersionOne jako narzędzia scrum. Próbowałem przestrzegać większości zasad scrum. Czasami mam wrażenie, że jest problem z przejrzystością historii. Od teraz cały zespół może uzyskać dostęp do wszystkich historii zdefiniowanych dla projektu. Stwarza to problemy z różnymi poziomami programistów, takimi jak młodszy i starszy programista. Skargi ludzi dotyczą podziału pracy lub rodzaju pracy, do której są przydzieleni. Istnieje kwestia porównania między deweloperami. Nie wiem, czy śledzę scrum właściwie, czy nie. Czy w scrumie powinniśmy dawać dostęp do wszystkich historii wszystkim? czy tylko przypisana osoba może zobaczyć jego historię?


Obecnie pracuję nad zarządzaniem użytkownikami w projekcie i zastanawiając się, jak powinienem to zaprojektować, zdałem sobie sprawę, że tak naprawdę nie ma standardu w tym, jak te rzeczy wyglądają, ponieważ często bardzo się różnią w zależności od aplikacji. Co sprawia, że świetny interfejs zarządzania użytkownikami jest świetny? Co łączy najlepszych?


title: Dlaczego Java nie wykonuje wnioskowania o typie?

text: Zawsze zastanawiałem się, dlaczego Java nie wykonuje wnioskowania o typie, biorąc pod uwagę, że język jest tym, czym jest, a jego maszyna wirtualna jest bardzo dojrzała. Google Go jest przykładem języka z doskonałym wnioskowaniem o typie i zmniejsza ilość pisania, które trzeba zrobić. Czy jest jakiś szczególny powód, dla którego ta funkcja nie jest częścią Javy?


title: Czy zintegrowane systemy wydłużają czas rozwoju i powodują brak elastyczności?

text: Pracuję dla dużej firmy finansowej, która zarządza pieniędzmi tysięcy klientów. Firma ta ma bardzo złożone procesy biznesowe i działa w bardzo dynamicznym środowisku. To dość stara firma i przez lata wdrożyła wiele heterogenicznych systemów do automatyzacji procesów w firmie. W firmie krążą pogłoski, że mogą być podejmowane próby przejścia na „system” (przepisany od nowa), który konsoliduje wiele różnych systemów, które obecnie istnieją. Pojawiła się debata, która kwestionuje wartość takiego posunięcia: jedna strona twierdzi, że jeden system jest łatwiejszy i tańszy w utrzymaniu ze względu na znacznie zmniejszoną redundancję, tj. odpowiednio uwzględnioną logikę biznesową, ujednolicony model danych, komponenty UI wielokrotnego użytku itp. Druga strona twierdzi, że firma, klienci i produkty (instrumenty finansowe) są zbyt złożone i zbyt dynamiczne, aby można je było zaszufladkować w jednym systemie. Pojedynczy system grozi uszkodzeniem jednego elementu, gdy inny zostanie zmodyfikowany. Nie ma sposobu i powodu, aby konsolidować logikę biznesową, ponieważ jest ona zbyt specyficzna dla klienta i produktu. Czas na wprowadzenie zmian wydłuży się, ponieważ zmiany w komponentach niższego poziomu będą miały wpływ na wiele komponentów wyższego poziomu. Pytanie: Czy firma powinna dążyć do inwestowania czasu i zasobów w tworzenie ujednoliconego modelu danych, uwzględnianie logiki biznesowej i tworzenie kodu wielokrotnego użytku na wszystkich warstwach? A może powinni „kopiować i modyfikować”, aby przyspieszyć czas tworzenia, zmniejszyć ryzyko regresji i zmniejszyć złożoność? Czy jest tu przedstawiony fałszywy dylemat (tj. czy nastąpi zmiana netto w taki czy inny sposób i czy jedna odpowiedź koniecznie wyklucza inną)? Żeby było jasne, to naprawdę kwestia **długoterminowych celów i priorytetów** , a nie konkretnego projektu produktu. Firma nigdy nie wyeliminuje pewnej ilości redundancji i nie byłoby to pożądane.


title: Jak ważna jest dogłębna znajomość środowiska uruchomieniowego języka wspólnego dla programisty .NET?

text: Zastanawiam się, ilu programistów .NET posiada praktyczną wiedzę na temat CIL i gdzie jest to dla nich przydatne. W przypadku, gdy brakuje Ci mojego znaczenia, oto prosty przykład CIL, w którym można dodać dwie lokalizacje razem: ldloc.0 ldloc.1 add stloc.0 // a = a + b lub a += b;


title: Jak zintegrować byłego członka zespołu z obecnym zespołem?

text: Czy można ponownie zintegrować byłego członka zespołu z projektem oprogramowania? Mamy produkt z nadchodzącym terminem dla klienta i nie mamy wystarczająco dużo godzin, aby to zrobić! Mamy byłego pracownika, który odszedł w doskonałych warunkach i chce wrócić. Są zaznajomieni z bazą kodu i architekturą (która nie zmieniła się znacząco od czasu ich odejścia). Czy możemy wykorzystać tę sytuację, aby uniknąć prawa Brooksa? Wydaje się, że to idealna sytuacja, członek zespołu jest na bieżąco z procesami, narzędziami itp. Na co musimy uważać? Czy w wodzie są jakieś smoki? A może powinniśmy oczekiwać płynnej żeglugi?


title: Czy reguła 9 kalisteniki obiektów ma zastosowanie w celu C?

text: Reguła 9 w Object Calisthenics autorstwa Jeffa Baya (RTF) to: > **Zasada 9: Brak getterów/setterów/właściwości** > > Ostatnie zdanie poprzedniej reguły prowadzi niemal bezpośrednio do tej reguły. > Jeśli twoje obiekty teraz hermetyzują odpowiedni zestaw > zmiennych instancji, ale projekt nadal jest niewygodny, nadszedł czas, aby zbadać więcej > bezpośrednich naruszeń enkapsulacji. Zachowanie nie będzie podążać za zmienną instancji >, jeśli może po prostu poprosić o wartość w swojej bieżącej lokalizacji >. Ideą stojącą za silnymi granicami enkapsulacji jest zmuszenie > programistów pracujących nad kodem po jego opuszczeniu do _szukania_ i _umieszczania_ > zachowania w jednym miejscu w modelu obiektowym. Przynosi to wiele korzystnych efektów, takich jak radykalne zmniejszenie liczby błędów powielania i lepsza lokalizacja zmian w celu wdrożenia nowych funkcji. > > Innym sposobem, w jaki ta zasada jest powszechnie określana, jest „Mów, nie pytaj”. Rozumiem, o co chodzi w regule. Ale uważam to za przydatne tylko w środowiskach zbierających śmieci, gdzie modyfikacja referencji jest bardzo prosta. Czy to pomoże w celu C? Ponieważ zawsze ważne jest, aby tylko ustawiający zmieniał ivar i aby również dbał o zachowanie nowej wartości i uwolnienie starej. i użyj settera w dowolnym miejscu wewnątrz metod, aby zmienić ivary, które są wskaźnikami.


title: Jak poinformować członków drużyny, jakie zmiany wprowadziłem do obiektu?

text: Załóżmy, że mam obiekt PHP, powiedzmy: companyObj. class companyObj { prywatna nazwa_firmy; prywatny adres_firmy; public function print_contact() { //logic } } To jest obiekt, który napisałem i udostępniłem kolegom z drużyny. Teraz chciałbym uczynić go bardziej wydajnym w następujący sposób: class companyObj { private nazwa_firmy; prywatny adres_firmy; prywatna firma_kontakt_osoba; public function print_contact() { //logika zaktualizowana } } Teraz, jak mogę powiadomić kolegów z drużyny, że mój obiekt ma więcej atrybutów, które mogą ustawić? Zamiast wysyłać e-maile do wszystkich członków zespołu deweloperskiego, jak sprawić, by zespół wiedział, co się dzieje, jeśli nie chcę, aby moi koledzy z zespołu marnowali swój czas na przyglądanie się zmianom na poziomie kodu źródłowego?


title: NP kompletne lub NP trudne problemy w prawdziwym życiu

text: Czy ktoś w swojej pracy ma przykłady z życia, w których regularnie rozwiązuje NP kompletne lub NP trudne problemy (poprzez heurystykę, pogoń za nieoptymalnym rozwiązaniem lub cokolwiek innego)? Wiem, że występują one w planowaniu, planowaniu, projektowaniu VLSI itp., ale próbuję zorientować się, jakie główne branże zatrudniają obecnie programistów lub inżynierów, którzy regularnie to robią. Jeśli ktoś miałby rozwijać ekspertyzę lub bibliotekę, powiedzmy, optymalizację kombinatoryczną, gdzie można by to wykorzystać jako część pracy programistycznej? Jakieś konta osobiste?


title: Komponenty na jakich licencjach mogę używać w płatnej aplikacji?

text: Pracuję nad aplikacją i muszę wykorzystać niektóre istniejące komponenty, takie jak biblioteki i frameworki JavaScript, które są objęte licencjami. Moja aplikacja będzie płatna (nie darmowa) i zamknięta. Czy mogę używać komponentów w mojej aplikacji, które są objęte jedną z następujących licencji: * MIT * Apache * BSD?


title: Dlaczego Gmail używa Javy? Czy naprawdę istnieje przewaga nad czymś takim jak php lub python?

text: Uwaga: wiem, że nikt z was (prawdopodobnie) nie pracuje dla Google, więc to jest bardziej pytanie koncepcyjne. Więc tak, odkryłem, że Gmail używa Javy i to sprawiło, że pomyślałem: Dlaczego? Osobiście nigdy tak naprawdę nie nauczyłem się javy i jestem zaznajomiony z C/C++, Pythonem, Php e.t.c. Ale nie rozumiem, dlaczego niektóre strony internetowe używają języków takich jak java? (Uwaga: nie jest to w żaden sposób wątek mówiący, że jeden język jest lepszy od drugiego). Chcę wiedzieć, dlaczego niektóre witryny, takie jak Gmail, używają języka Java i podobnych języków? Jakie zalety/wady wiążą się z używaniem języków Java/podobnych w porównaniu z językami takimi jak php/python/ruby do tworzenia stron internetowych? Ps: Wiem, że niektóre strony wolą kompilować swój kod do optymalizacji (jak hiphop na Facebooku)


title: Rekomendacje, jakiej technologii użyć do wywołania REST API

text: Tworzę małą witrynę sieci Web, która musi wywołać interfejs API REST, aby pobrać niektóre pliki JSON i wyświetlić je. Jakie jest najlepsze narzędzie do tej pracy? Obecnie dostępnych jest tak wiele bibliotek JavaScript, że trudno jest zdecydować, którą wybrać. Czy jest jakaś szczególna biblioteka, którą ludzie poleciliby, która zrobi to, co chcę, zarówno wydajnie, jak i bez dużego wysiłku programistycznego.


title: W danej sytuacji i pewnych warunkach sprawdź, czy sytuacja jest możliwa

text: Cóż, jest to problem, o którym my i mój przyjaciel wymyśliliśmy, ale nie wymyśliliśmy niczego, aby rozwiązać następujący problem (postaram się wyrazić to w najlepszy możliwy sposób): > Biorąc pod uwagę, że istnieją `n ` liczba drużyn i liczba meczów, które > rozegrała każda drużyna, oraz że żadna drużyna nie może rozegrać więcej niż 2 meczów z > inną drużyną, należy przewidzieć, czy rozkład meczów rozegranych przez > każdą drużynę jest możliwy. PS : Jestem programistą Pythona, więc (jeśli to możliwe) opublikuj tylko kod Pythona do wyjaśnienia..


title: Czy prowadzenie dziennika pomaga w Twojej pracy?

text: Lata temu, w mojej pierwszej prawdziwej pracy programistycznej, szef zachęcał mnie do prowadzenia dziennika codziennych czynności. Nadal tak robię, choć już nie papierową i odręczną. Czy prowadzisz dziennik, jeśli tak, to co w nim piszesz i jak pomaga ci w pracy? A może po prostu potrzeba czasu, który nigdy nie zostanie odzyskany?


title: Czy kod i dane powinny być traktowane oddzielnie?

text: Czy naprawdę konieczne jest rozróżnienie między kodem a danymi? Czy istnieje język, w którym nie ma takiego zróżnicowania?


title: Jakie jest najlepsze sortowanie do użycia w tabelach MySQL?

text: Jestem ciekaw, co jest dziś uważane za standard do użycia jako sortowanie tabel MySQL? Powiedziano mi, że Latin-1 jest najlepszym wyborem, kiedy zaczynałem pracę z MySQL, ale natknąłem się na ten post z 2009 roku. Stwierdza on, że zestawy znaków US-ASCII i LATIN-1 są w drodze, a UTF-8 jest w drodze i powinien być ustawiony domyślnie przez MSQ w wersji 6. Czy to żel z tym, co wiesz, czy z tym, co myślisz, lub z tym, co robisz? W przypadku tego pytania załóżmy, że nie ma szczególnej potrzeby stosowania znaków innych niż angielskie.


title: Hibernacja zapytań HQL budynku

text: Właśnie przeczytałem odniesienie do hibernacji i mówią, że powinieneś używać constans dla zapytań HQL. Jednak nie zawsze jest to możliwe, na przykład jeśli korzystasz z funkcji wyszukiwania i masz 10 kryteriów (nie kryteria jpa, tylko kolumny, według których szukasz). Założę się, że możesz zrobić trochę hacky HQL, który przekształca się w źle działający SQL, ale czuję, że nie jest to najlepszy wybór. Wiem, że możesz używać API kryteriów, ale nie jest tak potężny jak HQL, a niektórzy ludzie po prostu go nie lubią (jestem jednym z nich). Jak to robisz w Twoich aplikacjach? Mam na myśli kod typu (to tylko przykład!) String hql = "z Biura gdzie"; Parametry listy = ... if (dateFrom!=null){ hql += " dateFrom>=? "; parametry.dodaj(dataOd); }


title: Strategia/algorytm podziału puli na żetony

text: Chcę podzielić pulę pokerową na żetony. Przykład: Pula = 17,500 USD. Mam nieskończone stosy chipsów. Mam następujące typy żetonów: ChipsTypes = [$1, $5, $10, 25 $, 100 $, 500 $, 1000 $, 5000 $, 10 000 $ i tak dalej]. Indeks zaczyna się od 0. Chcę otrzymać tablicę, która mówi, które żetony muszę wziąć, aby podzielić pulę iw jakiej kolejności mieć minimalną liczbę nominałów i żetonów po przeliczeniu puli na żetony. Na przykład Wynik = [7, 5] oznacza, że muszę wziąć 3 * 5000 $ + 5 * 500 $, czyli 17,500 $. Czy istnieje jakaś strategia lub algorytm, który odpowiadałby moim potrzebom?


title: Rozpoczęcie walki developera z webformami, czy przejście na MVC to dobry pomysł?

text: Młody programista często zwraca się do mnie o pomoc z formularzami internetowymi Asp.net. Zwykle jego problemy dotyczą rzeczywistych kontrolek i sposobów ich manipulowania, a nie czystego kodu typu oprogramowania pośredniego. Ponieważ sporo pracuję z Asp.Net MVC, zwykle widzę prostsze rozwiązania jego problemów, ale nie może ich zaimplementować ze względu na strukturę, w której pracuje. Rozmawiałem o tym z innym deweloperem i uważa, że nie być dobrym posunięciem. Jego rozumowanie jest takie, że jeśli usuniesz strukturę zapewnianą przez formularze internetowe, młody programista będzie się gubić i nie będzie w stanie nic zrobić. Ja natomiast czuję, że usuwając wbudowaną abstrakcję formularzy internetowych i skojarzonych z nimi kontrolek i skupiając się tylko na HTML i kodzie, odniesie większy sukces w swoich projektach. Czy byłoby mądrym posunięciem dla programisty w takiej sytuacji odejście od formularzy internetowych i rozpoczęcie nauki Asp.net MVC?


title: Zrozumienie porównania za pomocą notacji Big O

text: Przechodziłem przez to mocno dyskutowane i wysoko głosowane pytanie na SO i natknąłem się na jeden komentarz, który otrzymał 5 głosów upvots. Więc zakładam, że to był świetny komentarz. Ale jednocześnie kręcił mi się w głowie. Czy ktoś może wyjaśnić ten komentarz? Komentarz mówi: > Nie można bezpośrednio porównywać wartości big-O bez myślenia o stałych > czynnikach. W przypadku małych list (a większość list jest małych), O(N) w ArrayList jest > szybsze niż O(1) w LinkedList.


title: Metodologie związane z testowaniem z wyjątkiem TDD/BDD

text: Czy istnieją jakieś metodologie związane z testowaniem poza TDD/BDD? Widzę wielu ludzi, którzy praktykują własne podejścia do testowania (np. patrz post Ayende), ale nie widzę w tym żadnej formalizacji, żadnego nazewnictwa tych podejść.


title: Czy funkcjonalny intellisense i przeglądanie kodu są bardziej korzystne niż korzystanie z kontenerów wstrzykiwania zależności?

text: To pytanie jest naprawdę oparte na PHP, ale może dotyczyć innych dynamicznie typowanych, interpretowanych języków, a w szczególności metod generowania wglądu w kod i przeglądania obiektów w środowiskach programistycznych. Używamy PHPStorm i uważamy, że intellisense jest nieoceniony, ale zapewnia go pewna ograniczona analiza statyczna i parsowanie komentarzy dokumentów. Oczywiście nie nadaje się to dobrze do uzyskiwania zależności za pośrednictwem kontenera, ponieważ IDE nie ma pojęcia o zwracanym typie, więc programista traci na mnóstwie (w każdym razie w przypadku naszego frameworka) bogatej dokumentacji dostarczanej za pośrednictwem komentarzy doc. Zaczynamy więc widzieć takie rzeczy: $widget = $dic->YieldInstance('WidgetA', $arg1, $arg2, $arg3, $arg4...)); /** * @var $widget WidgetA */ Wgląd w kod działa. W efekcie komentarze są ściśle powiązane, ale gorzej wychodzą z synchronizacji, gdy kod jest modyfikowany, ale nie komentarze: $widget = $dic->YieldInstance('WidgetB', $arg1, $arg2, $arg3, $arg4.. .)); /** * @var $widget WidgetA */ Oczywiście komentarz można poprawić, odwołując się do interfejsu widżetu, ale wtedy równie dobrze moglibyśmy użyć fabryki i uniknąć wymagania dodatkowych wskazówek dotyczących pisania w komentarzach oraz złożoności dic/kotła platerowanie. Co jest ważniejsze dla przeciętnego programisty, wgląd w kod / intellisense czy rozdzielenie „nirwany”?