title: Granice złożoności rozwiązań tworzonych w Arkuszach Google

text: Tworzę rozwiązanie, w którym zasadniczo umieszczam wszystkie zasady dotyczące komunikacji z klientami (w tym automatyczne fakturowanie, e-maile z przypomnieniem, e-maile powitalne itp.) w Arkuszach Google i używam Ultradox do tworzenia e-maili i plików PDF na podstawie szablonów Dokumentów Google. W przypadku trzech automatycznych wiadomości e-mail, które obecnie zaimplementowałem, działa to naprawdę dobrze, całość jest bardzo przejrzysta dla naszej organizacji, ponieważ nawet osoby nietechniczne mogą sprawdzać i poprawiać formuły „Excela”. Obawiam się, że za 2-3 lata prawdopodobnie będziemy mieli 200 unikalnych e-maili i działań, które musimy wysłać na różne okazje i biorąc pod uwagę różne stany, w jakich mogą znajdować się klienci. Oczywiście mógłbym dążyć do ograniczenia liczby e-maili i stwierdza, że nasz klient może być obecny, ale powinien to być wybór oparty na realiach biznesowych, a nie ograniczony przez wybór technologii. **Moje pytanie** brzmi zatem, jakie są granice złożoności (kiedy stanie się niemożliwa do utrzymania), które można racjonalnie zaimplementować w rozwiązaniu opartym na Skryptach Google Apps i Arkuszach Google, biorąc pod uwagę, że spróbuję ujawnić jak najwięcej reguł do Arkuszy Google? I jakich pułapek powinienem być świadomy, opierając się na formułach arkuszy kalkulacyjnych i jakie strategie powinienem zastosować, aby uniknąć pułapek? **Niektóre z moich własnych strategii** Do tej pory wymyśliłem następujące strategie mające na celu zwiększenie łatwości utrzymania: 1. Korzystanie z kilku Arkuszy Google, z których każdy ma swój własny cel, każdy z własnymi arkuszami „eksportu” i „importu”, aby jasne jest, które kolumny są zależne od Arkusza Google. Takie arkusze pomagają również zachować integralność referencyjną podczas wstawiania kolumn i wierszy. 2. Używanie formuł wielowierszowych z wcięciem w celu zwiększenia czytelności formuły 3. Eksperymentowanie z funkcją „walidacji” w celu zmniejszenia zmienności danych 4. Eksperymentowanie z formułami Arrayformulas, aby upewnić się, że formuły będą działać nawet po dodaniu dodatkowych wierszy 5. Potencjalne bardzo duże odciążenie złożone formuły do Google Scripts i wywoływanie ich z formuł arkusza kalkulacyjnego 6. Używanie nazwanych zakresów w celu zapewnienia integralności referencyjnej Proszę zauważyć, że nie pytam o wydajność w tym pytaniu, tylko o łatwość utrzymania. Nie jestem też pewien, w jaki sposób można zmierzyć złożoność oprogramowania, więc nie jestem pewien, jak zadać to pytanie w bardziej konkretny sposób.


title: Serwer powinien gromadzić kilka żądań i zwracać odpowiedź dla wszystkich

text: Na przykład mam serwer [c#] i 4 klientów. Kiedy pierwszy klient wysyła żądanie do serwera, chcę wysłać powiadomienie do pozostałych 3 klientów, że powinni wysłać żądanie do serwera z pewnymi wymaganymi danymi. Po otrzymaniu żądań od wszystkich klientów chcę wysłać tę samą odpowiedź do wszystkich. Jaki jest najlepszy sposób/wzór, aby zaimplementować coś takiego?


title: Jaki jest główny cel wzorca MVVM?

text: Czy możesz mi powiedzieć, jaki jest cel wzorca MVVM? Jakie są argumenty lub powody, które mogę dać zespołowi i właścicielowi produktu, aby szanował i rozwijał się według tego wzorca? Poproszę o prostą odpowiedź. Coś w jednym zdaniu lub jednym słowie. Czy to jest do * konserwacji * bezpieczeństwa * testowania * czegoś innego?


title: Czy obiekty trwałe ignoranckie są w stanie zaimplementować leniwe ładowanie?

text: _Persistence Ignorance_ to zastosowanie zasady pojedynczej odpowiedzialności, co w praktyce oznacza, że obiekty domeny ( **DO** ) nie powinny zawierać kodu związanego z trwałością, zamiast tego powinny zawierać tylko logikę domeny. a) Zakładam, że oznacza to, że kod, który styka się z niższymi warstwami (tj. warstwami trwałości) żyje poza modelem domeny w innych klasach (**OC**) warstwy logiki biznesowej? b) Jeśli moje założenie z _a)_ jest poprawne, to **DO** , powiedzmy `Klient`, nigdy nie zawiera metod takich jak `GetCustomers` czy `GetCustomerByID`? c) Jeśli moje założenia z _a)_ i _b)_ są poprawne i zakładając, że obiekt domeny `Klient` używa leniwego ładowania dla niektórych swoich właściwości, to w pewnym momencie wewnętrzna logika `Klienta` musi skontaktować się z **OC** , który z kolei pobiera odroczone dane. Ale jeśli `Klient` musi skontaktować się z **OC**, aby otrzymać odroczone dane, to nie możemy tak naprawdę twierdzić, że obiekty domeny nie zawierają logiki związanej z trwałością?! Dziękuję **ODPOWIEDZI NA jkohlhepp** 1) Zakładam, że klasy `OrderProvider` i `CustomerProvider` są zawarte w warstwie logiki biznesowej? 2) Z twojej odpowiedzi wynika, że moje założenia w _b)_ są poprawne? 3) > ... Chciałbym sprawdzić, czy jakieś pole zamówień prywatnych zostało wypełnione lub > było puste. Jeśli jest null ... Ale o ile wiem, jak tylko kod domeny musi sprawdzić, czy prywatne pole `order` zostało wypełnione, a jeśli nie, kontaktując się z OrderProvider, już naruszamy **PI* * zasada?!


title: Organizowanie dostępu do danych na potrzeby wstrzykiwania zależności

text: W naszej firmie mamy stosunkowo długą historię aplikacji opartych na bazach danych, ale dopiero zaczęliśmy eksperymentować z wstrzykiwaniem zależności. Szukam porady, jak przekonwertować nasz istniejący wzorzec dostępu do danych na taki, który jest bardziej odpowiedni do wstrzykiwania zależności. ### Kilka konkretnych pytań: Czy tworzysz jeden obiekt dostępu na tabelę (biorąc pod uwagę, że tabela reprezentuje kolekcję encji)? Jeden interfejs na stół? Wszystko to wymagałoby wstrzyknięcia niskopoziomowego obiektu Data Access, prawda? A gdyby były dziesiątki stołów, czy nie sprawiłoby to, że kompozycja zakorzeniła się w koszmar? Czy zamiast tego miałbyś pojedynczy interfejs, który definiuje takie rzeczy jak `GetCustomer()`, `GetOrder()` itp.? Gdybym wziął przykład z EntityFramework, miałbym jeden „Kontener”, który uwidacznia obiekt dla każdej tabeli, ale ten kontener nie jest zgodny z żadnym interfejsem, więc nie wydaje się, aby był zgodny z DI. ### Co robimy teraz, jeśli to pomaga: Sposób, w jaki zwykle zarządzamy dostępem do danych, polega na wykorzystaniu ogólnej warstwy danych, która ujawnia możliwości CRUD/Transakcji i ma podklasy specyficzne dla dostawcy, które obsługują tworzenie `IDbConnection`, `IDbCommand`, itd. Rzeczywisty dostęp do tabeli używa klas `Table`, które wykonują operacje CRUD związane z konkretną tabelą i akceptują/zwracają obiekty domeny, którymi zajmuje się reszta systemu. Te klasy tabel udostępniają tylko statyczne metody i wykorzystują statyczny singleton `DataAccess` utworzony z pliku konfiguracyjnego.


title: Jakie masz doświadczenia związane ze sprzedażą w Android Market? 1 rok później

text: Kontynuacja tego pytania Tak więc wiele się zmieniło na rynku smartfonów w ciągu ostatniego roku (w szczególności udział w rynku Androida, aktualizacje systemu operacyjnego i aktualizacje rynku). Biorąc pod uwagę te zmiany, myślę, że warto zadać to pytanie ponownie. Chciałbym rzucić pracę i pisać aplikacje na Androida w pełnym wymiarze godzin. :-) Czy jest to jeszcze możliwe dla przeciętnego samotnego programisty? Jakie były tomy? (Cieszę się, że mogę zmienić to w społeczność wiki, zanim wszyscy Grinch zaczną jęczeć, ale wygląda na to, że nie mam opcji)


title: Ile przestrzeni dyskowej naprawdę potrzebują programiści w systemach roboczych?

text: > Nie licząc systemu operacyjnego i wymagań do uruchomienia oprogramowania deweloperskiego. > Wymagana przestrzeń do przechowywania. Ściśle mówiąc z perspektywy pracy (konfiguracja firmy, a nie freelancerzy). Indywidualny programista (nie biorąc pod uwagę systemu budowania), chyba że w obszarach wideo, przetwarzania dźwięku (duże pliki raw) 3d/grafiki. Ile miejsca do przechowywania będzie potrzebne. * Nawet jeśli weźmiemy pod uwagę próby oprogramowania do pobrania lub odczytania materiałów. Czy słuszne lub bezpieczne jest założenie, że 20 GB byłoby wystarczające, a cokolwiek więcej byłoby marnotrawstwem i czy byłoby niewłaściwie wykorzystywane?. * Jakie jest typowe miejsce na dysku twardym przydzielane programistom w konfiguracji biurowej. Może się to różnić w zależności od roli lub konkretnych wymagań oraz rodzaju pracy, którą wykonuje firma. ale średnio dla programisty/programisty ile miejsca jest zwykle przydzielone. Edycja: **Aby wyjaśnić intencje** To są pytania, z którymi miałem do czynienia przez ludzi biznesu/zarządu. Chciałbym tylko zrozumieć więcej w tym zakresie, aby dać odpowiedź (lub lepszą odpowiedź) następnym razem, gdy je napotkam. Nie robię przypuszczeń ani nie zamierzam nikogo urazić w tym względzie. Byłoby pomocne, gdyby w tym zakresie zostały podane linki do danych online. Edycja 2: * Problem, jak rozumiem, polegał na ograniczeniu przestrzeni dyskowej tylko do zapisywania plików roboczych, aby zniechęcić do obcego użytkowania... * Nie chodzi o oszczędne cięcie/oszczędzanie kosztów na sprzęcie.


title: Zmiany licencji w projekcie rozwidlonym jakie mam prawa?

text: Cześć Jestem zainteresowany używaniem najwyraźniej nieistniejącej już biblioteki app-mdi w aplikacji flex dla płacącego klienta. http://sourceforge.net/projects/appmdi/ Wygląda na to, że projekt app-mdi został oddzielony od flex-mdi i rzeczywiście kod ma tak wiele wspólnego, że wygląda prawie identycznie jak oryginalny kod. Teraz w oryginalnym źródle flex-mdi w kodzie źródłowym pojawia się następująca licencja > /* Copyright (c) 2007 FlexMDI Contributors. Zobacz: > http://code.google.com/p/flexmdi/wiki/ProjectContributors Uprawnienie jest > niniejszym udzielane bezpłatnie każdej osobie otrzymującej kopię tego > oprogramowania i powiązanych plików dokumentacji („Oprogramowanie”) , do korzystania z > Oprogramowania bez ograniczeń, w tym bez ograniczeń prawa do > używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania sublicencji i/lub sprzedawania > kopii Oprogramowania oraz do zezwalania osobom, dla których Oprogramowanie jest > w tym celu, z zastrzeżeniem następujących warunków: Powyższe powiadomienie o prawach autorskich i niniejsze powiadomienie o pozwoleniu będzie dołączone do wszystkich kopii lub istotnych części Oprogramowania. OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, > BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB DOROZUMIANYCH, W TYM MIĘDZY INNYMI > GWARANCJI WARTOŚCI HANDLOWEJ, PRZYDATNOŚCI DO OKREŚLONEGO CELU ORAZ > NIENARUSZANIA PRAW. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY W CZYNNOŚCI > UMOWY, CZYNNEJ LUB INNEJ, WYNIKAJĄCEJ Z OPROGRAMOWANIA LUB W ZWIĄZKU Z INNYMI REALIZACJE W OPROGRAMOWANIU. */ Jednak w bibliotece app-mdi w tym samym pliku pojawia się następująca licencja. > Prawa autorskie (c) 2010, TRUEAGILE Wszelkie prawa zastrzeżone. > > Redystrybucja i używanie w formie źródłowej i binarnej, z > modyfikacją lub bez, jest dozwolone pod warunkiem, że spełnione są następujące warunki: > > * Redystrybucja kodu źródłowego musi zawierać powyższą informację o prawach autorskich, > tę listę warunków i następujące zastrzeżenie . > * Redystrybucje w formie binarnej muszą zawierać w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją powyższą notę o prawach autorskich, > tę listę warunków i następujące wyłączenie odpowiedzialności. > * Ani nazwa firmy TRUEAGILE, ani nazwiska jej współtwórców > nie mogą być używane do promowania lub promowania produktów opartych na tym > oprogramowaniu bez uprzedniej pisemnej zgody. > > > NINIEJSZE OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ POSIADACZY PRAW AUTORSKICH I WSPÓŁCZYNNIKÓW „TAK JAK JEST” > ORAZ WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU. W ŻADNYM WYPADKU WŁAŚCICIEL PRAW AUTORSKICH LUB WSPÓŁPRACOWNICY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SZCZEGÓLNE, PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM MIĘDZY INNYMI ZAKUP TOWARÓW LUB USŁUG ZASTĘPCZYCH; UTRATĘ DANYCH, UTRATĘ UŻYTKOWANIA, LUB ZYSKÓW LUB PRZERWANIE W DZIAŁALNOŚCI JEDNOCZEŚNIE SPOWODOWANE I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI, CZY W RAMACH ODPOWIEDZIALNOŚCI UMOWNEJ, ŚCISŁEJ LUB CZYNNEJ (W TYM ZANIEDBANIA LUB INNEGO) WYNIKAJĄCE W JAKIKOLWIEK SPOSÓB Z KORZYSTANIA Z TEGO OPROGRAMOWANIA, NAWET > MOŻLIWOŚĆ TAKICH USZKODZEŃ. */ Teraz nie mam problemu z licencją poza linią. > Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, > tę listę warunków i następujące zastrzeżenie w dokumentacji > i/lub innych materiałach dostarczonych z dystrybucją. Informacja o prawach autorskich w całości nie ma sensu w materiale binarnym. Mówiąc konkretnie o redystrybucjach w formie binarnej. Wreszcie pytanie brzmi, co dokładnie należy pokazać klientom internetowym, którzy uzyskują dostęp do oprogramowania wykorzystującego tę bibliotekę? Czy zmiana licencji w ten sposób jest rzeczywiście dozwolona?


title: Czy ktoś używa VB z ASP.net MVC?

text: Gdy projekt .net korzysta z nowszych technologii, takich jak ASP.net MVC lub Silverlight, czy używany jest VB.NET? A może jest używany tylko w starszych projektach? Jaka jest teraz sytuacja?


title: Czy naruszam LSP, jeśli warunek można sprawdzić?

text: Ta klasa bazowa dla niektórych kształtów, które mam w mojej grze, wygląda tak. Niektóre kształty można zmieniać, inne nie. prywatny kształt kształtu; public virtual void SetSizeOfShape(int x, int y) { if (CanResize()){ shape.Width = x; kształt.Wysokość = y; } else { throw new Exception("Nie możesz zmienić rozmiaru tego kształtu"); } } public virtual bool CanResize() { return true; } W podklasie kształtu, którego nigdy nie chcę zmieniać, nadpisuję metodę `CanResize()`, aby fragment kodu klienta mógł zostać sprawdzony przed wywołaniem metody `SetSizeOfShape()`. public override bool CanResize() { return false; } Oto jak to może wyglądać w kodzie mojego klienta: public void DoSomething(Shape s) { if(s.CanResize()){ s.SetSizeOfShape(50, 70); } } Czy to narusza LSP?


title: Czy jest jakaś różnica między włóknami, współrutynami i zielonymi nitkami, a jeśli tak, to co to jest?

text: Czytałem dzisiaj kilka artykułów w Internecie o włóknach, współprogramach i zielonych nitkach i wydaje się, że te pojęcia mają ze sobą bardzo wiele wspólnego, ale są niewielkie różnice, zwłaszcza gdy mówimy o włóknach i współprogramach. Czy istnieje zwięzłe, poprawne podsumowanie tego, co je od siebie różni?


title: Implementacja ustawień/preferencji w JavaScript

text: Tworzę prostą aplikację internetową głównie w JavaScript. Zastanawiałem się, jak wdrożyć ustawienia/preferencje? Czy po prostu przechowuję gdzieś preferencje użytkownika i korzystam z instrukcji if...else... w całym kodzie? Myślę, że musi być lepsza alternatywa. Znam JS, jQuery i PHP i jestem gotów nauczyć się czegoś nowego, jeśli w ogóle jest to wymagane. Zrobiłem już aplikację, pozostały tylko ustawienia. Wiem jakie opcje dać użytkownikom i jak je zaprogramować w js. Jaki jest najbardziej optymalny sposób? Jak to się robi w profesjonalnych aplikacjach webowych i oprogramowaniu firmowym (jestem niezależnym Student Developerem - to mój pierwszy "DUŻY" projekt)? **EDYTUJ:** W przypadku wszystkich modyfikacji, które mają wprowadzić ustawienia (w tej konkretnej aplikacji), cała baza kodu js byłaby dosłownie wypełniona wieloma gałęziami if...else...instrukcje i myślę, że znacznie utrudniłoby czytanie i utrzymanie kodu. W mojej aplikacji cała tabela bazy danych do pobrania z bazy danych oraz liczba i rodzaje manipulacji HTML DOM do wykonania, nowe elementy do dodania do HTML dom i to, czy niektóre są widoczne, czy nie, zmieniłyby się. Jak sobie z tym wszystkim poradzić?


title: Czy powinienem oddzielić synchronizację od mojej klasy i jak to się nazywa?

text: Myśląc o testowalności i kodzie modułowym, ostatnio zastanawiałem się nad tym, czy powinienem oddzielić część synchronizacyjną klasy od rzeczywistej części dotyczącej zachowania. Na przykład: aplikacja „potrzebuje” tego: class Mogrifier { // Dostęp do Mogrifier jest bezpieczny wątkowo private: unsigned int m_state; muteks m_sync; public: Mogrifier() : m_state(0) { } unsigned int Mutate() { lock_guard<mutex> lock(m_sync); const unsigned int old = m_state; m_stan += 42; wrócić stary; } ::: }; Wydaje się dość proste, z wyjątkiem tego, że blokowanie i rzeczywiste rzeczy, które robi klasa, nie są tak naprawdę powiązane. Zastanowiłem się więc, czy dobrym pomysłem jest podzielenie tego: class Mogrifier { // Mogrifier *nie* jest zsynchronizowany prywatny: unsigned int m_state; public: Mogrifier() : m_state(0) { } unsigned int Mutate() { const unsigned int stary = m_stan; m_stan += 42; wrócić stary; } ::: }; class SyncedMogrifer { private: mutex m_sync; Mogryfikator m_; public: unsigned int Mutate() { lock_guard<mutex> lock(m_sync); return m_.Mutate(); } }; * Czy zrobiłbyś to? * Czy pomoże w testach jednostkowych? * Jestem okropny z nazwami wzorców ... jak to się nazywa? * Czy istnieje prosty sposób na „generowanie” takiego wrappera w C++ dla dowolnych wywołań?


title: używanie wiki do wymagań

text: Szukam sposobów na usprawnienie zarządzania wymaganiami. Obecnie mamy dokument Worda opublikowany w witrynie sieci Web. Niestety nie możemy (o ile mi wiadomo) przyjrzeć się zmianom z jednej wersji do następnej. Zdecydowanie wolałbym móc to zrobić, podobnie jak w przypadku wiki lub VCS (lub obu, jak wiki na bitbuckecie!). Ponadto każdy dokument opisuje zmiany, które deweloperzy mają dotrzymać w określonym terminie. Nigdzie nie udokumentowano zbioru skumulowanych funkcji aplikacji, więc czasami trudno jest odróżnić błąd od (źle zaprojektowanej) funkcji, gdy próbujesz dokonać szybkich poprawek w starszych aplikacjach. Wpadłem więc na pomysł, na temat którego chciałem otrzymać informację zwrotną. A co z: 1. Korzystanie z wiki, abyśmy mogli śledzić, kto i kiedy zmienił (głównie po to, aby zobaczyć _czy_ jakiekolwiek zmiany zostały wprowadzone od ostatniego spojrzenia). 2. Posiadanie jednej, powiedzmy, strony wiki na produkt, a nie jednej na termin, nadążanie za wszystkimi funkcjami produktu, a nie zmianami, które powinny zostać wdrożone. W ten sposób mogę spojrzeć na konkretną wersję strony, aby zobaczyć, co aplikacja powinna zrobić w danym momencie, i mogę spojrzeć na _zmiany na stronie od ostatniego wydania_, aby zobaczyć wymagania, które mają zostać zaimplementowane przed następnym terminem . Myślisz?


title: Konkretne powody, dla których warto utworzyć własną klasę tablicy zamiast używać std::array?

text: Jakie konkretne warunki lub wymagania powinieneś utworzyć własną tablicę za pomocą `std::array`? Oto moje tło: opracowuję małą prostą bibliotekę, z której będzie korzystać mała grupa ludzi i na której _miejmy nadzieję_ będzie się opierać. Obecna struktura pozwala zarówno na `std::vector`, jak i `std::array` używając `iteratorów`, jednak wiele osób nie lubi i nie może używać `std::array` i uważa, że notacja jest myląca do pracy z biblioteką. Próbowałem sprawić, aby moja biblioteka działała lepiej dla `std::array`, jednak przyszło mi do głowy, że może powinienem dostarczyć własną i dodać potrzebną funkcjonalność? Na przykład: `library::array<int, 2> mojaTablica; myArray.fill(1, 100);` i pomyślałem, że byłby to dobry projekt, abym mógł rozwijać swoje umiejętności, szczególnie w zakresie `szablonów` i innych algorytmów `sortowania`.


title: Wywiad na miejscu: Inżynier QA z większym naciskiem na umiejętności Java

text: Mam na miejscu rozmowę kwalifikacyjną dla inżyniera QA ze Startup. Podczas rozmowy telefonicznej osoba powiedziała, że chciałaby przetestować moje umiejętności JAVA, JUnit i SQL na tablicy, z większym naciskiem na umiejętności zorientowane obiektowo. Więc czego mogę się spodziewać? ** Jeszcze jedna ważna kwestia: Jak przezwyciężyć strach przed wywiadem w Białej Tablicy?. Jestem bardzo kiepski na sesjach Whiteboard, jestem w pełni napięty. Proszę zasugeruj mi wskazówki, jak przezwyciężyć moje klątwy**


title: Czy ktoś może mi pomóc zrozumieć tę licencję GPL?

text: Nie rozumiem ostatniej linijki tej licencji GPL. > Copyright (C) 2011 Some Name > > Ten program jest wolnym oprogramowaniem; możesz go redystrybuować i/lub modyfikować > zgodnie z warunkami GNU General Public License opublikowanej przez Free > Software Foundation; albo wersja 2 Licencji, albo (według Twojego wyboru) > dowolna nowsza wersja. Ten program jest rozpowszechniany w nadziei, że będzie > użyteczny, ale BEZ ŻADNEJ GWARANCJI; nawet bez dorozumianej gwarancji > PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Zobacz GNU General > Public License, aby uzyskać więcej informacji. > > Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU wraz z > tym programem; jeśli nie, napisz do Free Software Foundation, Inc., 51 > Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > Łączenie SOMEAPP statycznie lub dynamicznie z innymi modułami > tworzy połączoną pracę opartą na SOMEAPP. Tak więc warunki licencji GNU > General Public License obejmują całą kombinację. > > **Ponadto, w ramach specjalnego wyjątku, właściciele praw autorskich SOMEAPP udzielają > użytkownikowi pozwolenia na łączenie części SOMEAPP z innym kodem binarnym > („Program”) na podstawie dowolnej licencji określonych właścicieli praw autorskich do Programu, > pod warunkiem, że połączona praca jest produkowana przez SOMEAPP.** Chcę wiedzieć, czy mogę użyć tego kodu w aplikacji shareware.


title: jak mapować kontrolery, modele i widoki jako listę rzeczy do zrobienia

text: Przed rozpoczęciem bieżącego projektu zastanawiałem się, czy istnieje terminologia na to, co planuję zrobić? Zasadniczo to, co chcę zrobić, to odwzorować każdy obiekt w warstwach, takich jak wszystkie kontrolery i jak będą się nazywać, metody, które będą istniały pod kontrolerami i ich przeznaczenie; W tym modele, z którymi metody będą wchodzić w interakcje oraz widoki, które będą wyświetlane na podstawie określonych działań. W ten sposób stworzyłem szczegółową listę rzeczy do zrobienia i mogę wyłapać duplikaty i wykonać je w ramach jednego połączenia. Słyszałem o czymś, co nazywa się doktryną, ale nie jestem pewien, czy to będzie to, czego szukam, ponieważ nie wiem, jak tego używać, ale słyszałem, że ma to związek z dokumentacją.


title: Czy istnieją obecnie jakieś ustandaryzowane zasady „gramatyczne” dla HTML i CSS?

text: Przez lata przypisywałem wartości do klas i elementów html na różne sposoby: * mojaKlasa * MojaKlasa * moja_klasa * moja-klasa . . .i tak dalej. Ponieważ zawsze staram się doskonalić swoje rzemiosło i uczynić mój kod bardziej czytelnym dla innych, zamierzam zdyscyplinować się, aby trzymać się jednej konwencji i iść naprzód. Skłaniam się ku wszystkim małymi literami i myślnikami, ale to czysto subiektywny wybór. Więc chciałem mieć wkład społeczności SE – czy istnieje już standardowa lub zalecana konwencja? Dziękuję!


title: Co to jest koder z głowicą śmigła?

text: Co to jest koder z głowicą śmigła?


title: Wkrótce wyjeżdżam na pustynię, potrzebujesz sugestii

text: Właśnie dostałem wiadomość, że (wreszcie) spędzę kilka następnych miesięcy w Afganistanie z moimi kolegami opiekunami AF i miałem nadzieję, że otrzymam kilka sugestii dotyczących dobrych treści offline, z których mógłbym się uczyć. Mam kilka podręczników z ck12.org, pobrałem wersje offline dokumentacji MSDN dla VCS Express 2010, ale chciałbym mieć coś bardziej ogólnego, z którego mógłbym się nauczyć, może dotyczyłoby to struktur danych i algorytmów (specyficzne dla C# bądź niesamowity. Aha, i jeśli ktoś zna jakieś dobre samouczki WPA offline, to byłyby jeszcze lepsze.


title: Używanie skryptów jQuery na licencji GPL na stronie z reklamami

text: Tworzę aplikację internetową, która będzie generować przychody z wyświetlania reklam. System jest przeznaczony dla mnie do uruchomienia, a nie do sprzedaży/dystrybucji nikomu innemu. Moje pytania to: * Czy mogę używać na stronie skryptów jQuery na licencji GPL? * Czy mogę używać skryptów na licencji GPL podczas generowania przychodów z reklam ze strony? * Czy muszę udostępnić wszystkim źródło mojej witryny, jeśli używam skryptów na licencji GPL?


title: Czy lepiej zapisać dane wyjściowe z polecenia w pamięci i przechowywać później, czy zapisać w pliku tymczasowym, a następnie przenieść do ostatecznej lokalizacji?

text: Mam nadzieję, że to nie jest nie na temat. Muszę zapisać wyjście z polecenia do pliku, ale tylko wtedy, gdy długość tego wyjścia jest dodatnia. Myślałem o dwóch rozwiązaniach: * zapisz dane wyjściowe do zmiennej Pythona, sprawdź długość, jeśli jest pozytywny, zapisz do pliku docelowego; * zapisz dane wyjściowe do pliku tymczasowego, sprawdź długość, jeśli jest pozytywna, zmień nazwę na plik docelowy. Czy jest jakaś najlepsza praktyka dla tego małego problemu lub która z nich zwykle działa lepiej między moimi proponowanymi rozwiązaniami? Typowa konfiguracja: * długość pliku to zwykle 1KB * nie używamy ssds, zwykle dysk twardy 7200 obr./min * średnia RAM to zwykle 10-20 GB * nie wiem czy system plików jest ważny, zresztą ext3 wiem, że to trochę niejasne, ale miałem nadzieję, że w tym przypadku można zastosować jakąś najlepszą praktykę. Dziękuję


title: Czy powinienem blogować konkretnie o programowaniu w języku angielskim czy w moim ojczystym języku?

text: Miałem bloga, który był napisany w moim ojczystym języku, ale teraz zastanawiam się, czy powinienem przełączyć się na angielski ze względu na szerszą publiczność, biorąc pod uwagę, że domyślnym językiem dziedziny technicznej jest angielski. Na pewno chcę się dzielić swoją wiedzą, ale w międzyczasie chciałbym zostać zatrudniony lub być rozpoznawany przez rówieśników. Reputacja może być ważna i może pomóc w zwiększeniu mojej profesjonalnej sieci. Czy masz jakieś uwagi? Btw, moim językiem ojczystym jest francuski, jeśli to ma znaczenie.


title: Gałęzie funkcji, gałęzie beta i złomowane funkcje

text: Dużo myślałem o najlepszych praktykach dotyczących rozgałęziania w rozproszonych systemach kontroli wersji, takich jak git an mercurial (dwa pliki dvc, z którymi mam doświadczenie i których używam na co dzień). Sposób, w jaki to robię, jest nieco inny w każdym z nich, ale generalnie postępuje zgodnie z następującymi wytycznymi: * gałąź master - współbieżna z kodem produkcyjnym * gałąź deweloperska - współbieżna z kodem "beta" * gałęzie funkcji - dla rozwoju funkcji Rozwój jest zakończony w gałęzi funkcji (zwykle utworzonej z gałęzi master, więc wiemy, że pracujemy ze stabilną bazą kodu), a kiedy dev zostanie ukończone, sprawdzone i przetestowane przez deweloperów, jest wpychane/łączone do gałęzi deweloperskiej/beta , wypuszczony na serwer beta i przetestowany. Jeśli wszystko pójdzie dobrze, funkcja zostaje zatwierdzona i możemy ją scalić z gałęzią master/stable, etapować, przeprowadzić końcowe testy i wprowadzić ją do produkcji. Jeśli jednak nie pójdzie dobrze, wszystko się psuje. Jeśli na przykład jakaś funkcja zostanie wyrzucona lub po prostu opóźniona w nieskończoność, prawdopodobnie chcemy usunąć ją z gałęzi dev/beta. Jednakże, ponieważ scalenia z master/stable (poprawki, zmiany zawartości itp.) i inne nowe funkcje zostały prawdopodobnie umieszczone w gałęzi dev, usunięcie pojedynczej funkcji z tej gałęzi staje się trudne. Dochodzę do wniosku, że ten przepływ pracy jest po prostu zepsuty, ale wygląda na to, że powinien działać. A więc konkretnie: * Czy można usunąć konkretną cechę z tego typu gałęzi? * Czy to tylko zepsuty przepływ pracy? I bardziej ogólnie: * Biorąc pod uwagę długoterminowy rozwój funkcji i potrzebę posiadania oddziału współbieżnego z live, jakie są najlepsze praktyki związane z dvcs?


title: Zaprojektuj wzorzec, aby dynamicznie tworzyć wzorce znajdujące się na liście linków

text: Czy ktoś może mi pomóc wymyślić sposób na dynamiczne generowanie sekcji wzorców narzędzia, które tworzę? Nie jestem pewien, jak przechowywać i generować te „wzorce” dynamicznie. Program pobiera dużą listę linków (100 000), umieszcza je w bazie danych, grupuje je według domen, a następnie zwija stronę z każdej domeny w poszukiwaniu linków zwrotnych. Oto schemat bazy danych, widać, że w tabeli Domeny przechowywana jest większość informacji, ponieważ grupujemy adresy URL według domeny: http://sqlfiddle.com/#!2/9a4d7 Więc teraz wiemy, że niektóre domeny są aktywne (i mają link zwrotny), a niektóre są martwe (brak linku zwrotnego). Jest to stosunkowo łatwe, ale teraz dla zabawy. Muszę wyprowadzić „wzory” z linków na żywo. Na przykład znajdź listę wszystkich aktywnych domen linków, które mają ponad 25 linków z tej domeny. Więc jeśli joesblog.blogspot ma 33 strony z linkami do mojej domeny, które pasują do tego wzorca. Oto moja lista wzorców: * Domeny zawierające link do strony głównej * Domeny pogrupowane według domeny najwyższego poziomu (.com, .org itp.) * Domeny, które zwróciły odpowiedź nagłówka 405 * Adresy URL z pasującą strukturą katalogów * Domeny zawierające słowo _ _ _. * Adresy URL zawierające w swojej ścieżce słowo _ _ _. * Wspólny tekst kotwicy. * Wspólne tagi tytułów. * Typowe cele linków zwrotnych (na którą stronę Twojej witryny wskazuje link). Problem polega na tym, że wzorce zmieniają się CIĄGLE. Przenoszenie, dodawanie, edytowanie, usuwanie i wszystko, co możesz wymyślić. Naprawdę potrzebuję zbudować pewnego rodzaju system zarządzania treścią, aby obsłużyć te wzorce. Ale jak mam przechowywać coś tak skomplikowanego w bazie danych? Czy ktoś kiedykolwiek zajmował się podobnym problemem i jak go rozwiązałeś? Gdybym mógł po prostu przechowywać całe funkcje i instrukcje MySQL w bazie danych, byłoby wspaniale (ale strasznie źle). (PHP, MySQL, JavaScript / JQuery) OŚWIADCZENIE: Jest to narzędzie wewnętrzne. Nie pytaj mnie, dlaczego to buduję, ani nie twierdz, że wymagania są nieprawidłowe. Zostało to zaprojektowane przez mojego menedżera i moim zadaniem jest, aby działało, ponieważ jestem programistą w firmie, która potrzebuje tego narzędzia. Dziękuję Ci!


title: Zmniejszenie różnicy operatorów między C++ a Javą?

text: Proszę powiedzieć, dlaczego ten sam fragment kodu zachowuje się inaczej w C++ i JAVA. **Ok najpierw implementuję funkcję do obliczenia silni Int REKURSYWNIE** W JAVA: int f(int x) { if(x==1)return 1; return(x*f(x-1)); } System.out.println(f(5)); -----> wyjścia 120, ok, to ma sens. METODA JAVA 2: int f(int x) { if(x==1)return 1; return(x*f(--x)); } System.out.println(f(5)); -----> wyjścia 120, ok, to też ma sens. Ale tutaj jest zwrot w C++: C++ METODA 1: int f(int x) { if(x==1)return 1; powrót (x*f(x-1)); } cout << f(5) ; -----> wyjścia 120, ok teraz czytaj dalej! C++ METODA 2: int f(int x) { if(x==1)return 1; return (x*f(--x)); } cout << f(5) ; -----> wyjścia 24. To zaskakujące. Ale dlaczego?? Próbowałem to wyśledzić wiele razy i nie udało mi się. Ma to sens w java, ponieważ każde wywołanie rekurencyjne otrzymuje swój własny kawałek pamięci i operator przed dekrementacją -- zmniejszy się i przyniesie zmniejszoną wartość. Dlaczego działa zgodnie z oczekiwaniami w JAVA, ale nie w C++?


title: Dowiedz się, jak działa bufor TLB (Translation Lookaside) i współdziała z tablicą stron i adresami

text: Więc próbuję zrozumieć ten bufor TLB (Translation Lookaside Buffer). Ale trudno mi to pojąć. w kontekście posiadania dwóch strumieni adresów, tlb i pagetable. Nie rozumiem powiązania TLB z adresami/tagami przesyłanymi strumieniowo i tabelami stron. a. 4669, 2227, 13916, 34587, 48870, 12608, 49225b. 12948, 49419, 46814, 13975, 40004, 12707 TLB Ważna strona fizyczna Numer strony 1 11 12 1 7 4 1 3 6 0 4 9 Strona Tabela Prawidłowa strona fizyczna lub na dysku 1 5 0 Dysk 0 Dysk 1 6 1 9 1 11 0 Dysk 1 4 0 Dysk 0 Dysk 1 3 1 12 Jak TLB działa z tablicą stron i adresami? Zadanie domowe jest następujące: Biorąc pod uwagę strumień adresów w tabeli oraz początkowe stany TLB i tabeli stron pokazane powyżej, pokaż końcowy stan systemu również listę dla każdego odwołania, jeśli jest to trafienie w TLB, trafienie w tabela stron lub błąd strony. Ale myślę, że najpierw muszę tylko wiedzieć, jak TLB działa z tymi innymi elementami i jak to określać. Jak mam zacząć odpowiadać na to pytanie?


title: Czy powinniśmy używać zewnętrznego CMS?

text: Pracuję w sklepie z projektami stron internetowych. Wszystko, co robimy, koncentruje się wokół Joomla! CMS. Trochę się martwię - jeśli coś pójdzie nie tak z Joomlą (wykryto poważną lukę w zabezpieczeniach, Joomla zwija się i przestaje się rozwijać) jesteśmy zatopieni. Spotykam się z CEO, aby zaplanować kilka kolejnych kroków dla naszej firmy. Czy powinienem polecić, abyśmy stworzyli własny wewnętrzny CMS, czy po prostu paranoję się z powodu pojedynczego punktu awarii?


title: Z czego składa się typowy wpis do dziennika programowania?

text: Czytałem, że wiele osób wydaje się faworyzować dziennik lub pamiętnik, aby prowadzić notatki dotyczące ich działań związanych z pracą. Sam miałem bardziej ustrukturyzowane podejście, które obejmuje zarysy i kategoryzację. Chociaż ma to swoje zalety w wyszukiwaniu informacji, uważam, że może stać się przeszkodą, jeśli chodzi o wpisy o szerokim, subiektywnym lub refleksyjnym charakterze. Myślałem o użyciu do tego celu formatu bardziej przypominającego pamiętnik, ale ponieważ nigdy wcześniej takiego nie miałem, zastanawiam się, jakie informacje by zawierał. Czy ktoś może podać przykład zawartości swojego typowego wpisu do dziennika/pamiętnika? O czym robisz notatki i jak je układasz?


title: Dlaczego dołączanie do listy w Scali powinno mieć złożoność czasową O(n)?

text: W tej chwili uczę się Scali i właśnie przeczytałem, że czas wykonania operacji dopisywania dla listy (:+) rośnie liniowo wraz z rozmiarem listy. Dodawanie do listy wydaje się dość powszechną operacją. Dlaczego idiomatycznym sposobem na zrobienie tego miałoby być poprzedzenie składników, a następnie odwrócenie listy? Nie może to być również porażka projektowa, ponieważ implementacja może zostać zmieniona w dowolnym momencie. Z mojego punktu widzenia zarówno prepending, jak i appending powinny być O(1). Czy jest ku temu jakiś uzasadniony powód?


title: Dopasowywanie użytkowników na podstawie serii pytań

text: Staram się znaleźć sposób na dopasowanie użytkowników w oparciu o określone cechy osobowości. Każda cecha będzie miała swoją własną kategorię. W mojej tabeli użytkowników dodam kolumnę dla każdej kategorii: id name cat1 cat2 cat3 1 Sean ? ? ? 2 Inne ? ? ? Powiedzmy, że zadaję każdemu użytkownikowi 3 pytania w każdej kategorii. W przypadku każdego pytania możesz odpowiedzieć na jedno z następujących: „Nie, Może, Tak”. Jak obliczyć jedną liczbę na podstawie odpowiedzi w tych 3 pytaniach, które zawierają wartość, z którą mogę porównać innych użytkowników? Myślałem o jakimś ciężarze. Na przykład: Nie -> 0 Może -> 1 Tak -> 2 Potem robię jakieś sensowne obliczenia. Chcę otrzymać coś takiego, aby móc zapytać użytkowników i znaleźć pasujące osoby: id name cat1 cat2 cat3 1 Sean 4 5 1 2 Other 1 2 5 W powyższej sytuacji użytkownicy tak naprawdę nie pasują do siebie. Chciałbym dopasować się do kogoś, kto ma +1 lub -1 mojego wyniku w każdej kategorii. Nie jestem facetem od matematyki, więc szukam pomysłów, które pomogą mi zacząć.


title: Praca z Git na wielu komputerach

text: Może to zabrzmieć trochę dziwnie, ale zastanawiam się nad dobrym sposobem pracy w Git z wielu komputerów połączonych w sieć w jakiś sposób. Wygląda na to, że mam dwie opcje i widzę korzyści po obu stronach: * Użyj samego git do udostępniania, każda maszyna ma swoje własne repozytorium i musisz przenosić się między nimi. * Możesz pracować na każdym komputerze, nawet jeśli drugi jest w trybie offline. Myślę, że to samo w sobie jest dość duże. * Użyj jednego repozytorium, które jest udostępniane w sieci między komputerami. * Nie ma potrzeby wykonywania git pull za każdym razem, gdy zmieniasz komputer, ponieważ Twój kod jest zawsze aktualny. * Nie martw się, że zapomniałeś przesłać kod z innej maszyny nie będącej hostem, która jest teraz poza zasięgiem, ponieważ pracowałeś na udostępnianiu plików na tej maszynie. Moja intuicja podpowiada, że wszyscy generalnie wybierają pierwszą opcję. Ale wadą, którą widzę, jest to, że możesz nie zawsze mieć dostęp do kodu z innych komputerów, a ja na pewno nie chcę wpychać wszystkich moich gałęzi WIP do github pod koniec każdego dnia. Nie chcę też zostawiać cały czas włączonych komputerów, abym mógł pobierać z nich bezpośrednio. Na koniec drobna kwestia, że wszystkie polecenia git, aby aktualizować wiele gałęzi, mogą być nużące. Czy istnieje trzeci uchwyt w tej sytuacji? Może dostępne są narzędzia innych firm, które ułatwiają ten proces? Jeśli regularnie radzisz sobie z tą sytuacją, co sugerujesz?


title: Tworzenie systemu analitycznego przetwarzającego duże ilości danych – od czego zacząć

text: Wyobraź sobie, że piszesz coś w rodzaju systemu analityki internetowej – rejestrujesz nieprzetworzone wejścia na stronę wraz z kilkoma dodatkowymi rzeczami, takimi jak tagowanie plików cookie itp., a następnie generujesz statystyki, takie jak * Które strony uzyskały największy ruch w danym okresie * Które strony odsyłające przyniosły największy ruch * Cele zrealizowane (celem jest wyświetlenie konkretnej strony) * I bardziej zaawansowane rzeczy, takie jak to, którzy odsyłający wysłali największą liczbę odwiedzających, którzy później osiągnęli cel. Naiwnym sposobem podejścia do tego byłoby wrzucenie go do relacyjnej bazy danych i uruchomienie na nim zapytań – ale to się nie skaluje. Możesz wszystko wstępnie obliczyć (mieć kolejkę przychodzących „działań” i użyć do aktualizacji tabel raportów) – ale co, jeśli później zmienisz cel – jak możesz skutecznie ponownie obliczyć tylko te dane, które zostaną zastosowane. Oczywiście zostało to zrobione wcześniej ;) więc wszelkie wskazówki od czego zacząć, metody i przykłady, architektura, technologie itp.


title: Projekt renderowania. Jak skutecznie radzić sobie z renderowaniem do przodu, odroczonym i przezroczystym?

text: W moim świecie gry mam wiele obiektów, które wywodzą się z jednej klasy bazowej. Każdy obiekt będzie miał inne materiały i dlatego będzie musiał być narysowany przy użyciu różnych technik renderowania. Obecnie używam następującej kolejności do renderowania moich obiektów. * Odroczone * Do przodu * Przezroczyste (niezależne od kolejności) Każdy obiekt ma flagę renderowania, która wskazuje, która z powyższych metod powinna zostać użyta. Lista obiektów bazowych w scenie jest następnie iterowana i dodawana do osobnych list obiektów odroczonych, przesłanych do przodu lub przezroczystych w oparciu o ich wartość flagi renderowania. Poszczególne listy są następnie iterowane i rysowane w powyższej kolejności. Każda lista jest czyszczona na końcu ramki. Ta metoda działa dość dobrze, ale wymaga różnych metod rysowania dla każdego rodzaju materiału. Na przykład każdy obiekt będzie wymagał następujących metod, aby był kompatybilny z możliwymi ustawieniami flag. object.DrawDeferred() object.DrawForward() object.DrawTransparent() Trudno jest również stwierdzić, gdzie metody spoza materiałów, takie jak renderowanie map cieni, pasowałyby do tego projektu „flagi i metody”. object.DrawShadow() Miałem nadzieję, że ktoś może mieć jakieś sugestie dotyczące ulepszenia tego procesu renderowania, być może uczynienia go bardziej ogólnym i mniej gadatliwym?


title: Co może zrobić system typów Haskella, czego nie potrafi Java i na odwrót?

text: Rozmawiałem z kolegą o różnicach między systemami typów Haskella i Javy. Zapytał mnie, co Haskell może zrobić, czego Java nie może, i zdałem sobie sprawę, że nie wiem. Po chwili namysłu wymyśliłem bardzo krótką listę drobnych różnic. Nie zagłębiając się w teorię typów, zastanawiam się, czy są one formalnie równoważne. Aby nie stało się to subiektywnym pytaniem, pytam: jakie są główne, niesyntaktyczne różnice między ich systemami typów? Zdaję sobie sprawę, że niektóre rzeczy są łatwiejsze/trudniejsze w jednym niż w drugim i nie jestem zainteresowany rozmowami o nich. Aby było to bardziej szczegółowe, zignorujmy rozszerzenia typu Haskell, ponieważ jest tak wiele, które robią wszelkiego rodzaju szalone/fajne rzeczy.


title: Najlepszy układ repozytorium github dla snippetów w wielu językach programowania

text: Muszę stworzyć github-obecność dla organizacji o otwartym kodzie źródłowym. Celem jest dystrybucja _fragmentów kodu_ i _wdrożeń referencyjnych_ w **różnych** językach programowania. Te składki będą (najlepiej) tworzone przez osoby spoza organizacji i powinny być zbierane. Wiem, że dobrą praktyką jest tworzenie **jednego repozytorium na projekt**. W tym celu każda implementacja (w określonym języku programowania) powinna być traktowana jako samodzielny projekt i powinna mieć własne repozytorium. Chodzi o to, że takie podejście utrudnia wkład osobom z zewnątrz, ponieważ pull-requesty na github można składać tylko w stosunku do istniejących repozytoriów. Tworzenie **pojedynczego repozytorium** z podkatalogiem na kod języka programowania staje się łatwiejsze, ale obawiam się, że niektóre IDE mogą narzekać na układ katalogów. Chciałbym wiedzieć, czy ktoś rozwiązał już ten bardzo konkretny problem w zadowalający sposób.


title: Potrzebujesz porady na temat funkcji wyszukiwania PHP

text: Koduję witrynę Linux/PHP dla organizacji. Witryna ma dwa widoki, aktywowane przez zmienną logowania $_SESSION wskazującą, czy jest się zalogowanym jako członek, czy nie. Muszę udostępniać funkcję wyszukiwania zarówno publicznie, jak i członkom. Obszar członków jest prywatny. Pamiętaj, że w takim przypadku nie można użyć wyszukiwarki niestandardowej Google. Czy ktoś ma jakieś zalecenia dotyczące skryptów F/OSS (lub być może tanich skryptów, które mogę kupić), które zapewniałyby tę funkcjonalność z dwoma oddzielnymi indeksami, jednym publicznym i jednym prywatnym, i które zapewniałyby wyniki z podziałem na strony i formularz wyszukiwania słów kluczowych? W przeciwnym razie będę musiał sam go zakodować. Staram się oszczędzić czas i dlatego trzymam więcej pieniędzy w kieszeni. PS Uwaga Nie mogę zadać tego na StackOverflow, ponieważ chcą tam pytań programistów. To nie jest pytanie „jak to zakodować?” pytanie, ale „jakie skrypty F/OSS lub tanie skrypty witryn rozwiązałyby ten problem?” rodzaj pytania. Zauważ też, że mi to też nie pomoże. Spójrz na odpowiedzi na to pytanie.


title: prosta logika „defragmentacji”, która minimalizuje zmiany?

text: edit: tak wyraźnie nie wyjaśniłem tego dobrze, więc spróbuję jeszcze raz z przykładami. Mam „rurkę” o określonym rozmiarze z sygnałami poprowadzonymi przez nią z określonymi przesunięciami. Rura może ulec fragmentacji z sygnałami o różnych przesunięciach, co uniemożliwia dopasowanie nowego sygnału. Potrzebuję algorytmu, który powie mi, jak rozmieścić sygnały do defragmentacji potoku; ale przy minimalnej liczbie faktycznie przenoszonych sygnałów! Na przykład... Powiedzmy, że mam rurę o rozmiarze 16. Ma następujące sygnały z opisanymi rozmiarami i przesunięciami. przesunięcie 0: A (rozmiar 4; wypełnia szczeliny 0-3) przesunięcie 5: C (rozmiar 2, wypełnia szczeliny 5-6) przesunięcie 8: B (rozmiar 4, wypełnienie 8-11) przesunięcie 14: D (rozmiar 2, wypełnia 14-15) Rura: AAAA_CC_BBBB__DD W tym przypadku mam otwarte 1 gniazdo na offsetach 4 i 7 oraz dwa na offsetach 12-13. Teraz powiedzmy, że chcę dodać sygnał o rozmiarze 4 do tego potoku. Nie ma na to teraz ciągłego miejsca, ale wiem, że mam na to wystarczająco dużo miejsca, jeśli dokonam defragmentacji. „Oczywistym” rozwiązaniem jest zgrupowanie wszystkich sygnałów razem na „góry” w ten sposób: przesunięcie 0: A (rozmiar 4, wypełnienia 0-3) przesunięcie 4: B (rozmiar 4, wypełnienia 4-7) przesunięcie 8: C (rozmiar 2, wypełnienie 8-9) przesunięcie 10: D (rozmiar 2, wypełnienie 10-11) Rura: AAAABBBBCCD____ to pozostawia wolne miejsca 12-15 dla mojego nowego sygnału. Jednak w tym celu przestawiłem 3 sygnały (B-D). Dla każdego sygnału, który przeniosłem, muszę wysyłać polecenia do sprzętu i czekać na nietrywialną ilość czasu. Gdybym był mądrzejszy, zdałbym sobie sprawę, że jest inne podejście. Mogę zmienić położenie w ten sposób: offset 0: A(rozmiar 4, wypełnia 0-3) przesunięcie 8: B(rozmiar 4, wypełnia 8-11) przesunięcie 12: C(rozmiar 2, wypełnia 12-13) przesunięcie 14: D( rozmiar 2, wypełnienia 14-15). Pipe: AAAA____BBBBCCDD Teraz mogę dopasować mój nowy sygnał do offsetów 4-7; I musiałem zmienić tylko jeden sygnał (B). W ten sposób oszczędzając na połączeniach sprzętowych. Zastanawiam się, czy istnieje dobry algorytm do wykrywania takich sytuacji; gdzie mogę „dopasować” sygnał do rury z minimalną liczbą przeniesionych sygnałów. Przychodzi mi na myśl podejście N! algorytm; które w zasadzie polega na „generowaniu każdego możliwego rozkładu, obliczaniu, ile ruchów to wynikło”. Szukam szybszego podejścia. Podejście _nie_ musi być w 100% idealne, szukam przede wszystkim zminimalizowania przeciętnego przypadku, o ile najgorszy przypadek nie jest zbyt przerażający. Wiem, że nigdy nie będę miał więcej niż 255 sygnałów na danej rurze; więc być może uda mi się „uciec” z N! tak źle, jak to brzmi. Wiem również, że rozmiar każdego sygnału to potęga 2, podobnie jak rozmiar rury. także, czy są jakieś genialne algorytmy do umieszczania sygnałów, które minimalizują fragmentację? * * * Odpowiedź na pytanie; patrz poniżej. Chciałem nieco wyjaśnić odpowiedź, aby lepiej wyjaśnić, jak przebiegałaby defragmentacja dla każdego, kto czyta; kolego to wyjaśnia. Chciałem wskazać prostsze podejście do konceptualizacji i wyjaśnienia części defragmentacji bardziej szczegółowo, ponieważ to było pierwotne pytanie. Wyjaśniam moje podejście, które jest nieco inne/prostsze, ale skutecznie utrzymuje koncepcję „kumpel”. Nie obliczam wstępnie bloków ani ich nie nazywam, to zbyt duży wysiłek, aby zaimplementować i utrzymać. Dla mnie koszt procesora obliczania, dokąd trafi sygnał, jest dość trywialny w porównaniu do faktycznego umieszczania/usuwania sygnałów; więc mogę sobie pozwolić na utratę niewielkiej, liniowej ilości procesora, nie wykonując obliczeń wstępnych, aby uprościć moją logikę. Tak więc proces jest następujący: do wstawiania: Wszystkie sygnały są utrzymywane w granicach sygnału równych rozmiarowi sygnału, więc sygnał rozpocznie się na offsecie, gdzie odchylenie % signalsize=0. Dla rzeczywistego przesunięcia przechodzimy i obliczamy przedziały, które utrzymują tę granicę. Więc jeśli mój sygnał ma rozmiar 4 na rurze o rozmiarze 16, przyjrzę się przedziałom 0-4, 5-7, 8-11, 12-15. Dla każdego przedziału sprawdź, czy całe miejsce w tym przedziale jest wolne. W prostym przypadku mamy przedział, w którym nie ma żadnych sygnałów i po prostu umieszczamy sygnał w tym przedziale. Ważne, patrzymy na interwały w kolejności i umieszczamy nasz sygnał w _pierwszym wolnym_ interwale, co zapewnia przełamanie najmniejszego możliwego 'bloku' (używając terminów znajomego), kiedy dodajemy nasz sygnał. Powinno to odpowiadać podejściu kumpla opisanemu przez im3196; z wyjątkiem bez wstępnego obliczenia bloków. jeśli żaden interwał nie jest całkowicie wolny, musimy dokonać defragmentacji. W tym celu znajdujemy sygnał z najbardziej niewykorzystanymi szczelinami. Jeśli wiele interwałów ma taką samą liczbę niewykorzystanych gniazd, wybierz pierwszy interwał. Następnie znajdujemy największy sygnał w tym przedziale i rekursywnie wywołujemy ten sam algorytm wstawiania dla mniejszego sygnału (z wyjątkiem zaznaczenia przedziału, który wybraliśmy, aby wstawić nasz pierwszy sygnał jako w jakiś sposób niedostępny). To przenosi sygnał w inne miejsce, w którym będzie pasował. Następnie znajdujemy następny najmniejszy sygnał w wybranym przez nas przedziale i robimy to samo, dopóki nie przesuniemy wszystkich sygnałów. Najgorszy przypadek 2^n-1 sygnałów przeniósł się; gdzie N jest liczbą potencjalnych rozmiarów sygnału <=nasz sygnał (przy założeniu, że sygnały są wielokrotnością 2, a następnie N=log2(signalSize)). Oto przykład. * oznacza slot oznaczony jako niedostępny, gdy rekursywnie wywołujemy tę metodę (tj. interwał, w którym metoda wywołująca chciała umieścić swój sygnał, a zatem nie chce, aby wywołanie rekurencyjne próbowało umieścić sygnał) Oto przykład , najprostszy przypadek, jaki udało mi się wymyślić, nadal wykazuje pełną złożoność. Uwaga: poniższa struktura byłaby trudna do stworzenia, ale _mogłaby_ wynikać z podejścia kumpla, gdyby ktoś bardzo się starał. FFFFFFFF__AA_B__EEEE_HGGCC_DII_J Ktoś przepuszcza sygnał Z o rozmiarze 8 wybieramy offset 8: defragInsert(z, rozmiar 8) efektywna struktura: FFFFFFFF__AA_B__EEEE_HGGCC_DII_J umieszczanie sygnału w przedziale: __AA_B__ defragInput(A, rozmiar 2)FFFF*** **** FF *EEEE_HGGCC_DII_J umieść sygnał w przedziale (offset 20) _H defragInput(H, size1) efektywna struktura: FFFFFFFF********EEEE**GGCC_DII_J umieść sygnał pomiędzy C i D powróć defragInput(H, size1) efektywna struktura: FFFFFFFF ********EEEE__GGCCHDII_J umieść H na offsecie 20 teraz, gdy jest otwarte. return defragInput(A, rozmiar 2) efektywna struktura: FFFFFFFF_ ___ _B__EEEEAAGGCCHDII_J przesuń B teraz... defragInput(B, rozmiar1) efektywna struktura: FFFFFFFF* * ***** *EEEEAAGGCCHDII_J miejsce B pomiędzy I i J return defragInput(B, size1) efektywna struktura: FFFFFFFF_ **__** _EEEEAAGGCCHDIIBJ add B return defragInsert(z, rozmiar 8) fianl struc tura: FFFFFFFFzzzzzzzzEEEEAAGGCCHDIIBJ


title: Czy istnieje proste, płaskie, oparte na języku XML rozwiązanie do przechowywania danych z możliwością zapytań?

text: Od dawna poszukiwałem magazynu danych opartego na XML i pomimo ciągłych poszukiwań i ocen, nie znalazłem jeszcze rozwiązania, które spełnia moje potrzeby, które obejmują: 1. Dane są w całości zawarte w węzłach XML, w płaskich plikach tekstowych. 2. Istnieje "natywna" - lub przynajmniej dyskretna - metoda, za pomocą której można wykonywać operacje tworzenia/odczytu/aktualizacji/usuwania (CRUD) na "schemacie". Uznałbym dostęp przez http, XHR, javascript, PHP, BASH lub PERL za dyskretny, zależny od złożoności zestawu zależności. 3. System plików po stronie serwera odczytuje i zapisuje. 4. Element interfejsu po stronie klienta, dostępny w dowolnej przeglądarce bez wtyczki. Niektóre dodatkowe, preferowane (ale opcjonalne) wymagania obejmują: 1. Odpowiadanie na proste zapytania SQL lub zapytania o podobnej składni. 2. Przesyłaj dane na serwer https z gołymi kośćmi, bez "dodatkowych rzeczy", za pośrednictwem XMLHTTPRequest, właściwego HTTP lub JSON. Kilka przemyśleń: To, czego szukam, może być możliwe za pośrednictwem niektórych implementacji serwerowych Java, ale ze względu na to pytanie proszę nie sugerować tego - chyba że spełnia WSZYSTKIE wymagania. Java, zwłaszcza po stronie klienta, nie jest tak naprawdę opcją, ani nie jest atrakcyjna z punktu widzenia programisty.* Wiem, że chodzenie po systemie plików to naciąganie i słyszałem, że jest to możliwe z XPATH lub XSLT, ale o ile ja wiesz, to nie jest gotowe na primetime, ani nawet na rekomendację. Jednak możliwość rekursywnego przechodzenia przez system plików jest potrzebna, aby taki system był użytecznym narzędziem. W tym momencie zasadniczo zaimplementowałem to, co opisałem, ze wszystkich rzeczy, CGI i Bash, ale musi być prostszy sposób. Myśli?


title: Powielanie w równoległych hierarchiach dziedziczenia

text: Używając języka OO ze statycznym typowaniem (takim jak Java), jakie są dobre sposoby reprezentowania następującego niezmiennika modelu bez dużej ilości duplikacji. Mam dwa (właściwie wiele) smaki o tej samej strukturze. Każdy smak wymaga własnych (unikalnych dla tego smaku danych) na każdym obiekcie w tej strukturze, a także niektórych wspólnych danych. Ale w każdym wystąpieniu agregacji dozwolone są tylko obiekty o jednym (tym samym) smaku. FooContainer może zawierać FooSources i FooDestinations oraz asocjacje między obiektami „Foo” BarContainer może zawierać BarSources i BarDestinations oraz asocjacje między interfejsem obiektów „Bar” Container() { List<? rozszerza Źródło> źródła(); Lista<? rozszerza Miejsce docelowe> miejsca docelowe(); Lista<? rozszerza Asocjacje> Asocjacje(); } interface FooContainer() extends Container { List<? rozszerza FooSource> sources(); Lista<? rozszerza FooDestination> destinations(); Lista<? rozszerza FooAssociations> skojarzenia(); } interface BarContainer() extends Container { List<? rozszerza BarSource> sources(); Lista<? rozszerza BarDestination> destinations(); Lista<? rozszerza BarAssociations> Associations(); } interfejs Źródło { String getSourceDetail1(); } interfejs FooSource extends Source { String getSourceDetail2(); } interface BarSource extends Source { String getSourceDetail3(); } interfejs Miejsce docelowe { String getDestinationDetail1(); } interfejs FooDestination extends Miejsce docelowe { String getDestinationDetail2(); } interface BarDestination extends Miejsce docelowe { String getDestinationDetail3(); } Powiązanie interfejsu { Źródło getSource(); Miejsce docelowe pobierzDestination(); } interfejs FooAssociation extends Powiązanie { FooSource getSource(); FooDestination getDestination(); String getFooAssociationDetail(); } interface BarAssociation extends Powiązanie { BarSource getSource(); barDestination getDestination(); String getBarAssociationDetail(); }


title: Zasoby do pisania biblioteki kombinatorów parserów

text: Często używam bibliotek kombinatorów parsera, ale nigdy takiej nie napisałem. Jakie są dobre zasoby na początek? Jeśli ma to znaczenie, używam Julii, języka funkcjonalnego (ale nie leniwego).


title: Z małym zespołem programistów, jak zorganizować wsparcie drugiego poziomu?

text: Załóżmy, że masz zespół 5 programistów, a Twoi wewnętrzni klienci wymagają rozsądnej dostępności wsparcia, powiedzmy 5 dni w tygodniu, od 9:00 do 18:00. Wyobrażam sobie następujące scenariusze: * **klienci podchodzą za każdym razem do tego samego faceta** . Minus: pojedynczy punkt awarii, jeśli facet jest niedostępny. * **każdy programista ma jeden tydzień dyżuru wsparcia**. Minus: jak rozłożyć pracę równomiernie w okresach planowanej (urlop) i nieplanowanej (choroba) niedostępności? * **każdy programista ma przypisany jeden dzień dyżuru wsparcia**. Minus: podobny do powyższego, ale nie tak zły. * **losowo wybrany programista obsługuje zgłoszenie do pomocy**. Minus: może nie fair, patrz wyżej. Jakie masz doświadczenie?


title: Dlaczego rails używa yaml do konfiguracji bazy danych zamiast zwykłego kodu ruby?

text: Większość plików konfiguracyjnych w ruby, takich jak Gemfile, gemspec, to po prostu sam kod ruby. Dlaczego plik konfiguracyjny bazy danych w railach jest wyjątkiem?


title: Dlaczego niedawna zmiana na usuwanie/pomijanie średników z JavaScript?

text: Wydaje się, że ostatnio modne jest pomijanie średników w Javascript. Kilka lat temu pojawił się post na blogu podkreślający, że w JavaScript średniki są opcjonalne, a sedno posta wydawało się takie, że nie należy się nimi przejmować, bo są niepotrzebne. Szeroko cytowany post nie podaje żadnych przekonujących powodów, by _nie_ ich używać, po prostu pominięcie ich ma niewiele skutków ubocznych. Nawet GitHub wskoczył na modę bez średników, wymagając ich pominięcia w każdym wewnętrznie opracowanym kodzie, a niedawne zatwierdzenie projektu zepto.js przez jego opiekuna usunęło wszystkie średniki z bazy kodu. Jego główne uzasadnienia były następujące: * to kwestia preferencji dla jego zespołu; * mniej pisania Czy istnieją inne dobre powody, aby je pominąć? Szczerze mówiąc, nie widzę powodu, aby je pominąć, a już na pewno nie ma powodu, aby wracać do kodu, aby je usunąć. Jest to również sprzeczne z (od lat) zalecaną praktyką, za którą tak naprawdę nie kupuję argumentu „kultu ładunku”. Skąd więc ta cała niedawna nienawiść do średników? Czy zbliża się niedobór? A może to tylko najnowsza moda na Javascript?


title: Dlaczego Microsoft porzucił model RESX dla RESW w aplikacjach Windows Store?

text: Dlaczego firma Microsoft zdecydowała się zmienić system zarządzania zasobami z plików RESX .NET? RESX miał przydatne generowanie kodu, zapewniając programistom automatyczne uzupełnianie nazw zasobów i generowanie bardzo czytelnego kodu IMHO. Nowy format RESW to, o ile mi wiadomo, te same gołe pliki XML, ale bez generowania kodu, co zmusza programistów do pisania większej ilości kodu i pozbawia ich wykrywania błędów w czasie kompilacji.


title: Ścieżka edukacyjna dla web developera .NET lub Java

text: Interesuje mnie, ile rzeczywistych serwerów aplikacji internetowych jest obsługiwanych przez system Windows? Mam zamiar nauczyć się C# i ASP.NET i chcę przekonwertować siebie z dewelopera osadzonego na dewelopera aplikacji sieci Web. Moi przyjaciele powiedzieli mi, że jest o wiele więcej serwerów opartych na Linuksie niż serwerach z systemem Windows. Wspomniał również, że stos umiejętności Java jest znacznie bardziej przydatny niż .NET w świecie aplikacji internetowych. Moje doświadczenia z Javą i C# są mniej więcej takie same. Jestem jednak doświadczonym programistą C++. Czy ktoś może mi coś zasugerować? Wielkie dzięki


title: Test programowania

text: > **Możliwy duplikat:** > Dobre projekty związane z programowaniem rozmów kwalifikacyjnych Zamierzamy zatrudnić więcej programistów Java do naszego zespołu i planujemy przetestować ich umiejętności kodowania za pomocą testu. Obecnie korzystamy z internetowego testu Java, który automatycznie kompiluje i uruchamia kod, ale jest on bardzo niestabilny i mamy problemy z tym, że nasi kandydaci tracą pracę w tej witrynie. Jest to nie tylko frustrujące dla wszystkich, ale także sprawia, że wyglądamy, jakbyśmy nie wiedzieli, co robimy. Czy istnieje popularny zestaw testów? Czego używasz? **Nie** interesują mnie dogmatyczne argumenty, czy powinnam w ten sposób testować swoich kandydatów, szukam narzędzia, które mi w tym pomoże.


title: Projekt do korzystania z własnego API

text: Dlatego planuję użyć interfejsów API dla mojej aplikacji hosta. Ale interfejsy API są zbudowane w taki sposób, że wymagają klucza sesji dla każdego żądania. Więc moje pytanie brzmi: jak przetestować mój interfejs API? Bo najwyraźniej myślę o stworzeniu „specjalnego” klucza dla mojej aplikacji hosta (bo nie ma sensu prosić o klucz do własnego użytku), ale każdy, kto sprawdza nagłówki żądania, może to znaleźć klucz i dosłownie go używać i omijać żądanie własnych kluczy. Być może istnieje najlepsza praktyka testowania własnego interfejsu API bez specjalnego klucza lub w inny sposób, aby odróżnić, czy żądanie pochodzi z aplikacji hosta, czy z publicznego. Nie mogłem też użyć IP do rozróżnienia, ponieważ publiczność może używać tego samego serwera do wywoływania interfejsów API. Tak po prostu jest i jest to jedno z ograniczeń, o których należy pamiętać.


title: Członkowie Komitetu C++?

text: Szukałem w Internecie informacji o tym, jacy ludzie (i ich pochodzenie) są w komitecie C++. Jednak ku mojemu zdziwieniu nie znalazłem żadnych takich informacji. Gdzie mogę znaleźć informacje o członkach komitetu C++?


title: Jak zarządzać projektem na dużą skalę w node.js zachowując wszystko asynchronicznie?

text: Mam duży moduł, który musi przetwarzać ponad 10 tys. żądań/odpowiedzi na sekundę. Każde żądanie ma json i trzeba go przetworzyć i zweryfikować w bazie danych oraz wygenerować odpowiedź na podstawie zapytania db. Oto przykład Function 1 function ('/get' , fucntion (req1 , res1 , next ){ //aby przetworzyć wymagane dane processData(req1 , res1 ); }); Funkcja 2 processData(req1 , res1 ){ var J = JSON.parse (req1.body) //musi trzykrotnie odczytać db //przetworzyć json buduje odpowiedź i zwraca condtionCheck(J , res1){ var a = someVlaue (){ //wybierz wartość z kolekcji zbioru nosql, który ma //więcej niż 1000 dokumentów i // muszę itrate pętlę for, aby sprawdzić warunek .....etc //...... ..... } ........ dataRead(var a , res1){ // czy można tutaj wysłać odpowiedź dla obiektu req1 res1.send({value b: abcd123}) } } } Funkcja 3 ..... i tak dalej Głównym problemem jest cały kod, który napisałem wewnątrz procesu da ta jest synchroniczne. Bacaue każdy kod zależy od poprzedniego oddzwaniania i jest tak wiele sprawdzania warunków, które są używane kilka razy. Czyli dobrze jest umieścić tak duże przetwarzanie w sposób synchroniczny wewnątrz węzła ? Jeśli napiszę kod przy użyciu asynchroniczności, czasami cały scenariusz znalazł się w stanie zakleszczenia Jak uniknąć takiego zachowania? Czy async lub funkcja step ma wpływ na wydajność? Na takiej serii funkcji jak możemy zmniejszyć opóźnienie?


title: Dlaczego nauczyciele CS powinni przestać uczyć apletów?

text: Dlaczego nauczyciele CS powinni **przestać** uczyć apletów Java? Jako weteran apletów i forów uważam, że nadszedł czas, aby wezwać nauczycieli do zaprzestania nauczania apletów w ogóle, a zwłaszcza apletów opartych na AWT. Aplety to zaawansowany i wyspecjalizowany rodzaj aplikacji. które ma niewiele miejsca w otaczającym nas świecie rzeczywistym (większość czynności wykonywanych przez aplety można lepiej osiągnąć za pomocą JavaScript i HTML 5).


title: Jak zaprogramować coś z oczekiwaniem, że zadziała za pierwszym razem?

text: Miałem przyjaciela na studiach, który zaprogramował coś, co zadziałało za pierwszym razem, to było całkiem niesamowite. Ale jeśli chodzi o mnie, po prostu odpalam debugger, gdy tylko w końcu dostanę to, nad czym pracuję nad kompilacją - oszczędza mi czas (oczywiście żartuję, czasami mam trochę nadziei lub używam dużo z góry zaplanowanego debugowania smyczki). Jaki jest najlepszy sposób podejścia do ideału Dijkstrain dla naszych programów? -albo- Czy to tylko jakiś rodzaj piekielnego dążenia do wielkości starego głupca, który ma zastosowanie tylko do skończonych zadań, na które nikt nie powinien mieć nadziei w naszym życiu zawodowym, ponieważ programowanie jest po prostu zbyt skomplikowane?


title: Jakie zasady HR uniemożliwiają znalezienie zdolnych programistów?

text: W trakcie rozmowy kwalifikacyjnej dajemy kandydatowi test z programowania oraz problem projektowania programowania. Nasz dział HR powiedział nam, abyśmy przestali administrować testem programistycznym z powodu obaw prawnych. To naprawdę utrudniłoby nam możliwość sprawdzania kandydatów. Czy istnieją inne zasady HR, które uniemożliwiają zatrudnianie zdolnych programistów?


title: W jaki sposób maszyna wirtualna stosu zarządza tylko jednym stosem?

text: Ostatnio zadaję tutaj wiele pytań dotyczących maszyn wirtualnych. Oto kolejny: rozumiem, że często maszyny wirtualne oparte na stosie używają tylko jednego stosu – stosu wywołań – do wszystkiego. Np. służy również do oceny wyrażeń arytmetycznych. To, czego nie rozumiem, to jak to bardzo nie komplikuje sprawy? Pokażę na przykładzie, o co mi chodzi. Proszę wziąć pod uwagę następujący program pseudokodowy: func main: funcA() func funcA: 2 + 4 * 8 To skompiluje się do następującego kodu bajtowego: main: call funcA end funcA: push 2 push 4 push 8 mult add end (W tym kodzie bajtowym, program zaczyna się od `main:`. `call` odkłada licznik programu na stos i skacze do określonej etykiety. Kiedy osiągany jest `koniec`, wierzchołek stosu - zakładany jako numer linii - jest zdejmowany i skaczemy tam.) Zobaczmy więc, co się tutaj dzieje: W `call funcA` odkładamy licznik programu (tj. numer następnego wiersza) na stos. Następnie przechodzimy do `funcA`. W `funcA` dokonuje się pewnych obliczeń. Po obliczeniu liczba „34” pozostaje na szczycie stosu. Kiedy dochodzimy do `end`, zdejmujemy wierzchołek stosu, zakładając, że jest to numer wiersza, do którego powinniśmy powrócić. Ale tak nie jest, numer wiersza, do którego należy wrócić, jest ukryty pod spodem. Skąd `koniec` powinien o tym wiedzieć? Aby uniknąć całego tego bałaganu, możemy po prostu mieć osobny stos danych i stos wywołań, a nie mieszać tych dwóch. Więc moje pytanie brzmi: dlaczego niektóre maszyny wirtualne (takie jak JVM) używają jednego stosu do wszystkiego, a kiedy to robią: jak radzą sobie z sytuacjami takimi jak ta opisana powyżej?


title: Licencja typu Open Source

text: Chcę wiedzieć, czy istnieje licencja podobna do GPL, ale zezwalająca tylko na dystrybucję źródłową (to nie jest dystrybucja binarna). Dlaczego tego chcę? Chodzi o to, aby inni programiści mogli czerpać korzyści z oprogramowania open source, ALE również zachowali kontrolę nad konsumencką dystrybucją binarną. W szczególności chcę zapobiec wybieraniu mojego oprogramowania przez organizacje takie jak dystrybutorzy Linuksa. Chcę, aby użytkownicy mojego oprogramowania pobierali pliki binarne tylko z mojej witryny. czy to możliwe? Dziękuję


title: Wsparcie Silverlight od Microsoft

text: Słyszałem, że Silverlight nie będzie już wspierany przez Microsoft. To prawda? Jeśli tak, czy ktoś mógłby podzielić się ze mną ogłoszeniem Microsoftu? A jeśli istnieją już aplikacje opracowane przez Silverlight, do jakiej nowej technologii należy migrować? z góry dzięki, Lin


title: Czy należy zakodować dane na sztywno we wszystkich testach jednostkowych?

text: Większość samouczków/przykładów dotyczących testowania jednostkowego zwykle obejmuje definiowanie danych, które mają być testowane dla każdego testu. Myślę, że jest to część teorii „wszystko powinno być testowane w izolacji”. Jednak odkryłem, że w przypadku aplikacji wielowarstwowych z dużą ilością DI, kod wymagany do skonfigurowania każdego testu jest bardzo długi. Zamiast tego zbudowałem wiele klas bazowych testowych, które mogę teraz dziedziczyć, i które mają wiele gotowych szkieletów testowych. W ramach tego buduję również fałszywe zestawy danych, które reprezentują bazę danych uruchomionej aplikacji, aczkolwiek zwykle z jednym lub dwoma wierszami w każdej „tabeli”. Czy przyjętą praktyką jest wstępne definiowanie, jeśli nie wszystkich, to większości danych testowych we wszystkich testach jednostkowych? **Aktualizacja** Z poniższych komentarzy wydaje się, że robię więcej integracji niż testów jednostkowych. Mój obecny projekt to .net MVC, używający Unit of Work over EF Code First i Moq do testowania. Wyśmiewałem UoW i repozytoria, ale używam prawdziwych klas logiki biznesowej i testuję akcje kontrolera. Testy często sprawdzają, czy UoW został zatwierdzony, np.: [TestClass] public class SetupControllerTests : SetupControllerTestBase { [TestMethod] public void UserInvite_ExistingUser_DoesntInsertNewUser() { // Arrange var model = new Mandy.App.Models.Setup.UserInvite() { E-mail = userData.First().Email }; // Działaj setupController.UserInvite(model); // Assert mockUserSet.Verify(m => m.Add(It.IsAny<UserProfile>()), Times.Never); mockUnitOfWork.Verify(m => m.Commit(), Times.Once); } } `SetupControllerTestBase` buduje makiety UoW i tworzy instancję `userLogic`. Wiele testów wymaga posiadania istniejącego użytkownika lub produktu w bazie danych, więc wstępnie wypełniłem to, co zwraca mock UoW, w tym przykładzie `userData`, który jest po prostu `IList<User>` z jednym użytkownikiem nagrywać.


title: Czy wzorzec przekazywania w jednym obiekcie zamiast wielu parametrów do konstruktora ma nazwę?

text: Jeśli masz konstruktora, który przyjmuje wiele parametrów, na przykład: public OrgUnitsHalRepresentation(List<OrgUnitSummaryHalRepresentation> orgUnitSummaryHalRepresentationList, int count, int providedCount, int total, int page, int filterLimit, boolean hasNextPage, boolean isDefaultCounter) klasa, która nie pobiera niczego w konstruktorze i ustawia te parametry za pomocą seterów i przekazuje to do konstruktora: public OrgUnitsHalRepresentation(Pagination(Nazwa wzorca) p) Czy to ma nazwę, abym mógł go użyć w nazwie mojej klasy?


title: Kolokacja w kodzie

text: Pamiętam, że jakiś czas temu czytałem artykuł z 'Joel on Software', który wspominał o kolokacji informacji w kodzie. Przez kolokację rozumiem, że istotne informacje o kodzie są obecne, gdy kod jest. Obecnie piszę artykuł, w którym jest trochę o kolokacji, więc poszedłem szukać źródeł i znalazłem cytat w artykule 'Making Wrong Code Look Wrong' > Aby kod był naprawdę, naprawdę solidny podczas kodowania -przejrzyj to, musisz mieć konwencje kodowania, które pozwalają na kolokację. Innymi słowy, im więcej informacji o tym, co robi kod, znajduje się tuż przed Twoimi oczami, tym lepszą pracę wykonasz w znajdowaniu błędów. Kiedy masz kod >, który mówi Dla mnie, kolokacja to nie tylko sam kod, ale narzędzie używane do przeglądania kodu. Jeśli może to pomóc w „współczynniku kolokacji” (termin ukuty przeze mnie?), wierzę, że może pomóc w produktywności programistów. Weźmy na przykład nowoczesne IDE, które pokazują typ zmiennych, najeżdżając na nie. **Czy ich inne artykuły są napisane na temat kolokacji w kodzie i/lub czy ich inne terminy są znane?**


title: Jakieś badania empiryczne porównujące wskaźniki niepowodzeń projektów IT z innymi dziedzinami?

text: Projekty IT są legendarne ze względu na wysoki wskaźnik awaryjności, przekroczenia kosztów i przekroczenia harmonogramu. Stąd motywacje do takich pytań. Czy istnieją jakiekolwiek rzeczywiste badania empiryczne, które porównują wskaźniki niepowodzenia projektów informatycznych z projektami w innych dziedzinach, w szczególności z dziedzinami inżynierii? Na przykład, czy ktoś porównywał przekroczenia kosztów i harmonogramów w projektach informatycznych z projektami budowlanymi o porównywalnym zakresie? Powinny tu być publicznie dostępne dane z projektów rządowych, ale nie znam nikogo, kto by przeprowadzał porównania.


title: Czy można użyć rendererów HTML RubyGnome2/QtRuby do stworzenia interfejsu użytkownika dla skryptu Rubiego?

text: Chciałbym stworzyć graficzny interfejs użytkownika dla mojego skryptu, zamiast uruchamiać go z konsoli. Zdaję sobie sprawę, że istnieje wiele bibliotek UI dla Rubiego, ale dobrze znam HTML i CSS i chciałbym ich użyć do zbudowania interfejsu. Więc pytanie brzmi: czy można użyć biblioteki renderującej HTML do stworzenia takiego interfejsu użytkownika? Z tego, co rozumiem, stosunkowo łatwo jest umieścić coś w widoku renderowanym w formacie HTML, ale czy można komunikować się z powrotem za pomocą skryptu? Na przykład, kiedy naciskam ten duży czerwony przycisk, to faktycznie mówi skryptowi, aby na niego działał? Oczywiście jest to możliwe, jeśli skrypt działa po stronie serwera, ale chciałbym uruchomić go jako aplikację desktopową.


title: Dlaczego programiści mieliby ignorować normy ISO?

text: Jedną z rzeczy, na które często się natykam, są problemy powodowane przez programy, które nie są zgodne ze standardami ISO. Przykładem może być nieużywanie tabel krajów ISO, ale wymyślanie własnych skrótów, co jest w porządku dla Stanów Zjednoczonych (USA) lub Holandii (NL), ale jest spektakularnie złe w przypadku Wielkiej Brytanii (GB, nie UK) lub Hiszpanii (ES, nie SP) i wiele innych krajów. Jako inny przykład, wewnętrzne zapisy dat. Dlaczego ktokolwiek miałby przechowywać datę jako 01/02/2014? Zupełnie nie wiadomo, czy to 1 lutego, czy 2 stycznia, natomiast jeśli stosujesz normę ISO, to po prostu przechowujesz 2014-02-01* i jest to jednoznacznie 1 lutego. Moje pytanie: Kiedy i dlaczego programista powinien tworzyć własne konstrukcje, gdy jest dostępny standard ISO? * Przechowuj 2014-02-01 i odpowiednio sformatuj datę podczas pokazywania jej użytkownikowi końcowemu.


title: Dlaczego warto używać Pascala z Cocoa/Cocoa Touch?

text: Jestem zaskoczony, że może być możliwe użycie Pascala z frameworkami Cocoa i Cocoa Touch. Jest to interesujący obrót wydarzeń, ponieważ Pascal był ulubionym językiem dla rozwoju komputerów Mac przez krótki czas na początku historii Macintosha. Wygląda na to, że ktoś zadał sobie wiele trudu, aby Pascal działał z frameworkami Objective-C, takimi jak Cocoa i Cocoa Touch, ale nie jestem pewien, czy widzę sens. Czy jest to głównie schronienie dla programistów Pascala pochodzących z innych środowisk programistycznych, takich jak Delphi, czy też istnieją przekonujące powody, aby używać Pascala zamiast Objective-C lub innych języków. Nie chcę pytać, który język jest „lepszy”. Zastanawiam się tylko, czy istnieje powód poza preferencją językową, dla którego ktoś wybrałby Pascala dla rozwoju MacOS X lub iOS.


title: Jak utworzyłbyś mobilną (Android) witrynę wiki offline?

text: Z góry przepraszam, jeśli nie jest to dobre forum dla tego pytania; wskazówki do innych szczęśliwie akceptowane. Jeśli ma to znaczenie, nie zamierzam skomercjalizować tego pomysłu ani niczego; jeśli coś tutaj jest dla ciebie interesujące, użyj tego, jak uznasz za stosowne. Moim podstawowym problemem jest to, że moim ulubionym miejscem do pisania bez kodu (eseje, beletrystyka, itp.) jest mój telefon z Androidem, kiedy jestem w podróży. Wspomniane podróżowanie często powoduje, że telefon traci cały sygnał/połączenie internetowe. Chciałbym, aby system, który w jakiś sposób synchronizował się automatycznie z telefonem, można było napisać w stylu dość wiki (tj. linki są obsługiwane, ale nie muszę pisać, a także łatwo edytować na zwykłym komputerze, gdy potrzebne. Wolałbym, aby edytowanie przez telefon było jak najbardziej zbliżone do zwykłego tekstu, ponieważ taka drobna manipulacja wymagała ustawienia pogrubienia lub cokolwiek innego, co jest uciążliwe; wolałbym po prostu móc coś przepisać. Fajnie -to-have to możliwość współpracy nad dokumentami przez inne osoby. Bardzo fajną rzeczą jest uwierzytelnianie, dzięki czemu niektóre dokumenty mogą być prywatne, bez konieczności wchodzenia w tarapaty uwierzytelniania. Naprawdę wydaje się, że nie ma coś takiego istnieje.Dwie opcje, o których myślałem, aby to zaimplementować: 1. Teraz, gdy istnieje odpowiednia aplikacja do synchronizacji dwukierunkowej (https://play.google.com/store/apps/details?id =com.ttxapps.dropsync ), mógłbym po prostu użyć edytora zwykłego tekstu na telefonie i mieć prostą aplikację internetową, która prezentuje tekst za pośrednictwem wiki pewnego rodzaju bibliotekę znaczników z odpowiedniego folderu skrzynki. Zalety: Martwe proste. Wady: brak łatwego uwierzytelniania lub współpracy. 2. Mógłbym korzystać z Dokumentów Google i mieć niezbyt prostą aplikację internetową, która pobiera stamtąd dokumenty, traktuje je jako tekst wiki, może trochę kasuje i prezentuje je jako spójną witrynę internetową. Zalety: Jeśli uda mi się uzyskać prawidłowe uwierzytelnienie, uwierzytelnianie i współpraca są bezpłatne. Wady: O wiele bardziej złożony, a to tylko jednorazowy osobisty projekt. Jestem ciekaw, czy czegoś nie przegapiłem, innych prostszych sposobów rozwiązania tego problemu. Właściwie jestem trochę zaskoczony, że nikt nie pomyślał o wspieraniu wiki w Dokumentach Google; jest wiki aplikacji Google, ale to prawie wymaga przeglądarki AFAICT, podczas gdy istnieje kilka aplikacji Google Doc na prawie wszystko z opcjami synchronizacji w trybie offline.


title: Mając pomysł na aplikację, jak mam zdecydować, których technologii internetowych użyć?

text: Tło: Jestem doświadczonym programistą Java, znam podstawowy Javascript, HTML i CSS (i łatwo jest mi się dowiedzieć, jak coś zrobić) i mam niewielkie doświadczenie w Pythonie. Widziałem już Rubiego i edytowałem kilka linijek istniejących skryptów. Ciekawi mnie nie tyle dana technologia, co przede wszystkim to, jaki powinien być mój proces myślowy przy podejmowaniu decyzji, których technologii użyć. Weźmy prostą aplikację - może książkę adresową online, w której mogę wprowadzić dane kontaktowe i utworzyć grupy kontaktów. Jak powinienem przejść do oceny dostępnych opcji? Liczba dostępnych struktur jest co najmniej zniechęcająca. Powinno to być dla mnie pouczające doświadczenie, ale też chcę, aby wiedza, którą zdobywam, była istotna i boję się użyć czegoś, z czego już nigdy więcej nie skorzystam.


title: Czy potencjalny pracodawca może prosić Cię o podjęcie decyzji bez pełnych informacji?

text: ## Historia Obecnie szukam nowej pracy. Kilka dni temu odbyłem dwa wywiady z potencjalnymi pracodawcami, z których obaj wyrazili zainteresowanie drugim spotkaniem. * Firma A poprosiła mnie, abym dziś przyszedł porozmawiać. Nie było dalszego wywiadu, po prostu złożyli mi ofertę i wyjaśnili warunki. * Firma B umówiła mnie na jutrzejszą ocenę praktyczną, po której poznam ich ostateczną odpowiedź w ciągu tygodnia. Jestem całkowicie przekonany, że złożą mi również ofertę, a ponadto, że będzie to korzystniejsze finansowo od oferty firmy A. Ponieważ firma A zaoferowała ją jako pierwsza, powiedziałem im, że nie mogę ocenić ich oferty, zanim firma B również poinformuje mnie o swojej decyzji . To nie pasowało do osoby, z którą rozmawiałem (dyrektor operacyjny). Oto jego dwa główne zarzuty i sedno moich odpowiedzi: * _ „Nie chcemy być niczyją drugą najlepszą opcją”_ Wyjaśniłem, że w rzeczywistości była to moja pierwsza opcja, ponieważ wszystkie inne rzeczy są równe, wolałbym pracować dla nich. Ponadto, ponieważ spotkanie było chronologicznie pierwsze, naprawdę nie mogłem być z nimi szczery bez poinformowania ich o tym; więc nie chodzi o to, bym była moją drugą opcją, ale raczej o to, żebym był równo przy stole negocjacyjnym. * _ „Nie możemy się doczekać, aż podejmiesz decyzję”_ Wyjaśniłem, że jak na pewno rozumieją, podjęcie decyzji bez oceny wszystkich alternatyw byłoby działaniem wbrew moim własnym interesom. Ponadto umiejętności i modus operandi oceny przed podjęciem decyzji są zdecydowanie czymś, czego będą ode mnie oczekiwać w pracy (i czymś, co uwzględniło ich decyzję o złożeniu oferty). Wreszcie istnieje sztywny limit tego, jak długo będą musieli czekać na odpowiedź (tydzień); Zgłosiłem się również na ochotnika, aby powiedzieć firmie B „Byłbym wdzięczny, gdybyś jak najszybciej poinformował mnie o swojej ostatecznej decyzji, ponieważ rozważam również inną ofertę”. ## Fakty W tym momencie jestem prawie pewien, że firma A chce mnie po prostu zastraszyć i zmusić do podjęcia nieświadomej decyzji. Dowodami na ten wniosek są: * Ich twarda gra podczas pierwszego wywiadu, który był dość intensywny i nieco niewygodny. Początkowo uzasadniałem to ich poczuciem technicznej doskonałości, ale po tym drugim spotkaniu ponownie się zastanowiłem. W końcu, gdyby powodem ich zachowania była dla mnie zbyt wysoka poprzeczka, to złożenie mi oferty bez żadnego innego kroku pośredniego nie byłoby logiczne. *Pierwszy wywiad przeprowadzony głównie w trybie „senior staff” (zadali tylko dwa pytania z prostymi i konkretnymi odpowiedziami technicznymi, co zajęło może minutę z prawie dwóch godzin całkowitego czasu), ale ich oferta dotyczyła niższego stanowiska . * Ich złowieszcze odniesienia do tego, jak zła jest obecnie sytuacja w zakresie zatrudnienia w Grecji, gdzie mieszkam; rzeczy takie jak „zawsze płacimy na czas i w euro” (z oczywistą sugestią, że w przypadku niewypłacalności Grecji nie będzie to miało wpływu, ponieważ prowadzą interesy tylko z klientami w USA). Uważam to za czysty FUD. * Ich naleganie, abym udzielił im odpowiedzi najpóźniej do jutra. Jestem prawie pewien (dzięki innym posiadanym przeze mnie informacjom), że nie rozważają żadnego innego pracownika na to samo stanowisko; raczej dla nich jest to pytanie „czy wybieramy tego faceta, czy nie?”. Poza tym, jaki pracodawca zgodziłby się zapisać Cię dzisiaj, ale odmówić przyjęcia w przyszłym tygodniu? I dlaczego mieliby prosić mnie, żebym zachowywał się w sposób, który zdradza cię jako kogoś, kogo _nie chcieliby_ zatrudnić? To nie ma sensu. W uczciwy sposób powinienem również wspomnieć, że ci ludzie _wygląda na_, że osiągnęli wysoki wynik testu Joela w środowisku, w którym mediana wyniku wynosi zero lub jeden (w przypadku korzystania z kontroli wersji). Wygląda na to, że ich codzienne operacje są znacznie lepsze niż większość innych sklepów IT w okolicy. Pracują tylko z klientami z USA, co oznacza, że osiągają poziom profesjonalizmu, powiedzmy, _niezwykły_ tutaj w Grecji. ## Morał? Czy jest jakieś przekonujące uzasadnienie, dlaczego potrzebowaliby odpowiedzi w ciągu najwyżej dwóch dni? Zwłaszcza, że powiedziałem im, że spodziewam się kolejnej oferty _i_ najgorszy scenariusz jest odpowiedzią w ciągu tygodnia? A może mam rację, zastanawiając się, czy w ogóle chcę dla nich pracować? Dziękuję za cenny wkład.


title: Jaki jest właściwy żargon odnoszący się do zmiennej umieszczonej w zamknięciu funkcji?

text: W JavaScript nie ma czegoś takiego jak „prywatna” zmienna. Aby osiągnąć enkapsulację i ukrywanie informacji w JavaScript, mogę owinąć zmienną wewnątrz zamknięcia funkcji, na przykład: var counter = (function() { var i = 0; var fn = {}; fn.increment = function() { i++; }; fn.get = function() { return i; }; return fn; {)(); licznik.przyrost(); licznik.przyrost(); alert(licznik.get()); // ostrzega '2' Skoro nie nazywam `i` prywatną zmienną w JavaScript, jak mam to nazwać?


title: Niestandardowe szablony żądań

text: Jakich informacji potrzebujesz od zespołu zarządzającego projektem, zanim przystąpisz do realizacji projektu? Czy istnieje pewien format, którego używają w żądaniach programowania, który pomaga dokładnie zrozumieć, w jaki sposób zespół programistów może odnieść sukces w tym projekcie. Przykład: Zawsze lubię, gdy kierownicy projektów wyśmiewają formularze. Znacząco pomaga wiedzieć, w jaki sposób wizualizują interfejs użytkownika dla wielu zadań. Wszelkie sugestie, w jaki sposób możemy pomóc zespołowi zarządzania projektami w wydawaniu wniosków programowych, które są tak jasne, jak dzień, będą mile widziane. Dziękuję.


title: Dlaczego świat .Net wydaje się obejmować magiczne ciągi zamiast statycznie wpisanych alternatyw?

text: Tak więc pracuję w .Net. Tworzę projekty open source w .Net. Jednym z moich największych problemów nie jest konieczność korzystania z .Net, ale z otaczającą go społecznością i frameworkami. Wszędzie wydaje się, że magiczne schematy nazewnictwa i łańcuchy są traktowane jako najlepszy sposób na zrobienie wszystkiego. Pogrubiona instrukcja, ale spójrz na nią: ASP.Net MVC: Hello world route: route.MapRoute( "Default", // Nazwa trasy "{controller}/{action}/{id}", // URL z parametrami new { controller = "Home", action = "Index", id = "" } // Parametry domyślne ); Oznacza to, że ASP.Net MVC w jakiś sposób wyszuka `HomeController` w twoim kodzie. W jakiś sposób stwórz nową instancję tego, a następnie wywołaj funkcję `Index` najwyraźniej z jakimś parametrem `id`. A potem są inne rzeczy, takie jak: RenderView("Kategorie", kategorie); ...lub... ViewData["Foobar"]="meh"; Są też podobne rzeczy z XAML. `DataContext` jest traktowany jako obiekt i musisz mieć nadzieję i modlić się, że zostanie rozwiązany do pożądanego typu. DependencyProperties musi używać magicznych ciągów i magicznych konwencji nazewnictwa. I takie rzeczy: MyData myDataObject = new MyData(DateTime.Now); Wiązanie myBinding = new Binding("MyDataProperty"); myBinding.Source = myDataObject; Chociaż opiera się bardziej na rzucaniu i różnych magicznych podporach runtime. W każdym razie mówię to wszystko, aby zakończyć tutaj: Dlaczego jest to tak dobrze tolerowane w świecie .Net? Czy nie używamy statycznie wpisanych języków, aby prawie zawsze wiedzieć, jakie są rodzaje rzeczy? Dlaczego odbicie i typ/metoda/właściwość/jakiekolwiek nazwy (jako ciągi) są tak preferowane w porównaniu z rodzajami i delegatami, a nawet generowaniem kodu? Czy istnieją powody dziedziczenia, których brakuje mi, dlaczego składnia routingu ASP.Net opiera się prawie wyłącznie na odbiciu, aby rzeczywiście rozwiązać problem z obsługą trasy? Nienawidzę, kiedy zmieniam nazwę metody lub właściwości i nagle coś się psuje, ale wydaje się, że nie ma żadnych odniesień do tej metody lub właściwości i oczywiście nie ma błędów kompilatora. Dlaczego pozorna wygoda magicznych sznurków została uznana za „wartą tego”? Wiem, że są też powszechnie pisane statycznie alternatywy dla niektórych rzeczy, ale zwykle zajmują one tylne siedzenie i wydają się nigdy nie być w samouczkach lub innych materiałach dla początkujących.


title: Propozycja nowego stanowiska w pracy

text: Mam w pracy pomysł na nowe stanowisko Product Managera w naszym biurze. Współpracuję z kilkoma programistami i byłoby pomocne, gdyby ktoś pracował jako „Scrum Master”, dzieląc zadania i upewniając się, że są kompletne. Stanowisko to obecnie nie istnieje, ale mam wrażenie, że mam wystarczające dowody na to, że jest ono bardzo pomocne dla naszego biznesu. Jak najlepiej przedstawić tę propozycję mojemu szefowi? Czy znasz jakiś konkretny szablon na nowe stanowisko? Powinna być w stanie opisać kwalifikacje na stanowisko, ich obowiązki i jakich mierników użyjemy do ich pomiaru. **AKTUALIZACJA** Zgodnie z sugestią Anny podałam więcej szczegółów na temat tego konkretnego stanowiska. Jednak najlepiej byłoby, gdybym w najbardziej ogólny sposób zaprezentował nowe stanowisko mojemu szefowi.


TODO wskazuje „zadanie do wykonania”, FIXME do naprawienia itp. Czy istnieje tag kodu wskazujący „potrzebę poprawy” w komentarzach do kodu?


title: Właściwa konfiguracja Git między projektantami a programistami?

text: Zasadniczo mamy teraz 2 programistów do projektu iOS, 2 programistów do projektu na Androida i 1 projektanta zajmującego się projektami dla obu projektów. Obecnie sposób, w jaki wymieniamy się projektami i obrazami, odbywa się za pośrednictwem poczty… więc nie jest zbyt zaawansowany ani wydajny. Przechodzimy na Dropbox, ale wydaje mi się, że moglibyśmy pójść o krok dalej i jakoś zintegrować ten proces z Git. W przypadku projektu iOS używamy Git i myślę, że dobrym pomysłem może być wprowadzenie projektanta również do Git. Problem polega na tym, że będąc projektantem, może być mu trochę trudno zrozumieć kontrolę wersji źródła. Jako dwaj deweloperzy iOS prawdopodobnie będziemy wykonywać wiele zmian, rozgałęziania, łączenia, ale projektant najprawdopodobniej będzie musiał tylko od czasu do czasu aktualizować obrazy. Chcielibyśmy, aby konfiguracja była jak najprostsza (szczególnie dla projektanta). Używamy GitHub, więc ich aplikacja OSX może się do tego bardzo przydać. Czy ktoś inny ma doświadczenie lub najlepsze praktyki dotyczące konfigurowania rozgałęzień/scalania i integrowania projektanta z technicznym projektem Git? Mile widziane są również artykuły, wpisy na blogach itp.


title: Budowanie systemu filtrów podobnego do WordPress

text: To pytanie jest czysto hipotetyczne. Dużo korzystam z WordPressa i znam strukturę filtrów z punktu widzenia implementacji. Zastanawiam się teraz, jaki jest najlepszy sposób na zaimplementowanie takiej struktury (nie tak, jak używa WordPress, ale _najlepszy_ sposób). Przedstawię krótki przegląd struktury filtra WordPress. Następnie wymienię moje wymagania i przemyślenia. Na koniec zadam kilka pytań. ### Struktura filtrów WordPressa WordPress wysyła prawie wszystkie dane przez _funkcję filtra_, zanim wyśle je do przeglądarki. Kodeks WordPress zawiera informacje w interfejsie API wtyczek i referencji filtra. Dla twórców wtyczek dodanie filtra jest dość łatwe: > 1. Utwórz funkcję PHP, która filtruje dane. > 2. Podłącz do filtra w WordPressie, wywołując `add_filter()` > 3. Umieść swoją funkcję PHP w pliku wtyczki i aktywuj ją. > Przyjrzyjmy się tym krokom bardziej szczegółowo: 1. Funkcja filtrująca to funkcja PHP, która pobiera jeden parametr, wejście i zwraca wyjście. Nie powinno niczego „echo” ani „drukować”. 2. Funkcja `add_filter` (odniesienie) wygląda następująco: add_filter ( 'hook_name', 'your_filter', [priorytet], [accepted_args] ); `hook_name` to _haczyk akcji_, przy którym powinien być wywoływany filtr. `Twój_filtr` to nazwa funkcji filtrującej. `priority` nadaje, cóż, priorytet filtra (domyślnie: 10), gdzie niższe liczby są ważniejsze. `Accepted_arguments` mówi WordPressowi, że funkcja filtrowania przyjmie więcej parametrów, ale zostawmy to tutaj, nie jest to jedno z moich wymagań. 3. Myślę, że nie muszę wyjaśniać tego kroku. ### Wymagania Chciałbym się dowiedzieć, jak zaimplementować strukturę filtrów, taką jak WordPress, i aby odpowiedzieć na pytanie, wymyśliłem hipotetyczny przypadek z kilkoma wymaganiami. Mój przypadek to forum, w którym mam kilka przypadków, w których chciałbym użyć filtrów dla treści, takich jak: * Filtr linkify, aby przekształcić gołe adresy URL w ładne, działające hiperlinki * Filtr emotikonów zastępujący emotikony ASCII, takie jak ' :D' w obrazek ![tutaj podaj opis obrazka](http://i.stack.imgur.com/IRi6N.gif) (przepraszam za nadużycie imgura) Myślę, że korzyści z używania filtrów to: * Przejrzystość kodu * Filtry mogą być łatwo ponownie użyte * Ułatwienie implementacji, dzięki której użytkownik może włączać i wyłączać filtr * Łatwa implementacja dodatkowych filtrów w przyszłości ### Wyobrażam sobie, że WordPress przechowuje wielowymiarową tablicę, taką jak `$filtry[ $hak][$filtr]`. Oto `$hook` nazwa podpięcia, kiedy filtr ma zostać wywołany, a `$filter` tablica ustawień filtra, w zasadzie tych, które zostały przekazane do funkcji `add_filter()`. Po osiągnięciu punktu zaczepienia akcji WordPress może iterować przez tablicę `$filters[$current_hook]` i wykonać każdy filtr. ### Pytania 1. Czy to najlepszy sposób na włączenie systemu filtrowania z wymienionymi przeze mnie wymaganiami? Jeśli tak, dlaczego? Jeśli nie, dlaczego nie; a jaki byłby lepszy system i dlaczego? 2. Jak powiedziałem, chcę, aby użytkownicy mogli włączać i wyłączać filtry. Pomyślałem o dodaniu kolumny `enabled_filters` do tabeli użytkowników w bazie danych, która byłaby maską bitową włączonych filtrów. Oznaczałoby to, że każdy filtr miałby unikalny identyfikator, ale co ważniejsze, nie ma zbyt wielu możliwych filtrów. Więc to nie byłaby droga. Pomyślałem również o dodaniu tabeli `enabled_filters` z kolumnami `userId`, `filterName` i `enabled`, aby włączać i wyłączać filtry w nowym wierszu. Użycie nazwy filtra w każdym wierszu kosztowałoby trochę miejsca na dane dla wielu użytkowników i filtrów, więc lepszym, ale podobnym pomysłem byłoby dodanie tabeli `filters` z `id` i `filterName` oraz zmiana `filterName` kolumny tabeli `enabled_filters` do kolumny `filterId`. Umożliwiłoby to również dodatkowe pole w tabeli `filters`, `allow_disable`, aby wyłączyć wyłączanie filtra. Czy to drugie podejście jest dobre, czy są lepsze opcje? Kluczowym wymaganiem jest to, że nie chcę modyfikować systemu podstawowego podczas dodawania filtra. 3. WordPress chce, aby programiści nie drukowali niczego w funkcji filtrującej, ale zwracali nowy ciąg. Oznacza to, że będziesz mieć zmienną `$return` w swojej funkcji filtrującej, do której cały czas dołączasz nowe dane za pomocą `$return .= '...';`. Używanie `echo` lub `print()` mogłoby być łatwiejsze dla programistów, a także ułatwić przeniesienie istniejącego kodu (który używa funkcji drukowania) do funkcji filtrującej. System filtrów może użyć funkcji `ob_*` do przechwytywania drukowanych danych zamiast wysyłania ich do przeglądarki. Czy byłby to dobry sposób na zaimplementowanie filtrów? Czy są jakieś wady, takie jak prędkość? 4. Ostatnie pytanie dotyczy tego, kiedy używać filtrów, a kiedy nie. Wydaje mi się jasne, że wymienione przypadki (linkify i buźki) to przypadki, w których filtry są dobrze wykorzystywane. W przypadku takich rzeczy jak podpisy lub awatary, aby pozostać przy forum, jest inaczej. Próbowałem dowiedzieć się, dlaczego wydaje się to inne i myślę, że to dlatego, że ograniczyłoby to użycie filtra do jednego miejsca. Na przykład awatarów i filtrów przeglądu profilu można używać tylko obok postów. Jedną z fajnych rzeczy związanych z filtrem jest to, że możesz dodać tę samą funkcję filtrującą do innego haka akcji, dzięki czemu możesz przepuścić zarówno treść posta, jak i podpisu przez filtr linkify. Czy jestem tutaj? Czy to prawda, że nie powinno się używać filtrów do awatarów, przeglądów profili i podpisów? Co można powiedzieć o ogólnych zasadach, kiedy i kiedy nie używać filtra? Gdybym miał pisać dokumentację mojego systemu dla zewnętrznych programistów, co powinienem napisać na ten temat?


title: Czy nazwy zmiennych wpływają na wydajność stron internetowych?

text: Czy nazwy zmiennych wpływają na wydajność witryny? Wiem, że będzie to bardzo mała liczba, ale czy ktoś może podać powody, dla których nie wybiera się długiej nazwy zmiennej w aspekcie wydajności?


title: Co naprawdę powinno robić repozytorium?

text: Słyszałem wiele o wzorcu repozytorium, ale zupełnie nie rozumiałem, co naprawdę powinno robić repozytorium. Kiedy mówię „co repozytorium naprawdę powinno robić”, głównie zastanawiam się, jakie metody powinno zapewniać. Na przykład, czy repozytorium powinno naprawdę udostępniać metody CRUD, czy też powinno zapewniać inny rodzaj metody? Chodzi mi o to, czy repozytoria powinny zawierać logikę biznesową, czy po prostu powinny zawierać logikę komunikacji z magazynem danych i zarządzania encjami, które mają być zapisywane lub ładowane? Słyszałem też, że repozytoria są jednostkami trwałości agregatów. Ale jak to jest? Nie rozumiem, jak to działa w praktyce. Pomyślałem, że powinniśmy mieć tylko jeden interfejs `IRepository`, który zawiera metody CRUD, a następnie dla dowolnej jednostki implementacja po prostu zawiera logikę do zapisywania i pobierania takiego typu z magazynu danych.


title: Umiejętności dla programisty RAD

text: Zaraz wyruszam w niezwykłą podróż. Zgłosiłem się na wydarzenie, na którym w ciągu 48 godzin spotykają się nieznajomi, rzucają świetnymi pomysłami, decydują o zespołach i tworzą działający prototyp projektu IT. Wszystko w ciągu 48 godzin. Przewiduję, że będzie to bardzo intensywne doświadczenie umiejętności i umiejętności i chcę być przygotowany. Ponieważ będę musiał szybko opracować moją część kodu, mam następujące pytanie: **Jakie umiejętności byłyby najbardziej potrzebne przez te 48 godzin?** Wiem, że rzeczy takie jak właściwa dokumentacja, kontrola wersji i tym podobne są dość ważne dla pełnoprawnego tworzenia aplikacji/programów/stron internetowych, ale dla tego okresu szalonego kodowania? _Tło: jestem programistą stron internetowych, więc odpowiedzi dotyczące tworzenia stron internetowych byłyby bardziej doceniane niż inne._


title: 10 lat od programowania, chęć powrotu... Jak najlepiej do tego podejść?

text: Szukałem, ale nie znalazłem niczego, co miałoby bezpośrednie zastosowanie. Mam około 15 lat doświadczenia w programowaniu, głównie w Unixie, C, C++ (wraz z różnymi skryptami/językami pomocniczymi), ostatnie 5 lat to kontraktowanie. Moje różne referencje i referencje na przestrzeni lat przekonały mnie, że też jestem w tym całkiem dobra. Teraz, przez ostatnie 8 lat byłem całkowicie nietechniczny i teraz wiem, że to był zły wybór. Problem, z którym się teraz borykam, poza umiejętnościami zawartymi w CV, mógłby zniechęcić niektórych potencjalnych pracodawców, jest to, że prawie całkowicie zapomniałem C++ i małej Javy, którą miałem. Nie mam ochoty znowu zaczynać od zera! Ale tak właśnie się czuję, kiedy siedzę i patrzę na dowolny nietrywialny kod C++. Wszystkie te OO i zajęcia klasowe, a ja prawie dam ci puste spojrzenie. Co zaskakujące, moje C jest nadal w porządku, dobrze syntaktycznie, chociaż wyobrażam sobie, że moje możliwości projektowe również mocno ucierpiały. Czy ktoś miał doświadczenie z czymś podobnym? Czy realistycznie patrzę na lata, aby wrócić do bycia w połowie przyzwoitym? Oprócz wielu ćwiczeń i czytania czegokolwiek, co mogę pożytecznie zrobić, aby szybciej nabrać prędkości? Idealnie nie chcę utknąć w obliczu zmiany kariery, którą **omyłkowo** dokonałem 8 lat temu. Pomoc!


title: Dyplomatycznie wskaż oczywisty problem w produkcie

text: Jak wszyscy wiemy, każde oprogramowanie ma w sobie błędy. Odkrycie tego jest kwestią czasu. Załóżmy, że właśnie odkryłeś, że Twój produkt ma potencjalny duży problem i nie został przez Ciebie opracowany. Jak sobie z tym poradzisz? Zwykle mówię o pewnych danych i analizach, nawet jeśli nie jest to moja część kodu. Zastanawiam się, czy nie jest to zbyt obraźliwe, bo często spotykałem się z jakimś oporem (w zależności od sprawy), który w końcu by zniknął.


title: Czy funkcja może modyfikować parametr?

text: Mamy warstwę danych, która otacza Linq To SQL. W tej warstwie danych mamy tę metodę (uproszczoną) int InsertReport(Raport raport) { db.Reports.InsertOnSubmit(raport); db.PrześlijZmiany(); zwróć raport.ID; } Po przesłaniu zmian identyfikator raportu jest aktualizowany o wartość w bazie danych, którą następnie zwracamy. Od strony wywołującej wygląda to tak (uproszczony) var report = new Report(); DataLayer.InsertReport(raport); // Zrób coś z report.ID Patrząc na kod, ID zostało ustawione wewnątrz funkcji InsertReport jako rodzaj efektu ubocznego, a następnie ignorujemy zwracaną wartość. Moje pytanie brzmi, czy powinienem polegać na efekcie ubocznym i zamiast tego zrobić coś takiego. void InsertReport(raport raportu) { db.Reports.InsertOnSubmit(raport); db.PrześlijZmiany(); } czy powinniśmy temu zapobiec int InsertReport(Raport raport) { var newReport = report.Clone(); db.Reports.InsertOnSubmit(nowyRaport); db.PrześlijZmiany(); return nowyReport.ID; } może nawet Report InsertReport(Raport raport) { var newReport = report.Clone(); db.Reports.InsertOnSubmit(nowyRaport); db.PrześlijZmiany(); powrót nowyZgłoś; } To pytanie pojawiło się, gdy stworzyliśmy test jednostkowy i stwierdziliśmy, że nie jest jasne, czy właściwość identyfikatora parametrów raportu jest aktualizowana i że kpiąca z zachowania efektu ubocznego jest niewłaściwa, może to być zapach kodu.


title: Czy to środowisko programistyczne będzie obejmowało podstawowe aplikacje dla systemów iOS i Windows 8/Windows Phone 8?

text: Jestem doświadczonym programistą C#. Stworzyłem kilka aplikacji na Windows Phone i Windows 8, ale chciałem też programować na iOS. Myślę o dodaniu następującego sprzętu i oprogramowania, aby było to możliwe: 1. MacBook Air – niezbędny do skompilowania/wdrożenia w Apple App Store i do niektórych zadań programistycznych, a także narzędzia takie jak PaintCode 2. iPad Mini – tańszy i w stanie wykonać podwójne testy dla ekranów iPhone'a i iPada (najlepiej miałbym też budżet na telefon, ale nie w kartach) 3. Xamarin Studio Business Edition - droższe, ale integruje się z Visual Studio, który jest moim podstawowym środowisko deweloperskie, a także dom dla kodu aplikacji Win8 / WP8 Zasadniczo szukam tylko sprawdzenia rzeczywistości. Czy to przesada? Niewystarczająco? Wiem, że mógłbym zaoszczędzić kilkaset na Macu Mini, ale mam inne zastosowania dla laptopa. Czy poradzę sobie z niezależną wersją platformy Xamarin, czy też obniżam produktywność, stale zmieniając środowiska? (Jak tylko otrzymam sprzęt, zacznę od przetestowania darmowej wersji, aby pomóc odpowiedzieć na to pytanie).


title: Przechowywanie projektów na Dysku Google (w chmurze)

text: Zacząłem używać Dysku Google do moich potrzeb w chmurze i tworzyć kopie zapasowe prawie wszystkiego. Mam zainstalowaną aplikację, więc automatycznie synchronizuje wszystkie moje treści w większości rzeczy. Moje pytanie brzmi: obecnie koduję na iOS (chociaż dotyczy to każdego projektu kodowania) i dzielę się na przechowywanie plików projektu na Dysku Google podczas korzystania z synchronizacji. Moja teoria jest taka, że gdybym go używał, nigdy nie musiałbym się martwić o awarie systemu lub utratę kodu przed tworzeniem kopii zapasowych, ale jeśli go użyję, będzie się często synchronizować i pomyślałem, że mogą być z tym problemy wykrywanie zmian i próba synchronizacji na przykład w połowie kompilacji. Przepustowość nie stanowi problemu, ponieważ mam szybkie połączenie i nieograniczony miesięczny limit. Czy ktoś kiedykolwiek używał tej lub podobnej synchronizacji opartej na chmurze (dropbox itp.) i wie, czy to działa, czy też są jakieś potencjalne problemy itp.


title: Dlaczego C zwyciężyło Pascala?

text: Rozumiem, że w latach 80., a być może także w latach 90., Pascal i C były w zasadzie łeb w łeb jako języki produkcyjne. Czy ostateczny upadek Pascala jest spowodowany zaniedbaniem przez Borlanda Delphi? A może było coś więcej, jak pech, a może coś z natury nie tak z Pascalem (jakieś nadzieje na jego odrodzenie?). Mam nadzieję, że nie jest to pytanie otwarte, bez odpowiedzi. Interesują mnie fakty historyczne i obserwacje, które można poprzeć, a nie sympatie i antypatie. Nie udało mi się również znaleźć duplikatu pytania, co mnie trochę zaskoczyło.