title: Jak ominąć pośredników?

text: Pracuję jako freelancer nad projektem, w którym jestem jedynym programistą i znajduję się na końcu kolejki czterech pośredników, którzy stoją między mną a faktycznym klientem, z których każdy przekazuje moją pracę jako wewnętrzną do własnej firmy. Komunikacja jest okropna, a wymagania stawiane przez firmę reklamową są skąpe. Udało mi się komunikować z ludźmi znajdującymi się wyżej na drabinie, zadając pytania, które sprawiały, że ludzie mierzyli się z ich ignorancją, ale nie pozwalają mi skontaktować się z klientem końcowym, ponieważ z jego punktu widzenia jest to w dużej mierze skończona umowa. Projekt wkrótce się skończy i zdecydowałem, że to ostatni raz, kiedy będę pracował w takich warunkach. Pośrednicy są praktycznie bezużyteczni z punktu widzenia wysyłki produktu, ale wciąż mi potrzebni, bo to oni dostarczają kontrakty. Dlatego nie myślę o ich całkowitym przekraczaniu, co pewnie by się źle skończyło. Raczej szukam sposobu, aby zrozumieli, że muszę być częścią wymagań i procesu projektowania, spotykać się z klientami i nie powinienem przechodzić przez cały kanał nieświadomych ludzi za każdym razem, gdy potrzebuję pewnych informacji. Przepraszam za odpowietrzenie :) Jakieś pomysły ?


title: Jaka logika jest używana do kontrolowania akcji Zablokuj i Aktualizuj w sieciach P2P? (podobny do Bitcoina)

text: Bitcoin opiera się na Proof of Work (hashing), aby kontrolować zapis do centralnego repozytorium (blockchain). Opiera się również na zestawie reguł dla tych aktualizacji i określa, co się stanie, jeśli zostanie znaleziony konflikt (najdłuższy łańcuch wygrywa) Używając tego jako przykładu dla mojego pytania: * Jakie są architektoniczne przykłady różnych rozproszonych mechanizmów blokowania i/lub aktualizacji nadaje się do sieci P2P? (Szukam opisów projektowania oprogramowania odpowiedniego dla tego projektu, a nie produktów oprogramowania) * Jaka kluczowa logika lub zasady są fundamentalne dla tej zdecentralizowanej "bazy danych"?


title: Co zrobić, gdy firma poprosi o pozwolenie na wykorzystanie kodu open source bez przypisania?

text: Obecnie mam projekt opensource na licencji MIT. Otrzymałem od firmy prośbę o wykorzystanie mojego kodu w ich projekcie komercyjnym bez konieczności podawania żadnego przypisania lub uznania. Szczerze mówiąc, kiedy wydałem kod, moją jedyną intencją była pomoc innemu programiście i tak naprawdę nie myślałem o tym, czy zostałem doceniony. Wybór licencji był tylko jednym z kroków, które musiałem wykonać, aby skonfigurować projekt na codeplex. Z jednej strony czuję się zaszczycony i doceniam to, że rzeczywiście zadali sobie trud, aby zapytać, z drugiej strony czułem, że gdybym po prostu pozwolił im to zrobić bez żadnych kosztów, może po prostu zniszczyć ducha open source. **Jakie są typowe rzeczy, które ja lub inni właściciele kodu mogę zrobić lub zażądać od firmy, aby uczynić to uczciwym handlem? Czy w ogóle powinienem na to pozwolić?** Zastanawiam się nad zwróceniem się do firmy o napisanie oficjalnego listu intencyjnego i podpiszę się przeciwko niemu tylko po to, aby uczynić go bardziej formalnym; a także poprosić o darowiznę na wybrany przeze mnie projekt / organizację charytatywną lub kupić coś z mojej listy życzeń w ramach rekompensaty (niezbyt drogie). Czy to będzie za dużo?


title: Django jako rozszerzenie Pythona?

text: Pochodzę ze społeczności **php** i właśnie zacząłem się uczyć **Pythona**. Muszę tworzyć skrypty po stronie serwera, które manipulują bazami danych, plikami i wysyłają e-maile. Niektóre z nich wydawały mi się trudne do wykonania w pythonie, w porównaniu do php, na przykład wysyłanie e-maili i przeszukiwanie baz danych. Tam, gdzie w **php** masz funkcje takie jak **mysql_query()** , czy **email()** , w pythonie musisz napisać całą masę kodu. Niedawno znalazłem Django i moje pytanie brzmi: czy jest to dobry framework dla skryptów sieciowych, zamiast używać go jako web-frameworka?


Jestem nowy w jQuery i tworzeniu aplikacji mobilnych. Znam funkcje jQuery Mobile. Chcę wiedzieć, gdzie i dlaczego z niego korzystać. Czy mogę używać jQuery Mobile, jeśli tworzę aplikację natywną?


title: Rozmowa techniczna z twórcą oprogramowania na poziomie podstawowym... Potrzebuję porady w zakresie przygotowania

text: Jestem świeżo po studiach. Więc nie mam dużego doświadczenia z rozmowami kwalifikacyjnymi. Rozmowa kwalifikacyjna na stanowisko programisty na poziomie podstawowym. Przeszedłem już przez pierwszy ekran telefonu i wyzwanie kodowania. Teraz idę na rozmowę techniczną twarzą w twarz. Jeśli to zdam, prawdopodobnie dostanę pracę. Opis stanowiska, z którym teraz rozmawiam, mówi, że będę pracował głównie z C++, niektórymi C#, bazami danych i tworzeniem stron internetowych. To mniejsza firma, a moimi obowiązkami będzie po trochu wszystko (projektowanie, dokumentacja, kodowanie i kontrola jakości). Zbombardowałem moją ostatnią rozmowę techniczną (z inną firmą), ponieważ przygotowałem się, studiując gówno wszystkich technologii wymienionych w opisie stanowiska (c#, html, sql, ajax, javascript, itp.), ale rozmowa zawierała wszystkie pytania o hash mapy vs drzewa binarne, klasy abstrakcyjne vs interfejsy oraz rekurencja i absolutnie nic o technologiach wymienionych w opisie stanowiska. Zrobiłbym to niesamowicie, gdybym się przygotował, przeglądając wszystko, czego nauczyłem się na studiach… ale ostatnim razem, gdy pracowałem z większością rzeczy, o które pytał, był mój drugi rok w college'u, więc byłem bardzo zardzewiały. W każdym razie szukam porady w mojej sytuacji. Czy powinienem skupić się na informatyce, której nauczyłem się na studiach, takich jak struktury danych, algorytmy, rekurencja itp., czy też powinienem skupić się na technologiach, o których wspominają w opisie stanowiska? Każda rada od kogoś z doświadczeniem byłaby bardzo mile widziana.


title: Utrzymywanie posortowanej prędkości tablicy

text: Mam pętlę for działającą na liście obiektów, takich jak: [{a: 2001, b: "hello"}, {a: 54, b: "hi"}....] W tej pętli odfiltrowuję obiekty na podstawie określonych wartości pól (np. b == cześć?) i utwórz nową listę przefiltrowanych obiektów. Po zakończeniu pętli for sortuję pozostałe obiekty według wartości a. Jest to zbyt uproszczony przykład, więc wstępne sortowanie według pola a nie jest możliwe. Moje pytanie brzmi, czy szybsze jest sortowanie po zakończeniu pętli, czy robienie czegoś takiego jak wyszukiwanie binarne na końcu każdej iteracji, a następnie wstawianie obiektu? Pozwoliłoby to uniknąć sortowania na końcu, ale tak naprawdę nie wiem, czy to będzie kosztować więcej.


title: Przemierzanie AST za pomocą Odwiedzających

text: Piszę kompilator dla języka podobnego do C i szukam eleganckiego sposobu na przeglądanie mojego abstrakcyjnego drzewa składni. Próbuję zaimplementować wzorzec Visitor, choć nie jestem przekonany, że robię to poprawnie. struct Visitor { // Wyrażenia virtual void visit(AsgnExpression&); wirtualna wizyta o unieważnieniu (ConstantExpression&); ... wirtualna wizyta nieważna (Oświadczenie&); ... wirtualna pustka zakończona(ASTNode&); chronione: wirtualna wizyta nieważna (ASTNode&) = 0; }; `visit` jest przeciążony dla każdego typu i domyślnie każde przeciążenie wywoła `visit(ASTNode&)`, które podklasy są zmuszone do zaimplementowania. Ułatwia to robienie szybkich i brudnych rzeczy, chociaż definiowanie `wizyty` dla każdego typu jest żmudne. Każda podklasa `ASTNode` musi implementować metodę `accept`, która jest używana do przechodzenia przez strukturę drzewa. klasa ASTNode { public: wirtualny ~ASTNode(); wirtualna nieważna akceptacja (odwiedzający i gość) = 0; }; Jednak ten projekt szybko staje się nużący, ponieważ metody „akceptacji” są często bardzo podobne. **Kto powinien być odpowiedzialny za przechodzenie przez strukturę, węzły czy odwiedzający?** Skłaniam się ku temu, aby `ASTNode` zapewniał iterator dostępu do swoich elementów podrzędnych, a następnie aby odwiedzający przechodził przez strukturę. Jeśli masz jakieś doświadczenie w projektowaniu abstrakcyjnych drzew składniowych, podziel się ze mną swoją mądrością!


title: Styl celu C: czy zaimplementuję metody fabryczne czy metody init?

text: Jestem nowy w programowaniu Objective-C i tworzeniu różnych klas dla aplikacji iOS, nad którą pracuję. Podczas tworzenia obiektów wygląda na to, że wiele klas we wbudowanych frameworkach używa wzorca „statycznej metody fabrycznej”, na przykład: MyObject* m = [MyObject objectWithName:@"foo" id:@7 description:@"bar"] ; jednak wiele klas również po prostu ma nadpisania dla `init`, jak to: MójObiekt* m = [[MójObiekt alloc] initWithName:@"foo" id:@7 opis:@"bar"]; Widzę, że jeśli chcę objąć wszystkie moje podstawy, zaimplementowałbym oba i wywołał metodę `objectWithName...` `initWithName...`, jednak wydaje się to dość nudne. Zastanawiałem się - czy istnieje jakiś styl lub wskazówki z okolicy, kiedy powinienem zaimplementować wzorzec metody fabrycznej w porównaniu z przeciążeniem `init`? Szukałem tego w Google, ale nie mogłem niczego znaleźć (najprawdopodobniej dlatego, że terminy są dość ogólne, a google nie wyszukuje ich dobrze) Wszelkie porady lub opinie byłyby bardzo mile widziane


title: Ile inwestuje Google w język Go?

text: Czytałem sporo o języku Go i wydaje się to obiecujące. Ostatnia ważna informacja, której mi brakuje, zanim zdecyduję się poświęcić więcej wysiłku na język, to: Ile pieniędzy / siły roboczej Google lub inne firmy inwestują w prace programistyczne? Jeśli nie można podać tych informacji, czy masz jakieś inne informacje świadczące o zaangażowaniu Google w projekt. Czy jest używany jako podstawowy język przy nowej inwestycji lub podobnym (domyślam się, że jest na to za wcześnie, ale nie wiem)?


title: Czy istnieje inny sens prototypowania?

text: Czytam Pro C#. Mówi > bądź świadomy, że wartość 0 jest zwracana automatycznie, nawet jeśli > skonstruujesz metodę Main() jako prototypową metodę zwracającą void. Co w tym kontekście oznacza prototypowanie? Jedyna definicja prototypu związana z C#, o której wiem, ma związek z modelem lub programem testowym rzuconym razem bez zamiaru przejścia do produkcji.


title: Czy rozsądnie jest uczyć programowania w języku, którego sam (jeszcze) nie znam?

text: Mam przyjaciela, który poprosił mnie o nauczenie go programowania. Pomyślałem, że używanie języka, którego nie znam, może być korzystne, ponieważ: * Ja też się czegoś nowego nauczę. * To sprawi, że zwolnię, ponieważ powiedziano mi, że zwykle wyjaśniam rzeczy zbyt szybko. Więc teraz muszę znaleźć równowagę między tym, co jest dydaktyczne dla _nowicjusza_, a tym, co jest dla mnie przydatne. Mój projekt wymagań: * Nie C, Java ani Python (bo już wiem). * Moje osobiste zainteresowania dotyczą teraz Erlanga, Scali i C++ (ale mogą być zbyt hardkorowe)... Mógłbym też odświeżyć Scheme lub Prolog. * Potrzebujesz dobrego IDE lub REPL do zabawy. * Czysty i prosty język. * Dobra (i darmowa!) dokumentacja. * Trochę praktycznych zastosowań w realnym świecie (np. tworzenie aplikacji internetowej, przetwarzanie obrazu, analiza statystyczna...) O metodologii myślałem o tej sekwencji: * Wprowadzenie do logiki. * Podstawowe matematyki i algorytmy. * Zasady projektowania oprogramowania. * Niektóre podstawy technologii komputerowej. * Zrób duży projekt. Jakieś sugestie dotyczące języka lub metodologii? **edytuj** : Mój "uczeń" to 28-letni doktor medycyny, jego celem jest stworzenie strony internetowej dla studentów medycyny. Ponieważ zajmuje się również badaniami, myślę, że mógłby natychmiast wykorzystać swoje nowe umiejętności programowania do analizy i kreślenia danych. Docelowo mógłbym mu bezpośrednio pomóc w projekcie.


title: Jak zwiększyć szybkość ładowania strony w ASP.NET?

text: Jestem programistą .net używającym serwera Asp.net, C# i SQL Server 2005 do wyświetlania zestawu informacji. Mój projekt polega na stworzeniu narzędzi dla systemów Call Center w moim biurze. Teraz stworzyłem projekt. ale jest to zbyt wolne i zajmuje dużo czasu w czasie ładowania strony i wysyłania postów. Potrzebuję sugestii, aby poprawić wydajność strony, a technologie wat mogą być wykorzystane do zwiększenia wydajności narzędzia...


title: Rozmowa kwalifikacyjna poprzez dostarczenie aplikacji do pracy?

text: Myśląc o lepszych sposobach projektowania wywiadów technicznych (tzn. nie opartych na umiejętnościach społecznych, ale czysto technicznych) zacząłem zastanawiać się nad tym możliwym sposobem działania (bez możliwości jego przetestowania): 1. Określ rodzaj problemów, wysoki lub niski poziom abstrakcji, od architektury po manipulacje bitowe, jeśli to jest działalność Twojego sklepu, którą rozwiązujesz każdego dnia w aplikacjach, dla których pracujesz. W tym przykładzie przypuszczam, że jesteśmy w firmie zajmującej się tworzeniem gier na komputery PC, która produkuje grę opartą na rozszerzeniach za pośrednictwem modułów. 2. Napisz prostą aplikację, która rozwiąże te problemy. Powiedzmy, że prosta gra, która nie ma tej samej skali niż ta, nad którą pracujemy, ale byłoby to 3. Dodaj błędy. Błędy architektury i więcej błędów związanych z wiedzą językową, jeśli jest to krytyczne (na przykład ważne jest, aby wiedzieć o wirtualnych destruktorach w C++). Spraw, aby był wyraźnie zapluskwiony, może najpierw się zawiesił, a potem zapluskwił. Upewnij się, że działa z narzędziami, których większość ludzi używa w domenie (np. wieloplatformowy C++ dla prostej gry, dostarczając kod bibliotek wraz z resztą). 4. Przekaż kandydatowi pełny kod źródłowy aplikacji i poproś go, aby a) naprawił kod, b) dodał funkcjonalność (w razie potrzeby związaną ze stanowiskiem). Kandydat miałby ograniczony czas na odesłanie czegoś. Na przykład tydzień lub dwa. Ten czas byłby kilkakrotnie dłuższy niż czas potrzebny na wykonanie pracy w pełnym wymiarze godzin, to musi być sprawiedliwe. 4'. Może innym sposobem na to byłoby udostępnienie kodu źródłowego aplikacji publicznie online i rozpoczęcie spotykania się tylko z kandydatami, którzy wysłali ci działającą aplikację z dodatkową funkcją… ale to działałoby zupełnie inaczej, więc nie jestem pewien, czy to też jest naprawdę interesujące. W przypadku 4.b. zakładam, że funkcjonalność do dodania jest prosta, ale wymaga podstawowego zrozumienia ogólnej organizacji kodu. To nie byłoby dodawanie treści. 5) Niech kandydat wyjaśni, co zrobił. Cały ten proces byłby rodzajem przeglądu rozmowy kwalifikacyjnej, po którym odbywałoby się spotkanie, jeśli kandydat coś zapewnił. To jak przesiewanie równoległe: przesiewasz kilka osób jednocześnie, nie poświęcając czasu na każdą z nich sekwencyjnie. Spotkanie z dyskusją na temat kodeksu jest oczywiście bardzo potrzebne. Pytania : a) Czy uważasz, że byłoby to stosowne? Co myślisz? (Nie mam dużego doświadczenia w rozmowach kwalifikacyjnych, więc polegam na twoich doświadczeniach) b) Czy byłaby to praca zarobkowa? Nawet jeśli nie jest to praca nad produktem, ale tylko aplikacja do rozmowy kwalifikacyjnej? c) Zakładam, że kandydat wykorzysta wszystko, co ma do dyspozycji, aby rozwiązać problemy, nawet przyjaciele pomagają, ponieważ myślę, że to lepiej odzwierciedla rzeczywiste środowisko rozwoju. Czy jest coś złego w założeniu tego? (Tak, kwestionuję mój własny sposób myślenia, mówią, że to normalne. Czy się mylą?) d) Czy istnieje wariant, który byłby bardziej interesujący?


title: Stabilna, oparta na hashu różnica symetryczna

text: Wiele uwagi poświęcono implementacji ustawionych algorytmów w LINQ: `Distinct`, `Except`, `Intersect` i `Union`. Gwarantują, że elementy są zwracane w tej samej kolejności, w jakiej pojawiają się przed wywołaniem metody. Zatem te dwa wyrażenia zwracają pozycje w tej samej kolejności: var author1 = books.Select(b => b.Autor).OrderBy(a => a).Distinct(); var autorzy2 = książki.Wybierz(b => b.Autor).Distinct().OrderBy(a => a); Implementacja `Distinct` wyglądałaby mniej więcej tak: public IEnumerable<T> Distinct<T>(to źródło IEnumerable<T>) { HashSet<T> set = new HashSet<T>(); foreach (pozycja T w źródle) { if (set.Add(item)) { produkt zwrotu; } } } Implementacja `Except` wyglądałaby tak: public static IEnumerable<T> Except<T>(ten IEnumerable<T> source1, IEnumerable<T> source2) { HashSet<T> set = new HashSet<T> (źródło2); foreach (pozycja T w źródle1) { if (set.Add(item)) { produkt zwrotu; } } } Implementacja `Intersect` wyglądałaby mniej więcej tak: public static IEnumerable<T> Intersect<T>(ten IEnumerable<T> source1, IEnumerable<T> source2) { HashSet<T> set = new HashSet<T >(źródło2); HashSet<T> znaleziony = nowy HashSet<T>(); foreach (pozycja T w źródle1) { if (set.Contains(item) && found.Add(item)) { produkt zwrotu; } } } Dodałem drugi zestaw do usuwania duplikatów z listy. Wreszcie `Union` jest nieco bardziej złożony, ale w zasadzie to samo: public static IEnumerable<T> Union<T>(this IEnumerable<T> source1, IEnumerable<T> source2) { HashSet<T> set = new HashSet <T>(); foreach (pozycja T w źródle1) { if (set.Add(item)) { produkt zwrotu; } } foreach (pozycja T w źródle2) { if (set.Add(item)) { produkt zwracany; } } } Tak więc jedyną operacją nieobsługiwaną przez LINQ jest różnica symetryczna lub `SymmetricExcept`. Bawiłem się tworzeniem „stabilnej” wersji tego algorytmu i z czystej ciekawości zastanawiam się, czy istnieje lepsza implementacja. Najprostszą implementacją jest po prostu dwukrotne wywołanie `Except`: public static IEnumerable<T> SymmetricExcept<T>(this IEnumerable<T> source1, IEnumerable<T> source2) { varexcept1 = source1.Except(source2); zmienna z wyjątkiem2 = źródło2.Z wyjątkiem(źródło1); return z wyjątkiem1.Concat(z wyjątkiem2); } Chociaż wymaga to dwukrotnego przejrzenia obu list. Napisałem więc wersję, która wymaga tylko dwukrotnego przejścia przez drugą listę: public static IEnumerable<T> SymmetricExcept<T>(this IEnumerable<T> source1, IEnumerable<T> source2) { HashSet<T> set = new HashSet<T >(źródło2); HashSet<T> znaleziony = nowy HashSet<T>(); foreach (pozycja T w źródle1) { if (!set.Contains(item) && found.Add(item)) { produkt zwracany; } } foreach (pozycja T w źródle2) { if (found.Add(item)) { produkt zwracany; } } } Nie zweryfikowałem poprawności tych algorytmów. Istnieją pewne niejasności dotyczące sposobu, w jaki LINQ obsługuje duplikaty. Jestem ciekawy, czy istnieje bardziej wydajny sposób na zrobienie `SymmetricExcept`, czegoś lepszego niż `O(m + 2n)`.


title: Czy rozbicie funkcji na kilka funkcji wewnętrznych jest antywzorcem?

text: Wyobraź sobie długi i skomplikowany proces, który rozpoczyna się wywołaniem funkcji `foo()`. Ten proces składa się z kilku następujących po sobie kroków, każdy z nich zależy od wyniku poprzedniego kroku. Sama funkcja to powiedzmy około 250 linii. Jest wysoce nieprawdopodobne, aby te kroki były użyteczne same w sobie, a nie jako część całego procesu. Języki takie jak Javascript umożliwiają tworzenie funkcji wewnętrznych wewnątrz funkcji nadrzędnej, które są niedostępne dla funkcji zewnętrznych (chyba że są przekazywane jako parametr). Mój kolega sugeruje, że możemy **podzielić zawartość `foo()` na 5 wewnętrznych funkcji**, przy czym każda funkcja jest krokiem. Funkcje te są niedostępne dla funkcji zewnętrznych (oznacza ich bezużyteczność poza funkcją nadrzędną). Główna część `foo()` po prostu wywołuje te wewnętrzne funkcje jedna po drugiej: foo(stuff) { var barred = bar(stuff); var bazzed = baz(zabronione); var konfabulacja = konfabulacja(bazzed); var siatkowa = siatkowana(konfabularowana); var spliced = splice(siatkowa); powrót spleciony; // definicje funkcji następują... } **Czy to jakiś antywzorzec? A może jest to rozsądny sposób dzielenia długich funkcji?** Kolejne pytanie brzmi: czy jest to dopuszczalne podczas używania paradygmatu OOP w JavaScript? **Czy można w ten sposób podzielić metodę obiektu** , czy też gwarantuje to inny obiekt, który zawiera wszystkie te funkcje wewnętrzne jako metody prywatne? **Zobacz też:** * Czy można dzielić długie funkcje i metody na mniejsze, nawet jeśli nie zostaną wywołane przez nic innego? \- moje poprzednie pytanie, które prowadzi do tego. * Odpowiedź @KilianFoth na bardzo podobne pytanie, które zapewnia inną perspektywę niż odpowiedzi podane tutaj.


title: Najlepsze praktyki dotyczące kontroli bezpieczeństwa, w warstwie powierzchniowej lub głębokiej?

text: Weźmy aplikację WebServices po stronie serwera, musimy upewnić się, że wszystkie funkcje stosują wszystkie reguły bezpieczeństwa i utrzymywać kod w czystości. W takim przypadku zazwyczaj wolę umieszczać kontrole bezpieczeństwa na wyższych warstwach. Jak tylko użytkownik wywołuje funkcję, sprawdzam, czy ma do niej prawa dostępu, czy nie. Ale ta strategia nie zawsze działa, jeśli na przykład musimy pobrać informacje z bazy danych przed wykonaniem wszystkich sprawdzeń. Czy to zły pomysł? Czy lepiej jest umieszczać kontrole bezpieczeństwa w głębokich warstwach, tuż przed/po uzyskaniu dostępu do bazy danych? Próbuję znaleźć najlepsze podejście do systemu, który ma wiele kontroli bezpieczeństwa i unika tworzenia dużego spaguetti. Pytanie może brzmieć: „Jakie są najlepsze praktyki, aby upewnić się, że aplikacja jest bezpieczna, a kod łatwy w utrzymaniu?”.


title: Inflacja i puchnięcie tytułu pracy

text: Kiedy pracujesz nad tym samym projektem przez stosunkowo długi czas, zdobywasz większe doświadczenie. Możesz także opanować wiele nowych technologii. Oprócz kodowania możesz również zrobić to, co sklasyfikowałoby inne role. Jest jednak jedna część Twojej kariery, która może nie zostać zaktualizowana. To jest twój tytuł zawodowy. Wydaje się, że oprócz wszystkich szumów technologicznych istnieje również szum związany z tytułami zawodowymi. Wszystko zależy od tego, w jakiej firmie pracujesz. Wiele firm nadaje pracodawcom lepsze tytuły pracy, ponieważ chcą je zachować. Pracownik nie zmienia pracy, ponieważ obecny tytuł jest o wiele lepszy, nawet gdyby miał lepsze warunki pracy i świadczenia, gdyby zmienił pracę. Kiedy zastanawiasz się nad zmianą pracy, zauważasz, że Twój tytuł zawodowy jest trochę „nieaktualny”. Ludzie z mniejszymi umiejętnościami mają znacznie lepszy tytuł do swojej pracy niż ty. Możesz bardzo dobrze wyjaśnić, co zrobiłeś w swoim projekcie, ale faktem jest, że wielu pracodawców stosuje ten tytuł. Oto pytania: * Czy zmieniasz obecny tytuł w swoim CV? * Jakie są inne opcje? Oto kilka dobrych lektur dotyczących tych zjawisk: * Inflacja tytułu pracy * Fluffing tytułu pracy


Jakie zadania związane z danymi są dostępne w branży oprogramowania dla kogoś z licencjatem w czystej matematyce i trochę w statystyce, ale z niewielkim doświadczeniem w programowaniu? Chcę pracować po stronie badania danych, a nie po stronie tworzenia oprogramowania. Jakie firmy zatrudniają analityków danych?


title: Pojedyncze złożone lub wiele prostych funkcji automatycznego ładowania

text: Używając **spl_autoload_register()** , czy powinienem użyć pojedynczej funkcji automatycznego ładowania, która zawiera całą logikę, aby określić, gdzie znajdują się pliki dołączane, czy też powinienem podzielić każde grupowanie dołączeń na własną funkcję z własną logiką, aby uwzględnić pliki dla nazywana funkcją? Ponieważ miejsca, w których mogą znajdować się pliki dołączane, rozszerzają się, podobnie jak logika pojedynczej funkcji. Jeśli podzielę go na wiele funkcji, mogę dodać funkcje w miarę dodawania nowych grup, ale funkcje będą kopiować/wklejać się nawzajem z drobnymi zmianami. Obecnie mam narzędzie z pojedynczą zarejestrowaną funkcją automatycznego ładowania, która oddziela nazwę klasy i próbuje przewidzieć, gdzie się znajduje, a następnie dołącza ją. Ze względu na konwencje nazewnictwa dla projektu było to dość proste. if ma przestrzeńnazw jeśli w przestrzeni nazw szablonu szukaj w Root\Templates else szukaj w Root\Modules\Namespace else szukaj w Root\System jeśli plik istnieje include Ale zaczynamy dołączać interfejsy i cechy do naszej bazy kodu i boli mnie dołączanie typu rzeczy w jej nazwie. Więc zamiast pojedynczej funkcji automatycznego ładowania, która przekopuje się przez nazwę klasy i szuka pliku i ma coraz bardziej złożoną logikę, szukamy zarejestrowanych wielu funkcji automatycznego ładowania. Ale każdy postępuje według tego samego wzorca i za każdym razem widzę, że mam paranoję na punkcie kopiowania kodu. function systemAutoloadFunc logika tworząca prawdopodobną nazwę pliku, jeśli nazwa pliku istnieje w systemie włącz go i zwróć true else zwróć false Funkcja moduleAutoloadFunc logika tworząc prawdopodobną nazwę pliku jeśli nazwa pliku istnieje w modułach dołącz go i zwróć true else return false Każda funkcja autoload będzie postępować zgodnie z tym wzorcem i ostatnim każdej funkcji _jeśli nazwa pliku istnieje, to include return true w przeciwnym razie return false_ będzie identycznym kodem. To sprawia, że mam paranoję, że muszę go później aktualizować, jeśli plik file_exists zawiera wzorzec, którego używamy, kiedykolwiek się zmieni. A może po prostu paranoja i wiele funkcji z jakimś identycznym kodem to najlepsza opcja?


title: Jak prawidłowo porównać podwójne wartości pod kątem równości w teście jednostkowym?

text: Niedawno zaprojektowałem moduł szeregów czasowych, w którym moje szeregi czasowe są zasadniczo `SortedDictionnary<DateTime, double>`. Teraz chciałbym stworzyć testy jednostkowe, aby upewnić się, że ten moduł zawsze działa i daje oczekiwany wynik. Typową operacją jest obliczenie wydajności między punktami w szeregu czasowym. Więc to, co robię, to tworzenie szeregów czasowych z, powiedzmy, {1.0, 2.0, 4.0} (w niektórych terminach) i spodziewam się, że wynik będzie {100%, 100%}. Chodzi o to, że jeśli ręcznie stworzę szereg czasowy z wartościami {1.0, 1.0} i sprawdzę równość (poprzez porównanie każdego punktu), test nie przejdzie, ponieważ zawsze będą niedokładności podczas pracy z binarnymi reprezentacjami rzeczywistych liczby. Dlatego zdecydowałem się stworzyć następującą funkcję: private static bool isCloseEnough(podwójna oczekiwana, podwójna rzeczywista, podwójna tolerancja=0,002) { return squaredDifference(oczekiwana, rzeczywista) < Math.Pow(tolerancja,2); } Czy istnieje inny powszechny sposób radzenia sobie z takim przypadkiem?


title: Zabezpieczyć aplikację/oprogramowanie przed wygaśnięciem z datą?

text: Pracuję nad jakimś oprogramowaniem i aktualizuję je co 6 miesięcy. Obecnie śledzę datę, wyodrębniając datę z systemu, gdy użytkownik instaluje aplikację, szyfrując ją i przechowując w pliku lokalnie. Za każdym razem, gdy aplikacja jest uruchamiana, sprawdza, czy minęło 6 miesięcy, a następnie działa, czy nie, w którym to przypadku wyświetla komunikat o błędzie informujący użytkownika o konieczności aktualizacji. Jeśli użytkownik znajdzie zaszyfrowaną datę w pliku, może po prostu zastąpić ją datą z nowszej instalacji. Zastanawiam się, czy jest na to bezpieczniejszy sposób?


title: Dlaczego nie ma przeceny za podkreślenie?

text: Zastanawiam się, dlaczego nie ma składni przecen dla podkreślenia? Wiem, że w tym celu można osadzić podstawowe tagi HTML, ale staram się zrozumieć, dlaczego pominięto „podkreślenie”, gdy istnieje **pogrubienie** i _kursywa_


title: Nazwane parametry wyjściowe a wartości zwracane

text: Który kod jest lepszy: // C++ void handle_message(...niektóre parametry wejściowe..., bool& wasHandled) void set_some_value(int newValue, int* oldValue = nullptr) // C# void handle_message(...niektóre parametry wejściowe.. ., out bool wasHandled) void set_some_value(int newValue, out int oldValue) lub bool handle_message(...pewne parametry wejściowe...) ///< Zwraca -1, jeśli wiadomość została obsłużona //(przepraszamy, ta dokumentacja została uszkodzona rok temu i jesteśmy zbyt zajęci, aby to naprawić) int set_some_value(T newValue) // (no cóż, to oczywiste, co ta funkcja zwraca, więc nie napisałem do niej żadnej dokumentacji) Pierwsza nie ma i potrzebujesz jakiejkolwiek dokumentacji. To samodokumentujący się kod. Wartość wyjściowa jasno mówi, co to znaczy i naprawdę trudno jest dokonać takiej zmiany: - void handle_message(Wiadomość wiadomości, bool& wasHandled) { - wasHandled = false; - if (...) { wasHandled = true; ... + void handle_message(Wiadomość wiadomości, int& wasHandled) { + wasHandled = -1; + if (...) { wasHandled = ...; Przy zwracanych wartościach taka zmiana może być łatwo wykonana /// Zwróć true jeśli wiadomość została obsłużona - bool handle_message(Message msg) { + int handle_message(Message msg) { ... - return true; + powrót -1; Większość kompilatorów nie sprawdza (i nie może) sprawdzać dokumentacji napisanej w komentarzach. Programiści mają również tendencję do ignorowania komentarzy podczas edycji kodu. Więc znowu pytanie brzmi: jeśli _podprogram_ ma pojedynczą wartość wyjściową, czy powinna to być _procedura_ z dobrze nazwanym parametrem wyjściowym do samodokumentacji, czy też powinna to być _funkcja_, która zwraca nienazwaną wartość i ma opisujący ją komentarz?


title: Jak mam postępować z udostępnianiem ziaren Java użytkownikom końcowym?

text: Muszę utworzyć kilka interfejsów Java, aby wysyłać zapytania do niektórych tabel bazy danych i niektórych usług internetowych dla nowej struktury, którą buduję. W poprzedniej aplikacji internetowej Java Spring używałem Java Beans do obsługi wyników zapytania. W takim przypadku muszę napisać kilka interfejsów, aby opublikować metody, które będą dostępne dla użytkowników końcowych. Jestem trochę nowicjuszem w tym konkretnym aspekcie Javy i zastanawiałem się: czy lepiej pozwolić użytkownikowi końcowemu zobaczyć i używać ziaren Java w JSP, czy ukryć je za pomocą jakiegoś ogólnego typu?


title: Jak zoptymalizować metodologię zbierania danych rynkowych?

text: Pracuję nad Aplikacją, która pobiera dane rynkowe z różnych źródeł, używam mechanizmu odpytywania, w którym sprzedawca/broker umieszcza swój plik danych, a moja aplikacja przechodzi i uderza w tę lokalizację ftp wiele razy w ciągu dnia, aby uzyskać dane. W tej chwili trafiamy do lokalizacji co 5 minut, a jeśli danych nie ma, to ponownie po 5 minutach. W obecnej architekturze oprogramowania system wykorzystuje dużo zasobów między oknem czasowym 3 godzin, w którym wykonujemy ten mechanizm odpytywania. Chcę poprawić wydajność aplikacji i jakie są najlepsze praktyki, aby rozwiązać tego rodzaju problem z oprogramowaniem? **Uwaga:** Niektórzy mogą powiedzieć, że ten problem jest związany z inżynierią i nie powinien być tutaj publikowany, ale moimi docelowymi odbiorcami są programiści pracujący w finansach, więc opublikowałem to pytanie tutaj, jeśli uważasz, że to nie jest odpowiednia lokalizacja do tego następnie migruj go do stackoverflow lub programrs.stackexchange.com


title: Czy dobrze byłoby umieścić swoje konto freelancera w CV / CV podczas ubiegania się o pracę?

text: Od około dwóch lat pracuję jako **freelancer** w vWorker. Każda osoba może odwiedzić profil kodera i zobaczyć, w ilu projektach koder pracował (jeśli koderzy na to pozwalają), zobaczyć, ile koder uzyskał w każdym projekcie, oceny, informacje zwrotne itp. Dobrze byłoby założyć konto freelancera w CV / CV podczas ubiegania się o pracę? Czy jest to coś, co zrobiłbyś, gdybyś ukończył tam kilka projektów?


title: Dlaczego ludzie umieszczają '\n' na początku napisów?

text: Bardzo często trafiam do kodu C, gdzie ciągi formatu `printf` zaczynają się od `\n`: printf( "\nHello" ); Moim zdaniem jest to irytująca rzecz, która nie ma żadnych zalet (raczej wiele wad!) w odniesieniu do drukowania `"Witaj\n"`: * Jeśli pierwsza drukowana linia zaczyna się od `'\n'`, wyjście programu rozpocznie się od a (bezużyteczna) pusta linia * Jeśli ostatnia wydrukowana linia nie kończy się na `'\n'`, wyjście programu nie kończy się nową linią (przydatne podczas odczytu wyjścia na terminalu) * Na większości terminali (wł. ogólnie strumieni buforowanych wierszami), wyjście jest opróżniane po napotkaniu `'\n'`, więc linia nie kończąca się na `'\n'` może zostać wyświetlona na ekranie dużo czasu po tym, jak została faktycznie `printf`'d ( a może nigdy, jeśli strumień nigdy nie zostanie opróżniony, na przykład, jeśli program się zawiesi) Więc dlaczego ludzie to robią?


title: Programowanie schematyczne i funkcjonalne ma się do "Struktury i interpretacji programów komputerowych", tak jak programowanie prologowe i logiczne do jakiej książki?

text: Szukam porady, jak rozpocząć pracę z programowaniem logicznym, i bardzo lubię pracować nad książką Scheme "Structure and Interpretation of Computer Programs". Czy istnieje podobna książka nastawiona na Prolog? Lub, jeśli istnieje lepszy język do nauki niż programowanie Prolog for Logic, jestem również zainteresowany poznaniem twoich opinii na ten temat.


title: Zapach kodu języków zagnieżdżonych

text: Wiele projektów łączy języki, na przykład w sieci z wszechobecnym SQL + język po stronie serwera + znaczniki dnia + JavaScript + mix CSS (często w jednej funkcji). Bash i inny kod powłoki jest mieszany z Perlem i Pythonem po stronie serwera, 'ewaluowany', a czasem nawet przekazywany przez sed'a przed wykonaniem. Wiele języków obsługuje wykonywanie dowolnych ciągów kodu w czasie wykonywania, aw niektórych wydaje się to być dość powszechną praktyką. Oprócz porad dotyczących **bezpieczeństwa** i **oddzielenia obaw**, 1. jakie **inne problemy** są związane z tego typu programowaniem, 2. co można zrobić, aby **zminimalizować je**, oraz 3. czy jest to kiedykolwiek **możliwe do obrony** (z wyjątkiem sytuacji „PHB na ramieniu”)? **Edycja:** Aby wyjaśnić, _nie_ chodzi o używanie więcej niż jednego języka do pracy - to _dobra rzecz_ w przypadku każdego projektu poza najprostszymi. Problemem jest mieszanie języków _w tym samym pliku_ , takich jak magiczne łańcuchy dla SQL, Bash & Perl `eval` i tym podobne.


title: Szybka nauka C#

text: Właśnie dostałem stanowisko w dużej, znanej firmie C#/.NET. Chodzi o to, że nie znam w ogóle żadnego C# ani .NET (oni to wiedzą) i chcę się nauczyć jak najwięcej, zanim zacznę, aby nie tracić czasu (i pieniędzy). Jak szybko i wydajnie nauczyć się C#/.NET? Zasoby? Świetne samouczki? Filmy? EDIT: Zapomniałem wspomnieć, że mam kilkuletnie doświadczenie z Javą. Więc nie jestem nowy w programowaniu - po prostu nowy w .NET. AKTUALIZACJA: Dziękuję za wszystkie odpowiedzi. Zamówiłem "Essential C# 4.0" i do tego czasu będę przejrzeć niektóre przewodniki/samouczki i ogólną dokumentację w MSDN.


title: Czy testerzy powinni zatwierdzać wydania, czy po prostu raportować o testach?

text: Czy ma sens nadawanie uprawnień do podpisywania testerom? Czy zespół testowy powinien 1. Po prostu testować funkcje, problemy itp. i po prostu raportować na podstawie zaliczenia/niezaliczenia, pozostawiając innym podjęcie działań na podstawie tych wyników, lub 2. Czy ma uprawnienia do samodzielnego wstrzymywania wydań na podstawie tych wyników? Innymi słowy, czy testerzy powinni być zobowiązani do podpisywania się na wydaniach? Zespół testerów, z którym pracuję, uważa, że tak, a my mamy z tym problem z powodu „pełzania zakresu testowania” – odmowa zatwierdzenia wydania jest czasami oparta na problemach wyraźnie nierozwiązanych w danym wydaniu.


title: Serwer do testów ciągłej integracji: hostowany, własny komputer stacjonarny lub własny serwer

text: Na potrzeby testów planuję przeprowadzić ciągłe testy integracyjne. Istnieją głównie dwie opcje: hostowana lub własny komputer stacjonarny/serwer. Podzielę to na 3 opcje, które mam: 1. Hostowany: * Ekonomiczny, 10-20 USD miesięcznie za małą aplikację * Mniej konfiguracji, firma CI zarządza całym sprzętem i oprogramowaniem 2. Pulpit: * Mogę po prostu kupić prosty, tani komputer stacjonarny jako serwer testowy (około 500 USD). 3. Używany serwer: * W moim obecnym biurze wyładowuje się stary serwer Dell Rack (Prawdopodobnie dwurdzeniowy Xeon, który mogę kupić za 50 USD lub mniej. Proszę o informację, który najlepiej służy mi dla małego zespołu 2-3 programistów. Dzięki.


title: Jak zarządzane są repozytoria open source dla popularnych języków?

text: Jestem programistą, który tworzy kod Open Source dla małego języka (LabVIEW) i obecnie udostępniam go w kilku miejscach. Dostawca LabVIEW ma proces certyfikacji bibliotek Open Source (mieszanych z komercyjnymi/zamkniętymi bibliotekami), ale jest on dość długi. Zastanawiałem się, w jaki sposób bardziej popularne języki zarządzają dużymi repozytoriami bibliotek (na przykład Debian lub python-works) bibliotek Open Source, czy są one ściśle kontrolowane i monitorowane pod kątem jakości, czy ktoś może wnieść swój wkład? * Jak skonfigurować proces dla scentralizowanego repozytorium i akceptować przychodzący kod? * Czy istnieją różne poziomy jakości/wiarygodności? * Czy można polegać na bibliotekach spoza repozytorium?


title: Jak organizujesz swoje projekty?

text: Czy masz jakiś szczególny styl organizowania projektów? Na przykład obecnie tworzę projekt dla kilku szkół tutaj w Boliwii, tak go zorganizowałem: TutoMentor (Rozwiązanie) TutoMentor.UI (Projekt WinForm) TutoMentor.Data (Projekt biblioteki klas) Jak dokładnie organizujesz Twój projekt? Masz przykład czegoś, co zorganizowałeś iz czego jesteś dumny? Czy możesz udostępnić zrzut ekranu okienka rozwiązania? W obszarze interfejsu użytkownika mojej aplikacji mam problem z podjęciem decyzji o dobrym schemacie organizowania różnych formularzy i ich przynależności. * * * **Edytuj:** A co z porządkowaniem różnych formularzy w projekcie .UI? Gdzie/jak powinienem grupować różne formy? Umieszczenie ich wszystkich na poziomie głównym projektu to zły pomysł.


title: Jak zaimplementować złożone dane formularza?

text:
Mam zaimplementować stosunkowo złożony formularz, który wygląda jak poniżej, ale ma co najmniej cztery dodatkowe strony wymagające od użytkownika uzupełnienia wszystkich niezbędnych informacji dla utworów: ![](http://www.mediafire.com/convkey /b441/1hnp8lxbu49ar2ufg.jpg) Te dane będą musiały zostać przesłane na serwer, który jest zaimplementowany za pomocą Dropwizard. Szukam najlepszych praktyk dotyczących przesyłania i wysyłania tak złożonego formularza z potencjalnie dziesiątkami utworów na serwer. Najprostszym dostępnym rozwiązaniem, jakie widziałem, jest proste żądanie _multipart/form-data_ z następującym schematem formularza (Źródło): Klient
Prześlij plik za pomocą Jersey
 <form action="rest/ file/upload" method="post" enctype="multipart/form-data">
 Wybierz plik : <input type="file" name="file" size="45" />
 < input type="submit" value="Upload It" /> </form>   Server @POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadTrack(final FormDataMultiPart multiPart) { Lista<FormDataBodyPart> artyści = multiPart.getFields("artysta"); Wyjście StringBuffer = new StringBuffer(); for (artysta FormDataBodyPart : artyści) output.append(artist.getValueAs(String.class)); List<FormDataBodyPart> utworów = multiPart.getFields("track"); for (FormDataBodyPart track : tracki) writeToFile(track.getValueAs(InputStream.class), "Foo"); return Response.status(200).entity(output.toString()).build(); } Przeczytałem też o przesyłaniu plików przez Ajax lub Formdata (Mozilla HttpRequest), które pozwalają na posty w formatach _application/x-www-form-urlencoded_ , _multipart/form-data_ lub _text/plain_. Nie wiem, które podejście, jeśli w ogóle, jest najlepsze. Idealnym rozwiązaniem byłoby wykorzystanie Jacksona do konwersji ciągu json na moje obiekty danych, ale nie mam wrażenia, że jest to możliwe w przypadku danych binarnych.


title: Serwer deweloperski a programowanie lokalne

text: W poprzednich 2 projektach, nad którymi pracowałem, zespoły wolą lokalne środowisko programistyczne od serwera programistycznego. Jeden z liderów projektu stwierdził, że lokalny jest lepszy, ponieważ nie wymaga połączenia z Internetem. Ale wydaje się to zakładane podczas opracowywania. Co jest zwykle lepsze?


title: Organizacja działu „kodu źródłowego”, „projektów” i „procesów/instrukcji pracy”?

text: Jak organizujesz zasoby oprogramowania (kod źródłowy i zasoby), swoje „aktywne” i „przeszłe” projekty oraz procesy/instrukcje robocze działu oprogramowania (w tym konwencje kodu źródłowego, zasady i proces recenzji)? Na przykład jednym podejściem byłoby użycie „Trac” z bazami danych dla „Zasobów oprogramowania” i „Procesu oprogramowania”. Innym byłoby posiadanie baz danych dla „Projektu A”, „Projektu B” i „Procesu oprogramowania”. Czy Twój kod źródłowy jest „według projektu”, „według wszystkich działów” lub „produktu ubocznego”?


title: Jak projektować oprogramowanie korzystając z BDD?

text: Obecnie pracuję nad projektem i jest to mój pierwszy projekt przy użyciu BDD. Do tej pory historyjki użytkowników okazały się bardzo cenną bronią w zrozumieniu wymagań i sprecyzowaniu rozwiązania kompleksowym, łatwym do zrozumienia językiem. Moje pytanie brzmi: teraz, gdy moje historyjki użytkowników są kompletne, jak zaprojektować moje rozwiązanie? Rozumiem, że czerpię testy zachowania z moich historyjek użytkownika i muszę projektować interfejs użytkownika, ale czy mam używać starego dobrego UML? Mam wrażenie, że korzystając z historyjek użytkownika pomija się UML; czy to jest poprawne?


title: Jakie jest pierwsze opublikowane odniesienie do programowania w trybie „test-first”?

text: Ponownie czytam Refactoring Martina Fowlera. W rozdziale 4, Testy budowlane, natknąłem się na następujący fragment. > W rzeczywistości jednym z najbardziej użytecznych momentów do pisania testów jest przed > rozpoczęciem programowania. Kiedy musisz dodać funkcję, zacznij od napisania testu. To > nie jest tak zacofane, jak się wydaje. Pisząc test zadajesz sobie pytanie > co należy zrobić, aby dodać funkcję. Pisanie testu również > koncentruje się na interfejsie, a nie na implementacji (zawsze jest to > dobra rzecz). Oznacza to również, że masz jasny punkt, w którym kończysz kodowanie -- > kiedy test działa. Chociaż jestem zwolennikiem programowania opartego na testach, nie przypominam sobie, żebym zapoznał się z tą koncepcją, kiedy po raz pierwszy czytałem tę książkę prawie 5 lat temu. Według Amazon.com ta książka została pierwotnie opublikowana 8 lipca 1999 r. Czy jest to pierwsza opublikowana wzmianka o programowaniu w trybie test-first, czy jest coś jeszcze wcześniej?


title: Zapobieganie przeciążaniu procesora przez algorytm haszowania haseł

text: Obecnie algorytmy haszowania haseł są zaprojektowane tak, aby działały wolno. Uniemożliwia to czarnym kapeluszom odgadnięcie hasła (przynajmniej częściowo), ale daje też dodatkową pracę serwerowi. Wyobrażam sobie, że jeśli ktoś chciałby, aby serwer działał bardzo wolno, mógłby po prostu wysłać wiele żądań logowania, co doprowadziłoby do wielu obliczeń skrótów haseł, co znacznie zwiększyłoby użycie procesora. Jaka jest powszechna praktyka zapobiegania takim atakom? A jak to się nazywa?


title: Udostępnianie bufora między wieloma wątkami

text: Miałem proces roboczy, który wykonywał dużo operacji we/wy, aby czytać i zapisywać pliki tymczasowe. Teraz chcę (trzeba) zmniejszyć liczbę wykonań IO. Więc chcę stworzyć rodzaj okrągłego bufora, który będzie wypełniony danymi z pliku tekstowego w pierwszym wątku. Wątek konsumencki (odczytujący) pobierze dane z tego bufora. Problem polega na tym, że może być wielu konsumentów, którzy muszą czytać z tego samego bufora. Do implementacji buforów wolę nie używać żadnych istniejących wrapperów (wystarczy prosta tablica, gdzie po prostu "bawę się" indeksami). Nie chcę też tworzyć osobnego bufora dla każdego czytnika. I oczywiście chcę uniknąć impasów i niepotrzebnych blokad. **AKTUALIZACJA** Obecnie używam bufora okrężnego (tablica i 2 indeksy) Pytanie brzmi, jak zaimplementować taki bufor, który może być dostępny dla wielu konsumentów, gdzie każdy może czytać z niego niezależnie od innych konsumentów (jeden klient może czytać szybciej niż drugi). **WAŻNA AKTUALIZACJA** Pierwszy wątek nie wie (i nie powinien wiedzieć) o swoich konsumentach!!! Powinien zapisywać dane do bufora, kiedy dane się kończą, powinien podnieść flagę.


title: Kiedy zacząć pisać Obsługa wyjątków, rejestrowanie?

text: Kiedy zaczniesz pisać swój kod obsługi wyjątków? Kiedy zaczniesz pisać Oświadczenia rejestrowania. W celu rozwinięcia tego pytania załóżmy, że jesteśmy na platformie .NET z log4net, ale nie wahaj się odpowiedzieć w sposób ogólny. Rozwiązanie: projekt Windows Forms. Projekty: UI, BusinessRules, DataHandlers A więc, zajmij się pisaniem DataHandlers, które najpierw wykonują manipulacje danymi, takie jak tworzenie, odczytywanie, aktualizowanie, usuwanie. Następnie postępuj zgodnie z regułami biznesowymi, a następnie interfejsem użytkownika lub inną kombinacją powyższych. Przetestuj swoją aplikację pod kątem funkcjonalności. I _następnie_ zacząć pisać swój kod obsługi wyjątków i _nareszcie_ kod rejestrowania? Kiedy jest właściwy moment, aby zacząć pisać kod obsługi wyjątków? PS: W książce Clean Code jest napisane, że najpierw napiszesz swój blok **try-catch-finally**. To skłoniło mnie do zadania tego pytania.


title: Usługi czy biblioteki współdzielone?

text: Pracuję w środowisku, w którym mamy kilka różnych aplikacji internetowych, gdzie każda z nich ma inne funkcje, ale nadal musi robić podobne rzeczy: uwierzytelnianie, odczytywanie ze wspólnych źródeł danych, przechowywanie wspólnych danych itp. Czy lepiej budować współdzieloną funkcjonalność w zestaw usług, które mają być wywoływane przez aplikacje internetowe, czy może lepiej utworzyć bibliotekę współdzieloną, którą zawierają aplikacje internetowe? Usługi lub biblioteki musiałyby mieć dostęp do różnych baz danych i wydaje się, że utrzymanie tego dostępu w jednym miejscu (usługa) jest dobrym pomysłem. Zmniejszyłoby to również liczbę potrzebnych połączeń z bazą danych. Usługa również utrzymywałaby logikę w jednym miejscu, ale można by argumentować, że współdzielona biblioteka może zrobić to samo. Czy istnieją inne korzyści z korzystania z usług w porównaniu z bibliotekami współdzielonymi?


title: Dlaczego Perl jest odpowiednim językiem dla CGI?

text: Słyszałem, że wielu ludzi wciąż mówi, że Perl to świetny język dla CGI. Ale myślę, że nie jest tak popularny, jak obecnie rozwijające się języki, takie jak Python, Ruby. Czy jest jakiś solidny powód, dla którego Perl nadal jest odpowiednim językiem dla CGI?


title: Obiekty różnych języków programowania

text: Najwyraźniej istnieją pewne podobieństwa między obiektami w JavaScript a słownikami w Pythonie. Każdy język definiuje obiekt trochę inaczej (i jest pewna logika, że wszystkie definicje są takie same jak w fizyce). Czym są podobne obiekty i czym różnią się między JavaSscript, Python i PHP?


title: Jak wywołać jeden program z innego?

text: Zastanawia mnie, w jaki sposób uruchomione programy komunikują się ze sobą i czy ktoś mógłby zamieścić jakiś przykładowy kod, jak to zrobić, abym mógł sam go wypróbować, tylko w celach edukacyjnych. Na przykład wcześniej pracowałem z bazami danych i w swoim kodzie zawsze muszę „nawiązać połączenie z bazą danych”. Usługa bazy danych musi być uruchomiona przed uruchomieniem programu, w przeciwnym razie zawiedzie. Co dokładnie się dzieje z tym połączeniem i jak to działa?


title: Dlaczego C# został stworzony ze słowami kluczowymi "new" i "virtual+override" w przeciwieństwie do Javy?

text: W Javie nie ma słów kluczowych `virtual`, `new`, `override` dla definicji metody. Tak więc działanie metody jest łatwe do zrozumienia. Przyczyna, jeśli _DerivedClass_ rozszerza _BaseClass_ i ma metodę o tej samej nazwie i tej samej sygnaturze _BaseClass_, to nadpisanie nastąpi podczas polimorfizmu w czasie wykonywania (pod warunkiem, że metoda nie jest „statyczna”). BaseClass bcdc = new DerivedClass(); bcdc.doSomething() // wywoła metodę doSomething klasy DerivedClass. * * * Teraz przejdźmy do C#, może być tyle zamieszania i trudno zrozumieć, jak działa `new` lub `virtual+derive` lub new+ virtual override. Nie jestem w stanie zrozumieć, dlaczego na świecie zamierzam dodać metodę w mojej `DerivedClass` o tej samej nazwie i takiej samej sygnaturze jak `BaseClass` i zdefiniować nowe zachowanie, ale w polimorfizmie czasu wykonywania `BaseClass ` zostanie wywołana metoda! (co nie jest nadrzędne, ale logicznie powinno być). W przypadku `virtual + override` co prawda implementacja logiczna jest poprawna, ale programista musi zastanowić się, jaką metodę powinien dać użytkownikowi uprawnienia do nadpisania w czasie kodowania. Który ma pewne _pro-con_ (nie chodźmy tam teraz). Dlaczego więc w C# jest tak dużo miejsca na _un_ -logiczne rozumowanie i zamieszanie. Czy mogę zatem przeformułować moje pytanie w taki sposób, w jakim kontekście świata rzeczywistego powinienem pomyśleć o użyciu `virtual + override` zamiast `new`, a także `new` zamiast `virtual + override`? * * * **EDYTUJ** Po kilku bardzo dobrych odpowiedziach, zwłaszcza od Omara, zauważyłem, że projektanci C# bardziej kładli nacisk na to, że programiści powinni pomyśleć przed stworzeniem metody, która jest dobra i radzi sobie z kilkoma niedoświadczonymi błędami Javy. Teraz mam na myśli pytanie. Jak w Javie, gdybym miał kod typu Vehicle vehicle = new Car(); pojazd.przyspieszyć(); a później tworzę nową klasę `SpaceShip` pochodzącą z `Vehicle`. Następnie chcę zmienić wszystkie `samochód` na obiekt `SpaceShip` Wystarczy zmienić jedną linię kodu Pojazd pojazd = new SpaceShip(); pojazd.przyspieszyć(); To nie złamie żadnej z mojej logiki w żadnym punkcie kodu. Ale w przypadku C#, jeśli `SpaceShip` nie zastąpi klasy `Vehicle` `accelerate` i użyje `new`, logika mojego kodu zostanie zepsuta. Czy to nie jest wada?


title: Czy Railsy dołączają do modeli otrzymują kontrolery?

text: Mam aplikację rails, w której moi użytkownicy mogą współpracować z innymi użytkownikami. Ponieważ ta relacja może mieć status (approved/rejected/pending), zdecydowałem się na model łączenia (`UserRelationship`), więc teraz mam atrybut. Aby obsłużyć stan dla tego modelu złączenia, mam kontroler (`UserRelationshipsController`) z akcjami/punktami końcowymi RESTful do zmiany stanu relacji. Czy to zła praktyka? Jeśli tak, gdzie mam obsługiwać zmiany stanu dla relacji? W modelu użytkownika?


title: Przechowywanie przesłanych przez użytkownika obrazów / plików w środowisku wieloserwerowym

text: W systemie wieloserwerowym m.in. load balancer, wiele serwerów WWW i serwer bazy danych, gdzie przechowujesz pliki / obrazy przesyłane przez użytkowników, gdy każdy serwer WWW będzie potrzebował dostępu? Wcześniej używałem tylko jednego serwera WWW, a może jednego serwera WWW i serwera bazy danych MySQL. Ale jeśli masz wiele serwerów internetowych, myślę, że masz szereg opcji zapewniających, że zasoby, takie jak obrazy i inne pliki użytkownika, są współdzielone, takie jak: * Przechowywanie ich na serwerze bazy danych * Lub serwer specjalnie dla nich * Może zamontowanie tego samego katalog * Lub użycie narzędzia takiego jak rsync do synchronizacji katalogów wgrywanych przez użytkownika na każdym serwerze WWW A może masz inne rozwiązanie? czy istnieje de facto sposób na zrobienie tego, o którym nie wiem?


title: Znaleźć drugi co do wielkości element w tablicy?

text: Problem polega na rozwiązaniu go w **n+logn−2** (baza 2) bez porównań. Mój algorytm zajmuje mniej miejsca (O(n*n)). Jak mogę zmniejszyć tę dodatkową przestrzeń bez zwiększania złożoności. comparisionarray=[][] (2D array ) //funkcja do znalezienia największej. findlargest(a,b) if(len(a)==1 i len(b)==1) dodają b do tablicy o indeksie ath w tablicy porównawczej. dołącz b do tablicy w tablicy porównawczej indeksu b. return max(a,b) w przeciwnym razie return max(findlargest(1.połowa(a),druga połowa(a)),findlargest(1.halfof(b),2.halfof(b)) input= input_array() największy=findlargest(1.halfof(input), 2ndHalfof(input)) subarray=[tablica o indeksie największym w tablicy porównawczej] 2ndlargest=findlargest(1stHalfof(subarray),2ndHalfof(subarray)) print(2ndlargest) **Edytuj:** Można to zrobić w minimum **n+logn -2 ** porównania.To jedyny warunek.Ta odpowiedź na math.stackexchange.com to potwierdza.Została uogólniona dla n-tego największego elementu.Wygląda na to, że istnieje rozwiązanie w tym przepełnieniu stosu łącza.Ale nie jestem pewien co do dodatkowego złożoność przestrzeni i czasu.


title: Używanie OpenID do logowania się do wielu domen: czy ten plan jest wykonalny?

text: Na przykład: * Prowadzimy dwie witryny społecznościowe w dwóch domenach (nazywamy je `example.com` i `example.net`). * Chcemy móc później rozszerzyć to na więcej domen. * Chcemy zezwolić na wiele rodzajów logowania (OpenID, Facebook, Twitter, standardowa nazwa użytkownika/hasło). * Chcemy, aby ktoś, kto jest zalogowany w jednej witrynie, automatycznie logował się w drugiej. Innymi słowy, jest trochę podobny do sieci StackExchange. Czy w takim razie ten plan zadziała? * Skonfiguruj `example.com` i `example.net` (oraz wszelkie późniejsze dodatki) jako strony zależne OpenID, które akceptują logowanie OpenID tylko z `id.example.org`. * Skonfiguruj `example.com` i `example.net` tak, aby przy pierwszej wizycie na nie odpowiadały natychmiastowe żądanie OpenID, dzięki czemu jeśli jesteś zalogowany do `id.example.org` jesteś natychmiast i automatycznie zalogowany w odwiedzanej witrynie. Powinni ustawić plik cookie, jeśli nie jesteś zalogowany, aby zapisać je, robiąc to przy każdym żądaniu strony. * Skonfiguruj `id.example.org` jako dostawcę i konsumenta OpenID. Powinna również wykorzystywać Facebooka i innych dostawców tożsamości oraz umożliwiać dostęp do standardowej nazwy użytkownika/hasła. (Do jednego konta można dołączyć wiele metod logowania.) * Przy wylogowaniu po prostu zmień tokeny uwierzytelniające w bazie danych. Użytkownik nadal będzie miał pliki cookie, ale będą one bez znaczenia. W ten sposób użytkownik może zostać wylogowany ze wszystkich witryn jednocześnie. Wiele tokenów uwierzytelniania może być przechowywanych jednocześnie dla jednego użytkownika (i powinny być różne dla każdej witryny), aby użytkownik mógł wylogować się w jednej przeglądarce, ale nadal być zalogowany w innej. Wylogowanie zawsze powoduje wylogowanie ze wszystkich witryn. Jedyny problem, jaki widzę z powyższym, to: * Ktoś odwiedza `example.com`. Plik cookie „nie zalogowany” jest ustawiony. * Następnie Zie przechodzi do `example.net`. Tak samo. * Następnie Zie loguje się i kontynuuje przeglądanie strony `example.net`. * Następnie Zie wraca do `example.com` i, ze względu na ciasteczko „not-logged-in”, nie jest sprawdzany pod kątem `id.example.org` i dlatego nie jest zalogowany. * Jednak, jak tylko zie kliknie przycisk "zaloguj się", zie jest zalogowany. Nie sądzę, że jest to poważny problem. Ogólnie uważam, że to całkiem niezły system. Chciałbym tylko zobaczyć to zrecenzowane. Czy są jakieś problemy, których nie przewidziałem? Byłoby to zapluskwione czy wolne? StackExchange używa zupełnie innej metody. Zakładam, że mają ku temu dobry powód?


title: Przekazywanie danych między setkami obiektów w java

text: Obecnie pracuję z grupą nad budowaniem modelu. Ten model symuluje interakcje między wieloma „agentami” w regionie. Agentem może być dowolny podmiot, taki jak miasto, rolnik, firma itp. Każdy agent jest reprezentowany przez własny obiekt w javie. Każdy agent będzie musiał mieć możliwość interakcji ze wszystkimi innymi agentami, a zatem musi mieć dostęp do informacji o innych agentach. Na przykład załóżmy, że mamy 1 obiekt miejski wchodzący w interakcję z 99 obiektami farmerów. Miasto musi na przykład wiedzieć, jaką całkowitą ziemię posiada każdy z 99 rolników, aby wykonać jakieś obliczenia. Więc moje pytanie brzmi: jaki jest najbardziej wydajny sposób na ukończenie czegoś takiego? W przyszłości może być nawet 500-1000 lub więcej agentów, a każdy agent może potrzebować dostępu do wielu zmiennych od innych agentów. Czy mógłbyś potencjalnie skonfigurować tabelę w mysql dla każdego agenta i umożliwić im dostęp do informacji w ten sposób? Lub można coś skonfigurować bezpośrednio w javie, co pozwala agentom na dostęp do swoich informacji. Mam nadzieję, że w przyszłości również ten model będzie mógł być wielowątkowy. W każdym razie chcę najbardziej wydajnego sposobu na ukończenie tego.


title: Zarządzanie pisaniem specyfikacji

text: Po prostu nie wyobrażam sobie pisania oprogramowania bez specyfikacji. Bez względu na to, jak bardzo jest on szkicowy lub wysoki, specyfikacja jest ważna, aby wyjaśnić nieświadomym programistom, jakie są funkcje programu. Ale problem ze specyfikacją polega na tym, że w całym cyklu tworzenia oprogramowania jest on obywatelem drugiej kategorii; kiedy rozwój nabiera tempa, jest zaniedbywany. Ale gdy pojawi się spór, programiści, testerzy i sprzedawcy będą się starać, aby znaleźć specyfikację uzasadniającą ich powody. Zdarzy się jeden lub więcej scenariuszy: 1. Nie można odzyskać specyfikacji, nikt nie wie, gdzie jest specyfikacja 2. Różne wersje specyfikacji wyłaniają się z różnych źródeł; ustalenie, która wersja jest najnowsza lub czy _jest_ dostępna najnowsza wersja, jest bardzo trudne. 3. Specyfikacja jest niekompletna, brakuje niektórych części dokumentów, do których się odnosi. Tak więc zarządzanie specyfikacjami jest ważne i równie ważne jest, aby każdy miał tylko jedno źródło specyfikacji. Jak zarządzasz swoimi specyfikacjami? Próbowałem nakłonić wszystkich do korzystania z Dokumentów Google, ale wszyscy się sprzeciwili. Wszyscy są po prostu zbyt przywiązani i zakochani w Microsoft Word, który – ich zdaniem – jest bardzo łatwy w użyciu, bardzo łatwy do wstawienia obrazu, bardzo łatwy do wpisania równania i tak dalej. Jak przekonać ich, że MS Word jest po prostu okropny w udostępnianiu?


title: Jak uprościć kompilator/interpreter?

text: Ostatnio napisałem interpreter do operacji na rzadkich macierzach ("kalkulator macierzy rzadkich") w lex/yacc. Język jest nadal bardzo surowy i nie zawiera nawet struktur kontrolnych ani sparametryzowanych podprogramów, a mimo to ma już kilka tysięcy wierszy kodu, i to nie obejmuje klas macierzowych. W szczególności plik yacc ma długość blisko dwóch tysięcy wierszy. Z tego powodu jest mi dość ciężko pracować. Czy to normalne, czy jest jakiś sposób na uproszczenie rzeczy? Jeśli chcesz przejrzeć mój kod, można go znaleźć pod adresem: http://sourceforge.net/projects/msci/files/libpetey/


title: Skąd wzięła się praktyczna zasada szacowania, że czas spędzony będzie wynosił jedną trzecią w każdym z następujących elementów: projektowanie, implementacja i testowanie?

text: Szukam odniesienia do poniższych. Często słyszę, że jedna trzecia czasu projektowego będzie poświęcona na projektowanie, jedna trzecia na implementację, a jedna trzecia na testowanie. Wydaje się, że trzy fazy rozwoju wywodzą się z modelu kaskadowego. Ale skąd wziął się podział czasu (1/3, 1/3, 1/3)? Czy jest jakiś dokument lub książka, z której to pochodzi?


title: Schemat zarządzania pamięcią dla niestandardowego alokatora pamięci

text: Jestem w trakcie wdrażania menedżera małej pamięci. Użytkownicy tej puli pamięci zawsze będą mieli dostęp do bajtów pamięci poprzez uchwyty. Tak więc alokacja/zwolnienie pamięci odbywa się za pomocą dwóch interfejsów API: Handle Allocate(size_t numBytes); void Free (uchwyt uchwytu); Alokacja/dealokacja dotyczy nieprzezroczystych uchwytów. Aby faktycznie uzyskać dostęp do bajtów, użytkownik musi zmapować/odmapować pamięć: void * Map(Handle handle, int mappingFlags); void Unmap (uchwyt uchwytu, void ** ptr); Flagi mapowania: są tylko do odczytu, tylko do zapisu i tylko do odczytu i zapisu. Średni rozmiar bloków pamięci powinien wynosić od 1KB do 1MB, z ewentualnymi bardzo dużymi blokami w okolicach 10MB. Pula pamięci zaczyna się jako jeden duży blok wstępnego przydziału. Menedżer musi następnie zająć się alokacjami o zmiennej wielkości. Kiedy pula się wyczerpie, menedżer może spróbować poprosić system o kolejny duży blok. Moje pytania: 1) Nie jestem pewien, który schemat zarządzania pamięcią byłby najlepszy w scenariuszu. 2) Myślę, że dzięki uchwytom możliwe byłoby zaimplementowanie schematu defragmentacji pamięci. Czy mam rację?


title: Jakie jest właściwe podejście do badania interfejsu API, jeśli nie jest ono dobrze udokumentowane i nie ma dobrych samouczków?

text: Jestem studentem i lubię tworzyć aplikacje na swoim poziomie. Tworząc aplikację jestem jedyną osobą w moim zespole. Po przeanalizowaniu aplikacji wybieram bibliotekę/api do wykorzystania w projekcie. Na przykład obecnie pracuję nad aplikacją do czatu opartą na protokole XMPP. Do tego używam smack api. Te zewnętrzne interfejsy API zwykle nie są zbyt dobrze udokumentowane ani nie mają dobrych samouczków przed rozpoczęciem pracy z interfejsem API. Są one w przeciwieństwie do java api i innych popularnych api, które są bardzo dobrze udokumentowane i istnieją bardzo dobre tutoriale do dopracowania koncepcji, zanim zacznie się pisać kod aplikacji. Chodzi mi o to, że zaimplementowanie prostej koncepcji zajmuje mi dużo czasu, gdy używam api typu smack. Na przykład minęło sporo czasu i nie udało mi się zmusić jednego użytkownika do odczytania statusu innego użytkownika! Nadal jest wiele problemów. Jakie podejście powinienem zastosować, aby zmaksymalizować wydajność? Nie chodzi nawet o maksymalizację wyników, ale o zrozumienie, jak działa api.


title: Używanie wartości zwracanej przez funkcję jako warunku if, dobra praktyka?

text: Czy uważasz, że dobrą praktyką jest używanie wartości zwracanych przez funkcję jako warunków? Koduję w PHP ATM, ale dotyczy to wielu innych języków. if(isTheConditionMet($możeSąNiektóreParamy)) { } lub $res = IsTheConditionMet($możeSąNiektóreParamy); if($res) { } Nie przychodzi mi do głowy sytuacja, w której pierwszy stwarza problem, prawda? EDYCJA: Załóżmy, że wartość zwracana nie będzie używana po ocenie warunku.


title: Jak prezentować kod w pracy naukowej?

text: Właściwie to piszę pracę licencjacką, polegającą na analizie algorytmu BitTorrent i zobaczeniu jego zastosowania na kliencie Transmission jako przykładu implementacji. Czytając jego kod, napisany w C, można zobaczyć wiele warstw funkcji static const char* tr_metainfoParseImpl (const tr_session * session, tr_info * inf, bool * hasInfoDict, int * infoDictLength, const tr_variant * meta_in) { int64_t i; rozmiar_t dł; const char * str; const uint8_t * surowe; tr_wariant * d; tr_wariant * infoDict = NULL; tr_wariant * meta = (tr_wariant *) meta_in; wartość b; bool isMagnet = false; /* info_hash: zakodowany urlen 20-bajtowy hash SHA1 wartości klucza info * z pliku Metainfo. Zauważ, że wartość będzie zakodowanym * słownikiem, biorąc pod uwagę definicję klucza informacyjnego powyżej. */ b = tr_variantDictFindDict (meta, TR_KEY_info, &infoDict); if (hasInfoDict != NULL) *hasInfoDict = b; if (!b) { /* brak słownika informacyjnego... czy to jest link magnetyczny? */ if (tr_variantDictFindDict (meta, TR_KEY_magnet_info, &d)) { (...) `tr_metainfoParseImpl()` to funkcja wywoływana po dodaniu pliku .torrent za pomocą linku do pliku lub magnesu. Wywołuje `tr_variantDictFindDict()` w celu znalezienia jakiegoś łańcucha "info" gdzieś w słowniku metadanych, aby uzyskać informacje o tym pliku torrent. Algorytmicznie nie ma to dla mnie żadnej wartości, ponieważ chcę podkreślić inne aspekty algorytmu BitTorrent, inne niż wyszukiwanie ciągów, chociaż chcę zostawić tam linię wywołującą tylko po to, aby zilustrować, że to się dzieje. Funkcja `tr_variantDictFindDict()` i jej dziecko to bool // func1 tr_variantDictFindDict (tr_variant * dict, const tr_quark key, tr_variant ** setme) { return tr_variantDictFindType (dict, key, TR_VARIANT_TYPE_DICT, setme); } static bool // func2 tr_variantDictFindType (tr_variant * dict, const tr_quark key, int type, tr_variant ** setme) { return tr_variantIsType (*setme = tr_variantDictFind (dict, key), type); } Jak widać, chociaż może to istnieć ze względów inżynierii kodu, algorytmicznie nie ma to żadnej wartości. Tak więc szukam rozsądnych, wykonalnych, praktycznych sposobów na uniknięcie pokazywania tego rodzaju kodu w mojej pracy. Używając powyższego kodu jako przykładu, pomyślałem o kilku opcjach: 1. wstaw odpowiednią część funkcji wywołującej func1, pokazując linię wywołującą func1, a następnie pokazując wywołaną funkcję func2 (w której będzie miała inną odpowiednią część kodu. 2. umieszczenie kodu wywołującego func1 i wywołania func2 obok siebie, tak jakby były w jednej dużej funkcji 3. umiejętne programowanie od początku Prosimy o dzielenie się swoimi doświadczeniami z tą sytuacją. W razie potrzeby zmień również stronę SX, chociaż szukałem najlepszej strony SX, aby zadać to pytanie, a ta wydawała się uzasadniona.


title: Kiedy jest najlepszy czas na samokształcenie w związku z zarządzaniem oprogramowaniem?

text: Wszystko zaczęło się stąd. Śledziłem szacowanie oprogramowania: Demystifying the Black Art (najlepsze praktyki (Microsoft)). Trzeci rozdział mówi, że w Zarządzaniu oprogramowaniem: * Nie możesz poświęcać zbyt dużo czasu twórcom oprogramowania, jeśli im go dasz, to jest prawdopodobne, że nadany im dodatkowy czas zostanie wypełniony przez inne zadania (innymi słowy, programiści zjedzą ten czas :)) Prawo Parkinsona * Nie możesz też wycisnąć czasu ze swojego harmonogramu, ponieważ jeśli to zrobisz, prawdopodobnie opracują produkt kiepskiej jakości, kiepski projekt i zaszkodzą ci na dłuższą metę, tam będzie panika i totalny chaos w projekcie, dużo przeróbek itp. Moje pytanie dotyczy pierwszego punktu. Jeśli nie poświęcisz wystarczająco dużo czasu, to czy typowy inżynier oprogramowania nauczy się swoich umiejętności? Na rynku wciąż pojawiają się nowe technologie, trzeba się ich nauczyć. Nawet przy istniejących znanych technologiach zawsze istnieją najlepsze praktyki oraz nakazy i zakazy.


title: Miara punktów funkcyjnych dla struktury aplikacji biznesowych. Czy to jest możliwe?

text: Tak więc mój szef chce mieć miarę złożoności dla frameworka opracowanego wewnętrznie w naszej firmie. Czy to jest możliwe? O ile mi wiadomo, punkty funkcji nie dotyczą oprogramowania, które nie ma per se trwałości, a także nie ma GUI (jest to framework, zbudowany w C#, przydatny do tworzenia aplikacji biznesowych i jest używany tylko wewnętrznie) . Ponadto punkty funkcyjne stają się mniej przydatne, ponieważ oceniane oprogramowanie docelowe staje się bardziej złożone. Jeśli jest to możliwe, czy ktoś mógłby mi udzielić wskazówek? Jeśli nie, jak mam przekonać szefa, żeby przestał o to pytać? Czy istnieje lepszy miernik do wyceny tak złożonego oprogramowania?


title: Jak zaprojektować (tylko zarys) aplikację PHP klasy korporacyjnej

text: Od około roku pracuję nad bardzo dużą aplikacją. Obecnie jestem na wersji 17 i za każdym razem zaczynam od początku z częścią kodu z wcześniej. Ale teraz zaczyna to stać się nie do opanowania. Kiedy tworzę projekt aplikacji, zazwyczaj zaczynam od dokumentu Worda, przedstawiającego wszystkie klasy, z funkcjami, opisami dla każdej z nich, ich zależnościami, domyślnymi danymi konfiguracyjnymi i sposobem, w jaki każdy komponent rozszerza resztę aplikacji. Ale dzięki tej metodzie, w ciągu kilku godzin, mogę łatwo dotrzeć do 20-30 stron dokumentacji, a ładny prosty zarys oprogramowania, ponieważ sam w sobie jest skomplikowany, użycie go jako szablonu do napisania kodu staje się trudne. Więc teraz próbuję opisać aplikację w formacie XML, zbudowaną na XSD, który zawiera strukturę rozmieszczenia klas. Ale to również pokazuje jego problemy. Na tym etapie zaprojektowano wszystko przed aplikacją podstawową (bazy danych, diagramy, funkcjonalność itp.), ale główne problemy tkwią w projektowaniu oprogramowania bazowego, które to wszystko obsługuje. Czy ktoś może polecić, jaką ścieżką powinienem iść, czy to z konkretnymi sposobami ułożenia dokumentu Worda w celu łatwego czytania, wzorcem XML, który zrobi to samo, lub innym pakietem oprogramowania, który może to dla mnie zrobić i pomóc mi poprowadzić przez rozwój? Każda pomoc byłaby bardzo mile widziana, głównie dlatego, że po złamaniu tej części moja aplikacja może być wreszcie zbudowana i ukończona. Dziękuję


title: Czy mogę użyć koncepcji „tagów” (pochodzącej z witryn StackExchange) w projekcie osobistym?

text: Mam mały, osobisty projekt, który, jak sądzę, obejrzy najwyżej około 5 osób. Pomocne byłyby „Tagi”, używane w tej witrynie i StackOverflow. Czy mogę jawnie użyć czegoś, co nazywa się tagiem w moim osobistym projekcie, w którym cel/funkcja jest zasadniczo taka sama?


title: Dlaczego więcej aplikacji komputerowych nie jest napisanych w Qt?

text: O ile wiem i zrozumiałem z mojego doświadczenia z Qt, jest to bardzo dobra i łatwa do nauczenia biblioteka. Ma bardzo dobrze zaprojektowany interfejs API i jest wieloplatformowy, a to tylko dwie z wielu cech, które czynią go atrakcyjnym. Interesuje mnie, dlaczego więcej programistów nie używa Qt. Czy jest jakiś brak, który temu przemawia? Która funkcja sprawia, że inne biblioteki są lepsze niż Qt? Czy problem dotyczy licencjonowania?


title: Starszy wywiad pytania LINQ

text: Przygotowuję dział LINQ w pytaniach do wywiadu dla starszych programistów. Jakie są najciekawsze pytania w LINQ? I dlaczego?


title: Właściwy sposób na „powiedzenie” notacji Big-O?

text: Jaki jest właściwy sposób przekazania złożoności algorytmu w notacji Big-O w mowie? Czy "całkowita liczba operacji jest duża oh N log N" brzmi dziwnie? Co jest ogólnie akceptowane: „Ma złożoność przestrzenną „log kolejności n”? „Gwarantuje się, że będzie działać w czasie n log n”?


title: Powtarzający się problem - potrzebujesz instrukcji, aby uruchomić tylko raz wewnątrz kodu, który wykonuje się wiele razy

text: Witam W programowaniu natrafiam na ten problem (szczególnie w przypadku niektórych frameworków), gdzie chciałbym wykonać jeden kawałek kodu raz i tylko raz jednak dostarczoną metodę np. (coś jak funkcja onComplete), którą chcę umieścić ta instrukcja w woli w rzeczywistości jest wykonywana wielokrotnie. Zastanawiam się tylko, czy ktoś zna najlepszy sposób na obejście tego problemu, jeden z moich znajomych programista powiedział mi, abym użył flagi (boolean), aby sprawdzić, czy ten kod już został uruchomiony, ale czuję, że to nie jest odpowiednie rozwiązanie i nie chciałbym wprowadzać zmiennych globalnych w celu sprawdzenia warunku raz i tylko raz. Czy ktoś kiedykolwiek wcześniej natknął się na taki problem, zastanawiam się, czy istnieje jakaś dobra praktyka, o której należy pamiętać, mając do czynienia z takim kodem. Dziękuję


W naszym sprzęcie telekomunikacyjnym jest moduł, który jest napisany w C. Myślę, że kod w tym module brzydko pachnie, ponieważ ma kilka symptomów: * Gdy do tego modułu dodawane są nowe funkcje, niektóre oryginalne funkcje działają źle. I niektóre dziwne problemy zostały ostatecznie zorientowane na przepełnienie bufora tego modułu. * Trudno jest dodać nowy kod do modułu. Chociaż testy jednostkowe i testy integracyjne obejmują nowy kod, wychodzą na jaw błędy i wady ukryte w oryginalnym kodzie. * Dzięki przeglądowi kodu stwierdziliśmy, że jakość kodu jest bardzo zła. Jednak moduł był testowany przez wiele rund, błędy ukryte w powierzchni kodu zostały wykryte przez inżynierów QA. Inne problemy ukryte głębiej były trudne do znalezienia. _jak również wirus w ciele._ (łatwo wywołać nieporozumienie, usuń je) Podsumowując status quo w tych powodach: * Oryginalny kod został uszkodzony z powodu luźnego monitorowania procesu, w rzeczywistości wiele samotestów jest ignorowanych lub częściowo wykonane. * Pierwszym programistą tego modułu był brak umiejętności programowania, a lider zespołu nie znalazł na czas problemu i ryzyka. * Wiele podejść do doskonalenia pozostaje w fazie planowania z powodu podejrzeń lidera zespołu. Projekt doszedł do nowej wersji. Niektórzy liderzy zespołów chcą zmienić tę sytuację i wielokrotnie omawialiśmy tę procedurę. Wszyscy zgodzili się zrewidować moduł, ale musimy zdecydować między: * przepisaniem modułu. Oznacza to wyrzucenie całego kodu modułu do kosza i przepisanie kodu bez zmiany jego interfejsu. * refaktoryzacja modułu. Oznacza to krok po kroku. musimy zachować cały kod na początku i zbudować solidny zestaw testów dla kodu. Następnie zagłębiamy się w kod i poprawiamy jego mały fragment, opierając się na testach, aby powiedzieć nam, czy wprowadzimy błąd. Ten proces jest powtarzany aż do zakończenia refaktoryzacji. Zgadzam się z przepisywaniem, ponieważ mamy już pewne doświadczenia związane z przepisywaniem w naszych systemach, które okazały się najlepszym wyborem. Kierownik projektu chce dokonać refaktoryzacji modułu ze względu na ograniczony czas potrzebny na ukończenie szczegółowego projektu, kodowanie, przegląd kodu, testy jednostkowe i testy integracyjne, czyli trzy miesiące. Uważa, że skala czasowa jest zbyt napięta, aby całkowicie przepisać. Czy ten kod powinien zostać przepisany czy zrefaktoryzowany? EDYCJA: Jak powiedział Joel w Rzeczy, których nigdy nie powinieneś robić, część I> Pomysł, że nowy kod jest lepszy niż stary, jest oczywiście absurdalny. Zgadzam się z tym punktem widzenia. Ale mam kilka zagadek, że przepisanie niektórych spraw w naszym projekcie okazało się mądrym wyborem. Może opiera się na nowym programiście, który jest bardziej wybitny niż poprzedni programista lub testowanie jest bardziej wystarczające.


title: Aby zebrać wymagania od tych, którzy nie chcą poświęcać czasu na rozmowę kwalifikacyjną?

text: Właściwie jestem absolwentem Fresh CS, który chce zbudować system dla biznesu transportu drogowego swojego taty. Problem polega jednak na tym, kiedy idę do niego zapytać: kim są ludzie zaangażowani w jego działalność? jaka jest ich rutynowa praca? lub jak faktycznie działa ich biznes? potem unika moich pytań i mówi, po prostu daj mi system, wykorzystując swoją wiedzę, aby ułatwić mi transport i odpocząć, co myślisz. Tak więc przeprowadziłem burzę mózgów na ten temat, ale nadal czuję potrzebę spojrzenia na punkt widzenia mojego taty, ponieważ faktycznie zajmuje się tym biznesem. Jak więc mogę uzyskać od niego wymagania biznesowe?


title: Miejsce na umieszczanie próbek kodu w projektach

text: Od czasu do czasu otrzymuję lub piszę kilka minimalnych próbek kodu, aby wykonać zadania. Jaka jest zwyczajowa praktyka przechowywania tych próbek (co może się później przydać)? Masz osobny folder źródłowy lub stwórz osobny projekt ?


title: Zaprojektuj pytanie o najlepszą opcję przechowywania danych na zdalnych komputerach

text: Tworzę aplikację Windows Forms, którą chcę zainstalować na kilku komputerach połączonych w sieć. Każdy z tych komputerów ma dostęp do wielu serwerów na których wykonywane sąróżne zadania itp. Chcę, aby każda instancja używanej aplikacji mogła przechowywaći pobierać dane dotyczące oddzielnych serwerów zdalnych (te dane mogąbyćedytowane przez każdego korzystania z aplikacji na swoim komputerze). Aplikacja musi mieć możliwość pobierania danych z serwerów, gdy użytkownik kliknie przycisk aktualizacji. Użytkownik może następnie w razie potrzeby edytować i aktualizować te dane. Myślę, że główne opcje przechowywania danych są następujące: * Przechowuj wszystkie dane w jednym miejscu w bazie danych * Miej folder na każdym z serwerów i zapisuj w nim pliki XML z danymi Które byłoby najlepszym podejściem w tym scenariuszu i dlaczego? Czy są jakieś lepsze alternatywy? Uwaga: zazwyczaj wybrałbym podejście oparte na bazie danych, ale chcę przechowywać dane w alternatywny sposób, ponieważ korzystanie z bazy danych wymagałoby wybrania jednego z serwerów do obsługi bazy danych, co nie ma sensu w kwestii tego, na którym z nich byłyby one przechowywane na nim, a nie na innych serwerach, chociaż aplikacja będzie potrzebować tylko jednej bazy danych.


title: Do czego odnosi się słowo „ekstremalne” w „programowaniu ekstremalnym” (XP)?

text: „Extreme” sugeruje, że bardzo różni się od normalnego, bardzo agresywnie, przekracza granice, ale moim zdaniem regularne wydania, programowanie w parach, testy jednostkowe, współpraca z klientami są całkiem normalne i akceptowalne. Co oznacza skrajność?


title: Nazwy metod wywołania interfejsu API RESTful, C#

text: Pracuję nad starym kodem, który działa z api REST w c#. Nazwy metod (którą metodę należy wywołać po stronie API) są przekazywane jako zakodowane ciągi. Czy klasa statyczna byłaby najlepszym rozwiązaniem, aby zmusić użytkownika do przekazania wartości, których chcę (aby nie popełnił błędu i nie wpisał czegoś, itp.)?


title: Jakie są sposoby na zwiększenie produktywności z Emacsem?

text: Używałem Emacsa całkiem sporo i czuję się komfortowo z najbardziej podstawowymi poleceniami/skrótami, ale wiem, że Emacs ma o wiele więcej do zaoferowania niż to, czego używam. Jakie są mniej znane cechy emacsa, które mogą pomóc mi stać się bardziej produktywnym programistą?


title: Dlaczego serwery Java są tak rzadkie i kosztowne?

text: Myślę, że „dlaczego PHP nad Javą” zostało już omówione w innych pytaniach, mam pytanie: Co sprawia, że stosy LAMP/WAMP są tak tanie i obfite w porównaniu ze stosem Glassfish? Jakie są główne czynniki stojące za tym trendem? Ponadto, dlaczego żaden lekki stos oparty na javie nie pojawił się jako konkurent?


title: Jak zorganizować plik z wieloma funkcjami?

text: Piszę aplikację sieci web przy użyciu PHP i JQuery. Mam plik pełen funkcji dostępu do bazy danych. Mam nazwy funkcji, takie jak `createUser`, `createRole`, `getUserByLogin`, `setSOMETHING`... Czy istnieje przyjęta konwencja lub ważny powód, aby wybrać sposób organizacji tego pliku? (alfa według nazwy, pogrupowane według twórców, pobierających, ustawiających..., według tabeli, do której się odnoszą,...)


title: Jak używać przykładowych danych Blend jako rzeczywistych danych?

text: Próbuję zrobić jakiś projekt w Blend 4. Funkcja danych przykładowych w Blend jest fajna w czasie projektowania, ale może być znacznie lepiej zobaczyć projekt w przeglądarce. Czy ktoś może mi pomóc w wykorzystaniu przykładowych danych stworzonych przez Blend jako rzeczywistych danych (zobacz te same dane w przeglądarce) ? Z góry dziękuję.


title: Co warto zrobić w przypadku projektów obsługujących wiele wersji programu Visual Studio?

text: Mam projekt open source, który działa na .Net 2.0 i nowszych. Rzecz w tym, że wolę używać Visual Studio 2012, co wymusza działanie rozwiązania i plików projektu tylko z VS2010/2012. Co dokładnie powinienem zrobić? Nie chcę, aby moi użytkownicy musieli tworzyć rozwiązanie od zera, jeśli nie mają dostępu do VS2010, ale nie chcę również próbować zsynchronizować 3 różnych plików projektu (VS2005, VS2008, i VS2010/2012) Jakie jest typowe rozwiązanie tego problemu?


title: Uzasadnianie niedociągnięć w projekcie

text: Chciałbym uzyskać informacje o tym, jak postępować z klientami i dostawcami zewnętrznymi, którzy pytają mnie o braki w moim projekcie. Na przykład. Okazuje się, że potrzebuję pola danych w odpowiedzi usług internetowych. Ta odpowiedź została podpisana kilka tygodni temu i otrzymuję pytania typu „ _Dlaczego nie zidentyfikowałeś tego pola X tygodni temu?_ ”. Oczywiście odpowiedź jest taka, że całe tworzenie oprogramowania jest iteracyjne i ten wymóg nie był w tym momencie na moim radarze. Nie jestem przewidujący. Chciałbym biznesowo-y sposób odwrócenia tych pytań. Jakakolwiek rada? **Aktualizacja** : Aby wyjaśnić, ta wada jest całkowicie moja. Jak więc przyznać się do tego błędu, nie brzmiąc zbyt przepraszająco?


title: Dlaczego kompilator nie może uniknąć dwukrotnego samodzielnego importowania pliku nagłówkowego?

text: Nowość w C++! Czytałem więc to: http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/ > **Header guards** > > Ponieważ pliki nagłówkowe mogą zawierać inne nagłówki plików, można > się skończyć w sytuacji, gdy plik nagłówkowy zostanie dołączony wiele razy. Dlatego tworzymy dyrektywy preprocesora, aby tego uniknąć. Ale nie jestem pewien - dlaczego kompilator nie może po prostu... **nie** zaimportować tego samego dwa razy? Biorąc pod uwagę, że ochrona nagłówków jest opcjonalna (ale najwyraźniej jest to dobra praktyka), prawie wydaje mi się, że istnieją scenariusze, w których chcesz zaimportować coś dwa razy. Chociaż w ogóle nie wyobrażam sobie takiego scenariusza. Jakieś pomysły?


title: Dlaczego Python nie ma funkcji "spłaszczania" dla list?

text: Erlang i Ruby mają funkcje spłaszczania tablic. Wydaje się, że jest to takie proste i przydatne narzędzie do dodania do języka. Można to zrobić: >>> mes = [[1, [2]], 3, [[[4, 5]], 6]] >>> mess.flatten() [1, 2, 3, 4, 5, 6] Lub nawet: >>> import itertools >>> mess = [[1, [2]], 3, [[[4, 5]], 6]] >>> list(itertools.flatten(mess )) [1, 2, 3, 4, 5, 6] Zamiast tego w Pythonie trzeba zadać sobie trud napisania od podstaw funkcji spłaszczania tablic. Wydaje mi się to głupie, spłaszczanie tablic jest tak powszechną czynnością. To tak, jakby trzeba było napisać własną funkcję do łączenia dwóch tablic. Wygooglowałem to bezowocnie, więc pytam tutaj; czy istnieje jakiś szczególny powód, dla którego dojrzały język, taki jak Python 3, który zawiera sto tysięcy różnych baterii, nie zapewnia prostej metody spłaszczania tablic? Czy pomysł włączenia takiej funkcji był w pewnym momencie dyskutowany i odrzucany?


title: Który jest bardziej niezawodny w dużym projekcie, COCOMO czy FP?

text: Koszt produktu oszacowałem przez COCOMO, potem też oszacowałem przez FP. wyniki były tak różne od siebie! Koszt oszacowany przez FP był około dwa razy wyższy niż koszt szacowany przez Cocomo. który jest bardziej niezawodny, ponieważ ten produkt należy do dużego projektu. powinienem pominąć wynik FP?


title: Dobre rozwiązania do ciągłej integracji dla projektów Haskell

text: Szukam dobrego rozwiązania CI dla projektu haskell. Idealnie coś, co będzie działać z gitem. Naprawdę podstawowe potrzeby (jak dotąd) kompilacji i uruchamiania testów po każdym zameldowaniu. Niektóre podstawowe raporty też byłyby świetne, ale nie muszą być niczym wymyślnym. Powinien również obsługiwać uruchamianie testów javascript w przeglądarce. (przez Selenium itp.) Czego ludzie do tego używali?


title: Uproszczone interfejsy lub abstrakcja obiektów

text: Mam do czynienia z częstą sytuacją w pracy, która zdarza się dość często podczas manipulowania przedmiotami. Sytuacja wygląda tak: musisz powiązać klasy A i B, klasa A ma instancje klasy B. Teraz wyobraź sobie, że chcemy wywołać metodę B klasy B, ale mamy dostęp tylko do instancji klasy A. najlepsze podejście do tej sytuacji i dlaczego: Ainstances->getClassBInstance()->methodB(); lub Ainstances->methodB() gdzie metodaB jest zaimplementowana w następujący sposób: function methodB() { return self.getClassBInstance()->methodB() }


title: Walcząc jako programista. Potrzebujesz porady

text: Od kilku lat jestem programistą. Jestem całkiem dobry w tym, co robię i potrafię „wykonać robotę”. Istnieje jednak różnica między „wykonaniem pracy” a „właściwym wykonaniem pracy”. Posłużmy się przykładem. Ostatnio stworzyłem stronę internetową od podstaw. Strona działa dobrze i nie miałem żadnych problemów. Przeglądając kod pomyślałem, że mogłem to zrobić lepiej. Mogłem zmniejszyć liczbę zapytań MySQL. Mogłem użyć MVC, co ułatwiłoby rozszerzenie (teraz wymaga rozszerzenia). Postanowiłem przepisać projekt za pomocą CodeIgnitera. Lubię ramy. Ale potem zboczyłem z tropu, ponieważ aby ograniczyć zapytania MySQL, musiałem nauczyć się zaawansowanych złączeń. I to jest problem. Zawsze, gdy dobrze wykonuję pracę, jestem w ciągłym kole nauki. Tematy takie jak zaawansowane złączenia MySQL wymagają czasu na naukę, a następnie na wdrożenie. Nie pracuję dla firmy. Wszystko robię sam. Wyobrażam sobie więc, że gdybym pracował jako programista PHP dla firmy, istniałyby osobne zespoły zajmujące się SQL. Bycie solo jest trudne. I czasami, chociaż moja wiedza jest zaawansowana, łapię się na tym, że zadaję pytanie za pytaniem. Prawdopodobnie mam dużo dumy ze swojej pracy. Ale gdybym miał pracować w firmie zajmującej się kompletnymi projektami, wyobrażałbym sobie, że projekty zajmują trochę czasu, ponieważ musiałbym się uczyć coraz więcej, aby zadowolić moją dumę i upewnić się, że robię wszystko „poprawnie”. Planuję dostać pracę po nowym roku. Potrzebuję bezpieczeństwa pracy. Dlatego zadaję to pytanie. Jaką radę możesz udzielić w zakresie samorozwoju i samodoskonalenia? Czy powinienem się mniej martwić? A może poszukać pracy jako programista PHP, gdy nie będę bezpośrednio obsługiwał zapytań SQL?


title: Odnieść kierunki wiatru do przestrzeni tekstur?

text: Mam tablicę 2D wypełnioną prostą klasą: class Tile { boolean N,E,S,W; } Mam również arkusz kafelków reprezentujący wszystkie możliwe wyniki z wyjątkiem wszystkich fałszywych (12 + skrzyżowanie). Teraz muszę odnieść wszystkie te możliwości do przestrzeni tekstur na moim arkuszu. Oprócz posiadania instrukcji if dla każdego wyniku, czy istnieje bardziej efektywny sposób, którego obecnie nie mogę wymyślić?


title: Jak inwersja zależności jest powiązana z funkcjami wyższego rzędu?

text: Dzisiaj przeczytałem właśnie ten artykuł, w którym opisałem znaczenie zasady SOLID w tworzeniu języka F# – F# i zasady projektowania – SOLID A odnosząc się do ostatniej z nich – „Zasady inwersji zależności” autor powiedział: > Z funkcjonalnego punktu widzenia, te kontenery i koncepcje wstrzykiwania można > rozwiązać za pomocą prostej funkcji wyższego rzędu lub wzorca typu hole-in-the-middle > wbudowanego bezpośrednio w język. Ale nie wyjaśnił tego dalej. Więc moje pytanie brzmi, w jaki sposób inwersja zależności jest powiązana z funkcjami wyższego rzędu?


title: Jak zapewnić integrację SaaS z systemami korporacyjnymi (z perspektywy dostawcy SaaS)?

text: Robię ogólne badania dla potencjalnego projektu SaaS. Rozwiązanie, które zamierzamy stworzyć, będzie wymagało możliwości integracji danych z różnymi systemami przedsiębiorstwa. Rozumiem, że SaaS zwiększa złożoność integracji przedsiębiorstwa, ponieważ działa w chmurze i poza zaporą ogniową. Przeczytałem kilka artykułów opisujących podejścia dla przedsiębiorstw do integracji danych z rozwiązaniami SaaS. Podejścia integracyjne obejmują zarówno prymitywne transfery FTP, niestandardową integrację punkt-punkt, jak i szeroką i rosnącą gamę rozwiązań komercyjnych (urządzenia, oparte na chmurze i EAI). Artykuły te skupiają się na perspektywie klienta. Innymi słowy, mają one na celu pomóc przedsiębiorstwom lepiej zrozumieć ich możliwości integracji z dostawcami SaaS. **Czy ktoś może udzielić informacji i porad z perspektywy dostawcy SaaS, jeśli chodzi o jak najłatwiejsze zintegrowanie swojego rozwiązania?** Zakładam, że dostawca SaaS musi tworzyć i publikować interfejsy API usług internetowych i interfejsy RESTful. Wszelkie inne porady lub zasoby byłyby najbardziej mile widziane. PS: Zdaję sobie sprawę, że stwierdzenie „konieczność integracji z różnymi systemami korporacyjnymi” jest niewiarygodnie niejasne.


title: Zasoby do egzaminu CSQA

text: W tym roku mam zamiar przystąpić do egzaminu Certified Software Quality Analyst (CSQA). Chodzę po to na zajęcia, chociaż czytam książki i notatki dostarczone przez nauczycieli, muszę znać dobre materiały do egzaminu CSQA. Zasoby, które zostaną dostarczone, będą dobre, jeśli będą zawierały wskazówki, sposób, w jaki zadają pytania, i będą działać jako dobre referencje do egzaminów CSQA. Z góry dziękuję..


title: Czy obiekt powinien aktualizować się sam?

text: Pracuję nad Ruby on Rails. W naszej aplikacji dostępna jest funkcja, dzięki której lekarze mogą „odbierać” przypadki dla siebie. Mogę albo poprosić lekarza o wykonanie akcji i aktualizację płytki, albo mogę poprosić lekarza o przesłanie się do płytki i zaktualizowanie płytki. Czy obiekty powinny się aktualizować? Po prostu wydaje mi się, że jest czystszy, ale nie jestem pewien. A może za dużo się zastanawiam? Pierwszy przypadek, tylko lekarz: def claim(plate) plate.claimed = true plate.doctor_id = id plate.save end To jest drugi przypadek (lekarz wysyła się do tablicy): #doctor def claim(plate) plate.claimed_by( self) end #płyta def claim_by(doctor) self.claimed = prawda self.doctor_id = doctor.id self.save end


title: Jak stworzyć sieć semantyczną taką jak wordnet w oparciu o Wikipedię?

text: Jestem studentem studiów licencjackich i muszę stworzyć sieć semantyczną opartą na Wikipedii. Ta sieć semantyczna byłaby podobna do Wordneta (z wyjątkiem tego, że jest oparta na Wikipedii i dotyczy „strumieni tekstu/tematów”, a nie prostych słów itp.) I myślę o użyciu w tym celu zrzutów XML Wikipedii. Myślę, że muszę nauczyć się analizowania XML i "_pewnych innych rzeczy_" związanych z NLP i prawdopodobnie uczeniem maszynowym, ale nie jestem pewien co do czegokolwiek związanego z analizą XML. * Czy początkowy krok: przetwarzanie zrzutu XML do tekstu to dobry pomysł/krok? Jakieś alternatywy? * Jakie kroki należy wykonać po przetworzeniu kodu XML na tekst w celu utworzenia funkcjonalnej sieci semantycznej? * Jakich rzeczy/pojęć powinienem się nauczyć, aby je realizować? * Nie proszę bezpośrednio o rekomendacje książek, ale jeśli przeczytałeś książkę/artykuł, który uczy czegoś związanego/pomocnego, proszę o nich wspomnieć. Może to obejmować odniesienie do już istniejących wdrożeń dotyczących tematu. Proszę mnie poprawić, jeśli gdzieś się myliłem. Dziękuję! EDYCJA: Produkt końcowy powinien być jak kompletna sieć semantyczna (jak Conceptnet lub Cyc itp.), więc nie mogę używać takich rzeczy jak Semantic Mediawiki. (Po drugie, wydaje mi się, że powinienem zadać to pytanie o językoznawstwo, a nie tutaj...)


title: W jaki sposób języki funkcjonalne radzą sobie z symulacją podczas korzystania z projektowania opartego na interfejsie?

text: Zazwyczaj w C# używam iniekcji zależności, aby pomóc w szyderstwie; public void UserService { public UserService(IUserQuery userQuery, IUserCommunicator userCommunicator, IUserValidator userValidator) { UserQuery = userQuery; Weryfikator_użytkowników = Weryfikator_użytkowników; UserCommunicator = userCommunicator; } ... public UserResponseModel UpdateAUserName(int userId, string userName) { var wynik = UserValidator.ValidateUserName(userName) if(result.Success) { var user = UserQuery.GetUserById(userId); if(user == null) { wyrzuć nowy ArgumentException(); użytkownik.nazwa_użytkownika = nazwa_użytkownika; UserCommunicator.UpdateUser(użytkownik); } } ... } ... } public class WhenGettingAUser { public void AndTheUserDoesNotExistThrowAnException() { var userQuery = Substitute.For<IUserQuery>(); userQuery.GetUserById(Arg.Any<int>).Returns(null); var userService = new UserService(userQuery); AssertionExtensions.ShouldThrow<ArgumentException>(() => userService.GetUserById(-121)); } } Teraz w czymś takim jak F#: jeśli nie pójdę ścieżką hybrydową, w jaki sposób przetestowałbym sytuacje przepływu pracy, takie jak powyżej, które normalnie dotykałyby warstwy trwałości bez użycia interfejsów/mocków? Zdaję sobie sprawę, że każdy krok powyżej byłby testowany na własną rękę i byłby zachowany jak najbardziej atomowy. Problem polega na tym, że w pewnym momencie wszystkie muszą zostać wywołane po kolei, a ja będę chciał się upewnić, że wszystko jest wywoływane poprawnie.


title: Bezpieczeństwo przy użyciu jsonp

text: Piszę aplikację, która udostępni zestaw funkcji API, które wymagają do działania skryptów między witrynami. Będę wykorzystywał jsonp, który pozwoli innym programistom korzystać z tych usług w swoich aplikacjach internetowych. * Jakie kwestie bezpieczeństwa należy wziąć pod uwagę, aby chronić dane mojego serwera? * Jakie kwestie bezpieczeństwa powinni wziąć pod uwagę inni programiści korzystający z moich usług za pośrednictwem jsonp?


title: Czy istnieją standardowe strategie definiowania przepływu pracy i zależności?

text: Pracuję nad projektem, który obejmuje łączenie oddzielnych zadań w jedno zadanie wzorcowe, chociaż mogą istnieć równoległe ścieżki w łańcuchu prowadzącym do końcowego wyniku. Szczegóły zadania i łańcucha będą przechowywane w bazie danych. Ostatecznie to, co chcę skończyć, to GUI, w którym bloki reprezentujące poszczególne zadania można przenosić i łączyć, z definicją systemu przechowywaną w DB do wykonania. Zostanie to zaimplementowane jako C# na szczycie SQL Server. Nie chcę wymyślać koła na nowo, jeśli mogę w tym pomóc. Jestem pewien, że muszą istnieć dobre wzorce, szczególnie dotyczące sposobu reprezentowania przepływu i zależności w tabelach DB, ale nie udało mi się znaleźć niczego, co pasowałoby do rachunku. Przede wszystkim jestem ciekawa, czy istnieją jakieś skuteczne schematy, których ludzie używali do definiowania zawodów, zależności itp. Czy ktoś zna jakieś powszechnie stosowane strategie?


title: Wątpliwości w rozmowie z programistą iOS

text: Jak głęboko programista iOS powinien dokonać przeglądu struktury danych i algorytmu, przygotowując się do stanowiska na rozmowie kwalifikacyjnej na iOS? Wiem, że większość ludzi po prostu powiedziałaby, że nie ma nic złego w przeglądaniu tego, ale chciałbym uzyskać pewne informacje na podstawie wywiadu z doświadczeniem, jaki procent pytań dotyczy struktury/algorytmu danych, a jaki procent dotyczy iOS?


title: Czy powinienem uczyć się zasad niskiego poziomu, jeśli planuję rozwijać się w językach wysokiego poziomu?

text: W przyszłym miesiącu rozpoczynam studia, a dzisiaj mam kilka egzaminów zwalniających. Jednym z nich jest Organizacja Komputerów: uczy się takich rzeczy jak Algebra Boole'a, Gates (AND, OR, NOT itp.), Asembler. Zastanawiam się, po co uczyć się tak niskopoziomowych rzeczy. Czy przyniesie mi to korzyści jako programista, prawdopodobnie rozwijający się w znacznie wyższych językach, takich jak C#, Python, PHP itp.?


title: Oddzielenie klas od interfejsu użytkownika

text: Jaka jest najlepsza praktyka, jeśli chodzi o pisanie klas, które mogą potrzebować wiedzieć o interfejsie użytkownika. Czy klasa wiedząca, jak się rysować, nie złamałaby niektórych najlepszych praktyk, ponieważ zależy to od interfejsu użytkownika (konsola, GUI itp.)? W wielu książkach o programowaniu natknąłem się na przykład "Shape", który pokazuje dziedziczenie. Kształt klasy bazowej ma metodę draw(), którą każdy kształt, taki jak okrąg i kwadrat, zastępuje. Pozwala to na polimorfizm. Ale czy metoda draw() nie jest w dużym stopniu zależna od interfejsu użytkownika? Jeśli napiszemy tę klasę, powiedzmy, Win Forms, nie możemy jej ponownie użyć w aplikacji konsolowej lub aplikacji internetowej. Czy to jest poprawne? Powodem tego pytania jest to, że zawsze utknąłem i rozłączyłem się z tym, jak uogólnić klasy, aby były jak najbardziej przydatne. To faktycznie działa przeciwko mnie i zastanawiam się, czy „za bardzo się staram”.


title: Dlaczego nie importujemy pakietu, gdy używamy funkcji String?

text: Zadałem sobie pytanie, dlaczego nie zaimportowaliśmy pakietu, gdy używamy funkcji String, takich jak `toUpperCase()`? Jak się tam dostają bez importowania paczek?


title: Jaka jest różnica między architektem rozwiązania a architektem platformy?

text: Mam problem ze znalezieniem jakichkolwiek informacji dotyczących stanowiska „architekt platform”. Jaka jest różnica między nim a architektem rozwiązań?


title: Udostępnianie logiki biznesowej jako usługi WCF

text: Pracuję nad projektem warstwy środkowej, który hermetyzuje logikę biznesową (wykorzystuje warstwę DAL i obsługuje serwer aplikacji sieci Web [ASP.net]) produktu wdrożonego w sieci LAN. BL służy jako zestaw usług i obiektów danych, które są wywoływane w wyniku działania użytkownika. Obecnie DAL działa jako oddzielna aplikacja, podczas gdy BL używa go, **ale jest używany przez aplikację internetową jako DLL**. Zarówno DAL, jak i aplikacja internetowa są wdrażane na różnych serwerach wewnątrz organizacji, a ponieważ biblioteka DLL BL jest wykorzystywana przez aplikację internetową, znajduje się na tym samym serwerze. Najgorszą rzeczą w ujawnianiu BL jako DLL jest to, że straciliśmy orientację w tym, co ujawniamy. Wdrożenie nie jest tak dużym problemem, ponieważ w większości wersje produktów są wdrażane razem. Czy poleciłbyś migrację z usługi DLL do usługi WCF? Jeśli tak, dlaczego? Czy znasz kogoś, kto miał podobne doświadczenie?


title: Czy duże firmy IT stale zwalniają lub stale się rozwijają?

text: Dzisiaj właśnie otrzymałem moją (prawie codzienną) pocztę od zautomatyzowanego poszukiwania pracy w dużej firmie, jak poniżej: W oparciu o twoje kryteria wyszukiwania dostępne są teraz następujące oferty: * Senior Software Engineer II - z siedzibą w NY * Główny architekt oprogramowania - z siedzibą w NJ * Inżynier Oprogramowania - z siedzibą w LA i zastanawiałem się: dlaczego tak często otrzymuję te reklamy? Nie wydaje się, że zawsze są tacy sami, więc (przynajmniej pozornie) nie wydaje się, że zawsze wysyłają mi te same zlecenia. Czy duże firmy IT, takie jak ta, nieustannie zwalniają ludzi, czy stale się rozwijają, czy też ludzie ciągle odchodzą z tego miejsca (i w takim razie dlaczego **że** wiele osób odchodzi)?


title: Co dokładnie dzieje się na komputerze LAMP, gdy żądam pliku php?

text: Jestem programistą .NET, który niedawno rozpoczął pracę w środowisku LAMP. Wiem, że jeśli wejdę na `www.somedomain.com/files/test.php`, to (1) DNS rozwiąże adres URL do mojego serwera (2) mój serwer obsługuje żądanie na podanym porcie (3) serwer wygląda w /files/test.php i jakoś uruchamia test.php i zwraca wynik pliku do klienta. Ale byłoby naprawdę wspaniale zrozumieć ten proces bardziej szczegółowo. Na przykład, czy Apache/nginx faktycznie uruchamia plik php, czy przekazuje go do interpretera php? Czy każdy plik php jest uruchamiany za każdym razem, czy serwer buforuje jego dane wyjściowe? Bardzo pomocne byłoby poznanie głównych szczegółów/decyzji, jakie środowisko LAMP podejmuje podczas tego procesu. Trochę jak ta odpowiedź, która szczegółowo wyjaśnia, jak działa SSL... http://security.stackexchange.com/questions/20803/how-does-ssl-work/20847#20847


title: Jak zorganizować Coding Dojo?

text: Powyżej przy przepełnieniu stosu zapytano, jak zorganizować dojo kodujące (http://stackoverflow.com/questions/4338567/how-to-organize-a-coding-dojo-event). Uważam, że mogło to być niewłaściwe forum... Zastanawiam się to samo: jak zorganizowane jest Codeing Dojo? Jaka jest struktura spotkania? Jak wybrać Kata? Co planujesz z wyprzedzeniem? Interesują mnie wszelkie pomysły na ten temat, a także linki do wszelkich zasobów, które mogą to przedstawiać.


title: Jak uzyskać poradę prawną dla projektu open source?

text: Mam pytanie dotyczące oprogramowania open source. **Pytania:** Skąd otrzymujesz porady prawne? Czy od samego początku musisz znaleźć prawnika specjalizującego się w problemach z oprogramowaniem, czy też otrzymujesz porady prawne od prawników, którzy mogą później dołączyć do społeczności? Czy jest inny sposób, w jaki nowo utworzona organizacja open source może zasięgnąć porady w kwestiach prawnych?


title: Kiedy przełączyć się na programowanie mobilne?

text: Jesteśmy zespołem programistów pracujących nad niektórymi aplikacjami na komputery PC. Ale byliśmy także świadkami trendu na rynku w kierunku pisania coraz większej liczby stron mobilnych i aplikacji mobilnych. Czy nadszedł czas, aby programiści przeszli na programowanie mobilne?


title: Projektowanie pojedynczej encji wyszukiwania

text: W prawie każdej aplikacji masz tę encję wyszukiwania, która zapewnia dynamiczne odwołania. Są to takie rzeczy jak typ, kategoria itp. Te encje zawsze będą miały identyfikator, nazwę, opis. Na początku zaprojektowałem więc różne encje dla każdego wyszukiwania. Na przykład typ_edukacji, poziom_wykształcenia, typ_stopnia.... Ale po drugiej myśli zdecydowałem się na encję dla każdego z tych encji. Ale kiedy skończę z projektem i sprawdzę relację, do tej encji będą się odwoływać prawie wszystkie encje w systemie i nie sądzę, żeby było to właściwe. Więc jakie jest twoje zdanie na ten temat? Czy możesz podać mi jasne wady i zalety?


title: Czy diagramy aktywności zawsze kończą się jednym punktem końcowym?

text: Na przykład diagram czynności dla prostego programu: 1. Pobierz dane użytkownika. 2. Jeśli użytkownik istnieje ZRÓB coś, INACZEJ nie rób nic. 3. Koniec. Często widzę diagramy z wieloma punktami końcowymi, ale także z jednym. Czy diagramy aktywności powinny łączyć się w obie strony do jednego stanu końcowego, niezależnie od poprzednich ścieżek?