title: Jak zarządzać zależnościami między klasami w zakresie niszczenia/projektowania (więcej na temat C++)

text: Więc jeśli dobrze rozumiem, z zasad projektowania SOLID, każda klasa powinna mieć jedną odpowiedzialność. Powinna więc istnieć jedna klasa, która tworzy i zarządza zasobami, druga klasa, która przetwarza/aktualizuje zasoby, trzecia klasa, która łączy zasób z innym zasobem i tak dalej. Pytanie brzmi, jak czysto wyrazić to w kodzie? Ponieważ w C++ kolejność niszczenia klas odgrywa ważną rolę. Więc w zasadzie dochodzisz do sytuacji, w której dostajesz ResourceClassInstanceManager cf;//czy tworzenie, rozliczanie i niszczenie ResourceClass? ResourceClass &rcInstance = cf.GetResourceClass();//tworzy instancję zasobu ResourceClassUpdater rcu(&rcInstance);//updater, który działa na instancji klasy ResourceConnector rcc(&rcInstance, &instanceOfAnotherClass); Problem polega na tym, że jeśli cf najpierw opuści zasięg lub rcInstance zostanie usunięte przed rcu lub rcc. Pozostałe klasy nadal będą odwoływać się do nieistniejącego wystąpienia ResourceClass. Wydaje się to nieco niechlujne, ponieważ cały łańcuch tworzenia / niszczenia musi być bardzo uważnie śledzony i staje się naprawdę kłopotliwy, gdy tylko masz wskazówki do obiektów i głębszych poziomów zagnieżdżania. Czy istnieje czyste rozwiązanie tego problemu projektowego?


title: Jak rozpoznać, czy porady starszego programisty są złe?

text: Niedawno zacząłem swoją pierwszą pracę jako młodszy programista i mam starszego programistę, który jest moim mentorem w tej małej firmie. Jednak kilka razy udzielał mi rad w sprawach, z którymi po prostu nie mogłem się zgodzić (jest to sprzeczne z tym, czego nauczyłem się w kilku dobrych książkach na ten temat napisanych przez ekspertów, pytania, które zadałem na niektórych stronach z pytaniami i odpowiedziami, również się zgadzają ze mną) i biorąc pod uwagę nasz napięty harmonogram, prawdopodobnie nie mamy czasu na długie debaty. Do tej pory starałem się uniknąć tego problemu słuchając go, podnosząc kontrapunkt w oparciu o to, czego się nauczyłem jako obecne dobre praktyki. Ponownie podnosi swój pierwotny punkt (przez większość czasu powie najlepsza praktyka, łatwiejsza w utrzymaniu, ale po prostu nie poszedł dalej), notuję (ponieważ nie podniósł nowego punktu, aby skontrować mój kontrapunkt), pomyśl o i poszukaj w domu, ale nie wprowadzaj żadnych zmian (nadal nie jestem przekonany). Ale ostatnio podszedł do mnie ponownie, zobaczył mój kod i zapytał, dlaczego nie zmieniłem go zgodnie z jego sugestią. To już trzeci raz w ciągu 2-3 tygodni. Jako młodszy programista wiem, że powinienem go szanować, ale jednocześnie nie mogę zgodzić się z niektórymi jego radami. Jednak jestem pod presją wprowadzenia zmian, które moim zdaniem pogorszą projekt. Oczywiście jako niedoświadczony programista mogę się mylić i jego sposób może być lepszy, może to być jeden z tych wyjątków. Moje pytanie brzmi: co mogę zrobić, aby lepiej ocenić, czy porady starszego programisty są dobre, złe, a może dobre, ale przestarzałe w dzisiejszym kontekście? A jeśli jest zły/przestarzały, jaką taktykę mogę zastosować, aby nie wdrożyć go po swojemu, pomimo jego „presji”, przy jednoczesnym zachowaniu faktu, że szanuję go jako seniora?


title: Hermetyzuj zewnętrzną bibliotekę JavaScript

text: Mam zamiar opracować projekt ASP.NET MVC 4, który będzie korzystał z map. Nasza firma posiada własne API map, które w tej chwili jest bardzo proste, ale ma być dalej rozwijane w przyszłości, aby dopasować się do konkretnych potrzeb klientów. Projekt będzie miał interfejs mobilny/tabletowy oprócz interfejsu internetowego i musi być teraz rozwijany. Zaplanowaliśmy więc rozpoczęcie korzystania z Google Maps v3 API. Chciałbym zahermetyzować interfejs API, aby nasze aplikacje nie miały wywołań związanych z interfejsem Google API. To samo podejście, jakbym chciał użyć zewnętrznego API w C# i chciałem go zahermetyzować, aby móc w przyszłości przełączać API bez konieczności przekodowywania całej aplikacji. Ale nie udało mi się znaleźć podobnych przykładów, więc pojawiają się następujące pytania: 1. Czy to dobre i rozsądne podejście? Pozwól mi usłyszeć twoje plusy i minusy. 2. Jak by to wyglądało w praktyce?


title: Jak zasymulować REST API?

text: Pracuję nad nowym projektem, który będzie wyszukiwał dane z 3rd party REST API. Jest to kanał danych sportowych w czasie rzeczywistym, więc kanał działa tylko wtedy, gdy faktycznie odbywa się gra. Chociaż strona trzecia zapewnia dobrą dokumentację (XSD, itp.), nie ma możliwości symulowania przebiegu gry, więc aby przetestować kod, który napisałem z tym API, musiałbym poczekać na rzeczywistą grę. Moim jedynym wyjściem jest samodzielne napisanie kodu symulującego grę, ale wydaje mi się, że wymaga to dużo pracy. Czy ktoś ma doświadczenie z narzędziami podobnymi do Pasieki, aby to zrobić? Jak byś do tego podszedł? Dziękuję


title: Czy profilowanie może służyć do weryfikacji, czy optymalizacja się powiodła?

text: Wiem, że profilowanie jest przydatne do identyfikowania wąskich gardeł i określania, które części kodu wymagają czasu na wykonanie. To ostatnie nie zawsze jest łatwe do wyśledzenia w trakcie wykonywania innych ścieżek, więc gdy już zdecyduję, co chcę zoptymalizować, może być problem z zauważeniem poprawy w liczbach. Jest to szczególnie prawdziwe w przypadku aplikacji komputerowych, które działają stale i trudno jest: wykonać tę samą ścieżkę i wykonać ją taką samą liczbę razy, aby uzyskać wiarygodne porównanie. Nie pomoże mi, jeśli przed optymalizacją funkcja uruchomiła się X razy i zajęła 500 milisekund, a po optymalizacji działała Y razy i zajęła 400 milisekund. Czy w takich przypadkach mogę w jakiś sposób użyć profilera, aby określić poprawę, czy muszę rozwiązać inne opcje?


title: Filtry Bloom lub podobne, ale bez fałszywych alarmów

text: Aby poprawić niektóre wyszukiwania, rozważam użycie filtrów Bloom. Ale w moim przypadku użycia najbardziej prawdopodobnym wynikiem jest to, że element istnieje w zestawie docelowym. Filtry Blooma mogą mieć fałszywie pozytywne, ale nie fałszywie negatywne. To zmusiłoby mnie do sprawdzania rzeczywistej (dużej i wolnej) pamięci przez większość czasu z powodu niepewności. Czy istnieje inna struktura algorytmu/danych o tych samych właściwościach dotyczących przestrzeni i szybkości obliczeń (oraz równoległości zapytań), która może zapewnić brak fałszywych trafień i niskie prawdopodobieństwo wystąpienia fałszywych trafień? (Maksymalny rozmiar zestawu wyniesie około 300 000 elementów, elementy będą ciągami co najwyżej 512 znaków, a takich zestawów będę miał setki).


title: Java Swing w tworzeniu oprogramowania w świecie rzeczywistym?

text: Czy Java Swing naprawdę jest używana do konstruowania oprogramowania w świecie rzeczywistym? Biorę udział w kursie wprowadzającym w Javie, ale nic poza rysowaniem kształtów, linii i podstawowych tabel.


title: Jakich metod pracy zespołowej można się nauczyć nie będąc w zespole?

text: Przez większość swojej kariery pracowałem w środowiskach zespołowych, ale nie jako programista. (Jestem wyszkolony jako muzyk/kompozytor.) Zaczynam jednak rozumieć koncepcje _programowania_ specyficzne dla zespołu - powoli, ale pewnie - takie jak kontrola wersji, SDLC, dokumentacja itp. teoretyczne zrozumienie, ale nie jest to tak naprawdę pewne. **Chciałbym przećwiczyć wszystko, co w mojej mocy, aby pomóc mi nauczyć się efektywniej pracować w zespole.** ...zanim naprawdę pójdę i zawracam komuś głowę swoją twardą ręką lub ignorancją. Nie jestem pewien, czy jest możliwe, a nawet godne polecenia, aby prywatnie „praktykować” metodologie zespołowe. Być może jedynym sposobem, aby naprawdę nauczyć się pracy w zespole, jest po prostu to doświadczenie. Podobnie nie wiedziałbym, jak wytłumaczyć pracę zespołową innemu muzykowi, ale jako muzycy tak naprawdę nie mamy skodyfikowanych metodologii w taki sam sposób, jak robią to programiści, i myślę, że to może mieć znaczenie. W muzyce istnieją pewne konwencje i brak elastyczności ze względu na mechaniczną naturę instrumentów/sprzętu nagrywającego (przypuszczam, że podobny do sprzętu/języka), ale poza tym jakoś to nadrabiamy na bieżąco (i zakładam, że programiści trochę trochę tego też, w zależności od kontekstu — nie wiedziałbym. Właśnie to próbuję rozgryźć). Jestem prawie pewien, że nieuniknioną odpowiedzią jest to, że powinienem pracować nad czymś open-source; świat jest przecież płaski i jako programista nie jest trudno komunikować się na duże odległości (jak to często bywa z muzykami). Ale mam wrażenie, że nie jestem na to gotowy. Bezpieczniej czułbym się ucząc się _jak_ podejść do pracy zespołowej z programistami, zanim po prostu zanurkuję, ponieważ programiści mogą być może trochę przekorni. Staram się unikać doświadczeń typu wrak pociągu, które mogą wywołać irracjonalny strach. Czy jest więc coś, co mogę wcześniej przestudiować, a jeśli tak, to czy istnieje ogólnie przyjęty sposób, aby to zrobić? Podobnie jak próba pracy zespołowej, praktyki związane z zespołem, które można praktykować prywatnie; czy cokolwiek z tego ma sens?


title: Jak przechowywać postępy abstrakcyjnych wydarzeń?

text: Tworzę grę w node.js. Mam zawodników, którzy potrafią wykonywać wiele akcji. Wszystkie akcje są kodowane jako funkcje i zmieniają niektóre zmienne w obiekcie użytkownika lub w innych obiektach przechowywanych w bazie danych. Akcje są jak: 1\. Gracz wchodzi do pokoju (wypełnionego innymi graczami i niektórymi przedmiotami) room.players.push(player); 2\. Pokój rozdaje pewne rzeczy graczom (zwiększa zmienną w obiekcie gracza), którzy już byli w pokoju, oraz graczowi, który właśnie wszedł. player.gemDiam++; 3\. Gospodarz w pokoju prosi gracza o zrezygnowanie z czegoś (zmniejszenie jakiejś zmiennej) od niego. gracz.mikstura--; host.mikstura++; 4\. Gracz prosi innych graczy o podarowanie pokoju czegoś innego. (zmniejsz ich własne i zwiększ wartość niektórych zmiennych pokoi) room.players.forEach(function(player){ io.sockets.socket(player.socketID).emit('askNicely'); io.sockets.socket(player.socketID ).on('zgadzam się', function(){ player.gemCirca--; }); }); 5\. Wszyscy rezygnują z tego, co pierwotnie grali w pokoju (usuń zmienną Pokój, ustaw dla nich wartość) i wychodzą. room.players.forEach(function(player){ player.gemDiam--; }); Teraz pamiętaj, że gracze są rzeczywistymi graczami (kontrolowanymi przez socket.io po stronie klienta), a te akcje są tylko jedną z wielu, które wybrałem w tym przykładzie. Jak powinienem zachować to wszystko w sposób, który mogę odtworzyć bez prawdziwych graczy, coś w rodzaju historii tego, co wydarzyło się w tym pokoju?


title: Jak czytać z bazy danych i zapisywać do pliku w sposób asynchroniczny/nieblokujący w Javie?

text: Próbuję zmodyfikować program szeregowy, który odczytuje z bazy danych i zapisuje wyniki do pliku, odbywa się to w sposób blokujący i myślę, że możemy uzyskać wzrost wydajności, ponieważ jest bufor pamięci i zapisywany jest plik „w tle” asynchronicznie mogę myśleć o rozwiązaniu „rozmowa kwalifikacyjna”, używając wątków, współdzielonych zasobów, zsynchronizowanych bloków itp., ale jestem pewien, że jest lepszy sposób (czy jest ładna mała biblioteka „opóźnionego zapisu” tam zrobi to za mnie?) Czy któryś z pakietów java.util.concurrent oferuje jakąś pomoc? java.nio? a może JMS/ActiveMQ? A co z PipedOutputStream / PipedInputStream jako podstawą mojego bufora? Jak zaimplementować opóźniony/w tle/buforowany/nieblokujący/asynchroniczny zapis plików w Javie?


title: Czy zmieniono licencję dla części BOOST, które zostały zaakceptowane do C++11?

text: Biblioteka oprogramowania Boost jest licencjonowana na podstawie licencji BOOST Teraz, jeśli używasz tylko C++11, czy oznacza to, że jesteś związany warunkami licencji BOOST, jeśli używasz tych części C++?


title: Dobre pytania do zadania potencjalnemu nowemu szefowi?

text: Wyobraź sobie, że pracujesz jako programista. Wyobraź sobie, że kierownik Twojego zespołu odchodzi, a Twoja firma szuka zastępstwa. Wyobraź sobie, że w ramach procesu rekrutacyjnego miałeś okazję z nim porozmawiać. Nie jesteś jedyną osobą przeprowadzającą rozmowę kwalifikacyjną i chociaż ostateczna decyzja o zatrudnieniu go nie należy do Ciebie, masz na to wpływ. Jakie pytania byś zadał? O czym byś z nim rozmawiał?


Dlaczego Collection.size() Javy zwraca int? Ogranicza to wielkość kolekcji do nieco ponad 2 miliardów wpisów. Przy szybko rosnącej ilości dostępnej pamięci wydaje się to trochę krótkowzroczne – nie?


title: Czy prefiks i sufiks „On” są rozsądnymi wyjątkami od „niewęgierskiego” standardu nazewnictwa?

text: Po pierwsze, wydaje mi się, że widziałem już omawiane tutaj to pytanie, ale nie mogę go znaleźć. Przepraszam, jeśli go znajdziesz. Rozpoczynam nowy projekt i próbuję dowiedzieć się, dlaczego IsResolved i/lub ResolvedOn mają dla mnie więcej sensu niż Resolved. Oczywiście, gdy coś zostanie nazwane „NazwaFirmy” (na przykład), jestem całkiem pewien, że przetestuję to jako ciąg. Jednak gdy widzę „Rozwiązany” i wiem, że opisywany obiekt może nie mieć prawidłowej wartości daty rozwiązania, przeszkadza mi, że muszę sprawdzić typ, aby określić, jak go przetestować: dla undefined/null/itd . (jako data) lub jako wartość logiczna. Czy uzasadnione jest twierdzenie, że Is i On zazwyczaj nie tylko deklarują typ zmiennej; deklarują zamiar? A może po prostu sprawia, że kod jest bardziej przejrzysty z jakiegoś innego powodu, którego nie jestem w stanie skodyfikować? Argumentując z drugiej strony, jeśli spojrzę na typ Resolved i zobaczę, że jest to wartość logiczna, otrzymam odpowiedź. Być może nie różni się to od wiedzy, że będę musiał sprawdzić zmienną „Wykonalność”, aby określić, czy jest to int, enum, czy coś innego. (Chociaż może to oznacza, że „Feasbility” byłoby również suboptymalną nazwą.) I niezależnie od tego, w przypadku „ResolvedOn”, nadal muszę sprawdzić, czy jest to nullable, aby ustalić, czy dodatkowo muszę sprawdzić „IsResolved " wartość. Jaki jest sens gadatliwości, zakodowania po raz drugi w nazwie zmiennej tego, co można wywnioskować z typu? Proszę o pomoc w zrozumieniu **dlaczego Is[Property] i [Property]On** mają dla mnie sens, chociaż węgierski w ogóle nie ma sensu. Albo wyjaśnij, dlaczego taki wyjątek nie miałby sensu? Uwaga: głównie pracuję z SQL, C# i JavaScript.


title: Jak zmotywować uczniów do sekcji programowania?

text: W zeszłym roku próbowałem założyć sekcję programistyczną na mojej macierzystej uczelni. Zaczęliśmy od przejrzystego dokumentu szczegółowo opisującego nasze plany i cele oraz solidnej frekwencji (około 20 uczniów). Natknąłem się na następujące problemy: * Trudno mi było zarządzać tak dużym zespołem * większość studentów miała niewielkie lub żadne doświadczenie w programowaniu poza kursami początkowymi w języku `C` Próbowałem podzielić sekcję na 4 zespoły po około 5 uczniów każdy, z bardziej doświadczeni programiści na czele każdego zespołu. Zdefiniowaliśmy kilka rzeczywistych problemów do rozwiązania, aby uczynić je bardziej interesującymi dla uczniów i zabraliśmy się do pracy. Jednak wraz ze zbliżającymi się egzaminami frekwencja spadła, a potem w końcu ustała. Wtedy czułem, że uczniowie nie chcą wkładać wysiłku w nauczenie się czegoś nowego. Uważam, że później czuli, że zadanie jest dla nich zbyt trudne, a motywacja ucierpiała. Moje pytanie brzmi zatem: jak motywowałbyś uczniów?


title: Czy strzelam sobie w stopę, jeśli korzystam z Mercurial for Rails?

text: Jestem programistą Rails i wolę Mercurial niż Git. Wiem jednak, że społeczność Railsowa jest bardzo pro-Gitowa. Więc moje pytanie, czy to możliwe, że mój wybór systemu kontroli wersji odwróciłby niektórych deweloperów?


title: Algorytm genetyczny - rozwiązywanie macierzy z ograniczeniami twardymi i miękkimi

text: Piszę program genetyczny, w sprawie którego potrzebuję porady dotyczącej operacji krzyżowania. GP próbuje znaleźć najlepsze rozwiązanie dla macierzy, która ma twarde ograniczenia wierszy i łagodniejsze ograniczenia kolumn. Dla danego rozwiązania w populacji wiersze zawierają losową kombinację identyfikatorów typu obiektu ze ustalonego zbioru. Lekarz ogólny próbuje znaleźć rozwiązanie, w którym po ułożeniu wierszy, jeśli zliczysz identyfikatory w każdej kolumnie, numer każdego typu musi mieścić się w zalecanym zakresie dla tego identyfikatora. Napisałem funkcję fitness, która pozwala mi ocenić rozwiązanie na podstawie ograniczeń dotyczących kolumn - 100% oznacza, że wszystkie kolumny mieszczą się w specyfikacjach. Ponieważ sprawność jest powiązana z kolumnami, wydaje się logiczne, że operacja krzyżowania powinna obejmować kolumny dwojga rodziców, aby stworzyć potomstwo kandydata. Czy zwrotnica wielopunktowa powinna być lepszym rozwiązaniem? Obawiam się, że operacja crossovera prawie na pewno złamie ograniczenia rzędu. Dzięki za jakąkolwiek radę.


title: pomoc teoretyczna dotycząca prefix_suffix_set

text: Znalazłem to pytanie na codility.com, ale nie rozumiem pytania. Czy możesz mi pomóc dowiedzieć się, czego chcą? Bardziej interesuje mnie teoria niż kod. Dana jest niepusta tablica A z indeksem zerowym składająca się z N liczb całkowitych. Prefix_suffix_set to para indeksów (P, S) takich, że 0 ≤ P, S < N oraz takich, że: * każda wartość występująca w ciągu A[0], A[1], ..., A[P ] występuje również w sekwencji A[S], A[S + 1], ..., A[N − 1], * każda wartość występująca w sekwencji A[S], A[S + 1], . .., A[N − 1] występuje również w sekwencji A[0], A[1], ..., A[P]. Celem jest obliczenie liczby zestawów prefiksów_sufiksów w tablicy. Rozważmy na przykład tablicę A taką, że: * A[0] = 3 * A[1] = 5 * A[2] = 7 * A[3] = 3 * A[4] = 3 * A[5] = 5 Istnieje dokładnie czternaście zestawów przedrostków: (1, 4), (1, 3), (2, 2), (2, 1), (2, 0), (3, 2), (3, 1), ( 3, 0), (4, 2), (4, 1), (4, 0), (5, 2), (5, 1), (5, 0). Napisz funkcję: * funkcja rozwiązanie(A); to, biorąc pod uwagę niepustą tablicę A z indeksem zerowym, składającą się z N liczb całkowitych, zwraca liczbę zestawów prefiksów_sufiksów.


title: Czy w komentarzach do kodu należy używać „skrótów wewnętrznych”?

text: Czy należy używać „wewnętrznych skrótów/slangu” w komentarzach, to znaczy, że skróty i slangowe osoby spoza projektu mogą mieć problemy ze zrozumieniem, na przykład używając czegoś takiego jak `//NYI` zamiast `//Jeszcze nie zaimplementowano`? Ma to zalety, takie jak mniej "kodu" do wpisania (chociaż możesz użyć autouzupełniania skrótów) i możesz przeczytać coś takiego jak `NYE` szybciej niż coś takiego jak `Jeszcze nie zaimplementowano`, zakładając, że jesteś świadomy skrót i jego (nieskrócone) znaczenie. Sam byłbym z tym ostrożny, o ile nie jest to projekt, w którym na pewno będę jedynym deweloperem.


title: Czego młodszy programista powinien oczekiwać od swojego starszego lidera zespołu?

text: Zastrzeżenie: Wyrażone opinie są wyłącznie moimi własnymi i nie wyrażają poglądów ani opinii mojego pracodawcy. Pracuję dla małej firmy, w której niewiele osób jest programistami, inni QA/Testami, a 1 jest Managerem. Dołączyłem do tej firmy 1,5 roku temu. 3 starszych programistów ma ponad 8-letnie doświadczenie. Oto spostrzeżenia, które poczyniłem na temat lidera zespołu. (uważa mnie za nowszego z mniejszym doświadczeniem w porównaniu do nich we wszystkich aspektach) 1. Nigdy nie dyskutują 1:1 lub nigdy nie biorą pod uwagę sugestii młodszej (zgadzam się, że to zależy od nich, czy to zaakceptują, czy nie, przynajmniej oni powinien rozważyć opinię). 2. Jako starszy lider zespołu mogą próbować refaktoryzować bazę kodu za pomocą nowych technologii (w tym czynnik wdrażania nowych technologii jest możliwy, a inni programiści i infrastruktura również są gotowi), ale ci liderzy zespołu czują się mniej niepewnie w pracy z nowymi technologiami , ponieważ nie są aktualne. (powodem, dla którego mówię, nie wiedzą, jaki jest obecny trend w programowaniu, *(takie jak popularne projekty open source, takie jak modernizr, bootstrap i wiele innych). 3. W naszej bazie kodu powtarza się ponad 10000 linii, więc powiedziałem im o `DRY: Don't Repeat yourself`. Ich odpowiedź brzmiała: „To fascynujący artykuł, ale nigdy nie działa w praktyce”. Powiedziałem im tylko, że jeśli nie zrobimy tego w 100% DRY, możemy przynajmniej użyć interfejsów, ale to również nie było brane pod uwagę. *(interfejsy mogą być dodawane dla nowych funkcji, nie dotykając poprzedniej bazy kodu, jeśli nie są gotowi do refaktoryzacji) 4. Wszyscy starsi programiści zajmują się konserwacją i naprawą poprawek na gorąco. po prostu wydają na serwisy rozrywkowe. Po prostu są szczęśliwi, że ukończą zadanie. 5. Wprowadzanie nowej technologii jest złe? *(w tym czynnik wykonalności można zrobić). 6. Menedżer również najmniej przejmuje się rzeczami, o których mówię. 7 Junior oczekuje, że będzie mógł nauczyć się wielu rzeczy od lidera zespołu.*(nie prosząc o pomoc lub sen lub kodowanie dla nich). Moje pytania to: 1. Czy nie jestem zbyt agresywny wobec proponowanych przeze mnie zmian? 2. Czego powinienem oczekiwać od starszych liderów programistów, którzy mają ponad 8-letnie doświadczenie? 3. Czy nie mam racji oczekując, że będę się uczyć i zdobywać doświadczenie od firmy? Aktualizacja : Dlaczego uważają, że SUCHY jest niepraktyczny: ponieważ nie chcą angażować się w koncepcje OOP. Są zadowoleni z powtarzania zadań. Proponuję nowe technologie: 1. Wykorzystanie Minifikacji obrazów CSS, JS, SPrite 2. Wykorzystanie interfejsów i frameworka .net 4, generyków i wielu innych. 3. Biblioteki po stronie klienta, takie jak modernizr, knockout js, bootstrap do responsywności,


title: Kto używa architektury MVVM do dużych aplikacji?

text: Obecnie pracuję nad aplikacją LOB opartą na architekturze MVVM. Patrząc na odpowiedzi na zadawane przeze mnie pytania, wydaje się, że niewiele osób tworzy _duże_ i/lub _złożone_ aplikacje w MVVM. Mam nadzieję, że jest wielu z was, którzy zbudowali takie zwierzęta. Jeśli tak, czy zauważyłeś, że MVVM skaluje się?


title: Byłem na kursie C# i mam problemy z zapamiętywaniem rzeczy?

text: Jestem praktykantem i byłem na kilku szkoleniach w C#, zrozumiałem pojęcie programowania w C# i objętego dziedziczenia itp., ale kiedy przyszedłem do kodowania do moich zajęć, „muszę zrobić koszyk na zakupy i zapisz zawartość do pliku .txt" Po prostu nie wiem, co robić, jakbym nie miał pojęcia, jak programować. Mam kopię produktu końcowego, poza tym, że została zmieniona, więc nie możemy skopiować jej w całości, więc po prostu korzystam z kodu i tak naprawdę nie rozumiem wszystkiego, co się dzieje. Po prostu wydaje mi się, że nie chcę programować, jakbym był w innym nastawieniu, po prostu wydaje mi się, że jestem pusty na myśl o stworzeniu prostego programu od zera i nie mam pomysłu, od czego zacząć? Czy ktoś ma jakieś pomysły na pomoc? :) dzięki


title: Nie wiem, jak dodać wspólne funkcje do moich obiektów biznesowych za pomocą DTO/DDD?

text: Stworzyłem kilka projektów, aby stworzyć lepszy podział mojego kodu: Mam przenośną bibliotekę klas skierowaną do wszystkich frameworków, które zawierają tylko podstawowe DTO (automatycznie generowane w bazie danych). Te DTO będą zawierać podstawowe adnotacje danych dla klasy reprezentującej tabelę. Na przykład: [DataContract] public class OrderDetail { [DataMember] public virtual int Id { get; ustawić; } [DataMember] [Required] [StringLength(32)] publiczny wirtualny łańcuch OrderCode { get; ustawić; } [DataMember] public virtual DateTime DataZamówienia { get; ustawić; } [DataMember] public wirtualny DateTime? Data Wysyłki { get; ustawić; } } * * * Teraz problem, jaki mam, polega na tym, że chcę utworzyć „obiekt biznesowy” i zapewnić wspólne funkcje, takie jak n-poziomowe Cofanie/Ponawianie, oznaczanie obiektów podrzędnych do usunięcia itp. Sposoby, o których mógłbym pomyśleć wygląda to następująco: **Opcja 1** : Dziedzicz DTO, aby dodać dodatkowe elementy (zbuduj wykres obiektów). Potrafię używać częściowych klas i interfejsów, a nawet niektórych AOP, aby zaimplementować wspólne funkcje. Na przykład: // OrderDetail.generated.cs: Auto-Generated/T4 public zapieczętowana część klasy OrderDetail : DTO.OrderDetail, IUndoRedo { // Wspólne funkcje zakodowane tutaj (tj. n-poziomowe Cofnij/Ponów) } // OrderDetail.cs: Kod niestandardowy [DataContract] public zapieczętowana częściowa klasa OrderDetail { [DataMember] [Required] public Address ShippingAddress { get; ustawić; } [DataMember] [Wymagane] [Cardinality(1, Cardinality.Infinity)] public ICollection<ProductDetail> Produkty { get; ustawić; } } Problem polega na tym, że każde automatycznie generowane rozszerzenie obiektu biznesowego każdego DTO (`OrderDetail`, `Address`, `ProductDetail` itd.) musi mieć dostępne wspólne funkcje biznesowe (tj. Cofnij/Ponów), ale nie mogą dziedziczyć z jakiegoś rodzaju klasy `BusinessBase`, ponieważ dziedziczą z DTO. **Opcja 2** : Dziedzicz każdy obiekt biznesowy z klasy abstrakcyjnej `BusinessBase`, która ma już wbudowane wspólne funkcje. Następnie po prostu zawinąć właściwości DTO i ponownie je odsłonić? [DataContract] public abstract class BusinessBase : IUndoRedo { // Wspólne funkcje zakodowane tutaj (np. n-poziomowe Cofnij/Ponów) } [DataContract] public zapieczętowana klasa OrderDetail : BusinessBase { // Wrapped Properties private Dto.OrderDetail Dto { get; ustawić; } [DataMember] [Required] [StringLength(32)] public string OrderCode { get { return Dto.OrderCode; } ustaw { Dto.OrderCode = wartość; } } // etc ... // Właściwości niestandardowe (Object-Graph) [DataMember] [Required] public Address ShippingAddress { get; ustawić; } } Problemem są wszystkie opakowane DTO i brakuje im dziedziczenia, więc „Biznesowa” wersja OrderDetail nie jest typem DTO OrderDetail, a opakowane właściwości mogą stać się zbędne. Naprawdę utknąłem w tym, co należy tutaj zrobić, czy jedna opcja jest lepsza, czy może jakiś inny sposób zrobienia tego, który nie został uwzględniony (opcja 3, 4, 5 itd.)?


title: Jak wizualizować projekt programu, aby przekazać go innym?

text: Projektuję (ponownie) kilka pakietów dla R, a obecnie opracowuję niezbędne funkcje, obiekty, zarówno wewnętrzne, jak i dla interfejsu z użytkownikiem. Udokumentowałem poszczególne funkcje i obiekty. Więc mam opis wszystkich małych części. Teraz muszę omówić sposób, w jaki części do siebie pasują. Schemat silnika że tak powiem. Zacząłem od tworzenia w Visio wykresów przypominających schemat blokowy, ale szybko stało się to niezdarną i bezużyteczną kolekcją pudełek, strzałek i czego nie. Stąd pytanie: * Czy istnieje konkretne oprogramowanie, którego możesz użyć do wizualizacji projektu swojego programu * Jeśli tak, podziel się wskazówkami, jak zrobić to najskuteczniej * Jeśli nie, w jaki sposób inni projektanci tworzą schemat swoich programów i przekazać to innym? * * * Edycja: NIE pytam jak wyjaśnić komuś złożone procesy, ani jak zilustrować logikę programowania. Pytam jak **przekazać** **projekt** programu/pakietu, czyli: * obiekty (z kluczowymi cechami i reprezentacją jeśli to możliwe) * powiązane funkcje (z argumentami i funkcją jeśli to możliwe) * współzależność między funkcjami w interfejsie a funkcjami wewnętrznymi (mówię o pakiecie rozszerzeń dla języka skryptowego, miej to na uwadze) Więc coś takiego: ![tutaj wstaw opis obrazka](http://i.stack .imgur.com/pohJ4.png) Ale lepiej. To jest (część) wzajemnych relacji między funkcjami w starym pakiecie, który teraz przeprojektowuję z oczywistych powodów :-) PS : Sam stworzyłem ten wykres, używając narzędzi do ekstrakcji kodu ze źródła i dostarczając macierz powiązań do edytora wykresów yEd .


title: Jak nauczyć się przekładać rzeczywiste problemy na kod?

text: Jestem trochę początkujący w Javie i OOP i nie do końca zrozumiałem całą koncepcję zobaczenia prawdziwego problemu i przetłumaczenia go na klasy i kod. Na przykład czytałem książkę o UML i na początku autor bierze przykład gry w kółko i krzyżyk i mówi: „W tym przykładzie naturalnie widać trzy klasy: Board, Player i Position”. Następnie tworzy metody w każdej klasie i wyjaśnia, w jaki sposób są one powiązane. Nie mogę zrozumieć, jak on to wszystko myślał. Więc od czego powinienem zacząć się uczyć, jak widzieć problem w prawdziwym świecie, a następnie „przetłumaczyć” go na kod?


title: Nauka MVC - Dlaczego dom i temat współdzielą ten sam kontroler?

text: Zacznę od tego, że od jakiegoś czasu jestem programistą formularzy internetowych asp.net i rozumiem, że mvc to nowy sposób robienia rzeczy. Kiedy uczę się mvc i przechodzę przez samouczki i filmy szkoleniowe, mam pytania, których te samouczki nie dotyczą. Oto moja próba rozwiązania ich tutaj... Rozpocząłem nowy projekt z nowym szablonem aplikacji internetowej w Visual Studio. Rozglądam się po projekcie, próbując owinąć głowę wokół paradygmatu mvc i zauważam, że jest strona główna i informacje. W widokach znajduje się plik dla każdej z tych dwóch stron. To ma sens. Ale dlaczego mają ten sam kontroler? Myślę, że miałoby sens, gdybym miał kilka ekranów, które edytują/wyświetlają/usuwają tę samą tabelę danych, ale strona główna i strona z informacjami niekoniecznie mają ze sobą coś wspólnego. Czy to oznacza, że jeśli tworzę inne strony, które nie wymagają pełnego kontrolera (takiego jak mapa witryny lub coś takiego), powinienem po prostu wkleić ich widoki w folderze widoków „Strona główna”? To po prostu nie wydaje się właściwe. Wiem, że te podstawowe rzeczy nie są aż tak wielkie, ale to jest rodzaj rzeczy, które mnie denerwują. Z góry dziękuję za wyjaśnienie!


title: Jak zostać „szybszym” programistą?

text: Moja ostatnia ocena pracy zawierała tylko jeden słaby punkt: terminowość. Już wiem, co mogę zrobić, aby to poprawić, ale to, czego szukam, to więcej. Czy ktoś ma wskazówki lub porady, co zrobić, aby zwiększyć szybkość produkcji bez poświęcania jej jakości? Jak oceniasz terminy i się ich trzymasz? Co robisz, aby zrobić więcej w krótszym czasie? Wszelkie opinie są bardzo mile widziane, dzięki,


title: Jakie są unikalne aspekty cyklu życia oprogramowania ataku/narzędzia na lukę w oprogramowaniu?

text: Na moim lokalnym uniwersytecie jest mały studencki klub komputerowy liczący około 20 studentów. Klub ma kilka małych zespołów z określonymi obszarami zainteresowania, takimi jak rozwój mobilny, robotyka, tworzenie gier i hacking / bezpieczeństwo. Wprowadzam kilka podstawowych koncepcji programowania zwinnego do kilku zespołów, takich jak historyjki użytkownika, szacowanie złożoności zadań i ciągła integracja w celu kontroli wersji i zautomatyzowanych kompilacji/testów. Jestem zaznajomiony z podstawowymi cyklami rozwoju oprogramowania, takimi jak wodospad, spirala, RUP, agile itp., ale zastanawiam się, czy istnieje coś takiego jak cykl rozwoju oprogramowania do hackowania / łamania zabezpieczeń. Z pewnością hakerzy piszą kod komputerowy, ale jaki jest cykl życia tego kodu? Nie sądzę, aby byli zbyt zajęci konserwacją, ponieważ po wykryciu i załataniu naruszenia kod, który wykorzystał to naruszenie, jest bezużyteczny. Wyobrażam sobie, że cykl życia będzie wyglądał następująco: 1. Znajdź lukę w zabezpieczeniach 2. Wykorzystaj lukę w zabezpieczeniach 3. Pozyskaj ładunek 4. Wykorzystaj ładunek ** Jakie różnice (jeśli występują) występują w cyklu życia oprogramowania oprogramowanie, gdy celem produktu jest naruszenie bezpieczeństwa?**


title: Co jest łatwiejsze do zrobienia z aplikacjami internetowymi w porównaniu z natywnymi aplikacjami GUI?

text: Mam wrażenie, że coraz więcej aplikacji z interfejsem użytkownika wykorzystuje HTML+CSS+JavaScript po stronie klienta zamiast natywnego frameworka GUI. Zastanawiam się, jakie są najważniejsze siły napędowe tego? lub innymi słowy, czego brakuje natywnym frameworkom GUI, aby być konkurencyjnym? np. czy łatwiej jest robić coś z HTML+CSS+JavaScript niż z natywnymi frameworkami GUI. Jeśli założymy, że aplikacja jest aplikacją klient-serwer, w której klient ma graficzny interfejs użytkownika. **Jakie są najważniejsze rzeczy, które są łatwiejsze do zrobienia w HTML+CSS+JavaScript niż w najpopularniejszych natywnych frameworkach GUI?**


title: Wykonywanie pracy w odpychaniu wektora

text: Często używam następującej składni: std::vector<foo> vec; vec.push_back( someClass.getFoo(...).modifyAndReturn() ); Biorąc pod uwagę bezpieczeństwo wyjątków, cytuję normę dotyczącą zachowania wypychania wektorów (23.3.7.5): > Jeśli wyjątek zostanie zgłoszony inny niż przez konstruktor kopiujący, konstruktor move >, operator przypisania lub operator przypisania move z T lub przez dowolny > Operacja InputIterator nie ma żadnych efektów. Jeśli wyjątek zostanie zgłoszony przez > konstruktora przeniesienia nie-CopyInsertable T, efekty są nieokreślone. * Czy stosowanie skomplikowanych odepchnięć jest dobrą praktyką? * Czy są jakieś niebezpieczeństwa, mądre?


title: Walidacja i autoryzacja w modelach domen oraz przenoszenie ich przez warstwę usług do MVC

text: W obecnym projekcie, nad którym pracuję, pojawia się pytanie o architekturę, które wydaje się, że może po prostu prosić o zbyt wiele. Podstawy systemu: * HTML/JS MVVM * Asp.net MVC * Usługi sieci Web * EF * SQL 2012 Usługi sieci Web obsługują obiekty DTO przekazywane tam iz powrotem do warstwy prezentacji (MVC lub aplikacja mobilna) lub do różnych innych usług zewnętrznych. **Wielkie pytanie** w tej chwili brzmi: czy można w jakiś sposób zdefiniować nasze **DTO** w taki sposób, aby **uwzględnić** wszystkie **Reguły walidacji i autoryzacji**. Należy to następnie przenieść na przykład do naszej warstwy prezentacji MVC lub modeli widoków. Pomysł polega na tym, że otrzymamy 1) Reguły walidacji w ViewModel, które następnie podłączamy do frameworka MVC 2) Tylko pola, które użytkownik może edytować, powinny być wyświetlane jako edytowalne. Niektórzy wspominali o Fluent lub innych mechanizmach, które będą składały się z dodatkowej klasy definicyjnej gdzieś używanej definiują te reguły, następnie podczas kompilacji kod może być wstrzykiwany do różnych klas modeli widoków lub generowane są klasy modeli widoków bazowych, z których można dziedziczyć. Ogólnym celem jest utrzymanie w jednym miejscu zasad walidacji i „autoryzacji danych” (czy użytkownik X może edytować pola 1, 2 i 3 w oparciu o swoje uprawnienia/role). Czy to naciąga, czy jest to możliwe?


title: Jaki jest mechanizm leżący u podstaw va_list i gdzie jest zdefiniowany?

text: http://www.cplusplus.com/reference/cstdarg/va_list/ Zgodnie z powyższym odnośnikiem, `va_list` jest argumentem lub parametrem używanym w niektórych makrach - `va_start`, `va_arg`, `va_end`. Te makra znajdują się w pliku `stdarg.h`. Wiem, że `va_list` może przechowywać wiele wartości, ale jakiego rodzaju bytem jest `va_list`? Moje pytanie brzmi: jaki jest mechanizm leżący u podstaw `va_list`? Jak jest w stanie utrzymać wiele wartości? (Na przykład, tablica może przechowywać wiele wartości, a mechanizmem za nią jest wiele lokalizacji w pamięci, do których odwołują się wartości indeksu dolnego. Tablica jest predefiniowaną strukturą danych obecną w C.) Moje drugie pytanie brzmi: gdzie zdefiniowano `va_list`?


title: Czy lepiej jest użyć instrukcji switch lub bazy danych, aby przejrzeć 5 000 do 10 000 instancji?

text: Mam kilka danych JSON w tym formacie (na razie 5000 instancji): {"id":"123456","icon":"icon.png","caseName":"nazwa sprawy"} Zezwalam użytkownikowi na wyszukaj nazwę sprawy, a następnie zwróć im identyfikator i ikonę, a w niektórych sytuacjach **użyj** identyfikatora sprawy, aby uruchomić inne funkcje na podstawie wyszukiwania. Jak mam czytać te dane? Obecnie skłaniam się ku przełącznikowi, ponieważ chcę, aby przełącznik pozwolił mi zdefiniować wiele przypadków, dając mi ten sam wynik: nazwa sprawy i nazwa sprawy powinny zwrócić mi identyfikator 123456 Mogę łatwo użyć przełącznika opartego na string, wymieniając różne przypadki, aby to zrobić. Prawdopodobnie będzie to bardzo żmudne, ale to opcja. Moje opcje, które mogę sobie wyobrazić, są następujące: 1. Uruchom ogromny przełącznik na podstawie ciągu zapytania (prawdopodobnie w osobnym pliku PHP) 2. Zapisz ten wynik w bazie danych MySQL, a następnie na podstawie ciągu zapytania pobierz dane i prawdopodobnie muszę wykonać indeksowanie (co rozumiem, ale nie mam pojęcia, jak je zaimplementować). Chciałbym również przygotować się na scenariusz, w którym te 5000 instancji w pewnym momencie wzrośnie do 10 000 instancji. Jak najlepiej się do tego zabrać? Dziękuję.


title: Kod parsowania JSON testu jednostkowego?

text: W moim skromnym spojrzeniu na testowanie jednostkowe test jednostkowy testuje pojedynczą jednostkę kodu. Dla mnie oznacza to jedną klasę. Każda zależność dla tej klasy jest fałszowana w odpowiedniej klasie testowej i przekazywana w konstruktorze (lub wstrzykiwana za pośrednictwem kontenera DI). Pozwala to przetestować klasę w całkowitej izolacji od reszty systemu. Traktuję to jako ewangeliczną prawdę o tym, czym powinien być test jednostkowy. Jeśli testujesz wiele _prawdziwych_ klas (więcej niż jedna klasa w twojej klasie testowej nie jest próbą), to nie masz testu jednostkowego, masz test integracyjny. Biorąc pod uwagę ten punkt widzenia, są rzeczy, które _wydaje się_ wykraczać poza sferę testów jednostkowych, nawet jeśli wydaje się, że testujesz pojedynczą klasę. Jednym z tych typów testów są testy analizowania danych. Na przykład dana klasa danych: public class Person { private Name name; prywatny numer telefonu numer telefonu; adres prywatny adres; } rzekomy test jednostkowy następnie próbuje zweryfikować poprawność parsowania: @Test public void powinnoParsePerson() { String json = "{ json byłby tutaj }"; Osoba osoba = new Gson().fromJson(json, Person.class); attachThat(osoba.getName().getFirst()).isEqualTo("Jim"); // więcej asercji opartych na tym, jaki był JSON, byłoby tutaj } Czym tak naprawdę jest to testowanie? Dla mnie wydaje się, że testuje to, że Gson działa. Test jest ściśle powiązany zarówno ze strukturą JSON, jak i klasą w Javie, na którą jest mapowany. Czy naprawdę warto napisać test? Czy warto go utrzymać? To jest użyteczne? Czy test integracyjny w innym miejscu, który opiera się na kodzie parsującym, i tak nie wykryłby tego? Jest jeszcze jedno pytanie, które jest związane z moim pytaniem, ale w rzeczywistości jest inne, ponieważ pyta **jak** testować konsumentów w testach jednostkowych API, które otacza klasy trzeciej części, podczas gdy ja pytam, co stanowi prawidłowy test _unit_ która obejmuje klasę strony trzeciej. Moje pytanie ma bardziej filozoficzny charakter, drugie natomiast jest bardziej praktyczne. Moje pytanie można również rozszerzyć na takie rzeczy, jak testowanie kodu konfiguracyjnego, który niekoniecznie obejmuje klasy stron trzecich.


title: Związek OpenGL z OpenGL ES (3.0)

text: Zaczynam swoją przygodę z programowaniem graficznym i chcę nauczyć się OpenGL. Ponieważ jestem zielony do programowania graficznego, ale nie do C i C++, znajome pytanie pojawiło się, gdy spojrzałem na OpenGL i ES... Czy OpenGL jest nadzbiorem OpenGL ES? Przeczytałem w przewodniku ES 3.0, że używa implementacji opartych na shaderze, które istnieją jako część wbudowanych bibliotek OpenGL, i że ES unika używania podobnych/redundantnych bibliotek dostarczanych przez duży „ol OpenGL” ze względu na ograniczenia sprzętu mobilnego… Są oparte na shaderach implementacje, które są ogromną częścią OpenGL ES mniej wydajne rozwiązania podczas programowania na desktopie? CZY powinienem spojrzeć na te dwa interfejsy API jak na zupełnie różne bestie? dzięki z góry.


title: W jaki sposób właściciel produktu decyduje o sukcesie sprintu?

text: Oczywiście, jeśli właściciel produktu ocenia wyłącznie na podstawie tego, czy zaangażowane historie zostały wykonane, nie byłoby to dobre, ponieważ wtedy zespół po prostu zobowiąże się do mniejszej liczby historii w następnym sprincie. Z drugiej strony, jeśli zespół wykonał świetną robotę i przezwyciężył ogromne problemy techniczne, ale zobowiązania nie zostały dotrzymane, to też nie jest dobrze. Myślę, że jednak potrzebne są pewne środki, ponieważ jeśli nie ma informacji zwrotnej od właściciela produktu, zespół nie wie, co poprawić, jeśli w ogóle. Jakie więc, Twoim zdaniem, są kryteria sukcesu Sprintu?


title: Dlaczego Facebook używał C++ obok PHP?

text: Jaki jest główny powód, dla którego Facebook musiał używać C++ obok PHP? Zastanawiam się, czy jeśli tworzę stronę internetową z dużą ilością odwiedzających, czy musiałbym również używać C++?


title: Jak uwzględnić zmiany w bazie danych podczas publikowania aplikacji

text: Utrzymuję aplikację WinForms, która komunikuje się z bazą danych SQL Server. Czasami muszę zmienić schemat bazy danych (na przykład zmienić procedurę sql lub dodać nową). W tym celu mam plik SchemaChange.sql, w którym umieszczam odpowiedni kod sql. Kiedy tworzę instalator dla mojego projektu, tworzony jest pakiet msi. Zawiera moją aplikację, odwoływane zestawy, zestawy COM+,... Wraz z pakietem msi dostarczam plik SchemaChange.sql, który musi być uruchomiony na produkcyjnym serwerze sql. Czasami jednak zapominam coś dodać do pliku SchemaChange.sql podczas developmentu lub zapominam wykonać to na serwerze produkcyjnym po aktualizacji aplikacji na maszynach klienckich. Jakieś rady, jak to zautomatyzować, aby uniknąć dalszych problemów?


title: Gdzie są przechowywane wartości null, czy w ogóle są przechowywane?

text: Chcę dowiedzieć się o wartościach null lub referencjach null. Na przykład mam klasę o nazwie Apple i stworzyłem jej instancję. Jabłko moje Jabłko = nowe Jabłko("pyszne"); // Dane są przechowywane w pamięci Potem zjadłem to jabłko i teraz musi być null, więc ustawiłem je jako null. moje jabłko = null; Po tym telefonie zapomniałem, że go zjadłem i teraz chcę sprawdzić. bool isEaten = (moje jabłko == null); Gdzie w tym połączeniu odwołuje się myApple? Czy null jest specjalną wartością wskaźnika? Jeśli tak, jeśli mam 1000 obiektów o wartości null, czy zajmują one 1000 miejsca w pamięci obiektu lub 1000 miejsca w pamięci typu int, jeśli uważamy, że typ wskaźnika to int?


title: Adresowalna jednostka pamięci

text: Z Wikipedii: > termin endian lub endianness odnosi się do kolejności pojedynczych > **adresowalnych** podkomponentów w dłuższym elemencie danych przechowywanych w > pamięci zewnętrznej (lub czasami wysyłanych przez połączenie szeregowe). Te pod- > składniki to zazwyczaj **16- lub 32-bitowe słowa, 8-bitowe bajty, a nawet bity**. Zastanawiałem się, co oznacza „adresowalny”? Na przykład w C najmniejszym adresowalnym jest bajt/znak. Jak bit może być adresowalny? Dziękuję i pozdrawiam!


title: Warunki dla programistów

text: Niedawno poproszono mnie o wykonanie prac rozwojowych dla start-upu. Facet poprosił o moje warunki. Będąc nowicjuszem w branży, jakie informacje powinienem/powinnam w tym zawrzeć? Oczywiście stawki płac i być może informacje o własności Własności Intelektualnej. Czy jest coś, czego mi brakuje?


title: Jakie jest dobre wprowadzenie do architektury chmury obliczeniowej?

text: Jakiś czas temu próbowałem przeczytać o Google App Engine, z jego strony i z artykułu Wikipedii. Zdałem sobie sprawę, że nie tylko nie rozumiałem, co to robi, ale nawet nie wiedziałem, jaki problem rozwiązuje. Jestem kompetentnym programistą w różnych językach, ale mam niewielkie doświadczenie z dużymi frameworkami. Czy istnieje książka/strona, która wyjaśnia przetwarzanie w chmurze w sposób podobny do tego, w jaki „Programming with POSIX Threads” wyjaśnia wątki, tj. identyfikowanie konkretnych problemów i mechanikę ich rozwiązywania z perspektywy programisty? Mam tendencję do bycia osobą na niskim poziomie bitów-bajtów-i-adresów-pamięci, więc abstrakcyjne wyjaśnienia architektury zwykle przyprawiają mnie o zawroty głowy i niepokój. Przypuszczam, że przetwarzania w chmurze nie można zrozumieć na poziomie bajtów, ale im niżej, tym lepiej je zrozumiem.


title: W jakim celu mogę używać c++, aby zwiększyć swoje umiejętności?

text: Chcę się uczyć nowych rzeczy. Początkowo byłem programistą PHP. Wtedy pomyślałem, że to nie wystarczy. Potem zacząłem się uczyć Javy. Nauka zajęła mi 3 miesiące. Java, J2EE, Spring, Hibernte, Spring Security, Spring Roo i wiele wzorców projektowych MVC i inne takie jak AOP, DI . Nigdy wcześniej tego nie wiedziałem, ale wpadłem na pomysł, co J2EE. Po 3 miesiącach wykonałem prostą stronę z formularzem rejestracyjnym zintegrowanym z Spring Security. Chciałem zrobić w nim jeden kompletny projekt, ale to było dla mnie za dużo i nie chciałem spędzać nad nim więcej czasu, ponieważ wtedy muszę go również hostować, więc zostawiłem to. Potem zacząłem uczyć się Pythona i zrobiłem kilka skryptów administracyjnych sys, potem Django i teraz kończę kompletną aplikację webową w Pythonie. Teraz chcę się nauczyć C++, ale wcześniej muszę się dowiedzieć, co mogę z nim zrobić. Tak jak wiem, że Python jest bardzo przydatny, ponieważ mam własne serwery, więc mogę pisać skrypty i strony internetowe, więc Python jest dla mnie dobry. Ale nie wiem, w jakich obszarach C++ może mi pomóc. Nie chcę skończyć tak, jak w Javie, gdzie albo mam duże projekty, albo nic do codziennego użytku.


title: Wskazówki, jak odnieść sukces w nowej pracy w mojej sytuacji

text: Oto moja sytuacja: * Przechodzę do nowej firmy w nowym mieście jako inżynier [kod, test, wydajność itp.]. * Nie odniosłem szczególnego sukcesu w mojej poprzedniej roli [przynajmniej nie według mojego bezpośredniego przełożonego] i ostatecznie zdecydowałem się odejść na dobrych warunkach. * Nowa praca jest ekscytująca [jeszcze jej nie zaczęłam]. Jestem pierwszym inżynierem w tym nowym zespole i nie ma istniejącego kodu do tego, nad czym chciałbym pracować, z wyjątkiem starego prototypu. * Muszę ściśle współpracować z siostrzanymi zespołami, aby uruchomić mój produkt. * Mam termin przeglądu wyników w ciągu 5 miesięcy. Pod koniec będę musiał wziąć kilka tygodni urlopu. Trochę się tym martwię, ponieważ myślę, że 5 miesięcy to dla mnie za mało czasu na bootstrapowanie i pokazywanie wczesnych sukcesów. * Pracuję w nowej przestrzeni, której nie znam, chociaż stos to głównie Java, Apache itp., Co jest dla mnie wygodniejsze niż inne stosy. Obecnie czytam _Pierwsze 90 dni_, chociaż jest on bardziej skupiony na przywództwie niż na inżynierach. Jestem inżynierem, a nie menedżerem, chociaż chciałbym w przyszłości przenieść się na stanowiska kierownicze w swojej karierze. Dziękuję za wkład i dodam więcej szczegółów, jeśli ktoś o to poprosi.


title: jak zacząć naprawiać błędy w oprogramowaniu open source

text: Jestem studentem i mam dobrą wiedzę w zakresie programowania w C i lubię wnosić swój wkład w każdy projekt open source, który jest rozwijany w C. Przeszukałem sourceforge i wybrałem 7-Zip, ponieważ jest on powszechnie używany i rozwijany w C. Pomyślałem, że najpierw naprawię błędy (co było sugerowane przez wiele osób na swoich stronach internetowych) i przeszedł kilka błędów, ale nie mogłem zrozumieć, jak na nie odpowiedzieć i jak zacząć je naprawiać. Nic nie rozumiałem. Czy mógłbyś wyjaśnić, jak do tego podejść.. Przejrzałem nawet niektóre pliki w kodzie źródłowym, które pobrałem, ale niczego nie zrozumiałem. Proszę pomóż mi!


title: Jak aktualizujesz informacje o prawach autorskich?

text: Teraz jest rok 2011, a ponieważ kontynuuję kodowanie w naszych aktywnych projektach, nadszedł czas na aktualizację niektórych informacji o prawach autorskich. np. Copyright Widgets Ltd 2010 na Copyright Widgets Ltd 2010, 2011 Moje pytanie brzmi, kiedy aktualizujesz informacje o prawach autorskich? * Czy zmieniasz informację w nagłówku pliku podczas pierwszej pracy nad tym plikiem? * Ponieważ moduł to jeden fragment kodu składający się z wielu współpracujących ze sobą plików, czy aktualizujesz wszystkie powiadomienia w tym module, gdy zmieniasz pojedynczy plik w tym module? * Ponieważ program jest jednym fragmentem kodu (może składać się z wielu modułów), czy aktualizujesz wszystkie powiadomienia w tym programie, gdy zmieniasz pojedynczy plik w tym programie? * A może po prostu przechodzisz i zmieniasz masowo przy porannej kawie, ponieważ masz zamiar zacząć programować i aktualizować rzeczy?


title: Dlaczego Bootstrap 3 zmienia camelCase na kreski - czy jest bardziej czytelny?

text: Zastanawiam się, jakie jest uzasadnienie decyzji Bootstrapa, aby w wersji 3.0 zmienić wszystkie nazwy wielbłądów na nazwy dzielone. Szukałem w Google i zajrzałem do kilku książek, ale opinie mogę znaleźć tylko w taki czy inny sposób - żadnych twardych danych. Czy są jakieś badania, które sugerują, że nazwy zmiennych w przypadku wielbłądów są bardziej czytelne niż myślniki, czy jest to tylko kwestia osobistych preferencji?


title: Rok przerwy na kursie informatyki

text: Z powodu okoliczności, na które nie mam wpływu, być może będę musiał wziąć rok przerwy na moim kursie informatyki na uniwersytecie. Kłopot polega na tym, że z powodu innych okoliczności, na przykład życia w szczerym polu, a nawet prac programistycznych na poziomie podstawowym, które wymagają ukończenia studiów, nie ma realistycznie zerowej szansy na znalezienie pracy w tym okresie. Co jeszcze mogę zrobić, aby w tym czasie znacząco rozwinąć swoją karierę zawodową lub edukację?


title: Co to jest ekspozycja systemów biznesowych?

text: Widziałem to ogłoszenie ogłoszone dla administratora db i jedną z rzeczy, których szukają, jest ktoś, kto może zademonstrować narażenie systemów biznesowych. Co oznacza ekspozycja systemów biznesowych? Czy wybrałem właściwy tag? Dziękuję


title: Java - tablica wielowierszowa

text: Oto moja sytuacja: firma ma x liczbę pracowników i x liczbę maszyn. Gdy ktoś jest chory, program ma dać jak najlepsze rozwiązanie ludzi na maszynach. Ale pracownicy nie mogą pracować na każdej maszynie. Potrzebuję kodu do tworzenia małych grup możliwych rozwiązań. to jest statyczny przykład private int[][] arrayCompetenties={{0,0,1,0,1},{1,0,1,0,1},{1,1,0,0,1}, {1,1,1,1,1,1},{0,0,0,0,1}}; => wiersz dla ludzi, a kolumny dla maszyn m1 m2 m3 m4 m5 m6 m7 p1 1 1 p2 1 1 1 1 p3 1 1 1 p4 1 1 1 p5 1 1 1 1 p6 1 1 1 1 p7 1 1 1 1 1 1 moje pytanie => jakim kodem łączę wszystkich ludzi z maszyną w grupach (wszystkie możliwości) jak: p1 -> m1 , p2->m2 , p3 -> m3 , p4->m4 , p5 -> m5 , p6->m6 p1 -> m1 , p2->m3 , p3 -> m3 , p4->m4 , p5 -> m5 , p6->m6 p1 -> m1 , p2->m4 , p3 -> m5 , p4 ->m4 , p5 -> m5 , p6->m6 p1 -> m1 , p2->m5 , p3 -> m3 , p4->m4 , p5 -> m5 , p6->m6 p1 -> m1 , p2-> m2 , p3 -> m3 , p4-> m4, p5 -> m5 , p6-> m6 .... potrzebuję pętli, ale jak? =D dzięki!


title: Różnice między symfony 2 i 1?

text: Zaczynam od symfony i chcę dowiedzieć się, skąd się wzięło symfony. Pod względem wyzwań architektonicznych. Jakie są architektoniczne lub filozoficzne różnice między symfony 2 i 1? Jakie zmiany sprawiają, że tak bardzo różni się od poprzedniej wersji punktowej?


title: Ile zarabia programista świadczący darmową usługę z darowizn?

text: Wiem, że to długofalowe pytanie, ale jeśli ktoś zarabia na darowiznach, czy podzieliłbyś się tym, ile zarabiasz na której usłudze/witrynie?


title: Czy istnieje sposób na zakwestionowanie lub zakwestionowanie słabych recenzji aplikacji na iPhone'a?

text: Problem: użytkownik pozostawił recenzję aplikacji na iPhone'a, która jest po prostu nieprawidłowa Pytanie: czy istnieje sposób na skontaktowanie się z recenzentem i a) wyjaśnienie, w jaki sposób to, co powiedzieli, jest nieprawidłowe i pomoże im w rozwiązaniu problemu lub b) zakwestionowanie recenzji?


title: Jak działa binarna aktualizacja delta?

text: Wydaje się, że zarówno Android, jak i iOS obsługują swoją aplikację z binarną aktualizacją delta. Ale jak to działa? Buduję program binarny, żadna z witryn dystrybucyjnych nie ma kodu źródłowego - skąd proces aktualizacji wie, co zostało zmienione?


title: Czy jest na to formuła?

text: TL/DR: Czy jest jakiś sposób na ustalenie, czy znane liczby między znaną liczbą początkową a końcową powinny być liczbami dodatnimi czy ujemnymi? Zajmuję się tworzeniem aplikacji w PHP, która potrafi importować i odczytywać pliki PDF. Pliki PDF są plikami finansowymi, takimi jak wyciągi bankowe z zapisami transakcji przychodzących i wychodzących z konta bankowego. Mam tylko pliki PDF do pracy, niestety żadnych innych formatów, takich jak CSV. Konwertuję plik PDF na HTML za pomocą pdftohtml i zaczynam analizować dane, zamierzonym wynikiem końcowym jest tablica transakcji. Do tej pory mam go sprawnie zbierając daty, opisy i bilans. Konwersja XML zamiast tego nie pomaga. Istnieją inne dane transkrypcyjne, takie jak kwoty debetowe lub kredytowe. W pliku PDF kwota kredytu znajduje się w jednej kolumnie, a kwota obciążenia w innej kolumnie, więc w pliku PDF jest to całkiem jasne. Jednak po konwersji do HTML formatowanie jest tracone i dlatego nie wiem, czy kwota była kwotą kredytu czy debetu. Tak więc moje pytanie brzmi, czy biorąc pod uwagę saldo początkowe i saldo końcowe oraz kilka znanych liczb pomiędzy nimi, czy możliwe jest, aby program działał, jeśli te znane liczby pomiędzy są kwotami kredytu lub debetu? Wyobrażam sobie, że potencjalnie może istnieć kilka kombinacji tych znanych wartości, aby osiągnąć saldo końcowe, więc chciałbym zastosować formułę, aby zwrócić poprawną sekwencję kredytową/debetową tylko wtedy, gdy jest to jedyne możliwe rozwiązanie. Jeśli istnieje kilka sposobów dodawania/odejmowania znanych wartości w celu osiągnięcia salda końcowego, mogę poprosić użytkownika, aby spojrzał na to ręcznie, ale chciałbym ograniczyć to do minimum, jeśli to możliwe. Możliwe do zrobienia, myślisz? Z góry dziękuję za wszelką pomoc.


title: Czy powinienem używać głównej przestrzeni nazw?

text: Obecnie pracuję nad kilkoma projektami w Flash ActionScript i budowałem małą bibliotekę klas. Używałem konwencji nazewnictwa podobnej do: `foo.events.Bar` i `foo.controls.Baz`, ale zauważyłem, że wiele osób wydało swoje biblioteki w pakietach `com` i `org`/ przestrzeń nazw (np. `com.foo.events.Bar` i `com.foo.controls.Baz`). Zakładam, że słowo „com” to „wspólny” lub „społeczność”, a „org” to „organizacja”. Czy istnieje jakiś konkretny powód, aby dodać _additional_ przestrzeń nazw? Czy jest to powszechne w przypadku języków z przestrzenią nazw (Java, C#, AS3,...)?


title: Rozsądna konserwacja, czy „inne chwile” bez interweniujących aparatów są uważane za bezpieczne?

text: Czy `else while` bez nawiasów klamrowych uważa się za „bezpieczną” konserwację? Pisanie kodu `if-else` bez nawiasów klamrowych, jak poniżej... if (blah) foo(); w przeciwnym razie bar(); ...niesie ryzyko, ponieważ brak nawiasów klamrowych bardzo ułatwia nieumyślną zmianę znaczenia kodu. Czy jednak poniżej też jest ryzykowne? if (blah) { ... } else while (!bloop()) { bar(); } A może `else while` bez nawiasów klamrowych jest uważana za „bezpieczną”?


title: Jak udokumentować protokół komunikacyjny nad kolejkami i kanałami wiadomości?

text: Obecnie pracuję nad dużym projektem i próbuję udokumentować protokół komunikacyjny, który znajduje się na szczycie oprogramowania pośredniczącego kolejki wiadomości. Dokumentacja przeznaczona jest dla innej organizacji, która będzie wdrażać u klienta nowy back-end. Format wiadomości używa buforów protokołu, więc mniej interesuje mnie opisywanie formatu drutu. Interesuje mnie dokumentowanie interakcji pomiędzy serwisem a klientem. Typowa interakcja może wyglądać tak: 1. Klient subskrybuje kanał 1 2. Klient przesyła RequestForStream do kolejki 1 3. Usługa odczytuje z kolejki 1 publikuje StreamResponse (zawierający punkt końcowy do zasubskrybowania, kanał 2) do kanału 1 i jeśli się powiedzie, rozpoczyna publikowanie powiadomień w kanale 2 4. Klient otrzymuje z Channel1 i subskrybuje Channel2 5. Więcej rzeczy... Jak najlepiej udokumentować takie scenariusze? Czy ktoś zna jakieś przykłady udokumentowanych interakcji z kolejkami i kanałami? Edycja: nie piszę kolejki wiadomości. Używam oprogramowania pośredniczącego podobnego do JMS o nazwie Nirvana. Chcę udokumentować aplikację zbudowaną na bazie systemu kolejki wiadomości. Edycja 2: W UML jak modelować kolejkę lub kanał? Czy pokażę je na diagramie sekwencji?


title: Dlaczego biblioteki oprogramowania nie rozwiązują wszystkich naszych problemów?

text: Programowanie modułowe i procedury oprogramowania wielokrotnego użytku istnieją od wczesnych lat sześćdziesiątych, jeśli nie wcześniej. **Istnieją w każdym języku programowania.** Koncepcyjnie biblioteka oprogramowania to lista programów, każdy z własnym interfejsem (punkty wejścia, punkty wyjścia, podpisy funkcji) i stan (jeśli dotyczy). Biblioteki mogą być wysokiej jakości, ponieważ moduły są skoncentrowane na rozwiązywaniu wąskich problemów, mają dobrze zdefiniowane interfejsy, a koszt można zamortyzować we wszystkich przyszłych programach, które kiedykolwiek będą z nich korzystać. Biblioteki są czysto addytywne: dodawanie nowych modułów nie wprowadza błędów ani ograniczeń w istniejących modułach. Dlaczego więc biblioteki oprogramowania nie rozwiązują wszystkich naszych problemów? Dlaczego nie możemy pisać oprogramowania jako jedynie kompozycji wysokiej jakości modułów oprogramowania? Czy możemy rozwiązać te problemy za pomocą bibliotek oprogramowania i uwolnić pełny potencjał tego niesamowicie potężnego mechanizmu do szybszego pisania wysokiej jakości programów? Czy te problemy są nierozerwalnie związane z bibliotekami i nigdy nie można ich rozwiązać? _Uwaga: W kilku komentarzach stwierdzono, że mam zbyt wiele pytań. Proszę traktować powyższe pytania jako prawdziwe pytania, a wszystko, co następuje, jako punkty do dyskusji._ To prawda, że biblioteki oprogramowania są szeroko stosowane. Niektóre języki programowania, takie jak C, Java i Python, mają ogromne biblioteki oprogramowania. Ale jest wiele problemów. 1. Niektóre dobrze znane języki mają mniej niż idealną obsługę bibliotek (np. C++, Lisp). W pewnym stopniu jest to łagodzone przez piggybacking na platformie maszyny wirtualnej (np. JVM, CLR). Pytanie uzupełniające, czy całe przyszłe oprogramowanie powinno być napisane dla platformy maszyny wirtualnej, aby zwiększyć obsługę bibliotek? Jest to problematyczne dla skryptów, które nie chcą każdorazowo ponosić kosztów uruchamiania maszyny wirtualnej. 2. Istnieje wiele „wymyślania koła na nowo”. Czy kiedykolwiek napisałeś moduł listy połączonej w C? Tak, oczywiście, że masz. Nie lubię pisać połączonych list w C, ale jaka jest alternatywa? 3. Czy daną bibliotekę (np. libfoo-0.1.2) można zaufać jako podstawę do napisania ważnego oprogramowania? Czy biblioteka została przetestowana, udokumentowana i czy implementuje potrzebne funkcje? Jak możesz powiedzieć? 4. Nauka API biblioteki może być równie czasochłonna, jak nauka zupełnie nowego języka programowania. 5. Jeśli w bibliotece zostanie wykryty błąd, jaka jest właściwa procedura naprawy błędu w twoim oprogramowaniu? Jak należy rozesłać poprawkę do wszystkich użytkowników biblioteki? 6. Jak należy budować i rozpowszechniać biblioteki? (Na przykład autotools najwyraźniej się myliły.) Wersjonowanie semantyczne jest dobre, ale jak można to zweryfikować i wyegzekwować? 7. Jak należy obsługiwać zależności biblioteczne? Czy możemy pobrać i zainstalować automatycznie? Czy wersje i licencje będą kompatybilne? 8. Czy licencja na daną bibliotekę jest zgodna z Twoim oprogramowaniem? Jak możesz powiedzieć? 9. Co powinieneś zrobić, jeśli biblioteka zostanie porzucona przed uruchomieniem oprogramowania? A co po uruchomieniu oprogramowania?


title: Zagnieżdżone style CSS ~ Gdzie wcześniej widziałem tę koncepcję?

text:
Nie mogę tego teraz znaleźć, ale czytałem to wcześniej na różnych blogach omawiających ten temat. Podam przykład i mam nadzieję, że jest jasny (choć może w ogóle niczego nie wyjaśniać). Biorąc pod uwagę ten fragment znacznika (umyślnie arbitralnie):

 Chociaż CSS może wyglądać tak : .myWrapper .img img {obramowanie: cienka czarna bryła;} .myWrapper .img {margines:10px;} .yourWrapper .img img {obramowanie: gruba czerwona kreska;} .yourWrapper .img {margines:20px;} Może też być napisane tak: .myWrapper { .img { margines:10px; img { obramowanie: cienka czarna bryła; } } } .yourWrapper { .img { margines:10px; img { obramowanie: gruba czerwona kreska; } } } Ale nie pamiętam, żebym widział, gdzie to było omawiane lub czy jest coś w pracy. Czy ktoś wie, o czym do diabła mówię? I nie sądzę, że to jest pytanie SO, bo umieściłbym je na SO.


title: Proces kompilacji aplikacji internetowej

text: Mam aplikację internetową z dużą ilością kodu JavaScript i CSS. Chcę zminimalizować kod CSS i JS za pomocą czegoś takiego jak UglifyJS. Nie chcę jednak programować ze zminifikowanym kodem i chcę, aby mój zespół pobierał tylko niezminifikowany kod. Jaki jest najczęstszy sposób robienia tego? Sądzę, że wypchnąłbyś zarówno kod zminifikowany, jak i niezminifikowany, a odwołanie do kodu miałoby tylko zminifikowane pliki. Czy większość ludzi tworzy wywołanie pliku BUILD, które uruchamia wszystkie pliki JS/CSS przez minifikator? Programiści musieliby wtedy uruchomić skrypt BUILD przed wciśnięciem go w prawo?


title: Dlaczego Golang wycofał pakiet „netchan”?

text: Wygląda na to, że pakiet "netchan" Golanga został wycofany. To sprawia, że myślę, że koncepcja „kanałów sieciowych” nie była jednak dobrą praktyką. (Dlaczego nie mieliby po prostu „niech tak będzie” inaczej?) Czy tak jest? A jeśli tak, to dlaczego?


title: Doświadczenia ludzi z Cloud Computing (przy użyciu Force.com)

text: Chciałbym poznać doświadczenia ludzi w pracy z APEX i platformą SalesForce.com, czy praca z nimi była łatwa? Jak bardzo jest podobny do Javy i C#? Co ci się podobało? Co ci się nie podoba? Poleciłbyś to? Czy uważasz, że przetwarzanie w chmurze ma długą, pomyślną przyszłość? Mój powód do pytania jest taki, że aktualnie szukam nowego stanowiska, które wiąże się z pracą z APEX na platformie SalesForce.com. Stanowisko mnie interesuje, ale chcę tylko spróbować zrozumieć, na co mogę się zapisać, jeśli chodzi o języki / platformę, ponieważ jest ona zupełnie inna niż to, z czym pracowałem wcześniej. Widziałem wiele filmów/postów na blogu online (głównie z ostatniego wydarzenia Dreamforce) i oczywiście są one bardzo pozytywne, ale właśnie po kilku doświadczeniach deweloperów, zarówno pozytywnych, jak i negatywnych. Przetwarzanie w chmurze uważam za bardzo ciekawy pomysł, ale ten temat jest dla mnie bardzo nowy. Stanowisko, na które patrzę, oferuje fantastyczną okazję, ale byłem tuż po opiniach na temat APEX i platformy, ponieważ nie mam doświadczenia w prawdziwym świecie z tym, co widziałem w filmach online. Myślę, że ostatecznie to, o co pytam, to: * Czy APEX i platforma SalesForce.com są dobre, aby się zaangażować? **Czy rozwój na Force.com to tylko ślepy zaułek kariery?** * Czy cloud computing to tylko fanaberia? A może ma długą przyszłość? Z góry przepraszam, jeśli jest to niewłaściwe miejsce na zadanie takiego pytania. Dziękuję


title: Czy korzystanie z oprogramowania śledzącego jest nielegalne?

text: Powiedzmy, że robię aplikację komputerową i interesuje mnie, czy nasze oprogramowanie naprawdę jest używane, czy nie. Czy w porządku jest wstawianie kodu, który śledzi, czy nasze oprogramowanie jest używane, jak długo i tak dalej? Należy pamiętać, że żadne informacje umożliwiające identyfikację osoby nie będą gromadzone, interesuje mnie tylko to, jak często i jak długo oprogramowanie jest używane. Informacje zostaną przesłane na nasz serwer w celu diagnozy. Co myślisz?


title: Kursy online skoncentrowane na nauce LISP-a dla początkujących?

text: Szukam kursu online, który mógłbym wykorzystać do nauki programowania w Lispie (zwłaszcza Scheme) od podstaw. Nie znalazłem niczego podobnego na Coursera/Udacity - jedyne źródło, jakie znalazłem, to MIT Openware, ale nie jestem pewien, czy jest to coś, co jest dostosowane do odbiorców online, a także fakt, że wykłady są oparte na pierwsza edycja, która nie jest tą, którą mam... Nie szukam jednoznacznych wykładów wideo - zestaw dobrych notatek z wykładów, z ćwiczeniami/zadaniami i jeśli to możliwe, egzamin na koniec byłby świetnym początkiem!


title: Czy ktoś może podać krótki przykładowy kod ładowania początkowego kompilatora?

text: Wykład Kena Thompsona o nagrodzie Turinga na temat „Reflections on Trusting Trust” daje dobry wgląd w to, jak kompilator C został stworzony w samym C. Chociaż rozumiem sedno sprawy, nadal nie dotarło do mnie. Więc ostatecznie, gdy kompilator zostanie napisany do analizy leksykalnej, parsowania drzew, analizy składni, generowania kodu bajtowego itp., ponownie pisany jest oddzielny kod maszynowy, aby robić to wszystko kompilator? Czy ktoś może wyjaśnić na małym przykładzie procedury? Bootstrapping na wiki daje dobry wgląd, ale tylko przybliżony pogląd na ten temat. PS: Wiem o duplikatach na stronie, ale okazało się, że są to przeglądy, o których już wiem


title: Czy istnieje wzorzec projektowy, który miałby zastosowanie do modeli ze zniżką?

text: Czy istnieją znane wzorce projektowe dotyczące wdrażania modeli rabatowych? Przez modele ze zniżką rozumiem co następuje: 1. Jeśli klient kupuje Produkt X, Produkt Y i Produkt Z, otrzymuje zniżkę w wysokości 10% lub 100 USD. 2. Jeśli klient kupi 100 jednostek Produktu X, otrzyma zniżkę w wysokości 15% lub 500 USD 3. Jeśli klient przyniósł w ciągu ostatniego roku ponad 100 000 USD, otrzymuje stałą zniżkę w wysokości 20% 4. Jeśli klient ma kupił 2 jednostki Produktu X, otrzymuje 1 jednostkę Produktu X (lub Produktu Y) za darmo. 5. ... Czy istnieje ogólny wzorzec, który można zastosować do obsługi wszystkich powyższych scenariuszy? Myślę o kilku modelach, ale nie mogę znaleźć jednego ogólnego.


title: Przykłady systemów autoryzacji opartych na uprawnieniach w .Net?

text: Próbuję dowiedzieć się, jak wykonywać role/uprawnienia w naszej aplikacji i zastanawiam się, czy ktoś zna dobre miejsce, aby uzyskać listę różnych systemów autoryzacji opartych na uprawnieniach (najlepiej z próbkami kodu) i być może listę plusy/minusy dla każdej metody. Widziałem przykłady używające prostych słowników, niestandardowych atrybutów, autoryzacji opartej na oświadczeniach i niestandardowych struktur, ale nie mogę znaleźć prostego wyjaśnienia, kiedy używać jednego z drugim i jakie są zalety/wady każdej metody. (Jestem pewien, że istnieją inne sposoby niż te, które wymieniłem ....) Nigdy wcześniej nie robiłem niczego skomplikowanego z uprawnieniami/autoryzacjami, więc wszystko to wydaje mi się trochę przytłaczające i mam problem z rozgrywką jakie przydatne informacje mogę wykorzystać, a jakie nie. Wiem, że jest to dla środowiska Windows przy użyciu usług C#/WPF i WCF. Niektóre kontrole uprawnień są wykonywane w usłudze WCF, a niektóre na kliencie. Niektóre są regułami biznesowymi, inne sprawdzają autoryzację, a inne są związane z interfejsem użytkownika (na przykład formularze, które może zobaczyć użytkownik). Mogą być bardzo ogólne, takie jak wartości logiczne lub liczbowe, lub mogą być bardziej złożone, takie jak zakres wartości lub lista elementów bazy danych do zaznaczenia/odznaczenia. Uprawnienia można ustawić na poziomie grupy, użytkownika, oddziału lub na poziomie niestandardowym, więc nie chcę używać autoryzacji opartej na rolach. Użytkownicy mogą należeć do wielu grup, a użytkownicy z odpowiednią autoryzacją są odpowiedzialni za tworzenie/utrzymywanie tych grup. Nierzadko tworzy się nowe grupy, więc nie można ich zakodować na stałe.


title: Odejście od .Net do Ruby i radzenie sobie bez intellisense

text: Próbuję nauczyć się Rubiego, jednak po prawie 10 latach spędzonych w stosie MS zmagam się bez inteligencji. Wypróbowałem RubyMine, który pomaga, ale idealnie chciałbym uwolnić się, co oznaczałoby brak RubyMine. Jak inni ludzie nauczyli się radzić sobie z zapamiętywaniem wszystkiego zamiast polegać na Ctrl-Space? Wszelkie rady są w tej chwili mile widziane, ponieważ czuję się bardzo głupio (proszę bez żartów z deweloperów MS ;))


title: Pytania do rozmowy kwalifikacyjnej dla nauczyciela programowania?

text: Moja rodzina szuka korepetytora z programowania/informatyki. Osobiście chcę nauczyć się Java lub innej marki programowania internetowego. Najlepiej opisuję mnie jako „zaawansowanego użytkownika komputera”. Nigdy nie programowałem w przeszłości i chciałbym mieć dobry start. Bardzo szybko się uczę i nie oczekuję, że korepetytor będzie musiał uczyć mnie ultra podstawowych rzeczy, których sam mogę się nauczyć. Mój syn też potrzebuje korepetytora z programowania. Właśnie dostał się do Carnegie Mellon jako kierunek informatyki. Ponieważ w przeszłości zajmował się tylko robotyką i matematyką, bardzo się denerwuje, że nie ma takiego samego poziomu wiedzy, jak jego przyszli koledzy z klasy. Potrzebuję pomocy w stworzeniu listy pytań, które można zadać potencjalnym korepetytorom i kryteriów, według których można ich oceniać. Dziękuję! Edycja: Do tej pory wymyśliłem tylko oczywiste... > 1. Gdzie otrzymałeś wykształcenie? > 2. Jakie języki znasz? > 3. Jak długo udzielasz korepetycji? > 4. Co sprawiło, że zdecydowałeś się zostać korepetytorem? > 5. Nad jakimi projektami oprogramowania pracowałeś? > 6. Jakie referencje możesz mi dać? > 7. Ile płacisz? >


title: Prawidłowo projektujesz internetowe systemy wtyczek, aby nie marnowały tylu zasobów?

text: Wiele systemów CMS, które w dużej mierze opierają się na stronach trzecich, często buduje systemy „wtyczki” lub „haki”, aby ułatwić programistom modyfikowanie działań bazy kodu bez edytowania plików podstawowych. Zwykle oznacza to wzorzec projektowy **Obserwator** lub **Zdarzenie**. Jednak, gdy spojrzysz na systemy takie jak wordpress, zobaczysz, że na każdej stronie ładują one jakiś plik _bootstrap_ z każdego z folderów wtyczki, aby sprawdzić, czy ta wtyczka będzie musiała uruchomić to żądanie. Jest to kiepski projekt, który powoduje, że systemy takie jak wordpress zużywają wiele dodatkowych MB pamięci na ładowanie i analizowanie niepotrzebnych elementów na każdej stronie. **Czy są na to alternatywne sposoby? Szukam pomysłów na budowanie własnego.** Na przykład, czy istnieje sposób na załadowanie tego wszystkiego raz, a następnie buforowanie wyników, aby Twój system wiedział, jak leniwie ładować wtyczki? Innymi słowy, system ładuje plik konfiguracyjny, który określa wszystkie zdarzenia, z którymi wtyczka chce się powiązać, a następnie zapisuje go na przyszłe żądania? Jeśli to również działa słabo, być może istnieje specjalna struktura plików, której można użyć do zgadywania, kiedy niektóre wtyczki nie są potrzebne do spełnienia żądania. Jakieś pomysły? Jeśli ktoś chce mieć przykład koncepcji „wtyczki”, może go znaleźć tutaj.


title: SVN: Praca z oddziałami przy użyciu tej samej kopii roboczej

text: Właśnie przenieśliśmy się z CVS na SVN. Mamy mały zespół i wszyscy sprawdzają kod w bagażniku i nigdy nie używaliśmy oddziałów do rozwoju. Każdy z nas ma katalogi na zdalnym serwerze deweloperskim z wyrejestrowaną bazą kodu. Każdy programista pracuje na własnej piaskownicy z powiązanym adresem URL, aby pobrać aplikację w przeglądarce (coś w rodzaju konfiguracji tutaj: Kompromisy między lokalnymi a zdalnymi przepływami pracy dla zespołu programistów internetowych). Zdecydowałem, że w moim obecnym projekcie użyję brancha, ponieważ obejmuje on wiele wydań. Wyciąłem już gałąź, ale używam tego samego katalogu, co pierwotnie wyewidencjonowany (tj. Dla pnia). Ponieważ jest to ten sam katalog (lub kopia robocza) dla gałęzi i pnia, jeśli np. błąd pojawia się w aplikacji. Przełączam się na magistralę i wprowadzam tam zmianę, a następnie przełączam się z powrotem do mojego oddziału w celu opracowania projektu. Moje pytania to: * Czy jest to rozsądny sposób pracy z oddziałami? * Czy są jakieś pułapki, o których muszę wiedzieć? * Jaki byłby optymalny sposób pracy z oddziałami, jeśli oddzielne kopie robocze nie wchodzą w rachubę? Nie miałem jeszcze problemów, ponieważ dopiero zacząłem robić w ten sposób, ale wszystkie samouczki/książki/posty na blogu, które widziałem na temat rozgałęziania z SVN, sugerują pracę z różnymi kopiami roboczymi (lub być może nie natknąłem się na wyjaśnienie mieszanych egzemplarze robocze w prostym języku angielskim). Po prostu nie chcę przepraszać za trzy miesiące, kiedy nadszedł czas, aby zintegrować gałąź z powrotem z pniem.


title: Poltergeist i fabryki

text: Właśnie natknąłem się na anty-wzorzec Poltergeista \- i może to dlatego, że poranna kawa jeszcze nie ruszyła, ale przeczytałem opis: > poltergeist (lub cygański wóz) to krótkotrwały, typowo bezpaństwowy przedmiot > używane do wykonywania inicjalizacji lub do wywoływania metod w innej, bardziej > trwałej klasie. i pomyślałem, że brzmi to jak niektóre implementacje Factory, które widziałem (i sam napisałem) - szczególnie w tworzeniu stron internetowych, gdzie Factory może być użyte tylko raz na żądanie. Niestety, artykuł wiki jest dość powierzchowny. Czy ktoś mógłby wyjaśnić nieco więcej o tym, jak należy wdrożyć Fabrykę, a także dlaczego Poltergeist jest antywzorcem.


title: Jak całkowicie odłączyć model od widoku/kontrolera w Java Swing?

text: Czy istnieje zbiór powszechnie uzgodnionych wytycznych projektowych dotyczących oddzielania klas Model od klas Widok/Kontroler w aplikacji Java Swing? Nie jestem tak zaniepokojony, że Widok/Kontroler nie wie nic o modelu, ale na odwrót: chciałbym zaprojektować mój Model tak, aby nie miał żadnej wiedzy o javax.swing. W idealnym przypadku powinien mieć prosty interfejs API umożliwiający sterowanie przez coś tak prymitywnego, jak CLI. Powinien to być, mówiąc luźno, „silnik”. Komunikowanie zdarzeń GUI do modelu nie jest zbyt trudne — wykonawcy akcji mogą wywołać interfejs API modelu. Ale co, gdy model wprowadza własne zmiany stanu, które muszą zostać odzwierciedlone z powrotem w GUI? Po to właśnie jest „słuchanie”, ale nawet „bycie wysłuchanym” nie jest całkowicie bierne; wymaga, aby model wiedział o dodaniu słuchacza. Konkretny problem, który dał mi do myślenia, dotyczy kolejki plików. Po stronie GUI znajduje się `DefaultListModel` za `JList` i jest trochę elementów GUI do wybierania plików z systemu plików i dodawania ich do JList. Po stronie modelu chce wyciągnąć pliki z dolnej części tej „kolejki” (powodując, że znikną z listy JList) i przetworzyć je w jakiś sposób. W rzeczywistości kod modelu jest już napisany — obecnie utrzymuje `ArrayList<File>` i udostępnia publiczną metodę `add(File)`. Ale nie wiem, jak sprawić, by mój model działał z widokiem/kontrolerem bez pewnych ciężkich, specyficznych dla Swinga modyfikacji modelu. Jestem bardzo nowy w programowaniu w Javie i GUI, do tej pory zawsze robiłem programowanie "wsadowe" i "back-endowe" - stąd moje zainteresowanie utrzymaniem ścisłego podziału między modelem a interfejsem użytkownika, jeśli jest to możliwe i jeśli to możliwe być nauczonym.


title: Stałe a właściwości publiczne dla konfiguracji

text: Moja aplikacja ma kilka opcji konfiguracyjnych wysokiego poziomu, takich jak katalogi, które będą używane do różnych rzeczy, informacje o połączeniu z bazą danych i kilka innych ustawień, które są wymagane do działania aplikacji. Zastanawiam się ze sobą, czy stałe są lepsze od zmiennych w tym celu i chciałbym mieć jakieś dane wejściowe. Posiadając: $config = new Config; nowe cokolwiek($config->foo, $config->bar); Zamiast: new Whatever(Config::FOO, Config::BAR); Otrzymuję moc polimorfizmu, mogę szybko przełączać się między ustawieniami konfiguracyjnymi, tworząc instancję $config jako inną klasę z tymi samymi członkami klasy. Oczywiście jest tu kompromis. Wszystko, co wymaga opcji konfiguracyjnych, musi tworzyć instancję obiektu $config, używając pamięci i tworząc dodatkowy kod, a także sprawiając, że opcje konfiguracyjne nie są długo niezmienne. Problem niezmienności można by rozwiązać m.in. $config->get('Foo'); więc potencjalnie nie stanowi to problemu, chociaż zwiększa to szczegółowość, a wywołanie metody jest droższe niż odczytywanie stałej lub zmiennej.


title: Czy to właściwy projekt OO dla C++?

text: Niedawno wziąłem udział w kursie dotyczącym procesów oprogramowania i jest to moja pierwsza próba samodzielnego projektowania OO. Staram się przestrzegać zasad projektowania OO i konwencji C++. Próbowałem i zrezygnowałem z MVC dla tej aplikacji, ale próbuję "oddzielić" moje klasy tak, aby można je było łatwo przetestować jednostkowo i abym mógł łatwo zmienić używaną bibliotekę GUI i / lub docelowy system operacyjny. W tej chwili skończyłem projektowanie zajęć, ale nie zacząłem jeszcze wdrażać metod. Funkcją oprogramowania jest rejestrowanie wszystkich wysłanych i odebranych pakietów oraz wyświetlanie ich na ekranie (jak WireShark, ale tylko dla jednego procesu lokalnego). Oprogramowanie osiąga to poprzez podłączenie funkcji send() i recv() do pliku winsock32.dll lub innej pary analogicznych funkcji w zależności od tego, jaki jest zamierzony cel. Hooki dodają pakiety do SendPacketList/RecvPacketList. Klasa GuiLogic uruchamia wątek, który sprawdza, czy są nowe pakiety. Gdy zostaną znalezione nowe pakiety, wykorzystuje klasę PacketFilter do określenia formatowania nowego pakietu, a następnie wysyła go do MainWindow, natywnego okna win32 (z zamiarem późniejszego przeniesienia do Qt).1 ![Diagram klas UML](http ://i.stack.imgur.com/dtPwP.png) Obraz w pełnym rozmiarze diagramu klas UML Oto moje klasy w formie szkieletu/nagłówka (to jest mój aktualny kod): class PacketModel { protected: std::vector<byte > dane; int id; publiczne: PacketModel(); PacketModel(bajt* danych, rozmiar int bez znaku); PacketModel(int id, bajt* dane, unsigned int rozmiar); int GetLen(); bool jest prawidłowy(); //len >= sizeof(opcode_t) opcode_t GetOpcode(); bajt* GetData(); //zwraca &(data[0]) bool GetData(byte* outdata, int maxlen); void SetData(bajt* pdata, int len); int GetId(); void SetId (identyfikator int); bool ParseData(char* instr); bool StringRepr(char* outstr); bajt&operator[] (const int index); }; class SendPacket : public PacketModel { protected: byte* returnAddy; public: byte* GetReturnAddy(); void SetReturnAddy(bajt* dodatek); }; class RecvPacket : public PacketModel { protected: byte* callAddy; public: byte* GetCallAddy(); void SetCallAddy(bajt* dodatek); }; //problem: pakiety mogą być dodawane do listy w dowolnym momencie przez dowolną liczbę wątków //rozwiązanie: sekcja krytyczna powiązana z każdą listą pakietów class Synch { public: void Enter(); nieważne Urlop(); }; template<klasa PacketType> class PacketList { private: static const int MAX_STORED_PACKETS = 1000; public: statyczna const int DEFAULT_SHOWN_PACKETS = 100; private: lista wektorowa<TypPakietu>; Synchronizacja synchronizacji; //opakowanie sekcji krytycznej public: void AddPacket(PacketType* package); PacketType* GetPacket(int id); int TotalPackets(); }; class SendPacketList : PacketList<SendPacket> { }; class RecvPacketList : PacketList<RecvPacket> { }; class Target //jedno gniazdo { bool Send(SendPacket* package); bool Inject (pakiet RecvPacket*); bool InitSendHook(SendPacketList* sendList); bool InitRecvHook(RecvPacketList* recvList); }; class FilterModel { private: opcode_t opcode; int kolorID; bool bFilter; nazwa znaku[41]; }; class FilterFile { private: filtr FilterModel; publiczne: nieważne Zapisz(); nieważne Load(); FilterModel* GetFilter(opcode_t opcode); }; class PacketFilter { private: Filtry FilterFile; public: bool IsFiltered(opcode_t opcode); bool GetName(opcode_t opcode, char* namestr); //zwróć false jeśli nazwa nie istnieje COLORREF GetColor(opcode_t opcode); //zwróć domyślny kolor, jeśli nie ma własnego koloru }; class GuiLogic { private: SendPacketList sendList; recvPacketList recvList; Filtr pakietów Filtr pakietów; void GetPacketRepr (pakiet PacketModel*); nieważne CzytajNowy(); nieważne DodajDoOkna(); public: void Odśwież(); //wywoływane z wątku void GetPacketInfo(int id); //wywoływane z MainWindow }; Szukam ogólnego przeglądu mojego projektu OO, korzystania z UML i korzystania z funkcji C++. Szczególnie chcę wiedzieć, czy robię coś bardzo złego. Z tego, co przeczytałem, recenzja projektu jest na temat tej witryny (i nie na temat witryny Code Review). Wszelkie opinie są bardzo mile widziane. Dzięki za przeczytanie tego.


title: Czym są niezmienniki, jak można ich używać i czy kiedykolwiek używałeś ich w swoim programie?

text: Czytam _Koderzy w pracy_ i dużo w nim mówi się o niezmiennikach. O ile zrozumiałem, niezmiennik to warunek, który obowiązuje zarówno przed, jak i po wyrażeniu. Przydają się między innymi do udowodnienia, że pętla jest poprawna, jeśli dobrze pamiętam mój kurs logiki. Czy mój opis jest poprawny, czy coś przeoczyłem? Czy kiedykolwiek używałeś ich w swoim programie? A jeśli tak, jakie korzyści odnieśli?


title: Wywiad na miejscu bez wywiadów telefonicznych - co to znaczy?

text: Niedawno złożyłem podanie o pracę w firmie technologicznej, która – zgodnie z moją najlepszą wiedzą – zwykle przeprowadza dwie rundy weryfikacji telefonu przed przyprowadzeniem kandydatów na rozmowę kwalifikacyjną na terenie kampusu. Skontaktowali się ze mną i chcą mnie wychować bez rozmowy telefonicznej. Wiem, że to nie jest wiele do zrobienia, ale czy powinienem wziąć to za dobrą monetę, czy powinienem coś w tym przeczytać? Nazwij mnie optymistą, ale wydaje mi się, że to coś pozytywnego. Może ktoś w środku polecił mnie bez mojej wiedzy? Lub znaleźli w moim CV/online coś, co im się podobało? A może jest jakiś limit wywiadów, które musieli wypełnić? Wszelkie spostrzeżenia od menedżerów zatrudniających / pracowników HR byłyby bardzo mile widziane. Jeśli jest to rzecz powszechna, która oznacza coś konkretnego, wiedza o tym może być na moją korzyść. Dziękuję! EDYCJA: Ponieważ kilka osób wydaje się wskazywać, że może to zależeć od firmy, o której mowa, załóżmy, że jest to duża firma krajowa (choć nie Google ani Microsoft) i że nie mieszkam nigdzie w pobliżu siedziby (chodzi o tak daleko jak dwa miejsca mogą być w kontynentalnych Stanach Zjednoczonych).


title: Czy są problemy z używaniem Reflection?

text: Nie wiem dlaczego, ale zawsze czuję, że "oszukuję", kiedy używam refleksji - może to z powodu przeboju wydajności, o którym wiem, że biorę. Część mnie mówi, że jeśli jest to część języka, którego używasz i może osiągnąć to, co próbujesz zrobić, to dlaczego go nie używać. Druga część mnie mówi, że musi być sposób, abym mogła to zrobić bez używania refleksji. Chyba może to zależy od sytuacji. Na jakie potencjalne problemy muszę zwrócić uwagę podczas korzystania z refleksji i jak bardzo powinienem się nimi martwić? Ile wysiłku warto poświęcić na znalezienie bardziej konwencjonalnego rozwiązania?


title: Jak mogę przechwycić przychodzącą wiadomość e-mail za pomocą ASP.net-mvc?

text: Chciałbym napisać system webowy, który może przechwytywać i analizować przychodzące wiadomości e-mail, tradycyjnie system webowy, który piszę to asp.net-mvc, działający w środowisku hostowanym w chmurze, takim jak AppHarbour lub Azure. Jak mogę wykorzystać te (i potencjalnie mój DNS), aby to osiągnąć?


title: Nauka PHP z tłem Rails/Django/Lift

text: Podczas gdy byłem na uniwersytecie, studiując CS, zacząłem brać udział w tworzeniu stron internetowych. Jak zacząłem w ciągu ostatnich kilku lat, głównie używałem frameworków opartych na Rack/Ruby, takich jak Rails i Sinatra, ale przyjrzałem się także - i od czasu do czasu używałem - Web.py, Django i Lift. Zdałem sobie sprawę, że nigdy nie używałem ani nie widziałem PHP używanego do tworzenia stron internetowych. Może się to wydawać dziwne, ale dla dwudziestolatków nauka PHP nie wydaje się najfajniejszą/najmodniejszą drogą. Biorąc pod uwagę to tło (które, jestem pewien, dotyczy wielu osób w moim wieku). Jaki jest najlepszy sposób podejścia do nauki tworzenia stron internetowych w PHP? Jakie są kluczowe różnice/podobieństwa? Ponadto, jakie ramy są szeroko stosowane i/lub szanowane?


title: Dlaczego Resharper woli „jak” nad „jest”?

text: Kiedy piszę taki kod, gdzie obj jest zmienną lokalną: if (obj to IMyInterface) { var result = (IMyInterface)obj; // .... } Resharper proponuje zmianę go na kod w następujący sposób: var result = obj as IMyInterface; if (result != null) { // ... } Wolę to pierwsze, ponieważ nie oferuje możliwości przypadkowych wyjątków odwołań do wartości null. Jakie są powody, by preferować inną formę? Dlaczego Resharper to poleca?


title: Jakie są zalety i wady komunikacji między procesami realizowanej przez gniazda w porównaniu z pamięcią współdzieloną?

text: Rozumiem, że dwie z wielu innych opcji komunikacji między procesami mogą być: 1. Pamięć współdzielona 2. Gniazda Właściwie widziałem te dwie opcje ujawnione przez Intellij Idea do debugowania aplikacji Java. Chcę wiedzieć, jakie są plusy i minusy każdego podejścia.


title: Jak uniknąć wielokrotnego logowania się do serwisu?

text: Podczas tworzenia stron internetowych denerwujące może być to, że muszę się do nich zalogować. Za każdym razem, gdy sesja się kończy, muszę przejść przez przepływ jak... Otwórz stronę logowania -> wprowadź nazwę użytkownika/hasło -> kliknij link, aby przejść do mojej strony. Czasami używam Selenium, aby zarejestrować ten przepływ, a następnie go zautomatyzować. Ale Selenium nie działa we wszystkich przeglądarkach i nadal trwa zbyt długo, aby się załadować itp. Chciałbym móc po prostu odświeżyć stronę, dokładnie tak, jak bym, gdyby witryna nie miała strony logowania. Czy ktoś stosuje jakieś strategie, aby to osiągnąć? Czy jest jakiś sposób na wyłączenie logowania podczas tworzenia? Lub inne narzędzia, które mogą pomóc w poprawie sytuacji?


title: Zagregowany korzeń i duża wydajność danych

text: To raczej scenariusz, ale wcale nie jest zbyt naciągany. Załóżmy, że mam magazyn zbiorczy (AR), który służy do zarządzania zapasami produktów. Sam Produkt jest AR w innym ograniczonym kontekście (BC), ale w tym BC jest reprezentowany tylko przez identyfikator. W Magazynie mogę dodać nowy produkt (musi być unikalny), mogę go usunąć i mogę zaktualizować stan magazynowy. Oczywiście mogę komunikować stan magazynowy produktu, a może nawet utrzymać przepływ wejścia/wyjścia dla produktu. Problem polega na tym, że możesz łatwo dotrzeć do setek lub tysięcy produktów. Tak więc, dla każdej akcji w magazynie będziesz musiał załadować wszystko, nawet jeśli ta akcja nie wykorzysta wszystkich tych informacji. Jest wysoce nieefektywny. Rozwiązaniem, o którym mogłem pomyśleć, jest w zasadzie „rozbicie” AR magazynu w wyspecjalizowanych obiektach do różnych działań. Ale to oznacza, że nie mamy już AR i wracamy do rozwiązania typu CRUD. Co więcej, AR został podzielony nie dlatego, że Domena tego potrzebuje, ale dlatego, że wymagają tego szczegóły techniczne. Wygląda na to, że możesz robić DDD do pewnego momentu, po czym idziesz na CRUD lub kupujesz DUŻO WIĘKSZY i droższy serwer. Co myślisz? Czy możemy mieć zarówno DDD, jak i wydajność, gdy w grę wchodzi duża ilość danych?


title: Unikaj naruszenia GPL, przenosząc bibliotekę poza proces

text: Załóżmy, że istnieje biblioteka na licencji GPL. Chcę, aby był to projekt o zamkniętym kodzie źródłowym. Wykonuję następujące czynności: 1. Stwórz małą owijkę wokół tej biblioteki GPL, która nasłuchuje gniazd, parsuje wiadomości i wywołuje bibliotekę GPL. Następnie zwraca wyniki. 2. Wydaj jego źródła (w celu zapewnienia zgodności z GPL) 3. Utwórz klienta dla tego wrappera w mojej głównej aplikacji i nie wypuszczaj źródeł. Wiem, że dodaje to ogromnego obciążenia w porównaniu z linkowaniem statycznym/dynamicznym, ale interesuje mnie sposób teoretyczny.


title: Testowanie silnika w Railsach - użyć fikcyjnej aplikacji czy prawdziwej aplikacji dla rodziców?

text: Używam silników Rails, aby podzielić dużą aplikację na mniejsze kawałki. Aplikacja nadrzędna głównie obsługuje użytkowników i uwierzytelnianie. W jednym z moich testów silnika przed każdym testem chcę zalogować użytkownika. Jak mogę uzyskać dostęp z silnika do tej funkcji logowania użytkownika, która istnieje w aplikacji nadrzędnej? Wydaje się, że są dwie opcje: 1) Wbuduj uwierzytelnianie użytkownika w fikcyjną aplikację. Kiedy uruchamiasz `rails plugin new app_name --mountable`, w twoim folderze testowym tworzona jest "aplikacja fikcyjna" - po prostu zwykła aplikacja Railsowa. Podczas testów silnik jest montowany na tej atrapy aplikacji. W przypadku testów cech (integracji, akceptacji, tego, co masz), pomyślałem, że dobrze byłoby używać prawdziwych obiektów, gdy tylko jest to możliwe. Planowałem więc wykorzystać fabrykę do stworzenia prawdziwego użytkownika, a następnie zalogować się do tego użytkownika. Aby to zrobić z fikcyjną aplikacją, musiałbym wbudować tę funkcję użytkownika. Wydaje się to być uciążliwe, ponieważ jeśli zmieni się prawdziwa aplikacja nadrzędna, muszę również zmienić tę fałszywą aplikację. 2) Umieść wszystkie moje testy w aplikacji dla rodziców. Myślę, że to zadziała dobrze, ale wydaje się podejrzane. Czuję, że powinienem przetestować silnik w silniku.


title: Zalecana lektura do polerowania stylu kodowania JavaScript?

text: Od jakiegoś czasu zajmuję się kodowaniem w JavaScript i jestem dość zaznajomiony z niektórymi bardziej zaawansowanymi funkcjami tego języka (zamknięciami, funkcjami samoczynnie wykonującymi się itp.). Więc moje pytanie brzmi: jakie zaawansowane książki/blogi/lub cokolwiek innego można by polecić, aby zaostrzyć mój styl kodowania? Na przykład ostatnio kodowałem coś podobnego do: var x = ['a', 'b', 'c']; zmienna istnieje = fałsz; for(var i = 0; i < x.length; i++){ istnieje = x[i] === 'b' ? prawda : istnieje; } Ale okazało się, że poniższy skondensowany kod będzie działał lepiej: var y = {'a':'', 'b':'', 'c':''}; zmienna istnieje = 'b' w y; Oba przechowują tę samą wartość w „istnieje”, ale druga jest mniej powszechna, ale znacznie czystsza. Jakieś sugestie, gdzie powinienem się udać, aby dowiedzieć się więcej takich sztuczek? Edycja: Niedawno znalazłem ten blog z wieloma szczegółami na temat zawiłości JavaScript: http://javascriptweblog.wordpress.com/


title: Czy posiadasz swoje narzędzia?

text: Mój kolega napisał jakiś czas temu post z pytaniem Czy posiadasz swoje narzędzia. Rodzi ważne pytanie. Czy ty? Odpowiedziałem w komentarzach. Jako niezależna posiadam swoje narzędzia. Nawet gdy nie byłem niezależny, miałem własne (w pełni licencjonowane) narzędzia, których używałem do rozwoju osobistego. Nie sądzę, że kupowanie własnych narzędzi jest czymś, z czego można się nadymać (tylko dlatego, że możesz kupić parę tenisówek do koszykówki za 100 dolarów, nie uczynią cię tak dobrymi jak Michael Jordan), ale JEST to inwestycja w siebie, która nie należy lekceważyć. Jak myślisz dobrzy ludzie?


title: Dlaczego wspinaczka górska nazywa się algorytmem w dowolnym momencie?

text: Z Wikipedii, Algorytm Anytime > W informatyce algorytm anytime to algorytm, który może zwrócić > poprawne rozwiązanie problemu, nawet jeśli zostanie przerwane w dowolnym momencie przed > jego zakończeniem. **Oczekuje się, że algorytm znajdzie coraz lepsze rozwiązania, im > więcej czasu będzie działał.** Wspinaczka po wzniesieniach > Wspinaczka po wzniesieniach często daje lepsze wyniki niż inne algorytmy, gdy > czas dostępny na wyszukiwanie jest ograniczony, na przykład z systemami > czasu rzeczywistego. Jest to **algorytm kiedykolwiek**: może zwrócić poprawne > rozwiązanie, nawet jeśli zostanie przerwane w dowolnym momencie przed jego zakończeniem. Algorytm wspinaczki może utknąć w lokalnych optimach lub grani, po tym nawet jeśli działa nieskończenie długo, wynik nie będzie lepszy. Dlaczego więc wspinaczka górska nazywa się algorytmem w dowolnym czasie?


title: Funkcja PHP rand (lub nie tak rand)

text: Testowałem funkcję PHP rand do pisania na obrazie. Oczywiście wynik pokazuje, że nie jest tak losowy. Kod, którego użyłem: <?php header('Content-Type: image/png'); $długość = 512; $im = imagecreatetruecolor($długość, $długość); $niebieski = imagecolorallocate($im, 0, 255, 255); for ($y = 0; $y < $długość; $y++) { for ($x = 0; $x < $długość; $x++) { if (rand(0,1) == 0) { imagesetpixel($ im, $x, $y, $niebieski); } } } imagepng($im); imagedestroy($im); ?> Moje pytanie brzmi, że jeśli użyję szerokości/długości obrazu (w tym przykładzie zmiennej $lenght) liczby takiej jak 512, 256 lub 1024, jest bardzo jasne, że nie jest to tak losowe. Kiedy zmieniam na przykład zmienną na 513, ludzkie oko jest o wiele trudniej ją wykryć. Dlaczego? Co jest takiego specjalnego w tych liczbach? 512: ![512 pikseli](http://i.stack.imgur.com/T0qjD.png) 513: ![513 pikseli](http://i.stack.imgur.com/vDzXS.png) ** Edycja: używam xampp w systemie Windows, aby go przetestować.**


title: Jak przechowywać listę obiektów, które mogą ulec zmianie w przyszłości?

text: Mam zestaw obiektów tej samej klasy, które mają różne wartości atrybutów. i muszę znaleźć najlepsze dopasowanie z funkcji w danych scenariuszach z tych obiektów. W przyszłości te obiekty również mogą wzrosnąć. Całkiem podobny do sposobu, w jaki mamy klasę Color w awt. w klasie mamy kilka statycznych obiektów kolorowych z wartościami diff rgb. Ale w moim przypadku powiedzmy, że muszę wybrać odpowiedni kolor spośród tych statycznych na podstawie pewnych kryteriów. Czy powinienem więc zachować je w arrayList lub enum, czy też jako statyczne zmienne, jak w przypadku Colors. ponieważ będę musiał przeanalizować je wszystkie i wybrać najlepsze dopasowanie. więc potrzebuję ich w jakiejś kolekcji. Ale w przyszłości, jeśli będę musiał dodać inny typ, będę musiał zmodyfikować klasę i dodać kolejne wywołanie list.add(object) dla tego, co naruszy zasadę open-close. Jak mam się do tego zabrać? **EDYTUJ:** Mówiąc dokładniej, mam około 7-8 oddziałów restauracji, które tak bardzo się nie powiększą..może być 3-4 za kilka lat i potrzebuję funkcji, która zwróci najbliższą restaurację satysfakcjonującą kilka innych kryteria. W tym celu muszę przeanalizować je wszystkie, aby zdecydować, który z nich najbardziej odpowiada klientowi.


title: Jak korzystać z licencji Open Source i co mi polecasz

text: Mam kod, którym chciałbym się podzielić, ale chciałbym go opublikować na licencji open source. Ale nie wiem, jak musisz korzystać z tych licencji. Jak aktywować licencję open source? Wystarczy umieścić tekst licencji we wszystkich plikach? Co jeszcze muszę zrobić? Czy muszę coś kupić, prawda? Dołączyć plik readme.txt do wszystkich katalogów? Chodzi mi o to, co muszę zrobić, jeśli chcę, aby mój kod był chroniony przez legalny test licencji? Drugie pytanie brzmi, jaka jest lepsza licencja na te warunki: * Nie obchodzi mnie, co ludzie robią z moim kodem, w celach edukacyjnych, żeby zarabiać pieniądze, nie obchodzi mnie, co chcą z tym zrobić. * Ale chcę, żeby ludzie nie usuwali mojego imienia z kodu, a jeśli używają mojego kodu, zmuszają ich do wzmianki o mnie. Jeśli zmienią mój kod i ktoś poprosi o te modyfikacje, poda kod z modyfikacjami. * Ale nie chcę zmuszać ludzi do publikowania kodu swoich aplikacji, nawet jeśli używają mojego kodu. Jaka jest najlepsza licencja do tego celu?


title: Decyzja licencyjna FOSS: Co czytać? Jakie czynniki wziąć pod uwagę?

text: Jakim rozumowaniem byś się kierował, aby wybrać jedną licencję zamiast innej? Jakiej literatury spodziewałbyś się, że ktoś przeczyta, jeśli chce podjąć sensowną decyzję dotyczącą licencjonowania? W szczególności nie zagłębiam się zbytnio w szczegóły dotyczące mojego obecnego projektu, ponieważ chcę się nauczyć, jak prawidłowo podejmować tę decyzję bez wcześniejszego uzyskania dyplomu z prawa.


title: Pytania dotyczące licencjonowania oprogramowania

text: Prowadziłem dyskusję na temat licencjonowania i oprogramowania open source. Zasadniczo – inny facet mówi, że licencjonowanie jest łatwe, jeśli zamierzasz zbudować produkt, możesz użyć (dowolnego) projektu open source i zarabiać na sprzedaży tego kodu. Mój problem polega na tym, że mówię, że tworzę stronę internetową lub aplikację z projektem, który korzysta z licencji GPL, ograniczenia nie są takie proste - popraw mnie, jeśli się mylę w każdym z tych scenariuszy: 1 - tworzę aplikację na iPhone'a za pomocą GPL kod i umieść tę aplikację w sklepie z aplikacjami - kod musi być swobodnie dostępny dla osób kupujących tę aplikację. 2 - tworzę stronę internetową, którą hostuje mój klient - musi mieć dostęp do kodu. 3 - tworzę stronę internetową jako SaaS, którą mój klient "dzierżawi", ale nie jest właścicielem - chociaż jest hostowana na jego infrastrukturze - musi mieć dostęp do tego kodu. Czy mam rację w każdym z tych założeń? Czy są jakieś inne problemy, o których powinienem wiedzieć na podstawie innych warunków licencjonowania dla innych licencji?


title: Jak mogę kontrolować zachowanie tworzenia okien programu Visual Studio?

text: Niedawno zainstalowałem Visual Studio 2010. Domyślnie ma ładny układ, a kiedy otwieram pliki, okna z zakładkami dla tych plików pojawiają się tam, gdzie lubię: kod źródłowy w górnej połowie ekranu, wyjście kompilatora, test status, śledź okna w dolnej połowie. Ale po pewnym okresie używania grubieję coś palcem i wtedy logika pozycjonowania okienka wariuje. Jedna z kart zostaje oddokowana, a po jej ponownym zadokowaniu nic innego nie działa tak, jak kiedyś. Tak denerwujące! Otwiera kod źródłowy na dole, otwiera inne okna w nieprzewidywalnych miejscach. Odłączam i ponownie dokuję okna tam, gdzie chcę, a następnym razem, gdy je otworzę, znowu trafiają w niewłaściwe miejsce. WTF? Nawet „strona startowa” zostaje przeniesiona. Tak to wygląda po uruchomieniu: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/8sKDn.png) Wiem, że mogę wykonać operację `devenv /resetettings`, aby przywrócić oryginał i zrobiłem to (kilka razy), ale naprawdę chciałbym wiedzieć: 1. Jak to się dzieje? Co robię, aby spowodować to zachowanie? Jak mogę tego uniknąć? 2. Czy mogę to cofnąć — sprawić, by ponownie zachowywał się rozsądnie — bez zatrzymywania programu Visual Studio i ponownego uruchamiania za pomocą przełącznika /resetettings? Jakie są magiczne kliknięcia myszą, aby to przywrócić? Wiem, że opisanie gestów interfejsu użytkownika jest trudne, ale jeśli masz wskazówki, bardzo chciałbym je usłyszeć. Czy ktoś jeszcze ma ten problem?


title: Schemat blokowy i wywołania metod

text: Robię kilka schematów blokowych i zastanawiam się, czy podchodzę do tego poprawnie. Zasadniczo mam kilka wywołań metod i każdego z nich tworzę schemat blokowy. Jednak kilka z tych metod wywołuje metodę w celu uzyskania pewnych informacji, a następnie kontynuuje. Zobacz ten przykład: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/bmqBD.png) Mam 3 inne metody, które również wywołują GetQueue() i zastanawiam się, czy reprezentuję to poprawnie. Wizualnie przepływ AddQueue() wygląda na uszkodzony. UWAGA: Zmiany wprowadzone w moim schemacie blokowym: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/pWa9Q.png)


title: Ile powinienem wiedzieć o programowaniu przed szukaniem pierwszej pracy/stażu w firmie technologicznej?

text: Jestem na studiach i właśnie zacząłem uczyć się programowania. Ile powinienem przynajmniej wiedzieć, zanim zacznę szukać pracy/stażu, żeby nie wyśmiewali mnie poza biurem. Dopiero zacząłem uczyć się programowania i CS-a i dosłownie nic o tym nie wiem przed studiami.


title: Czy powinieneś nagradzać na podstawie ogólnej kompletności lub szybkości projektu?

text: Zespół programistów, w którym pracuję, od miesięcy pracuje nad BARDZO dużym projektem, a ostatnio zaczęliśmy wdrażać do naszego procesu tablicę kanban z praktykami zwinnymi. Widzieliśmy OGROMNĄ poprawę naszej przepustowości! To takie ekscytujące! Ale teraz mamy jedną walkę. Mamy całkowitą liczbę biletów na projekt, a nasz przełożony dał nam zachętę (pudełka z cukierkami i popcornem) na wypadek, gdy zejdziemy do 100 i 50 biletów. Na początku wydawało się to świetnym pomysłem, ale wydaje się, że nowe bilety są tworzone tak szybko, jak możemy je rozwiązać, co sprawia, że zespół czuje się gorzej z naszymi postępami. Oto moje pytanie: Czy powinieneś nagradzać w oparciu o ogólną kompletność projektu lub szybkość? A jeśli kompletność, jak sprawić, by było to bardziej osiągalne?