title: Korzystanie z pola XML Vs. tworzenie stołu dla niestabilnej organizacji

text: Jestem w trakcie projektowania aplikacji do wystawiania i przechowywania faktur dla organizacji. Problem w tym, że organizacja wcale nie jest stabilna. Istnieje wiele rodzajów faktur, które mogą się zwiększać i zmieniać. Najpierw próbowałem użyć tabel w moim DAL, jednej tabeli do przechowywania faktur, jednej do pól faktur i jednej do wartości pól faktur. Problem polegał na tym, że w ten sposób potrzebuje Reflection do późniejszego wykrycia pól, co może spowolnić aplikację, gdy faktura zawiera dużo pozycji. Po drugie, starałem się zachować rdzeń danych faktur w postaci dwóch tabel: faktur i pozycji faktur. Inne pola są w pełni możliwe do przechwycenia z innych tabel. Mam na myśli, że warstwa biznesowa powinna dostarczać różne wyniki w zależności od rodzaju faktury. Powinien wybrać odpowiednie zapytania i przetworzyć wyniki zgodnie z rodzajem faktury. Dwa problemy z tym rozwiązaniem to: 1. Nadal mam dużo sprzężeń między innymi tabelami, gdy chcę pokazać fakturę, dla pozycji faktury. Powinienem przeliczyć wszystko za każdym razem dla każdej pozycji faktury. 2. Co się stanie, jeśli tabela pozycji faktury nie obsługuje nowego typu faktury? Wtedy prawdopodobnie powinienem dodać nową tabelę do przechowywania tego rodzaju pozycji faktur. 3. Mój klient poprosił mnie o zachowanie wszystkich danych związanych z fakturą, nie chce, abym za każdym razem ją przeliczał. Chcą czegoś w rodzaju migawki powiązanych danych w momencie tworzenia faktury. Teraz, jak sądzę, mogę korzystać z zalet XML w tabeli? Mogę zapisać fakturę z dowolnymi polami jako xml. * Mogę zapisać inną wersję ich faktur. * W przypadku zmian aktualizuję tylko plik Business.dll i nie jest wymagana zmiana DAL. * Linq do XML nie jest wolny. Co sugerujesz?


title: W jaki sposób nowe mapy Google sprawiają, że budynki i pejzaże miejskie są 3D?

text: Każdy, kto widział nowe mapy Google, bez wątpienia zauważył niesamowitą ilość trójwymiarowych szczegółów w wybranych amerykańskich miastach, takich jak Boston, Nowy Jork, Chicago i San Francisco. Wymodelowali nawet drzewa, mosty i niektóre łodzie w porcie! Obecne są drobne detale architektoniczne. To jest szalone. Patrząc na to z bliska, odkryłem, że wokół każdego z tych miast jest prostokątny obszar i wszystko w nich jest trójwymiarowe, ale odcina się mocno i szybko na krawędzi, nawet jeśli znajduje się w środku budynku. Krawędź prostokąta to miejsce, w którym kończy się obraz 3D. To prowadzi mnie do myślenia, że robi się to algorytmicznie (co miałoby sens, biorąc pod uwagę skalę projektu, ile jest drzew, budynków i szczegółów), a jednak nie wyobrażam sobie, jak to jest możliwe. Jak algorytm mógłby modelować wszystkie te rzeczy bez obszernych danych na temat ich kształtów i konturów? Jak mógłby modelować poszczególne druty mostu lub posągi w parku? Trzeba to zrobić ręcznie, a przecież jakże to możliwe, skoro tak wiele szczegółów! Czy ktoś ma jakiś wgląd w to?


title: Czy mogę używać MongoDB do komercyjnego serwisu internetowego?

text: Czy mogę używać MongoDB jako bazy danych do świadczenia płatnej usługi? MongoDB jest na licencji AGPL, ale sterowniki, których używam są na licencji MIT. Czy muszę kupić licencję komercyjną na MongoDB, czy mogę używać jej jako zaplecza dla mojej aplikacji?


title: JSF dla aplikacji internetowej o dużym natężeniu ruchu

text: Być może dokonałem _złego_ wyboru i zdecydowałem się na użycie `frameworka opartego na komponentach`, takiego jak JSF, dla aplikacji internetowej o dużym natężeniu ruchu. Programowanie z JSF było chociaż łatwiejsze, ale obawiam się teraz, czy JSF pozwoli mi na tę skalowalność i wydajność ze wszystkimi podstawowymi problemami i problemami. Zapisywanie stanu w aplikacji internetowej o dużym natężeniu ruchu, czy to w ogóle ma sens!? Jak teraz dostroić moją aplikację JSF, aby działała lepiej przy dużym obciążeniu? Już próbuję zredukować drzewo stanów/komponentów poprzez zmniejszenie liczby komponentów na stronie. Jakie inne rzeczy mogę dostroić, aby aplikacja JSF działała lepiej?


title: Czy obiekty COM są formą IPC?

text: W Pro C# 2008 jest powiedziane > Używając konstrukcji takich jak AppIDs, stubs, proxy i środowisko uruchomieniowe COM >, programiści mogą uniknąć konieczności pracy z surowymi gniazdami, wywołaniami RPC > i innymi szczegółami niskiego poziomu. Następnie demonstruje wywołanie VB6, w którym tworzony jest obiekt COM przez przekazanie AppId. Następnie na wspomnianym obiekcie wykonywane jest wywołanie metody. Czy to oznacza, że COM zezwala na IPC bezpośrednio z obiektami? Czy to jest bezpieczne? Dlaczego platforma .NET nie zezwala na to zachowanie?


title: Dlaczego Twitto nie jest bezpieczne?

text: Natknąłem się na Twitto, które w zasadzie jest frameworkiem internetowym, który mieści się w tweecie. Jest tak krótki, że mogę zamieścić kod tutaj: wymagaj __DIR__.'/c.php'; if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; })) wyrzuć nowy wyjątek('Błąd'); $c(); Zasadniczo szuka pliku o nazwie c.php i wywołuje dowolną funkcję w tych plikach, która ma taką samą nazwę jak `$_GET['c']`. Na stronie projektu na dole strony znajduje się duży czerwony baner o treści : > » TWITTO NIE JEST BEZPIECZNY, NIE UŻYWAJ GO NA NASTĘPNEJ WITRYNIE « Nie jestem guru PHP, ale wydaje mi się, że podejmujesz wszystkie środki ostrożności, które zwykle podejmujesz w przypadku standardowej witryny PHP (odkażanie danych wprowadzanych przez użytkownika itp.), powinna być wystarczająco bezpieczna ? Co jest nie tak z tym maleńkim frameworkiem? EDYTUJ: Rozumiem, dlaczego ta platforma nie jest bezpieczna JAKO JEST, ale z odpowiednimi kontrolami ładowania i walidacji oraz wszystkim wewnątrz funkcji, którą wywołujesz, powinna być tak samo bezpieczna, jak każda inna platforma?


title: Programowanie tylko dla serwerów 64-bitowych to zły pomysł?

text: Próbując rozwiązać jeden problem, natknąłem się na inny. Chciałbym mieć łatwy i zapadający w pamięć sposób tworzenia unikalnych numerów błędów w projektach i programistach. Schemat, który wymyśliłem, polegał na użyciu inicjałów dewelopera, odnalezieniu ich pozycji w alfabecie oraz dołączeniu daty i godziny. Przykład: powiedzmy, że programista Mark Elliot Zuckerberg (inicjały MEZ) pisze kod, który zgłasza wyjątek 8 lutego 2014 o godzinie 12:54. Kod błędu to: 8526020820140054 Działa to doskonale na komputerach 64-bitowych, ale wynikowa liczba całkowita jest zbyt duża dla komputerów 32-bitowych. Czy to sprawia, że jest to zły pomysł? Jak powszechne są 32-bitowe serwery i czy spodziewamy się, że powoli znikną całkowicie?


title: Open Source Cloud Computing

text: Niedawno zdałem sobie sprawę, że najpopularniejsze platformy społecznościowe w sieci są w rękach zaledwie kilku firm, Google, Twitter, Facebook, żeby wymienić tylko kilka. Biorąc pod uwagę zmieniającą się światową siłę tych ram, poszukuję non-profit, demokratycznej alternatywy dla tych stron. (Mozilla jest projektem non-profit, jednak nie mogłaby się rozwijać bez wsparcia Google.) W mojej wyobraźni idealnym podejściem (patrz wyjaśnienie poniżej) byłoby podejście rozproszone stosowane w programach do udostępniania plików lub narzędziach, takich jak seti@home . Każdy użytkownik chcący wziąć udział w projekcie musiałby zainstalować na swoim komputerze oprogramowanie, które pełniłoby rolę węzła w sieci tworzącej przestrzeń społecznościową podobną do Google+, Facebooka czy Twittera, ale o niekomercyjnym podejściu. Takie podejście można również zastosować w przypadku „demokratycznej” chmury do przechowywania danych. Czy ktoś wie o projektach, które zmierzają w tym kierunku? * * * Nazywam to "idealnym podejściem" z kilku powodów. Nie ma potrzeby dużych farm serwerów ani kosztów utrzymania sprzętu. Niewrażliwość na większość ataków hakerskich, ponieważ jest rozproszona i nie ma węzła centralnego. Tylko kilka, o których mogłem teraz pomyśleć.


title: wprowadzenie wskaźników do dużego projektu oprogramowania

text: Mam dość duży projekt oprogramowania napisany w `c++`. Jest tam `class foo`, która reprezentuje strukturę (przez co nie mam na myśli struktury programistów), w której `foo`-obiekty mogą być częścią `foo`-obiektów. Oto `class foo` w najprostszej formie: class Foo { private: std::vector<unsigned int> indeksy; public: void addFooIndex(unsigned int); unsigned int getFooIndex(unsigned int); }; Każdy obiekt `foo` jest obecnie przechowywany w obiekcie `paska klasy`. class Bar { private: std::vector<Foo> foos; public: void addFoo(Foo); std::vector<Foo> getFoos(); } Więc jeśli obiekt `foo` powinien reprezentować strukturę z „wewnętrznym” obiektem foo, obecnie robię Foo foo; Foo wewnętrznaFoo; foo.addFooIndex(bar.getFoos().size() - 1); bar.addFoo(innerFoo); Aby to uzyskać, oczywiście używam: Foo foo; for ( unsigned int i = 0; i < foo.getFooIndices().size(); ++i ) { Foo inner_foo; attach( foo.getFooIndices().at(i) < bar.getFoos().size() ); inner_foo = bar.getFoos().at(foo.getFooIndices().at(i)); } Więc to nie jest problem. To po prostu działa. Nie jest to jednak najbardziej eleganckie rozwiązanie. Teraz chcę, aby wewnętrzne `foo` były "bardziej połączone" z obiektem `foo`. Byłoby oczywiście, aby zmienić `class foo` na: class Foo { private: std::vector<Foo*> foo_pointers; public: void addFooPointer(Foo*); std::vector<Foo*> getFooPointers(); }; A teraz na moje pytanie: Jak delikatnie zmienić tę podstawową klasę bez zepsucia całego kodu? Czy istnieje „czysta droga”?


title: Jak ustrukturyzować testy jednostkowe dużych bibliotek?

text: Piszę testy jednostkowe dla biblioteki napisanej w Qt/C++. Biblioteka jest dość duża, z dużą ilością funkcji. Mam osobny folder `unitTest`, w którym mam mój `UnitTest.cpp`. Posiadanie wszystkich przypadków testowych / testów jednostkowych w tym samym pliku sprawia, że jest to jeden bardzo duży plik `.cpp`. Zastanawiałem się, jakie jest najlepsze podejście do testów jednostkowych ogromnych bibliotek. Czy powinienem mieć różne pliki `UnitTest.cpp` w innym folderze? Jak jeden na każdą klasę? czy każda przestrzeń nazw?


title: Różnica między demonem a wątkiem podrzędnym?

text: Jak na mój wątek demona wiedzy jest wątkiem, który działa w tle (wątek o niskim priorytecie), a także wątek podrzędny działa w tle, gdy wątek nadrzędny działa na pierwszym planie, więc gdzie leży różnica między wątkiem podrzędnym a demonem? Tak jest w przypadku javy i czy możesz wyjaśnić również odniesienie do innych języków.


title: Czy nadużywanie wyjątku Application.Unhandled Exception dla przekierowania logowania jest w porządku?

text: Programuję aplikację dla systemu Windows Phone 7, która wymaga uwierzytelnienia w celu dostępu do odczytu przypominającego wiadomości. Używam Application.UnhandledException do obsługi (mojego) `AuthFailedException`, który można wyrzucić z dowolnej strony i przejść do strony logowania. Aby naśladować modalne okno dialogowe, wykonuję następujące czynności: 1. Dołączam procedurę obsługi zdarzeń `BackKeyPress`, aby wyczyścić tylny stos, skutecznie powodując zamknięcie aplikacji. 2. Podczas logowania wywołuję faktyczne zachowanie powrotu, aby wrócić do poprzedniej strony, która wyrzuciła `AuthFailedException` (wszystko w modelu widoku poprzez odpowiednie wstrzykiwanie zależności). To wydaje się brudne, ale przynajmniej trochę lepsze niż to, jakie hacki mogłyby być konieczne w innym przypadku... Jakieś rady, jak poprawić sytuację?


title: Wybór języka do budowy aplikacji w oparciu o rynek zatrudnienia vs wydajność i łatwość utrzymania

text: Stoję przed wyborem, czy zacząć budować komponenty Haskella dla określonej aplikacji produkcyjnej, które wszystko odbywa się w Ruby. Skłaniam się ku Haskellowi z kilku powodów, przede wszystkim szybkości (skompilowany Haskell jest jak 4-8x szybszy), większej przejrzystości (poprzez system typów Haskella) i bezpieczniejszą refaktoryzację (system typów). Napisałem już kilka programów open source i produkcyjnych w Haskell i bardzo lubię je pisać. Wykonalność nie jest problemem. Bawiłem się frameworkiem internetowym Haskell Snap i bibliotekami baz danych, takimi jak PostgreSQL.Simple, i jestem zadowolony, że przepisanie aplikacji Rails i różnych programów backendowych z Haskellem jest wykonalne. Prawdziwym problemem jest zatrudnianie programistów, gdy musimy skalować zespół programistów, lub ostatecznie całkowicie przekazać obowiązki programistyczne. Dużo łatwiej znaleźć programistów w Ruby niż w Haskell. Z drugiej strony, społeczność Haskella wydaje się rosnąć i nie jest zbyt trudno wyszkolić programistów, aby modyfikowali części programu Haskella, jeśli podchodzisz do tego jako DSL (podobnie jak Ruby on Rails). System typów Haskell wydaje się również obiecywać znacznie bezpieczniejszą współpracę niż dynamiczny Ruby. W swoim eseju „Beating the Averages” (http://www.paulgraham.com/avg.html) Paul Graham dowodzi, że używanie lepszego języka może być decydującą zaletą. Ale kiedy warto zrezygnować z używania doskonałego języka, aby ułatwić dodawanie programistów do swojego zespołu?


title: Budowanie narzędzia do automagicznego naprawiania błędów kompilatora

text: Gdy program się nie kompiluje, komunikaty o błędach są czasami ezoteryczne. Często proste wyszukiwanie w Google prowadzące do strony takiej jak wymiana stosów rozwiązuje problem. Dlaczego nie możemy tego zautomatyzować? Co powiesz na Siri do kodowania? Siri mam na myśli inteligentnego osobistego asystenta. Nie mówię tutaj o rozpoznawaniu mowy. Zastanawiam się, czy jest ktoś (startupy/laboratoria badawcze) budujący taki fajny produkt. To drastycznie skróci czas debugowania.


title: Czy te konkretne tabele wymagają kluczy zastępczych?

text: ## Tło Mam te tabele +------------------------------+ +--------------- ---------+ |Lotnisko | |Kraj | |-------------------------| |------------------------| |ciąg_kodu_lotniska (PK) | |ciąg kodu kraju (PK)| |ciąg adresowy | |nazwa ciągu | |nazwa ciągu | +-----------------------------+ +----------------------- --+ +-------------------------+ |Waluta | |-------------------------| |Ciąg kodu waluty (PK)| |nazwa ciągu | +-----------------------------+ **airport_code** to kod lotniska IATA (International Air Transport Association), możesz je zobaczyć w swoim przywieszki bagażowe podczas podróży samolotem. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/rPnue.png) **kod_kraju** to standardowy kod kraju ISO 3166-1 A3, możesz go zobaczyć na igrzyskach olimpijskich. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/EpjiB.png) **currency_code** to standardowy 3-znakowy kod waluty IS0 417, możesz je zobaczyć na międzynarodowych giełdach wymiany walut . ![tutaj podaj opis obrazka](http://i.stack.imgur.com/YD3GW.png) ## Pytania **Czy te naturalne PK są wystarczająco dobre?** **Czy używa światowych standardów, które są akceptowane przez całe branże wystarczająco dobre dla PKs ?** **Czy te tabele potrzebują zastępców bez względu na wszystko?**


title: Czy można wydać coś z własnościowymi zależnościami na licencji Apache2?

text: Jeśli piszę kod z zastrzeżonymi zależnościami, czy mogę wydać własny kod na licencji Apache? Przykładem może być wtyczka do zastrzeżonego frameworka.


title: Przetrwanie MATLAB i R jako Hardcore Programista

text: Uwielbiam programować w językach, które wydają się być nastawione na hardkorowych programistów. (Moimi ulubionymi są Python i D.) MATLAB jest nastawiony na inżynierów, a R na statystyków i wygląda na to, że te języki zostały zaprojektowane dla ludzi, którzy nie są hardkorowymi programistami i nie myślą jak hardcorowi programiści. Zawsze uważam je za nieco niewygodne w użyciu i do pewnego stopnia nie wiem, dlaczego. Oto kilka kwestii, które udało mi się zidentyfikować: * (Oba): Ekstremalny nacisk na wektory i macierze do tego stopnia, że nie ma prawdziwych prymitywów. * (Oba): Trudność podstawowej manipulacji strunami. * (Oba): Brak lub niezręczność obsługi podstawowych struktur danych, takich jak tablice mieszające i „rzeczywiste”, tj. tablice parametryczne typu i zagnieżdżone. * (Oba): Są naprawdę, bardzo powolne, nawet jak na interpretowane standardy językowe, chyba że przechylisz się do tyłu, aby zwektoryzować swój kod. * (Obie): Wydają się nie być zaprojektowane do interakcji ze światem zewnętrznym. Na przykład oba są dość nieporęcznymi programami, których uruchomienie zajmuje trochę czasu i wydaje się, że nie zostały zaprojektowane w celu ułatwienia pisania prostych programów filtrujących tekst. Co więcej, brak dobrego przetwarzania łańcuchów sprawia, że operacje wejścia/wyjścia plików w bardzo standardowych formach są prawie niemożliwe. * (Oba): Orientacja obiektu wydaje się być bardzo przykręcona. Tak, możesz to zrobić, ale nie wydaje się to dużo bardziej idiomatyczne niż OO w C. * (Oba): Brak oczywistego, prostego sposobu na uzyskanie typu referencyjnego. Brak wskaźników i odwołań do klas. Na przykład nie mam pojęcia, jak stworzyć własną listę linków w jednym z tych języków. * (MATLAB): Nie możesz umieścić wielu funkcji najwyższego poziomu w jednym pliku, zachęcając do bardzo długich funkcji i kodowania typu „wytnij i wklej”. * (MATLAB): Liczby całkowite najwyraźniej nie istnieją jako typ pierwszej klasy. * (R): Podstawowe wbudowane struktury danych wydają się zbyt wysokopoziomowe i słabo udokumentowane, i nigdy nie wydają się robić dokładnie tego, czego się spodziewam, biorąc pod uwagę moje doświadczenie z podobnymi, ale niższymi strukturami danych. * (R): Dokumentacja jest porozrzucana po całym świecie i praktycznie niemożliwa do przeglądania czy wyszukiwania. Nawet D, który często jest powalony za złą dokumentację i nadal jest dość alfa-owski, jest znacznie lepszy, o ile mogę to stwierdzić. * (R): Przynajmniej o ile mi wiadomo, nie ma do tego dobrego IDE. Ponownie, nawet D, język dość alfa z małą społecznością, radzi sobie lepiej. Ogólnie uważam, że MATLAB i R mogą być łatwo zastąpione przez zwykłe stare biblioteki w językach bardziej ogólnego przeznaczenia, jeśli istniałyby wystarczająco obszerne biblioteki. Jest to szczególnie ważne w nowszych językach ogólnego przeznaczenia, które zawierają wiele funkcji dla autorów bibliotek. Dlaczego R i MATLAB wydają mi się takie dziwne? Czy zauważyłeś jakieś inne poważne problemy, które mogą sprawić, że te języki będą wydawać się dziwne dla zapalonych programistów? Kiedy ich użycie jest konieczne, jakie są dobre wskazówki dotyczące przetrwania? Edycja: widzę jeden problem z niektórych otrzymanych odpowiedzi. Mam silne osobiste preferencje, kiedy analizuję dane, aby mieć **jeden** skrypt, który zawiera cały potok. Oznacza to, że należy użyć języka ogólnego przeznaczenia. Nienawidzę konieczności pisania skryptu, aby „oczyścić” dane i wypluć je, a następnie kolejny, aby odczytać je z powrotem w zupełnie innym środowisku itp. Uważam, że tarcie związane z używaniem MATLAB / R do niektórych moich prac i całkowicie inny język z zupełnie inną przestrzenią adresową i sposobem myślenia, aby reszta była ogromnym źródłem tarcia. Poza tym wiem, że istnieją warstwy kleju, ale zawsze wydają się strasznie skomplikowane i są źródłem tarcia.


title: Czy możemy technicznie usunąć rozmycie obrazów?

text: Skoro istnieje algorytm rozmycia obrazu, tak że jego część nie może być rozpoznana, czy możemy odwrócić algorytm i rozmyć część obrazu? Czy istnieje program, który już to robi, czy to w ogóle możliwe, nawet w najbliższej przyszłości?


title: Czy mogę użyć zestawu testów z projektu open source, aby sprawdzić, czy moja własna „zgodna biblioteka” jest zgodna?

text: Pytanie Czy nielegalne jest przepisywanie każdej linii projektu open source w nieco inny sposób i używanie go w projekcie o zamkniętym kodzie źródłowym? sprawia, że zastanawiam się, co można by uznać za _wdrożenie w czystym pomieszczeniu_ w dobie projektów open source. Hipotetycznie, gdybym miał stworzyć bibliotekę, która powiela _publicznie udokumentowany_ interfejs biblioteki open-source, bez patrzenia na kod źródłowy tej biblioteki, czy kod ten mógłby być kiedykolwiek uznany za pracę pochodną? Oczywiście potrzebowałby tej samej _hierarchii klas_ i _podpisów metod_ , aby mógł być zamiennikiem - czy to samo w sobie wystarczy, aby sprowokować roszczenie dotyczące praw autorskich? A gdybym użył zestawu testowego projektu open source do sprawdzenia, czy moja implementacja _clean_ zachowywała się w taki sam sposób, jak oryginalna biblioteka? Czy użycie zestawu testów wystarczy do _brudzenia_ mojego _czystego_ kodu? Jak można się spodziewać po takim pytaniu, nie szukam konkretnej porady prawnej, ale chcę udokumentować doświadczenia, jakie ludzie mogli mieć z tego rodzaju problemem.


title: Jak przestrzegać GPL w przypadku urządzenia?

text: Rozwijamy urządzenie sieciowe dla przedsiębiorstw, które posiada kilka programów na licencji GPL, takich jak linux i Apache oraz kilka innych z licencją APL. Jednak rdzeniem usługi jest oprogramowanie własnościowe, a dostęp jest zapewniany tylko przez interfejs sieciowy. Moje zapytanie to wszystko, co muszę zrobić, aby zachować zgodność z licencją GPL w tym scenariuszu. Czy wystarczy podać w interfejsie sieciowym listę oprogramowania firm trzecich używanego w urządzeniu?


Jestem 10 miesięcy poza szkołą i w zeszłym tygodniu straciłem pierwszą pracę programisty. Osobiście wiem dużo o różnych rzeczach - wystarczy spojrzeć na moje konto na StackOverflow, ale nie czuję, że mam doświadczenie zawodowe konieczne, aby prosić o więcej wynagrodzenia. Na przykład powiedziano mi, że szukają osoby na średnim poziomie za 75 tys. USD rocznie. Powiedziałem mu, że nie jestem pewien, gdzie upadłem. Zapytał mnie, gdzie mogę spaść, więc powiedziałem, że jestem wart tylko 50 tys. dolarów rocznie - co było bliskie mojej ostatniej pensji. Facet powiedział mi, że nie jestem tym, czego szukali. Jak nie zaprzedać się, szukając pracy, pozostając uczciwym?


title: Pomoc/sugestie dotyczące planowania równoległej linii montażowej (programowanie dynamiczne)

text: Pracuję nad problemem podobnym do harmonogramowania linii montażowych przez programowanie dynamiczne. Problem polega na tym, że w przeciwieństwie do klasycznego problemu, w którym mamy predefiniowane stanowiska, teraz mam tylko informację, które zadanie powinno zostać wykonane przed jakim innym (może być więcej niż jedno) zadania. Muszę dowiedzieć się, jakie zadania umieścić na której linii, aby zminimalizować całkowity czas potrzebny na produkcję. Czyli oczywiście, jeśli zadania są na jednej linii, to są wykonywane seryjnie, a co za tym idzie są wolniejsze. Mam więc następujące problemy 1. Jak utworzyć poziomy/linie oparte na czasie, ponieważ nie mam sekwencji wszystkich zadań? Wiem tylko, które zadanie jest przed którym (jednym lub wieloma) zadaniami. Poziomy oparte na czasie są niezbędne, ponieważ muszę zminimalizować czas (co miałoby miejsce, gdy zadania są wykonywane równolegle). 2. Jak określić optymalną kolejność zadań, aby zminimalizować czas? Ponieważ na jedno zadanie czekałoby kilka zadań, muszę również zminimalizować ten czas. 3. Podobnie jak pierwotny problem, komunikacja między różnymi liniami również miałaby koszt. Muszę określić, czy ten koszt komunikacji jest warty przeniesienia zadania na osobną linię (z jego zadania komunikacyjnego) **tl;dr** : Równoległa wersja harmonogramowania linii montażowej (programowanie dynamiczne), w której wszystkie linie mogą być zajęte na w tym samym czasie i nie mam żadnej numeracji/porządkowania stacji. Po prostu wiem, które zadania należy wykonać przed którymi. Muszę zdecydować, które zadania umieścić na tej samej linii, a które na różnych liniach (biorąc pod uwagę czas komunikacji, gdy zadania są na różnych liniach), aby zminimalizować czas produkcji.


title: Powielanie kodu bez oczywistej abstrakcji

text: Czy zdarzyło Ci się kiedyś zetknąć się z przypadkiem duplikacji kodu, w którym patrząc na linijki kodu, nie mogłeś dopasować do niego abstrakcji tematycznej, która wiernie opisuje jego rolę w logice? A co zrobiłeś, żeby to rozwiązać? Jest to duplikacja kodu, więc najlepiej byłoby zrobić trochę refrakcji, na przykład zrobić z niego własną funkcję. Ale ponieważ kod nie ma dobrej abstrakcji, aby go opisać, wynik byłby dziwną funkcją, której nie możemy nawet znaleźć dobrej nazwy, a której rola w logice nie jest oczywista z samego spojrzenia na nią. To dla mnie szkodzi przejrzystości kodu. Możemy zachować przejrzystość i pozostawić ją taką, jaka jest, ale wtedy szkodzi to łatwości utrzymania. Jak myślisz, jaki jest najlepszy sposób na zajęcie się czymś takim?


title: Jakie pytania i procesy zadajesz sobie i kierujesz podczas projektowania oprogramowania?

text: Czytałem książki o projektowaniu, krążę po Internecie w poszukiwaniu artykułów na temat najlepszych praktyk i zasad projektowania oprogramowania. Jednak zawsze zmagam się z wprowadzeniem w życie tego rodzaju sugestii i technik. Moje pytanie brzmi. Jakie rzeczy zadajesz sobie podczas projektowania aplikacji/klasy/lokalizacji metod/właściwości itp., które pomagają zapewnić, że wymyślisz coś, co jest, choć być może nie idealne, jest wystarczająco dobre, abyś był zadowolony z wyniku. Na przykład, gdy próbujesz zdecydować między umieszczeniem właściwości na obiekcie, w jaki sposób decydujesz, czy kod, który może używać tego obiektu, powinien być częścią klasy, która go zawiera, czy też być wyeksponowanym, aby inne klasy mogły z niego korzystać. tj. w jaki sposób decydujesz, kto jest właścicielem i odpowiada za określoną logikę/właściwość. Zdaję sobie sprawę, że są rzeczy takie jak SOLID, które można zastosować, ale szukam technik i procesów myślowych, przez które ludzie często przechodzą, aby dotrzeć do końcowego projektu, który stosuje te zasady. UWAGA: niekoniecznie szukam linków do książek lub artykułów internetowych, ponieważ przeglądam je dość regularnie. Naprawdę zależy mi na tym, aby ludzie przeczytali światowe praktyki na temat tego, jak na co dzień radzą sobie z rozwiązywaniem napotkanych problemów związanych z projektowaniem klas i aplikacji. Wielkie dzięki.


title: Czy istnieją techniczne powody do natychmiastowej aktualizacji po ponownym pobraniu/instalacji?

text: Zdarzało mi się to w przypadku różnego rodzaju oprogramowania: kupujesz oprogramowanie, pobierasz je, instalujesz, a następnie po instalacji program natychmiast zaczyna pobierać aktualizację lub łatkę. Idealnie wyobraziłbym sobie, że pakiet do pobrania byłby w jakiś sposób połączony z repozytorium produktu, tak aby stabilne wydania można było wypchnąć na stronę produktu, zamiast zmuszać użytkownika do czekania na aktualizację po instalacji. Czy istnieją jakieś techniczne powody procesu instalacji/aktualizacji, czy jest to tylko przypadek słabej infrastruktury wdrożeniowej ze strony wielu firm?


title: Wybór asynchronicznego ładującego JavaScript

text: Patrzyłem na różne asynchroniczne programy ładujące zasoby i nie jestem pewien, którego jeszcze użyć. Tam, gdzie pracuję, mamy do czynienia z różnymi grupami, których moduły klasy mogą używać różnych wersji jQuery (itd.). W związku z tym zagnieżdżone zależności również mogą się różnić. Nie mam nad tym kontroli, co oznacza, że muszę dynamicznie ładować zasoby, które mogą korzystać z alternatywnych wersji tej samej biblioteki. **W związku z tym, oto moje wymagania:** 1. Załaduj pliki zasobów JavaScript i CSS asynchronicznie. 2. Zarządzaj kolejnością zależności i zagnieżdżonymi zależnościami w różnych wersjach. 3. Wykryj, czy zasób jest już załadowany. 4. Musi zezwalać na ładowanie między domenami (CDN) 5. (opcjonalnie) Pozwól nam zwolnić zasób. **Przyglądałem się:** * Curl * RequireJS * JavaScriptMVC * LABjs Mogę być w stanie samodzielnie sfałszować te wymagania, ładując wersje do zmiennych o odpowiedniej przestrzeni nazw i używając tablicy do śledzenia tego, co jest już załadowane... ale (mam nadzieję) ktoś już to wymyślił. **Więc moje pytania to:** * Którego używasz? I dlaczego? * Czy są inne, które w pełni spełniają moje wymagania? * Z którym z nich pracujesz najbardziej elokwentny i najłatwiejszy? I dlaczego? **AKTUALIZACJA:** Dla zainteresowanych wypróbowałem wszystkie powyższe biblioteki AMD (i nie tylko). W końcu wybrałem RequireJS. Jest po prostu czystszy i łatwiejszy ogólnie... i cieszę się, że go używam.


title: Dlaczego Facebook używa skrótu w adresie URL... czasami?

text: Zauważyłem, że Facebook CZASEM używa skrótu w adresie URL. Na przykład, gdy jestem na stronie głównej, a następnie klikam stronę profilu, adres URL szybko zmienia się na: facebook.com/#_________, a następnie kilka innych rzeczy. przed szybkim załadowaniem do: facebook.com/profileName Nie zawsze tak się dzieje. Co tu się dzieje?


title: Czy wzorzec stanu jest dobrym rozwiązaniem do implementowania zmian interfejsu użytkownika dla trybów poziomego i pionowego?

text: W przypadku naszej aplikacji na iOS wiele skomplikowanej logiki interfejsu użytkownika zależy od orientacji interfejsu ViewControllera. Ta logika warunkowa jest obecna w wielu miejscach. Czy można go podzielić na różne stany w postaci obiektów?


title: Jaki jest dobry przepływ pracy dla początkującego C++?

text: Pragnę zostać poważniejszym naukowym programistą C++. Aby to zrobić, potrzebuję spójnego stylu przepływu pracy (np. Kodowanie, rozwój sterowany testami itp.). Moje pytanie brzmi po prostu, jaki rodzaj przepływu pracy powinienem wziąć pod uwagę? Jestem zaznajomiony z systemami Linux i Mac i wolę używać darmowych narzędzi, takich jak cppcheck, valgrind, g++ itp. Wolę używać Qt i Boost w moim zestawie narzędzi programistycznych i rozważam użycie obiektów mock (albo Google Mock lub MockPP) w ramach TDD. Zazwyczaj używam vima do mojego edytora. W skrócie, czy powinienem zrobić coś takiego: > TDD -> kod -> cppcheck -> valgrind -> debug -> powtarzaj, aż będą gotowe do użycia > profilery i mechanizmy pokrycia, czy też powinienem podążać w inny sposób? Zdaję sobie sprawę, że opinie będą się różnić, a także rozumiem, że najpierw muszę poświęcić trochę czasu na przemyślenie procesu i udokumentowanie swoich myśli, czy to w formie pisemnej, czy w UML przed kodowaniem, a także wiem, że powinienem udokumentować kod podczas pisania kod. Wszelkie myśli zostaną docenione.


title: Czy 4-5 lat to „kryzys wieku średniego” dla kariery programisty?

text: Zawodowo programuję C# od nieco ponad 4 lat. Przez ostatnie 4 lata pracowałem dla kilku małych/średnich firm, od „agencji internetowych/reklam”, małych sklepów z oprogramowaniem branżowym po mały start-up. Zajmuję się głównie tworzeniem „aplikacji biznesowych”, które wymagają używania języków programowania wysokiego poziomu (zbieranie śmieci) i moje ogólne doświadczenie było takie, że wszystkie prace, które wykonałem, mogły być bardziej profesjonalne. Wiele rzeczy zostało zrobionych niepoprawnie (w pośpiechu), głównie ze względu na czynnik kosztów, że ludzie zawsze chcieli czegoś „teraz” i przy jak najmniejszej ilości wydawanych pieniędzy. Ciągle zastanawiałem się, czy mógłbym pracować dla większej firmy lub firmy, która lepiej nadaje się dla programistów, albo gdzieś, która ma pieniądze i czas, aby naprawdę zbudować coś długoterminowego i łatwiejszego w utrzymaniu, być może bardziej cieszyłbym się w mojej karierze. Nigdy nie miałem „mentora”, który prowadził mnie przez moją 4-letnią karierę. Jestem praktycznie programistą blogów / google / samoukiem, innym niż mój licencjat z informatyki. Zauważyłem też inny problem, że większość tak zwanych „starszych” programistów w „moim środowisku pracy” tak naprawdę nie ma tak wysokich umiejętności. Są „starsi” tylko dlatego, że od dawna są programistami, ale kod, który piszą, czy decyzje, które podejmują, to kompletna bzdura! Nie chcą się uczyć, nie chcą być lepsi, chcą po prostu zarabiać i robić to, co im każą, co ma sens i większość z nas taka właśnie jest. Może dlatego są tam, gdzie są teraz. Ale nie chcę stać się taki jak oni, chcę być lepszy. Wpadłem w stan psychiczny, że nie zamierzam już być programistą w mojej przyszłej karierze. Zacząłem myśleć, że może są lepsze rzeczy do pracy. Im więcej blogów czytam, im więcej „najlepszych praktyk” próbowałem, tym bardziej czuję, że oddalam się od „swojej rzeczywistości”. Ale nie jestem świetnym programistą, w przeciwnym razie nie sądzę, że jestem tam, gdzie jestem teraz. Myślę, że 4-5 lat to etap, który może być krokiem naprzód w karierze lub wyjściem z tego, gdzie jesteś. Chciałem tylko usłyszeć, co inni mają do powiedzenia na temat tego, o czym wspomniałem powyżej i czy doświadczyłeś podobnej sytuacji w swojej poprzedniej karierze programistycznej i jak sobie z tym poradziłeś. Dziękuję.


title: używanie "IS" jest lepsze lub sprawdzanie "NOT NULL"

text: W języku C#.NET: Ten styl kodowania jest zalecany czy ten pod nim? if (sheet.Models.Data to GroupDataModel) { GroupDataModel gdm = (GroupDataModel)sheet.Models.Data; Group group = gdm.GetGroup(sheet.ActiveCell.Row.Index); if (group!=null && controller != null) { controller.CheckApplicationState(); } } lub ten: var gdm = sheet.Models.Data as GroupDataModel; if (gdm != null) { Group group = gdm.GetGroup(sheet.ActiveCell.Row.Index); if (@group!=null && kontroler != null) { controller.CheckApplicationState(); } }


title: WinRT dla aplikacji „komputerowych”

text: Więc czytam o różnicach między starym a nowym API i nie mogę znaleźć, czy nowy API WinRT zapewni aplikacje na komputery stacjonarne, jak dotąd wydaje się, że jest dostępny tylko do pisania aplikacji Metro - tj. pełnego ekranu , aplikacje w stylu telefonu. Czy to oznacza, że mogę napisać aplikację opartą na WinRT i będzie ona wywoływana z pulpitu, ale będzie wyświetlana jak inne aplikacje Metro (np. IE) i nie będę w stanie napisać aplikacji komputerowej w starym stylu, która działa w starym w stylu pulpitu? Co to oznacza dla aplikacji po stronie serwera? Wyobrażam sobie, że WinRT byłby interfejsem API z wyboru dla serwerów, teraz, gdy Windows Server jest wyposażony w opcjonalny GUI, więc wyobrażam sobie, że jeśli mogę napisać aplikację bez systemu Windows przy użyciu WinRT dla serwera, powinienem być w stanie napisać to samo dla klient też? (a jeśli tak, z pewnością mógłbym podłączyć do niego interfejs użytkownika innego niż Metro)


title: Uruchom kodowane testy interfejsu użytkownika w różnych projektach

text: Mając niewielkie lub żadne wcześniejsze doświadczenie w testowaniu, szukam możliwości dodania automatycznego testowania do procesu ciągłej integracji aplikacji SharePoint. Nauczyłem się, jak można to osiągnąć za pomocą zakodowanych testów interfejsu użytkownika, które są uruchamiane przed wdrożeniem i podczas kompilacji, a wcześniej korzystałem z Selenium z Javą, gdzie nie nagrywaliśmy żadnych scenariuszy, ale zamiast tego pisaliśmy testy ręcznie, identyfikując elementy w GUI i potwierdzanie wyników. Z tym małym doświadczeniem mam kilka pytań dotyczących testowania interfejsu użytkownika. 1. Czy można napisać metody testowe, które można zastosować w kilku różnych aplikacjach, takich jak testowanie przycisków itp., czy jest to coś, co należy napisać dla każdego projektu, ponieważ wyniki kliknięcia przycisku mogą się różnić? Zakładam, że wymagałoby to przestrzegania określonego standardu. 2. Czy istnieją metody testowania interfejsu użytkownika, które można uogólnić i zastosować do wszystkich projektów, które przechodzą przez określoną kompilację, czy to samo tutaj, że wszystkie testy interfejsu użytkownika muszą być napisane specjalnie dla tej aplikacji?


title: Czy wyjątki powinny robić coś innego niż informować użytkownika, że coś poszło nie tak?

text: Stworzyłem ogólną klasę, która akceptuje ciąg znaków, gdy jest konstruowany, i wypluwa ten ciąg, gdy użytkownik wywoła what(). To wszystko, co robi; przy rzucie zwraca ciąg inicjujący. class Exception_As { private: std::string message public: Exception_As(const std::string& message) { // konstruktor this->message ="WYJĄTEK: " +wiadomość; } virtual const char* what() const throw() { return message.c_str(); } } Jak używam własnej klasy wyjątków: bool check_range( const std::vector<std::string>& list, const unsigned& idx_start, // gdzie zacząć sprawdzanie const unsigned& idx_end, // gdzie przestać sprawdzać const std: :string& key ) { if ( idx_start > idx_end ) { throw Exception_As("check_range: start index > end index: teraz napraw to! :D"); } ... reszta kodu } // koniec check_range Jak użytkownik użyłby check_range: // inny kod użytkownika używający mojego check_range void main() { try { ... ustawianie zmiennych my_hero_qualified = check_range(semi_finalists, third_place, pierwsze_miejsce, mój_bohater); ...reszta kodu } catch (const Exception_As& e) { std::cout << e.what() << std::endl; } } Jeśli try/catch nie było, program zostałby przerwany z powodu wyrzuconego Exception_As. Gdyby tak było, użytkownik zostałby powiadomiony, że "check_range: start index > end index: teraz napraw to! :D". Dla mnie z pewnością bije pisanie wielu klas BadEvent1Exception, BadEvent2Exception itp. Widzę, że jestem leniwy przy tej metodzie i tak, nie mogę zrobić nic wymyślnego, jak modyfikowanie wartości na podstawie wyjątków lub przekształcanie stanu obiektu; ale jeśli właśnie wkroczyłeś na nieoczekiwane terytorium, kto wie, czy dobrze sobie z tym radzisz? Równie dobrze możesz to zakończyć, abyś mógł naprawić to, co się dzieje i odpowiednio się rozwijać. Więc pytanie: jeśli wszystkie wyjątki powodują przerwanie programu w nieoczekiwanych okolicznościach, czy nie wystarczy jedna klasa wyjątków, która zwraca problem? ...A może wyjątki powinny robić inne rzeczy? Jeśli nie, po co tworzyć tak wiele klas Wyjątków, które mają różne nazwy, jasne, ale z tego, co widziałem, zgłaszaj tylko, że coś poszło nie tak.


title: Jak podzielić projekt OO na pakiety?

text: Jestem programistą hobbystą pracującym nad własnymi projektami. Używam Javy. Do niedawna mój przeciętny projekt miał tylko 1000 LoC. Mój najnowszy projekt jest jednak większy i zaczyna przekraczać 1500 LoC. Szacuję, że wyniesie około 2000. Nigdy nie organizowałem zajęć w pakiety. Wszystkie były zawsze w domyślnym pakiecie i działały dobrze. Jednak wraz z rozwojem moich projektów i zwiększeniem liczby zajęć, zaczynam czuć się niezorganizowany. Moje pytanie brzmi: jak dokładnie podzielić swoje zajęcia na pakiety? Chodzi mi o to, według jakich kryteriów dzielisz klasy? **Czy jest to część aplikacji?** Aka klasy GUI w jednym pakiecie, logika biznesowa w drugim, sieci itp.? **A może klasy wysokiego poziomu kontra klasy niższego poziomu?** Aka klasy, które wykonują konkretną, specyficzną pracę we własnych pakietach i klasy „architektoniczne”, które łączą to wszystko we własne pakiety? **A może po prostu dzielisz się według kryteriów „co wydaje się odpowiednie i zorganizowane” specjalnie dla Ciebie?** Na przykład pracuję nad aplikacją, która tworzy muzykę. Jest on zasadniczo podzielony na dwa główne systemy: system, który tworzy muzykę oraz system, który wyświetla GUI i kontroluje drugi system (tj. naciśnięcie przycisku w tym systemie aktywuje drugi system). System tworzenia muzyki jest również podzielony na dwa systemy: tworzenia melodii i tworzenia progresji akordów. A część dotycząca generowania progresji akordów zawiera między innymi grupę klas, które służą jako wymienne algorytmy dla zaangażowanego wzorca strategii (tj. Klasy używane do określonego szczegółu implementacji). W każdym systemie są oczywiście klasy wyższego i niższego poziomu. Na przykład system generowania progresji zawiera klasę `ProgressionGenerator`, która jest wysokopoziomowa i wiąże cały system. Posiada również klasę `Chord`, która jest znacznie niższym poziomem (tj. zajmuje się graniem określonych nut). Sposób, w jaki podzieliłbym to na klasy, wygląda następująco: system tworzenia muzyki w jednym pakiecie, system GUI, który kontroluje drugi system w inny pakiet. Następnie tworzenie melodii w podpakiet pakietu tworzenia muzyki i tworzenie progresji w inny podpakiet. A wewnątrz podpakietu tworzenia progresji, inny podpakiet zawierający klasy używane we wzorcu Strategii zaangażowanym gdzieś w tym systemie. **Czy to brzmi jak dobre podejście do organizowania rzeczy w paczki? Według jakich kryteriów dzielicie klasy na pakiety? Przez „co wydaje się słuszne” czy przez bardziej techniczne terminy?**


title: Przejście od projektu jednoosobowego do projektu zespołowego w przyszłości. Co powinienem teraz robić w ramach przygotowań i co może poczekać?

text: Aby rozwinąć, jestem zainteresowany wiedzą, co ludzie myślą, że musisz wprowadzić, gdy wciąż jest to projekt jednoosobowy (kontrola źródeł zespołu, dokumentacja, kompilacje itp.) i jakie rzeczy nie muszą być robione do tego momentu, gdy przyjdzie druga osoba na projekt. Każdy, kto ma jakiekolwiek doświadczenie w poruszaniu się po tym scenariuszu, jego spostrzeżenia zostaną docenione.


title: „Funkcje oprogramowania, których nie można zademonstrować za pomocą testów automatycznych, po prostu nie istnieją” — czy to zbyt ekstremalne stwierdzenie?

text: Kent Beck powiedział, że > Funkcje oprogramowania, których nie można zademonstrować w automatycznych testach, po prostu > nie istnieją. Ale czy to zbyt ekstremalne? To znaczy, nie mogę pokazać, że mój interfejs naprawdę działa, piksel ekranu jest poprawny w automatycznych testach. Więc moje funkcje nie istnieją?


title: Skrypt/narzędzie do importowania serii migawek, z których każda jest nową edycją, do GIT, zapełniając drzewo źródłowe?

text: Tworzyłem kod lokalnie i robiłem dość regularną migawkę za każdym razem, gdy dochodzę do znaczącego punktu w rozwoju, np. działająca kompilacja. Mam więc długą listę około 40 folderów, z których każdy jest migawką, np. w kolejności rosnącej RRRRMMDD, np.:- 1. 20100523 2. 20100614 3. 20100721 4. 20100722 5. 20100809 6. 20100901 7. 20101001 8. 20101003 9. 20101104 10. 20101119 11. 20101203 12. 20101218 13. 20110102 I' m szukam skryptu importującego każdą z tych migawek do GIT. Wynik końcowy jest taki, że najnowszy kod jest taki sam jak ostatnia migawka, a inne edycje są dostępne i są ponumerowane. Inne wymagania: * najnowsza edycja nie jest kumulacją poprzednich migawek, tj. pliki, które pojawiły się w starszych migawkach, ale nie pojawiają się w późniejszych (np. z powodu refaktoryzacji itp.) nie powinny pojawiać się w najnowszym wydaniu kod. * w międzyczasie powinna istnieć ciągłość między _plikami_, które _do_ utrzymują się między migawkami. Chciałbym, aby GIT wiedział, że istnieją poprzednie wydania tych plików i nie traktował ich jako zupełnie nowych plików w ramach każdej edycji. Trochę informacji o moim celu: * Muszę formalnie kontrolować tę pracę, a nie przechowywać lokalne prywatne kopie migawkowe. * Planuję wydać tę pracę jako open source, więc kontrola wersji byłaby wysoce zalecana * Oceniam niektóre z obecnych popularnych systemów kontroli wersji (Subversion i GIT), ALE _zdecydowanie_ potrzebuję działającego rozwiązania w GIT, jak również w subversion. _Nie_ szukam przekonania do używania jednego konkretnego narzędzia, potrzebuję rozwiązania dla każdego narzędzia, które rozważam. (Wysłałem odpowiedź osobno dla każdego narzędzia, więc oddzielne obozy ludzi, którzy mają doświadczenie w GIT i Subversion, będą w stanie udzielić skoncentrowanych odpowiedzi na jedno lub drugie). To samo, ale oddzielne pytanie do Subversion: Skrypt/narzędzie do importowania serii migawek, z których każda jest nową wersją, do Subversion, zapełniając drzewo źródłowe?


title: JavaScript — unikanie nadmiarowości zmiennych w zagnieżdżonych pętlach

text: **Proszę o wyrozumiałość, problem mogłem wyjaśnić tylko w komentarzach do fragmentu kodu poniżej. Przeczytaj je uważnie. Pytanie na końcu:** Zazwyczaj nazywam zmienne używane w pętlach `for` za pomocą `i`, tak: for (var i = 0; i < arr.length; i++){ // wykonaj kilka operacji KOMPLEKSOWYCH tutaj } Wygląda to dość prosto; ale kiedy jestem przy tym, mogę wymagać zagnieżdżonych pętli for w powyższej pętli `for`. Tak więc, wprowadzając teraz złożoność: for (var i = 0; i < arr.length; i++) { // zrób kilka // BARDZO // ZŁOŻONE // operacje // tutaj for (var i = 0; i < obiekt_javascript. list.length; i++) { // Mogłem nieumyślnie zapomnieć o zmiennej 'i' użytej wcześniej dla (var j = 0; j < javascript_object.list[i].inna_lista.length; j++) { // Wykonaj tutaj bardziej złożone operacje } } this.getReports(arr[i]) // wartość this i // która, jak sądzę, odnosi się do pierwszej pętli for, mogła zostać zmieniona // w drugiej pętli for i może prowadzić do niebezpiecznych wyników ! } Jak tego uniknąć? Jak można nazwać zmienne tak, aby nie kolidowały z innymi zmiennymi deklarowanymi gdzie indziej?


title: W jaki sposób Mercurial określa, jakich zestawów zmian potrzebuję podczas ściągania?

text: To jest pytanie o wewnętrzne działanie Mercurial. Niejasno pamiętam, jak kolega programista wyjaśniał mi, jak działa Mercurial, które zestawy zmian różnią się między dwoma repozytoriami i że ma szybkie rozwiązanie problemu. Czy ktoś wie, jak to działa lub może wskazać mi dokument opisujący szczegóły?


title: Testowanie kodu ASP.NET .aspx i .ascx za plikami

text: Zastanawiam się, jak przetestować kod .aspx.cs i .ascx.cs za. Czy mogę korzystać z testów jednostkowych, a jeśli tak, to w jaki sposób? Czy istnieją alternatywy, które pomogą przetestować funkcje w kodzie plików? Nie wiem, jak kpić ze strony lub kontroli. Chciałbym spróbować zastosować metodologię tdd, ale nie wiem, jak testować kod z tyłu. Czy konfigurujesz testy dla kodu znajdującego się za kodem lub przenosisz kod do alternatywnych plików, które są łatwiejsze do przetestowania. Czy usunięcie kodu z kodu za lepszą praktyką? Ponadto, jak byś podszedł do testowania jednostkowego kodu za plikami?


title: Jak szczegółowe powinno być polecenie w modelu CQ[R]S?

text: Zastanawiam się nad projektem migracji części naszego SOA opartego na WCF do modelu usługi Service Bus (prawdopodobnie nServiceBus) i przy użyciu niektórych podstawowych pub-sub w celu osiągnięcia separacji poleceń i zapytań. Nie jestem nowy w SOA, ani nawet w modelach magistrali usług, ale przyznaję, że do niedawna moja koncepcja „separacji” ograniczała się do zwykłego dublowania i replikacji baz danych. Mimo to pociąga mnie ten pomysł, ponieważ wydaje się zapewniać wszystkie korzyści ostatecznie spójnego systemu, jednocześnie omijając wiele oczywistych wad (w szczególności brak odpowiedniego wsparcia transakcyjnego). Dużo czytałem na ten temat od Udi Dahana, który jest zasadniczo _guru_ architektur ESB (przynajmniej w świecie Microsoftu), ale jedna rzecz, którą mówi, naprawdę mnie dziwi: > Gdy otrzymujemy większe jednostki z większą liczbą pól, dostajemy również więcej aktorów > pracujących z tymi samymi podmiotami i tym większe prawdopodobieństwo, że > coś dotknie jakiegoś ich atrybutu w danym momencie, zwiększając > liczbę konfliktów współbieżności. > > [...] > > Podstawowym elementem CQRS jest ponowne przemyślenie projektu interfejsu użytkownika, aby > umożliwić nam uchwycenie intencji naszych użytkowników w taki sposób, że preferowanie klienta > jest inną jednostką pracy dla użytkownika niż wskazywanie że klient > się przeprowadził lub że się ożenił. Używanie interfejsu użytkownika podobnego do Excela do danych> zmiany nie wychwytują intencji, jak widzieliśmy powyżej. > > \-- Udi Dahan, wyjaśnione CQRS Z perspektywy opisanej w cytacie trudno polemizować z tą logiką. Ale wydaje się to iść pod prąd w odniesieniu do SOA. SOA (i ogólnie usługi) mają zajmować się _gruboziarnistymi wiadomościami_, aby zminimalizować paplaninę w sieci - wśród wielu innych korzyści. Zdaję sobie sprawę, że paplanina sieciowa jest mniejszym problemem, gdy masz wysoce rozproszone systemy z dobrym kolejkowaniem wiadomości i bez bagażu RPC, ale całkowite odrzucenie problemu nie wydaje się rozsądne. Udi prawie wydaje się mówić, że _każda zmiana atrybutu_ (tj. aktualizacja pola) powinna być własnym poleceniem, co trudno sobie wyobrazić w kontekście jednego użytkownika potencjalnie aktualizującego setki lub tysiące połączonych jednostek i atrybutów, jak to często bywa w przypadku tradycyjnego Serwis internetowy. Jedna aktualizacja wsadowa w programie SQL Server może zająć ułamek sekundy, biorąc pod uwagę dobre, wysoko sparametryzowane zapytanie, parametr wyceniany w tabeli lub zbiorcze wstawianie do tabeli przemieszczania; przetwarzanie wszystkich tych aktualizacji pojedynczo jest powolne, powolne, _slow_ , a sprzęt bazy danych OLTP jest najdroższy ze wszystkich do skalowania w górę/w górę. Czy jest jakiś sposób na pogodzenie tych konkurencyjnych obaw? Czy myślę o tym w niewłaściwy sposób? Czy ten problem ma dobrze znane rozwiązanie w świecie CQS/ESB? Jeśli nie, to w jaki sposób można zdecydować, jaki powinien być „właściwy poziom” szczegółowości w poleceniu? Czy istnieje jakiś „standard”, którego można użyć jako punktu wyjścia – coś w rodzaju 3NF w bazach danych – i odbiega on tylko wtedy, gdy dokładne profilowanie sugeruje potencjalnie znaczącą poprawę wydajności? A może jest to prawdopodobnie jedna z tych rzeczy, które pomimo kilku zdecydowanych opinii wyrażanych przez różnych ekspertów, tak naprawdę jest tylko kwestią opinii?


title: Algorytm testowania interoperacyjności

text: Piszę skrypt php, który wykonuje zadanie. Jedno wejście to lista opcji, które muszę przetestować pod kątem współdziałania. Jeśli opcje to `A B C`, muszę przetestować każdą kombinację, ale zachowuję tylko te opcje, które są kompatybilne ("od lewej do prawej") i wyrzucam te, które nie mają uzyskać wyniku końcowego (R). * A jest kompatybilne z B? -> Wynik * R z C? -> R zamiast: * A jest kompatybilne z B? * A z B? * A z C? Opcje mogą być podane w dowolnej kolejności, ale nie chcę zawracać sobie głowy kosztami ich sortowania. Moje zasady „od lewej do prawej” sugerują, że pierwsza znaleziona prawidłowa opcja dyktuje kompatybilność w przyszłości. Zatem „AB C” może oznaczać inne R niż „B A C”. Również opcje mogą być przeplatane nieprawidłowymi opcjami. Na przykład `A 0 C` Sposób, w jaki teraz to rozwiązuję, jest następujący: * Przechowałem predefiniowaną listę `l` możliwych nazw opcji ze szczegółami na temat opcji. Każda opcja ma następujące statyczne szczegóły: * informacje o tym, z którymi opcjami jest zgodna ** (oznaczając to gwiazdką, gdy do tego wrócimy) * szczegóły dotyczące sposobu jej implementacji * numer indeksu, `i` (z definicji to jest przechowywanie) `l` może wyglądać tak (zapisane jako JSON dla czytelności tutaj): { A : { "description" : "jakiś tekst do pomocy", "index" : 0, "konflikt" : (1 << 1 | 1 << 3), "implementacja" : doA() }, B : { "description" : "jakiś tekst do pomocy", "indeks" : 1, "konflikt" : (1 << 0 ), "implementacja " : doA() }, ... } Kiedy otrzymam listę opcji, algorytm wygląda następująco: * while options * jeśli opcja `o` jest na liście `l` * to zachowaj ją i znajdź jej indeks ` i` i kompatybilność "maska" `l[i][m]` * zaktualizuj zbiorczą kompatybilność "score" `m` * zaktualizuj zbiorczą konfl ict "score" `c` * else odrzuć dla danego `l[i]` it's `m` (`l[i][m]`) jest zawsze liczbą całkowitą, która reprezentuje znaną kompatybilność elementu z innymi elementami. Nie jest to tablica, ale raczej `m = 1 << i(X) | 1 << i(Y) | 1 << i(Z)` gdzie jest zgodny z `X` poprzez swój indeks, co oznacza "indeks X". Możemy więc przepisać algorytm dokładniej jako (nadal pseudokod): dla opcji o _m = 1 << l[o][i] _c = l[o][c] if( !( _m & c ) && !( m & _c ) ) m |= _m c |= _c W tej chwili jestem z tego całkiem zadowolony, ale ponieważ jestem nowy w używaniu operacji binarnych w praktyczny sposób, nie jestem **pewny, czy można je ponownie wykorzystać , zwłaszcza konserwacja z dużą liczbą opcji**. W tej chwili największym wyzwaniem jest to, że po dodaniu nowej opcji muszę przejść przez wszystkie opcje, aby określić, czy jest ona zgodna i zaktualizować wartości konfliktu. Jeśli otrzymam więcej niż kilkadziesiąt opcji, być może będę musiał użyć grup opcji, w których wszystko w grupie musi być w pełni zgodne z tą grupą, ale inne grupy mogą być zgodne z tą grupą i nie dzielić tej samej zgodności z innymi grupami. Martwię się również o **czytelność** dla każdego, kto przyjdzie po mnie. Zaimplementowane inaczej, wartości konfliktu mogą być po prostu listą elementów `[A, C, ...]`. Ale wydaje mi się to dodatkowym obciążeniem i chociaż wartości konfliktu są liczbami całkowitymi, surowa forma wartości konfliktu bezpośrednio wymienia te wartości indeksu, z którymi jest w konflikcie. np. `1 << 1 | 1 << 3` oznacza, że jest w konflikcie z tym, co znajduje się w indeksie 1 iz tym, co jest w indeksie 3. Mam więc nadzieję, że łagodzi to niektóre problemy z czytelnością. Dobre rzeczy, które widzę, to: * powinny być dość wydajne * łatwe do przetestowania nowych opcji. Mam metody, które dadzą ci sprawdzenie wszystkich opcji, o które poprosisz o podanie listy kompatybilności i konfliktów. * dobre do debugowania. Po prostu wypluwam połączony numer strategii do dziennika iw zwięzłej formie widzę, jakie były wybory dotyczące kompatybilności. Wystarczająco małe, że mogę nawet umieścić te informacje w lapidarnym dzienniku produkcyjnym jako „wartość kodu” **Myśli?** +1, jeśli Ci się spodobają. Odpowiedzi / komentarze, jeśli masz konstruktywną krytykę lub uwagi, proszę zauważyć: Szczerze mówiąc, nie zależy mi tutaj na wydajności, ponieważ zadanie zdarza się tylko raz dziennie w środku nocy, ale interesuje mnie sam problem i jestem pewien, że to pomoże mi stać się lepszym programistą.


title: Wyszukiwanie nazw domen

text: Próbuję zautomatyzować proces wysyłania wielu żądań wyszukiwania nazw domen. Próbowałem to zrobić, wysyłając na przykład żądanie http do witryny rejestru domeny, takiej jak Whois.net, ale zauważyłem, że blokują cię po kilku próbach. inne, takie jak networkolutions, dodają token do strony, aby uniknąć automatycznych żądań. Czy są jakieś pomysły, proszę? Używam Javy.


title: Jaka jest różnica między analizą systemu a analizą wymagań systemowych?

text: Czy „analiza systemu” i „analiza wymagań systemowych” to to samo? Myślę, że analiza systemowa jest szerszym pojęciem, a analiza wymagań systemowych jest jej częścią. Czy to jest poprawne?


title: Dodawanie uporządkowanych węzłów do drzewa w dowolnej kolejności

text: Posiadam bazę węzłów. Każdy węzeł może mieć dokładnie jednego rodzica, ale dowolną liczbę dzieci. Niektóre węzły mogą być przechowywane bez rodzica, ale w czasie wykonywania mogę utworzyć domyślny węzeł „root”, który będzie ich rodzicem. Po pierwsze, jak nazywa się ta struktura danych? Myślę, że to tylko „drzewo”, ale chcę się upewnić, że używam prawidłowej terminologii. Innym problemem, z którym się spotykam, jest znalezienie wydajnego sposobu tworzenia drzewa. Węzły mogą być pobierane z bazy danych w dowolnej kolejności, więc kiedy dodaję węzeł do drzewa, jego rodzica może jeszcze nie być w drzewie. Oznacza to, że kiedy dodaję węzeł, muszę sprawdzić, czy jakieś istniejące węzły mają rodziców, a następnie dodać rodzica w odpowiednim miejscu. Dużo szukałem w Internecie, ale większość rozmów o drzewach odnosi się po prostu do "drzewa binarnego", a nawet wtedy nie mogę znaleźć żadnych dobrych przykładów konstruowania drzewa w kodzie - zwykle działa z istniejącym drzewem. Czy są jakieś przykłady skutecznych sposobów budowania tego drzewa (jakkolwiek by to nazwać)? Język nie ma znaczenia, ale będę używał php.


title: Dwa różne formularze historyjek użytkownika, czy oba są poprawne?

text: **Właśnie natknąłem się na ten formularz historii użytkownika:** „Jako <rola użytkownika> mogę <aktywność>, aby <wartość biznesowa>” (źródło-1 i źródło-2) **co wydaje mi się inne niż Uważam, że jest to „standardowe”:** „Jako <rola> chcę <cel/pragnienie>, aby <korzyść>” (źródło-1 i źródło-2) (co oznacza, że uwierzę „ Mogę” byłoby w stwierdzeniu „korzyść/wartość”, a nie w stwierdzeniu „cel”. Na przykład: „Abym mógł [...].”) ** Czy oba mają rację, czy są wadliwe i dlaczego ?**


title: Czy można udostępnić sesję oAuth?

text: Pracujemy nad projektem, który obejmuje serwer WWW i aplikację mobilną, musimy uzyskać dostęp do prywatnych danych użytkownika (facebook, twitter ...) z serwera WWW, żądając od użytkownika uwierzytelnienia naszej aplikacji za pomocą telefonu komórkowego. Udało mi się łatwo uzyskać dostęp do prywatnych danych użytkownika z telefonu komórkowego po uwierzytelnieniu aplikacji przez użytkownika. teraz jak mogę propagować/udostępniać to uprawnienie serwerowi, aby serwer mógł w każdej chwili uzyskać dostęp do danych użytkownika i nad nimi pracować? Typowy przypadek użycia, na przykład: * użytkownik instaluje naszą aplikację mobilną. * użytkownik rejestruje się w usłudze licznika wiadomości bezpośrednich (usługa fikcyjna). * Użytkownik uwierzytelnia naszą aplikację, aby uzyskać dostęp do swojego konta Twitter na telefonie komórkowym. * serwer zaczyna codziennie pingować twitter API i pobierać dane o użytkowniku. * serwer publikuje wyniki w aplikacji mobilnej. czy ten scenariusz jest możliwy? jeśli tak, gdzie powinienem szukać, aby to się stało?


title: Jaka jest przyszłość dostawców członkostwa ASP.NET?

text: Podczas pracy nad nowym projektem z MVC3, frameworkiem DI (Ninject) i testami jednostkowymi (NUnit) w połączeniu z mockami (Moq), zauważyłem, że konfigurowanie dostawcy członkostwa było nieco „niezręczne”. Spotkałem się z zadaniami, które wydają się nieproporcjonalnie trudne, tak jak inni: wstrzykiwanie repozytorium do dostawcy, tworzenie testów jednostkowych i mocowanie dostawcy. Doprowadziło mnie to do pytania SO o alternatywy dla standardowego dostawcy członkostwa (z kolei z innym interesującym pytaniem o to, czy wprowadzić własny system uwierzytelniania), które nie przyciągnęło tyle uwagi, ile gwarantowałyby głosy nad tym pytaniem. Więc w końcu zostałem z **pytaniem**: _Czy ktoś wie, jaka jest przyszłość uwierzytelniania w ASP.NET? A dokładniej: czy Microsoft dostarczył (oficjalnych) informacji na temat ich kierunku uwierzytelniania?_ Nie mogłem znaleźć żadnych postów na blogu od pracowników/zespołów MS. Jedyną powiązaną rzeczą, jaką udało mi się znaleźć, był ten bardzo uprzywilejowany bilet użytkownika ASP.NET, który wydaje się nie mieć żadnej oficjalnej odpowiedzi.


title: Czy lepiej najpierw nauczyć się pętli warunkowych, czy iteracyjnych?

text: Widziałem samouczki i podręczniki, które najpierw uczą pętli warunkowych (while) i widziałem inne, które najpierw uczą pętli iteracyjnych (for). Czy przeprowadzono jakieś badania, które dają lepsze wyniki w nauce uczniów, czy jest to kwestia osobistego gustu?


title: Hostuj MVC 3 z aplikacją składni Razor na starym serwerze

text: Właśnie rozpocząłem nową pracę, muszę stworzyć dla nich aplikację internetową i hostować ją w intranecie na serwerze Windows 2003 R2 z serwerem SQL 2008. Jak wspomniano w pytaniu, będę pracować na MCV3 z aplikacją składni Razor . Wiem, że to nie będzie działać łatwo lub w ogóle. Na najnowszym serwerze trzeba zainstalować coś więcej (nie pamiętam nazwy), aby brzytwa była zrozumiała. A co z tym starym serwerem? Czy sprawię, że to zadziała, czy powinienem powiedzieć im, aby kupili nowszy serwer?


title: Jak mogę wyjaśnić programowanie obiektowe komuś, kto koduje tylko w Fortranie 77?

text: Moja mama zrobiła swoją pracę dyplomową w Fortranie, a teraz (ponad dekadę później) musi nauczyć się c++ do symulacji płynów. Jest w stanie zrozumieć całe programowanie proceduralne, ale bez względu na to, jak bardzo staram się jej wyjaśniać obiekty, to się nie trzyma. (Dużo pracuję z Javą, więc wiem, jak działają obiekty) Myślę, że wyjaśniam to na zbyt wysokim poziomie, więc nie ma to sensu dla kogoś, kto nigdy z nimi nie pracował i dorósł w dobie programowania czysto proceduralnego. Czy jest jakiś prosty sposób, w jaki mogę jej to wyjaśnić, co pomoże jej zrozumieć?


title: Czy zaliczasz studia magisterskie z CS jako negatywne?

text: Z mojego doświadczenia w rozmowach z programistami czuję, że kandydaci, którzy osiągnęli tytuł magistra w Comp Sci, są średnio **gorszymi** programistami niż ci, którzy nie mają tytułu magistra. Czy to tylko ja, czy inni zauważyli to zjawisko? Jeśli tak, dlaczego miałoby tak być? **AKTUALIZACJA** Doceniam przemyślane komentarze. Myślę, że w porównaniu, które dokonuję, powinienem był być jaśniejszy. Biorąc pod uwagę dwóch kandydatów, którzy ukończyli studia mniej więcej w tym samym czasie, ktoś, kto zdobył tytuł magistra, wydaje się przeciętnie gorszym programistą niż ktoś, kto spędził cały swój czas w przemyśle.


title: Najlepsze praktyki dotyczące przesyłania danych

text: W mojej firmie mamy kilku dostawców, do których i od których przesyłamy dane. Czasami dane są pobierane do naszej lokalnej bazy danych SQL w celu raportowania biznesowego. Innym razem pobieramy dane od jednego dostawcy, przekształcamy je, a następnie przesyłamy na serwer FTP innego dostawcy. Facet, którego zastąpiłem, ma kilka ogólnych aplikacji konsolowych SFTP Push/Pull, które przesyłają dane do/od tych dostawców. Następnie ma inne aplikacje, które importują dane do bazy danych SQL lub przekształcają dane i pozostawiają je w katalogu, aby przekazać je dostawcy. Co jakiś czas będziemy mieć problemy z tym, że te procesy nie znajdą potrzebnego pliku i muszę wrócić i uruchomić je ręcznie, aby załadować dane. Wydaje mi się, że bardziej niezawodne byłoby, gdyby te procesy wykonały swoje własne funkcje FTP push/pull, aby nie napotkać problemów z harmonogramem. Czy są jakieś standardowe praktyki, które mogę zaimplementować, które byłyby bardziej niezawodne, czy też muszę tylko _dopracować_ to, co mam teraz? Nawiasem mówiąc, jestem w środowisku Windows/.NET.


title: Czy interfejsy z wirtualnymi metodami rozszerzeń Java 8 to to samo, co domieszki?

text: Ten post opisuje nową funkcję w Javie 8 zwaną wirtualnymi metodami rozszerzeń (wcześniej nazywanymi metodami domyślnymi lub metodami obrony). W podanym przykładzie interfejs ma jedną metodę, która jest zaimplementowana przez klasę. Następnie dodawana jest druga metoda, ale zamiast wymusić na klasie natychmiastowe zaimplementowanie nowej metody interfejsu, w interfejsie tworzona jest „wirtualna metoda rozszerzenia” jako implementacja tej nowej metody, dzięki czemu klasa nie musi implementować nowa metoda od razu. Ale powiedzmy, że programista decyduje się na stworzenie wirtualnej metody rozszerzającej w interfejsie i nigdy nie planuje, aby podklasy implementowały własną wersję. Czy to nie byłby mixin? Wydaje mi się, że tak jest, ale nigdy nie słyszałem, żeby się tak nazywało. Czy jest jakaś zasadnicza różnica, której nie rozumiem?


title: Jak Google przechowuje trendy wyszukiwania w backendzie?

text: Trendy Google pokazują, jakie zapytanie było wyszukiwane, ile razy i inne właściwości tego zapytania. Ale jak te dane są przechowywane w bazie danych? Przechowywanie nowego wiersza dla każdego wyszukiwania nie wydaje się właściwe. Przekazują również zapytanie na wykresie czasowym, więc muszą mieć jakiś sposób na wyszukanie poszczególnych wyszukiwań dokonanych przez użytkowników, ale liczba zapytań, które otrzymują codziennie, nie wydaje się słuszne, aby przechowywać każde wyszukiwanie w wierszu bazy danych wraz ze znacznikiem czasu. Nie dotyczy to tylko trendów Google lub Google w ogóle, ale każdej innej dużej witryny, która otrzymuje straszną liczbę zapytań, a następnie ma narzędzia, aby je dogłębnie zobaczyć. Nie jestem w tym ekspertem, ale interesuje mnie jakaś struktura wysokiego poziomu tego, jak wszystko działa za kulisami.


title: Chciałbym poświęcić swój czas za darmo na projekt Ruby open source, jakie są niektóre przyjazne dla początkujących projekty Ruby?

text: Myślę, że jestem w punkcie, w którym mogę naprawdę przyczynić się do projektu open source Ruby. Byłby to mój pierwszy projekt grupowy, w którym chciałbym być „mentorowany” lub coś podobnego przez bardziej doświadczonego programistę. Mogłabym pracować w wolnym czasie i za darmo.


title: Erlang lub 'x'.. Czy warto (w porównaniu z Pythonem z GIL)?

text: Tak więc w końcu dotarłem do punktu, w którym czuję się wystarczająco dobrze z Pythonem (używając Pyramid jako mojego wyboru), aby podjąć się dość dużego osobistego projektu. Ponieważ jest to projekt osobisty, mam luksus nie spieszyć się, nie mając absolutnie żadnych terminów innych niż te, które sam sobie narzuciłem. Uwielbiam uczyć się nowych frameworków, języków, itp., więc jeśli mam powód, nie mam nic przeciwko odkładaniu rozwoju na około miesiąc podczas nauki nowego języka i frameworka (trwa to dłużej, gdy robisz to w wolnym czasie ;)). Niedawno dowiedziałem się o GIL (Global Interpreter Lock) firmy CPython, który nieco uniósł moją brew. Jeśli dobrze rozumiem, oznacza to, że jeśli mam `Queue` w mojej aplikacji internetowej i wątki, które kończą zadania w kolejce, kod jest blokowany do momentu zakończenia wątku dla tego żądania, co oznacza, że każde kolejne żądanie jest zablokowane podczas wykonywania poprzedniego wątku. **Pytanie:** Czy ktoś w „prawdziwych” aplikacjach uznał to za problem? Czy warto uczyć się języka obsługującego _rzeczywistą_ współbieżność, takiego jak Erlang? Najbardziej interesują mnie testy porównawcze, które ktokolwiek wykonał w rzeczywistych aplikacjach i czy ktoś widział jakieś zauważalne problemy z GIL.


title: Jaką radę dałbyś komuś, kto chce pracować jako freelancer?

text: Próbuję wyjść z gry korporacyjnej i przejść do gry niezależnej. Zawsze szczyciłem się tym, że jestem waletem we wszystkich transakcjach, więc myślę, że mi to odpowiada. Jeśli jesteś freelancerem lub niezależnym, jaka jest najlepsza rada, której mógłbyś mi udzielić na początku tej drogi?


title: Jak chronić kod zastrzeżony podczas współpracy z firmą zewnętrzną?

text: Wyobraź sobie, że mam bazę kodów i obsesyjnie martwię się o ochronę i prywatność tego kodu. Gdybym miał zatrudnić freelancera do pracy nad tą bazą kodu, prawdopodobnie kazałbym freelancerowi podpisać umowę o zachowaniu poufności i mam nadzieję, że z czasem zbuduję z nim/nią relację i zyskam pewność, że może być zaufany. Jeśli jednak chciałem współpracować z firmą zewnętrzną, firmą X, jakie kroki mogę podjąć, aby chronić swój kod? Zakładam, że umowa o zachowaniu poufności zapewniłaby pewną ochronę w przypadku kradzieży kodu przez firmę X, ale co mogę zrobić, aby uchronić się przed kradzieżą kodu od nieuczciwego pracownika firmy X, który ma dostęp do bazy kodów? Czy powinienem wymagać, aby wszyscy pracownicy firmy X podpisali umowę o zachowaniu poufności? Ogólnie rzecz biorąc, jakie kroki może podjąć firma taka jak firma X, aby zachęcić do opartej na zaufaniu współpracy z klientami? Jak firma X może mnie zapewnić, że kod, do którego mają dostęp, nie zostanie skradziony? Czy taka współpraca jest w ogóle możliwa? **Dopisek:** Nie jestem przekonany, że większość umów o zachowaniu poufności nie ma pewności, co do ich ochrony. Ogólnie uważam, że wszystko, co mogę zrobić, to pracować z ludźmi, którym ufam i mam nadzieję na najlepsze. Jednak na potrzeby tego pytania interesuje mnie, czy dostępna jest _jakakolwiek_ forma ochrony, nawet jeśli nie jest ona szczególnie solidna.


title: Najlepsze praktyki w diagramie przepływu aplikacji

text: Tworzę aplikacje webowe, głównie MVC, obiektowe i bazodanowe. Zawsze mam problem z powrotem do projektu po kilku miesiącach od wydania i ponownej pracy. Nawet nie pamiętam, co zrobiłem przy tym projekcie. Jak mam przezwyciężyć ten problem? Nie stać mnie na zbyt czasochłonne dokumentacje i tyle diagramów. Jakiś szybki sposób, w jaki ćwiczycie, aby tego uniknąć?


title: Jak prawidłowo ustrukturyzować zbiór niezmiennych stałych?

text: Jestem na etapie projektowania programu, który na podstawie otrzymanych danych wejściowych wybrałby konkretną kategorię i działanie w ramach tej kategorii. Kategoria, akcja w in oraz wartości związane z tą akcją są wartościami niezmiennymi, wraz z relacją między kategorią a akcją. Normalnie przypisałbym to wszystko do wielowymiarowej tablicy lub kolekcji, ale wydaje mi się, że jest to zarówno niechlujne, jak i niepotrzebnie skomplikowane do wyszukiwania i sortowania. Stałe nie pozwalają mi na luksus definiowania relacji między nimi (na przykład nie można mieć stałej A powiązanej z podstałą B), a będąc aplikacją komputerową, posiadanie użytkownika konfigurującego serwer bazy danych nie jest atrakcyjne. Myślałem o posiadaniu wszystkiego w plikach xml, ale podstawowe zasady aplikacji nie są atrakcyjne, ponieważ można je łatwo edytować, a tym samym zmienić podstawową funkcjonalność programu, której nie chciałbym edytować. Ktoś kiedykolwiek natknął się na coś takiego, a jeśli tak, to jakiej konfiguracji użyłeś do swojego rozwiązania? EDYCJA: Zobaczmy, czy mogę to lepiej wyjaśnić na przykładzie. Powiedzmy, że mam następującą strukturę kategoria A -- akcja AB -- wynik 1 -- wynik 2 -- wynik 3 -- wynik 4 -- wynik 5 -- wynik 6 gdzie jeśli wybrałem kategorię A i działanie AB , jedna kostka roll wybierze wynik do zwrócenia. Kategoria, akcja i wynik nigdy nie zmienią się zarówno pod względem nazwy, jak i relacji (akcja AB będzie zawsze związana z kategorią A, wyniki w ramach akcji AB będą powiązane z akcją AB, a zawartość wyniku nigdy się nie zmieni) EDIT: Brak sieci można by oczekiwać użycia tej aplikacji, o co pytano w jednej z odpowiedzi.


title: Legalność wspólnej inżynierii odwrotnej

text: Jako hobby sam demontowałem duży projekt oprogramowania. Jest to ćwiczenie edukacyjne i wiele się nauczyłem w trakcie tego procesu. To powiedziawszy, czuję, że moje postępy byłyby znacznie szybsze, gdybym współpracował przy projekcie z innymi osobami o podobnych poglądach. W tym tkwi problem – może. Odwracam to oprogramowanie dla osobistego interesu i potencjalnie (ale mało prawdopodobne; biorąc pod uwagę wielkość danej bazy kodu) wdrażam interoperacyjną usługę do interakcji z tym oprogramowaniem, zastępując własną usługę dostawcy. Moje (bardzo ograniczone) rozumienie jest takie, że ten konkretny przypadek użycia jest chroniony prawem autorskim. Chciałbym jednak swobodnie współpracować z innymi w Internecie, w podobnym systemie stosowanym w projektach open source: repozytoria kontroli wersji plików assemblerów, wiki do koordynowania i dzielenia się wiedzą, publiczne listy mailingowe i tak dalej. Mam wrażenie, że to może być w najlepszym razie niepewne. Czy to, co chcę zrobić, jest rażąco nielegalne, szara strefa, a nawet prawnie obroniona? Czy sytuacja byłaby inna, gdyby współpraca była prywatna, a nie publiczna? Jeśli ma to jakiś wpływ na odpowiedź, mieszkam w Australii, a dostawca oprogramowania w USA.


title: Czy powinienem użyć AND, czy powinienem użyć OR

text: Zlecenie może mieć „status” Ukończone, Poprawione lub inny. Widziałem jakiś kod, który sprawdza to w ten sposób, celem jest wyłączenie niektórych rzeczy, gdy status jest w statusie Ukończono lub Poprawiono. if (model.CurrentStatus != DSRHelper.OrderStatusEnum.Complete && model.CurrentStatus != DSRHelper.OrderStatusEnum.Corrected) Nie rozumiem, dlaczego inżynier użył do tego „AND”, czy nie powinno to być „LUB” ?


title: Jakie programy/rozwiązania można napisać tylko z OOP lub są zbyt trudne do osiągnięcia bez tego?

text: Parafrazując ostatnie pytanie: Do czego nie nadaje się programowanie zorientowane obiektowo? Chciałbym zadać odwrotne pytanie: Jakiego rodzaju programów nie można napisać bez użycia OOP? Jakiego rodzaju programy nie są zalecane do pisania przy użyciu technik innych niż OOP? Jakie programy potrzebują OOP, aby w ogóle mogły zostać napisane? Jakie programy byłyby zbyt trudne do napisania bez OOP? Odpowiedź na to pytanie może pomóc sprzedać ideę OOP liderom projektów, którzy nie są szczególnie zainteresowani jakością kodu. Przynajmniej mogliby kupić pomysł, gdyby pokazać im rzeczy, które nie są nawet możliwe, chyba że użyjesz OOP.


title: Zapasy / zapasy w wielu lokalizacjach

text: Pracuję nad systemem zarządzania magazynem (WMS), który ma wspierać posiadanie zapasów w wielu lokalizacjach. Może znajdować się w innym budynku, może być przechowywany w n* miejscach w budynku (szybkim przykładem mogą być zapasy, przepełnienie lub szybko zmieniające się miejsca, z których wszystkie zawierają ilość tego samego przedmiotu). Tam, gdzie jestem, zawsze używali jednego SKU przypisanego do jednego kosza z papierowymi notatkami wskazującymi na przepełnienie. Oczywiście wyrosły poza to i powoduje to poważne problemy. Nikt tutaj nie może mi pomóc, gdy próbuję uzyskać najlepsze praktyki. Mam problem z konceptualizacją konfiguracji struktury. Myślę... * Magazyn (wirtualny lub fizyczny) Magazyny mogą należeć do magazynów. * Lokalizacja - wszystko może być paletą, pudełkiem lub po prostu taśmą na podłodze. Lokalizacje należą do magazynów. * Rzędy - mogą znajdować się w lokalizacjach * Półki mogą znajdować się w rzędach * Sloty (tradycyjnie nazywane tutaj koszem) to najmniejsza jednostka, która może być lokalizacją. Wówczas jednostka SKU może znajdować się w jednej lub wielu z tych lokalizacji (z wyjątkiem magazynu wirtualnego — używanego tylko z grupowania lokalizacji fizycznych, ale umożliwiającego zamówieniu sprzedaży przetwarzanie ich wewnętrznie, tak jakby zostało wysłane z jednego miejsca). Lokalizacje (są ich dziećmi) mogą mieć pierwszeństwo. Jeśli więc jednostka SKU znajduje się w 2 lokalizacjach, system wie, które gniazdo (pojemnik) opróżnić jako pierwsze, a następnie skierować do następnego. Koduję go tak, aby powyższe struktury mogły być obsługiwane przez magazyn, ponieważ fizycznie nie dbam o nie tylko o to, aby proces miał sens, a następnie daję im narzędzie do zaznaczania porządku sortowania, aby mogli określić najlepsze trasy przez magazyn z kompletacją zamówień. Myślę, że chciałem po prostu wyrzucić to z głowy i zwrócić na to uwagę kogoś innego, zanim napiszę choćby jedną linijkę kodu. Czy ta struktura ma sens? Czy to najlepsza praktyka? Jeśli nie, to co jest i jeśli to pytanie jest poza sferą serwisu, czy ktoś mógłby mi na nie wskazać?


title: Naucz się NoSQL lub zostań twardzielem z tradycyjnym RDMS - Gdzie jest / będzie praca?

text: Nowa wersja pytania: Mam okazję spędzić 3 miesiące na doskonaleniu się w czymś, będzie to albo technologia NoSQL, taka jak Cassandra, albo optymalizacja relacyjnych systemów baz danych. Trochę wolę spróbować „smaku miesiąca” cassandry, ale chciałbym również poprawić swoje umiejętności w zakresie relacyjnych baz danych, co byłoby bardzo praktyczne. Nie chodzi o to, co jest lepsze, ale o moje perspektywy zatrudnienia i miejsce, w którym dostanę pracę. Wiem, że będzie więcej pracy w relacyjnych bazach danych, ale czy zobaczymy wzrost poziomu zadań wymagających/wymagających doświadczenia z NoSQL? Dzięki, jestem naprawdę pod wrażeniem ilości rad, jakich do tej pory udzielili. Stara wersja: Jestem w połowie studiów magisterskich i myślę o mojej pracy doktorskiej, którą mam 3 miesiące na pracę w pełnym wymiarze godzin. Jestem bardzo zadowolony z tradycyjnej relacyjnej bazy danych, pytanie brzmi, czy powinienem pracować nad projektem, w którym dobrze rozumiem coś takiego jak Cassandra, czy naprawdę powinienem pociągnąć moją wiedzę na temat RDMS do granic możliwości. Bycie świetnym w czymś takim jak MySQL jest solidną bezpieczną opcją, czy naprawdę będzie dla mnie dużo pracy z Cassandrą w moim pasku narzędzi? Chciałbym zrobić albo.... Dzięki za opinie i rady.


title: Czy powinien istnieć indeks „higieny danych” dla oprogramowania - wskazujący, jak czysty jest program? nie zostawianie plików tymczasowych itp.

text: Czy powinien istnieć indeks „higieny danych” dla oprogramowania - wskazujący, jak czysty jest program? nie tworzenie nieużywanych plików tymczasowych, wpisów rejestru, zmiennych środowiskowych itp. Na przykład zajrzyj do folderu użytkowników w systemie Windows, zobaczysz wszystkie rodzaje plików przestrzeni roboczej używane przez aplikacje. Na przykład utrudnia to określenie, co należy wykonać w kopii zapasowej, a co można odrzucić jako wygenerowane przez maszynę.


title: Kiedy zacząć myśleć o skalowalności?

text: Mam zabawny, ale też straszny problem. Mam zamiar uruchomić nową aplikację (iPhone). Jest to turowa gra wieloosobowa działająca na moim własnym, niestandardowym zapleczu. Ale boję się startować. Z jakiegoś powodu myślę, że może stać się czymś dużym i że jego popularność zabije mój biedny, samotny pojedynczy serwer + baza danych MySQL. Z jednej strony myślę, że jeśli się rozwija, to lepiej być przygotowanym i mieć już skalowalną infrastrukturę. Z drugiej strony po prostu mam ochotę wynieść to w świat i zobaczyć, co się stanie. Często czytam takie rzeczy jak „przedwczesna optymalizacja jest źródłem wszelkiego zła” lub ludzi mówiących, że powinieneś po prostu zbudować swoją zabójczą grę już teraz, mając pod ręką narzędzia, a później martwić się innymi rzeczami, takimi jak skalowalność. Chciałbym usłyszeć kilka opinii na ten temat od ekspertów lub osób z tym doświadczeniem. Dziękuję!


title: Jednokrotne logowanie między wieloma aplikacjami Flex

text: Mamy trzy aplikacje opracowane w **Flex** i wszystkie z nich korzystają z BlazeDS. Te aplikacje mają własne implementacje uwierzytelniania **(Baza danych)**. Zostaną również wdrożone w **tomcat**. Wdrożenie wszystkich tych aplikacji w tej samej instancji tomcat jest dla nas dopuszczalne. Chcemy umieścić dane uwierzytelniające wszystkich tych aplikacji w jednym miejscu, a także udostępnić **funkcję logowania jednokrotnego między tymi aplikacjami**. Chcemy również, aby moduł uwierzytelniania był **konfigurowalny**. Coś w rodzaju administratora systemu może zdecydować, czy uwierzytelnianie powinno odbywać się w oparciu o **bazę danych czy LDAP**. Powiedzmy, że jeśli użytkownik pomyślnie zaloguje się do aplikacji 1, a gdy uzyska dostęp do aplikacji 2 w tej samej przeglądarce, powinien zostać automatycznie zalogowany. To samo dotyczy również wylogowania. Odkrywamy **OpenAM, jGuard i JOSSO**. Nie jestem pewien, czy wymagają one dużego dostosowania do pracy z **Flex**. Chciałbym wiedzieć, jak ludzie wdrażają aplikacje SSO for Flex. **Czy istnieje wspólne i proste rozwiązanie SSO dostępne dla aplikacji opartych na Flex?**


title: odczytywanie parametrów i plików w przeglądarce, szukanie sposobu wykonania na serwerze

text: Mam witrynę wykonaną w Rails, która używa javascript do ładowania plików i generowania formularzy dla użytkownika do wprowadzania określonych informacji. Te pliki i parametry mają być następnie użyte w kodzie fortranowym na serwerze. Gdy interfejs użytkownika był na serwerze (przy użyciu Qt), tworzyłem plik parametrów i wykonywałem kod fortran za pomocą wątków, aby nie blokować komputera. Teraz to jest oparte na sieci, muszę sprawić, by serwer i przeglądarka rozmawiały. Jaka jest na to procedura? gdzie powinienem zacząć szukać? Używam już rails + javascript. Potrzebuję tego dodatkowego narzędzia do mówienia i nie mam pojęcia, od czego zacząć.


title: Czy wewnętrznie opracowana, szybko rozwijająca się, zwinna aplikacja internetowa o krótkim sprintu nadaje się do offshoringu?

text: Niedawno wyznaczono mi cel osiągnięcia gotowości do skutecznego zarządzania i dostarczania wyników poprzez wykorzystanie zespołów offshore w naszym głównym projekcie rozwojowym w ciągu 12 miesięcy. Naszą główną linią jest wielotysięczna aplikacja internetowa o wysokiej dostępności i różne powiązane komponenty SAAS dostarczane za pośrednictwem wyżej wymienionej aplikacji internetowej. Pracujemy zwinnie na głównej linii z szybkim 1-tygodniowym sprintem przy użyciu ciągłej integracji. Nasza platforma dostarczania to specjalnie zaprojektowany framework php, chociaż mamy kilka usług i komponentów .net w miksie. Mój pogląd jest taki: zespół offshore mógłby pracować, jeśli albo wyślemy cały izolowany projekt do rozwoju offshore, albo określimy z góry bardzo szczegółowy komponent naszego systemu. Ale obecnie nie pracujemy w ten sposób i będzie to kolidować z metodą wewnętrzną, a jeśli off-shore nie działa w naszym zespole, z naszym łańcuchem rozwoju/wdrożeń może to być koszmar integracyjny. Więc moje pytanie brzmi, biorąc pod uwagę, że mamy zamknięty framework na zamówienie (Private IP), z którego szkolimy naszych programistów, i pracujemy zwinnie, minimalizując dokumentację, maksymalizując komunikację i reagując na szybko zmieniające się wymagania, a większość kontroli jakości odbywa się za pośrednictwem zespołu budowania umiejętności i wzajemnej oceny, jak mogę wykonać prace offshoringowe przy rozwoju naszej głównej linii?


title: Pracodawca kupił dla mnie Macbooka, jako programista co muszę zrobić, aby skonfigurować moje środowisko?

text: Pochodzę z dorastania na DOS/Windows i im więcej zajmowałem się programowaniem i rozwojem, tym więcej czasu/wysiłku zainwestowałem w dystrybucje Linuksa. Miałem wybór między IBM a Macbookiem. Poszedłem z Macbookiem, aby zdobyć trochę doświadczenia, ale nie jestem pewien, od czego zacząć? Chcę zainstalować Virtualbox i uruchomić Linuksa. Masz jakieś rady dla nowego użytkownika komputera Mac, który chce sprawnie wrócić do programowania?


title: Wszelkie narzędzia/sugestie, jak odrzucić argument dotyczący jakości pokrycia kodu

text: Teraz wiem, że ludzie mogliby uznać to pytanie za duplikat lub zadawane wiele razy, w takim przypadku byłbym wdzięczny za link do odpowiednich pytań z odpowiedzią na moje pytanie. Ostatnio nie zgadzałem się z niektórymi ludźmi na temat pokrycia kodu. Mam grupę ludzi, którzy chcą, aby nasz zespół całkowicie zrezygnował z zajmowania się pokryciem kodu w oparciu o argument, że 100% pokrycie nie oznacza dobrej jakości testów, a tym samym dobrej jakości kodu. Udało mi się odeprzeć, sprzedając argument, że Code Coverage mówi mi, co na pewno nie zostało przetestowane i pomaga nam skoncentrować się na tych obszarach. (Powyższe zostało omówione w podobny sposób w innych pytaniach SO, takich jak to - http://stackoverflow.com/questions/695811/pitfalls-of-code-cover) Argumentem ze strony tych ludzi jest - wtedy zespół zareagowałby szybko tworzyć testy niskiej jakości, a tym samym tracić czas, nie dodając znaczącej jakości. Rozumiem ich punkt widzenia, ale szukam sposobu na stworzenie bardziej niezawodnego przypadku pokrycia kodu, wprowadzając **bardziej niezawodne narzędzia/frameworki, które zapewniają więcej kryteriów pokrycia** `(Funkcjonalne, Oświadczenie, Decyzja, Rozgałęzienie , Warunek, Stan, LCSAJ, ścieżka, ścieżka skoku, wejście/wyjście, pętla, wartość parametru itp.). To, czego szukam, to **sugestia połączenia takich narzędzi do pokrywania kodu i praktyk/procesów z nimi**, która może pomóc mi przeciwstawić się takim argumentom, a jednocześnie czuć się komfortowo z moją rekomendacją. Z przyjemnością przyjmę również wszelkie towarzyszące komentarze/sugestie oparte na twoim doświadczeniu/wiedzę, jak przeciwdziałać takim argumentom, ponieważ choć subiektywne, pokrycie kodu pomogło mojemu zespołowi być bardziej świadomym jakości kodu i wartości testowania. * * * Edytuj: Aby zredukować niejasności związane z moim zrozumieniem słabości typowego pokrycia kodu, chcę zaznaczyć, że **nie mam na myśli** narzędzi ``Statement Coverage``(ani wierszy wykonanego kodu)(jest ich wiele ). W rzeczywistości, oto dobry artykuł na temat wszystkiego, co jest w nim nie tak: http://www.bullseye.com/statementCoverage.html Szukałem czegoś więcej niż tylko pokrycia oświadczenia lub linii, zagłębiając się bardziej w wiele kryteriów i poziomów pokrycia. Zobacz: http://en.wikipedia.org/wiki/Code_coverage#Coverage_criteria Pomysł polega na tym, że jeśli narzędzie może nam powiedzieć o naszym zasięgu na podstawie wielu kryteriów, staje się to rozsądną automatyczną oceną jakości testów. W żadnym wypadku nie twierdzę, że zasięg linii to dobra ocena. W rzeczywistości to jest przesłanka mojego pytania. * * * Edytuj: Ok, może zaplanowałem to trochę zbyt dramatycznie, ale rozumiesz. Problem polega na ustalaniu procesów/polityk we wszystkich zespołach w sposób jednorodny/spójny. I panuje ogólna obawa, jak zapewnić jakość badań, jak przeznaczać gwarantowany czas, nie mając do tego żadnych środków. Dlatego lubię mieć wymierną funkcję, która po wsparta odpowiednimi procesami i odpowiednimi narzędziami pozwoli nam poprawić jakość kodu, jednocześnie wiedząc, że czas nie jest na siłę spędzany na marnotrawnych procesach. * * * **EDYCJA: Do tej pory to, co mam z odpowiedzi:** * Przeglądy kodu powinny obejmować testy, aby zapewnić jakość testów * Strategia Test First pomaga uniknąć testów pisanych po fakcie, aby po prostu zwiększyć pokrycie % * Poszukiwanie alternatywy narzędzia, które pokrywają kryteria testowe inne niż zwykłe oświadczenie/wiersz * Analiza pokrytego kodu/liczby znalezionych błędów pomogłaby docenić znaczenie pokrycia i stworzyć lepszy przypadek * Co najważniejsze, zaufaj wkładowi zespołu, aby postępować właściwie i walczyć o swoje przekonania * Objęte bloki/liczba testów - dyskusyjne, ale ma pewną wartość Dziękujemy za wspaniałe odpowiedzi do tej pory. Naprawdę ich doceniam. Ten wątek jest lepszy niż godziny burzy mózgów z takimi mocami.


title: Jaka jest rola tradycyjnego trackera problemów w przypadku korzystania z tablicy Scrum/Kanban?

text: Z bardzo wysokiego poziomu wydaje mi się, że generalnie istnieją 2 rodzaje narzędzi do zarządzania projektami: 1. **Tradycyjne narzędzia do śledzenia problemów**, takie jak Fogbugz, JIRA, BugZilla, Trac, Redmine itp. 2. **Wirtualne tablice kart* * / zwinne narzędzia do zarządzania projektami, takie jak Pivotal Tracker, GreenHopper, AgileZen, Trello itp. Oczywiście nakładają się one w taki czy inny sposób, np. Zadania Pivotal Tracker można importować do JIRA, sam GreenHopper jest zaimplementowany na bazie problemów JIRA itp., ale myślę, że nadal widać różnicę w orientacji między tymi dwoma typami narzędzi. Tradycyjny tracker problemów wydaje się być używany nawet w firmach zajmujących się zwinnym zarządzaniem projektami. Moje pytanie brzmi, dlaczego oni to robią? Uważam też, że powinniśmy używać trackera problemów w mojej firmie, ale kiedy o tym myślę, nie jestem pewien, po co nam go potrzebować. Na przykład wydaje się, że rozwój Trello jest zarządzany przy użyciu samego Trello (patrz ta wirtualna ściana), mimo że mają dostęp do Fogbugz, jednego z najlepszych narzędzi do śledzenia problemów. Może więc nie potrzebujemy tradycyjnego narzędzia do śledzenia problemów, gdy będziemy wykonywać 100% naszej pracy w sposób zwinny, korzystając z jednego z narzędzi Agile PM?


title: Projekt dla aplikacji opartej na wtyczkach

text: Pracuję nad aplikacją, której szczegółów nie mogę tutaj omówić. Mamy core framework, a reszta jest zaprojektowana jako plug-in. W core frameworku mamy obiekt domeny. Ten obiekt domeny jest aktualizowany przez wtyczki. Zdefiniowałem interfejs, w którym mam funkcję jako `DomainObject doProcessing(DomainObject object)` Moim zamiarem jest przekazanie obiektu domeny, wtyczka zaktualizuje go i zwróci. Ten zaktualizowany obiekt jest następnie ponownie przekazywany do innej wtyczki w celu aktualizacji. Nie jestem pewien, czy to dobre podejście. Nie lubię przekazywania DomainObject do wtyczki. Czy istnieje lepszy sposób, aby to osiągnąć? Czy mam po prostu zażądać danych z wtyczki i samodzielnie zaktualizować obiekt domeny?


title: Czy powinienem napisać opakowanie w obiekcie menedżera?

text: Mam trzy klasy, które współpracują ze sobą, aby wykonać jedną funkcję (z perspektywy reszty mojego programu). Jest między nimi trochę konfiguracji, więc aby ułatwić dalszą część mojego programu, pogrupowałem je w: * `ListManager`: obiekt, który inicjalizuje je do właściwych wartości podczas konstruowania. Trzy obiekty, które przechowuje to: * `Timer`: * `TriggerManager`: po prostu wrapper wokół `ArrayList`, która zarządza obiektami `Trigger` * `CueList`: połączona lista ze zwykłymi pobierającymi i ustawiającymi, które są z nią związane. Ponieważ reszta mojego programu tylko wchodzi w interakcję/odwołuje się do klasy `TriggerManager`, czy powinienem pisać metody opakowujące dla zarządzanych przez nią obiektów? 1. Czy powinienem więc zrobić `ListManager.add(Cue c)` jako wrapper dla `CueList.add(Cue c)`. 2. LUB powinienem po prostu dodać gettery dla trzech obiektów i pozwolić reszcie mojego programu użyć tego do manipulowania nimi. Wydaje mi się, że późniejsza opcja jest znacznie łatwiejsza w utrzymaniu, ale jednocześnie kod utworzony, gdy zrobię opakowanie, wydaje się po prostu... ładniejszy... Jaka jest najlepsza praktyka w takich sytuacjach?


title: Czy dobrym pomysłem jest wykonywanie pracy kontraktowej dla byłego pracodawcy na pełen etat?

text: Zakładając: * Pracownik i firma rozstają się na dobrych warunkach * Nowa firma jest w porządku z niewielką ilością pracy kontraktowej, o ile nie odciąga to od nowej pracy * Poprzednia firma chce pomocy, a pracownik jest gotów pracować kilka godzin w tygodniu Czy warto wykonywać pracę kontraktową dla byłego pracodawcy na pełen etat? Czy ktoś kiedykolwiek to zrobił? Jak ci się udało? Widzę kilka możliwych pułapek, więc zastanawiam się, jaki to naprawdę dobry pomysł. Jakie trudności napotykasz wykonując prace programistyczne poza biurem i według innego harmonogramu niż reszta personelu programistycznego i jak można je przezwyciężyć? Jeśli pójdę do przodu, jaka byłaby uczciwa kwota do żądania w porównaniu z obecną pensją?


title: Czy są jakieś godne uwagi przykłady katastrof biznesowych, które można bezpośrednio przypisać oprogramowaniu open source?

text: W środowiskach „korporacyjnych” zaobserwowałem silne uprzedzenia do oprogramowania prawnie zastrzeżonego. Nawet w dużych firmach korzystających z języka Java rzadko można znaleźć MySQL lub PostgreSQL, a WebSphere i WebLogic są zdecydowanie preferowane w stosunku do JBoss lub Tomcat. To bardzo zrozumiałe. Chociaż wielu programistów woli Tomcata czy Postgresa od WebSphere czy Oracle DB, to nie oni podejmują ostateczne decyzje w tych sprawach. Ktokolwiek podejmie decyzję o tym, które bazy danych i serwery aplikacji będą używane w produkcji, przekona się, że opłaty licencyjne wydają się dość niskie w porównaniu do zwolnienia za wybór wolnego oprogramowania, które spowodowało coś naprawdę złego. Nie pytam, czy Postgres jest tak dobry jak Oracle. Nie o to chodzi. Oracle nie jest wybierany przez Postgresa po dokładnym rozważeniu funkcji i testów porównawczych. Postgres nie włącza się do rozmowy, ponieważ w niektórych miejscach wolne oprogramowanie nie jest zaufane. Ciekawe, czy ten brak zaufania pojawił się w odpowiedzi na jakieś konkretne wydarzenia. Moje pytanie brzmi więc: **Czy istnieją udokumentowane przypadki katastrof biznesowych (niepowodzenia, znaczna utrata przychodów, znaczna utrata danych firmowych itp.), które okazały się być wynikiem niedociągnięć w oprogramowaniu open source?** _Wyjaśnienie:_ Jeśli masz doświadczenie z firmami na poziomie korporacyjnym, które w pełni stosują OSS, które muszą uprzedzać w tej sprawie, ale dokonują wyborów w oparciu o potrzeby konkretnej sytuacji, to **Dobrze dla Ciebie!** Twoje doświadczenie się nie zmienia fakt, że inne przedsiębiorstwa mają zupełnie inne podejście, a moje pytanie jest słuszne, nawet jeśli te firmy stanowią mniejszość.


title: Workflow: Używanie binarnych formatów dokumentów w Git bez blokad (przejście z subversion)

text: Jesteśmy firmą konsultingową w zakresie oprogramowania z wieloma projektami dla różnych klientów. Tradycyjnie używamy Subversion, ale obecnie rozważamy przejście na Git. Znaczna część produkowanych przez nas dokumentów jest udostępniana naszym klientom (wymagania, projekty globalne, specyfikacje testowe itp.), a do ich tworzenia używamy MS Office. W Subversion mogliśmy użyć jego funkcji „Zablokuj”, aby upewnić się, że nikt nie edytował tego samego dokumentu w tym samym czasie. W Git nie możesz tego zrobić, ponieważ ze względu na swoją rozproszoną naturę git nie ma blokad. Zamki to tak naprawdę niewiele więcej niż mechanizm komunikacji, ale są bardzo skuteczne. Obecnie nasz kod i dokumenty skierowane do klientów znajdują się zazwyczaj w różnych podfolderach innego repozytorium svn. Co poleciłbyś, gdybyś przeszedł na git? Widzę zestaw opcji: 1. Przenosimy repozytoria svn do git 1-on-1. Zamiast używać blokad na plikach pakietu Office, robimy to, co sugerują ludzie git i jakoś próbujemy zmienić nasz przepływ pracy, aby to naprawić. Może to być praca w oddziale nad dowolną edycją dokumentu i połączenie tego z przeglądem. Takie podejście przełamuje m.in. Arkusze Excel zawierające informacje dotyczące zarządzania projektem; są łatwo edytowane przez członków zespołu (i zachęcamy do tego), ale nie podlegają żadnemu formalnemu procesowi przeglądu 2. Używamy git do kodu i svn do dokumentacji i zarządzania projektami. Ma to tę wadę, że niektóre bardziej projektowe dokumenty nie będą „w pobliżu” kodu, który specyfikują, co zwiększa prawdopodobieństwo, że ludzie zapomną je zaktualizować. Dodatkowo każdy musi używać i rozumieć dwa zestawy narzędzi. To powiedziawszy, może jest to świetna okazja, aby przejść do narzędzi dokumentacyjnych opartych na tekście (lateks, markdown, HTML, cokolwiek) dla dokumentów projektowych, które nie są skierowane do klientów. 3. Jak 1, ale zhakujemy polecenie `git lock`, które robi to, co robi dla nas svn lock (przełączaj odpowiednio flagę tylko do odczytu i synchronizuj z serwerem w jakiś sposób). Nie kupuję argumentu, że blokady nie działają w DVCS, ponieważ system powinien działać nawet wtedy, gdy jesteś całkowicie offline. Blokady Svn można również obejść; są mechanizmem _komunikacji_. Bez jakiegoś połączenia sieciowego komputer nie będzie się zbyt często komunikował. Nie możemy być jedynym sklepem, który jest bardzo zadowolony z tego, jak `svn lock` pasuje do naszego przepływu pracy, prawda? Jakieś pomysły lub wskazówki? Znalazłem http://stackoverflow.com/questions/119444/locking-binary-files-using-git-version-control-system, ale dyskusja jest raczej techniczna; szukam sposobów rozwiązania lub uniknięcia praktycznego problemu dwóch członków zespołu edytujących ten sam plik binarny w tym samym czasie.


title: Ujawnić szczegółowe błędy licencji?

text: Zatem po zaprogramowaniu i zintegrowaniu rozwiązania licencyjnego ze swoją aplikacją, jak należy radzić sobie z błędami licencyjnymi? Rozumiem: Pokaż, czy licencja jest ważna, czy nieważna - i zgłoś, jeśli serwer licencji jest nieosiągalny. Nic dodać nic ująć. Licencje mogą być nieważne z różnych powodów: nieprawidłowy kod maszynowy, osiągnięta maksymalna liczba aktywacji, nieprawidłowa wersja licencjonowana... Czy powinniśmy jednak zgłosić je użytkownikowi, czy po prostu powiedzieć mu „w porządku”, „nie w porządku” lub „ serwer licencji nieosiągalny”? Nie wiem, czy to jest właściwe miejsce, by zapytać, może security.stackexchange.com jest bardziej odpowiedni, ale może to być również prawdą w przypadku ux.stackexchange.com... Więc pytam o to tutaj.


title: Czy mogę przenieść klon repozytorium Google Code do Github?

text: Chcę stworzyć klon repozytorium Google Code, którego nie mogę pobrać ze względu na ograniczenia krajowe i chcę przenieść ten klon do Github, z którego mogę korzystać bez problemu. Chodzi o to, że mam konto Github i mogę przeglądać GoogleCode, ale nie mogę wziąć mojego TortoiseHg i sklonować repozytorium tak po prostu, ponieważ pochodzę z Kuby i dostaję uroczą stronę Google z informacją, że nie mogę wejść do kodu Google. Domyślam się, że wiecie jak udaje mi się przeglądać :) Chciałbym zaimportować repozytorium mercurial do mojego repozytorium Github, moje pytania: * **Czy to możliwe?** * **Jak mogę to zrobić?**


title: Zawijanie podstawowych funkcji w wysokopoziomowe języki funkcjonalno-programistyczne

text: Chciałbym wiedzieć, czy istnieje ogólny przewodnik lub najlepsza praktyka w zakresie zawijania podstawowych funkcji. Weźmy na przykład J. Ma kilka 1- lub 2-znakowych "funkcji" zwanych prymitywami. Przykłady: * `,` : Spłaszcz macierz lub dołącz do wektora * `{` : Kataloguj kombinacje lub weź n-ty element macierzy * `{.` : Weź pierwszy lub n elementów macierzy * `}` : Zmień elementy w macierzy Niektórzy programiści J uważają, że najlepiej jest używać ich jako takich, inni zawijają je w funkcje takie jak: * `Append =: ,` * `TakeFirst =: {.` Zauważyłem, że nie zawsze jest to praktyczne, ponieważ jestem przyzwyczajony do rzeczywistych „symboli”, ale to w zasadzie oznacza, że jestem stronniczy. Jakieś porady dotyczące najlepszych praktyk do wykorzystania? Zawijać czy nie owijać?


title: Co jest lepsze: dołączyć HTML do kodu PHP czy poza nim?

text:
Spójrz na to: <?php echo "Witaj świecie"; ?>
 <?php echo "Witamy"; ?> A teraz spójrz na to: <?php echo "Witaj świecie"; echo "
"; echo "Witamy"; ?> Który z powyższych przykładów jest uważany za lepszy (przynajmniej z punktu widzenia wydajności)?. Wiem, że przykłady są trywialne, ale od początku chcę przestrzegać dobrych nawyków, więc gdy mam coraz więcej linii, nie wpłynie to negatywnie na wydajność lub cokolwiek innego.


title: Jak znaleźć projekt wykorzystujący określone frameworki/technologie?

text: Chciałbym poćwiczyć konkretne technologie/frameworki, takie jak Hibernate, Spring, GWT i tak dalej. Jak mogę znaleźć projekt open-source, który wykorzystuje określone technologie frameworków, abym mógł w nim wnieść swój wkład?


title: Dlaczego jako specyfikator formatu dla rodziny funkcji printf wybrano znak procentu (%)?

text: Każdy wie, że przynajmniej w C używa się rodziny funkcji `printf` do wypisania sformatowanego łańcucha. A te funkcje używają znaku procentu (`%`) do wskazania początku specyfikatora formatu. Na przykład, `%d` oznacza wypisanie `int`, a `%u` oznacza wydruk `unsigned int`. Jeśli nie wiesz, jak działa funkcja `printf` i symbole zastępcze formatu, lub po prostu potrzebujesz odświeżenia, dobrym miejscem do rozpoczęcia jest artykuł w Wikipedii. **Moje pytanie brzmi, czy istnieje szczególnie ważny powód, dla którego został on pierwotnie lub powinien zostać wybrany w przyszłości jako specyfikator formatu?** Oczywiście decyzja została podjęta dawno temu (bardzo prawdopodobne dla poprzednika nawet języka C ) i od tamtego czasu jest mniej lub bardziej „standardowa” (nie tylko w C, ale także w wielu innych językach, które w różnym stopniu przyjęły jego składnię), więc jest już za późno na jakiekolwiek zmiany. Ale nadal jestem ciekaw, czy ktoś ma jakiś wgląd w to, dlaczego ten wybór mógł zostać dokonany w pierwszej kolejności i czy nadal ma sens jako wybór, jeśli projektuje się nowy język o podobnej funkcjonalności. Na przykład w przypadku C# (i innej rodziny języków .NET) Microsoft podjął nieco inną decyzję dotyczącą działania funkcji formatowania ciągów. Chociaż można tam wymusić pewien stopień bezpieczeństwa typów (w przeciwieństwie do implementacji `printf` w C), a zatem nie jest konieczne dołączanie wskazania typu odpowiedniego parametru, zdecydowano się na użycie par kędzierzawych indeksowanych do zera nawiasy klamrowe (`{}`) jako specyfikatory formatu, na przykład: string output = String.Format("W {0} temperatura wynosi {1} stopni Celsjusza.", "Teksas", 37); Konsola.WriteLine(wyjście); // Wynik: // W Teksasie temperatura wynosi 37 stopni Celsjusza. Dokumentacja metody `String.Format` zawiera więcej informacji, podobnie jak ogólnie ten artykuł na temat formatowania złożonego, ale dokładne szczegóły są raczej nieistotne. Chodzi po prostu o to, że porzucili długoletnią praktykę używania `%` do wskazywania początku specyfikatora formatu. Język C mógł z łatwością użyć `{d}` i `{u}`, ale tak się nie stało. Ktoś ma jakieś przemyślenia, dlaczego, czy ta decyzja ma sens z perspektywy czasu i czy powinny za nią podążać nowe wdrożenia? Oczywiście nie ma znaku, który można by wybrać, który nie musiałby być uniknięty, aby mógł być zawarty w samym łańcuchu, ale ten problem jest już całkiem dobrze rozwiązany przez użycie _dwóch_ z nich. Jakie inne względy są istotne?