title: Informatyka a programowanie gier

text: Jestem zainteresowany studiowaniem na uniwersytecie w nadziei, że podniosę programowanie na profesjonalnym poziomie, w szczególności chciałbym zająć się programowaniem gier. Czy bardziej skorzystałbym na studiach na uniwersytecie i uzyskaniu dyplomu na kursie typu „Programowanie gier”, czy też lepszy byłby bardziej ogólny dyplom z informatyki?


title: Jak przechowywać „rozmyte daty” w bazie danych?

text: To problem, na który natknąłem się kilka razy. Wyobraź sobie, że masz rekord, który chcesz zapisać w tabeli bazy danych. Ta tabela ma kolumnę DateTime o nazwie „date_created”. Ten konkretny rekord powstał dawno temu i nie jesteś do końca pewien co do dokładnej daty, ale znasz rok i miesiąc. Inne rekordy, które znasz tylko z roku. Inne rekordy znasz dzień, miesiąc i rok. Nie można użyć pola DateTime, ponieważ „maj 1978” nie jest prawidłową datą. Jeśli podzielisz go na wiele kolumn, utracisz możliwość wykonywania zapytań. Czy ktoś jeszcze w to wpadł, jeśli tak, jak sobie z tym poradziłeś? **Edytuj:** Aby wyjaśnić, jaki system buduję, jest to system śledzący archiwa. Niektóre treści powstały dawno temu, a wszystko, co wiemy, to „Maj 1978”. Mógłbym ją zapisać jako 1 maja 1978, ale tylko z pewnym sposobem zaznaczenia, że ta data jest dokładna tylko do miesiąca. W ten sposób kilka lat później, kiedy odzyskuję to archiwum, nie jestem zdezorientowany, gdy daty się nie zgadzają. Dla moich celów ważne jest odróżnienie „nieznanego dnia w maju 1978” od „1 maja 1978”. Ponadto nie chciałbym przechowywać niewiadomych jako 0, takich jak „0 maja 1978”, ponieważ większość systemów baz danych odrzuci to jako nieprawidłową wartość daty.


title: Używasz MVC ściśle z DAAB?

text: Jestem jedyną osobą w mojej firmie, która jest zaznajomiona z MVC i mają coraz większą presję na modernizację i przejście na MVC dla przyszłych projektów, więc miałem za zadanie stworzyć szablon do wykorzystania jako podstawa do dowolnego szkolenia lub jako baza dla nowe projekty. To jest w porządku i cieszę się, że to robię. Jednak jednym bezwzględnym wymogiem jest używanie Bloku Dostępu do Danych EL. Czy to nie przekreśla celu MVC i używania ORM do prostszego kodu danych? Próbowałem szukać wszędzie w Internecie standardowych praktyk podczas korzystania z MVC z DAAB, ale nie mogę nigdzie znaleźć ani jednego dobrego artykułu, samouczka lub kodu, co prowadzi mnie do przekonania, że nie powinienem tego robić w ten sposób, ale muszę. w tej notatce, czy mogę użyć dostępu do danych EL dla modelu i skonfigurować go tak, aby można go było mocno wpisać i sprawić, by zasadniczo działał trochę jak EF? Myślałem, że mógłbym po prostu stworzyć szablon t4 lub coś, co pomoże wygenerować modele oparte na tabelach DB i dodać tyle operacji CRUD, ile tylko mogę. Nie mam jednak pojęcia, czy to będzie dobry pomysł.


title: Czy wszystkie funkcje rekurencyjne mogą być kodowane za pomocą iteracji?

text: Jakie są zalety rekurencji? Niektóre języki programowania mogą optymalizować rekurencję ogonową, ale ogólnie rzecz biorąc, rekurencja zużywa więcej zasobów niż zwykłe pętle. Czy można mieć iteracyjną wersję jakiejś funkcji rekurencyjnej?


title: Dlaczego miałbyś zdecydować się na pełną kwalifikację pakietu zamiast go importować?

text: W javie, aby wydrukować datę, możemy wykonać jedną z następujących czynności: **W pełni kwalifikowana** public class MyMain { /** * @param args */ public static void main(String[] args) { // TODO Auto- wygenerowana metoda stub System.out.println(new java.util.Date()); } } **Korzystanie z importu** import java.util.*; public class MojaMain { /** * @param args */ public static void main(String[] args) { // TODO Automatycznie wygenerowana metoda skrótu System.out.println(new Date()); } } Jakie są zalety i wady każdego sposobu? Dla mnie korzystanie z importu wydaje się bardziej uporządkowane, jak widać na górze swojej klasy, jakie pakiety są używane.


title: Czy metoda główna powinna składać się tylko z tworzenia obiektów i wywołań metod?

text: Mój przyjaciel powiedział mi, że najlepszą praktyką jest to, że klasa zawierająca metodę `main` powinna nosić nazwę `Main` i zawierać tylko metodę `main`. Również metoda `main` powinna tylko analizować dane wejściowe, tworzyć inne obiekty i wywoływać inne metody. Klasa `Main` i metoda `main` nie powinny robić nic więcej. Zasadniczo to, co on mówi, że klasa zawierająca metodę `main` powinna wyglądać tak: public class Main { public static void main(String[] args) { //parsowanie danych wejściowych //tworzenie innych obiektów //wywoływanie metod } } Czy to jest najlepsze ćwiczyć?


title: Komentarze jednowierszowe dla wielu wciętych wierszy kodu

text: Po wielu latach kodowania, próbowania różnych stylów programowania, usuwania nieczytelnych lub niepraktycznych rzeczy, nadal nie mogę wymyślić jednej rzeczy: jaki jest najlepszy sposób na jednowierszowy komentarz wielu wierszy kodu z wcięciem. 1. setup_punkt kontrolny(); // if (object->looks_suspicious()) // guard->full_body_scan(object); 2. setup_punkt kontrolny(); // if (object->looks_suspicious()) // guard->full_body_scan(object); 3. setup_punkt kontrolny(); // if (object->looks_suspicious()) // guard->full_body_scan(object); Proszę nie sugerować wielowierszowego komentowania, ponieważ czasami chcesz zostawić tę możliwość dla większych bloków, które mogą zawierać mniejsze fragmenty komentarzy.


title: dlaczego monitory transakcji są odrzucane? albo czy oni?

text: http://www.itjobswatch.co.uk/jobs/uk/cics.do http://www.itjobswatch.co.uk/jobs/uk/tuxedo.do Spójrz na zapotrzebowanie na programistów (% ogłoszeń o pracę, które pojawi się słowo kluczowe), pierwszy wykres pod tabelą. Wygląda na to, że popyt na CICS, Tuxedo spadł odpowiednio z 2,5%/1% do prawie zera. Wydaje mi się to dziwne: teraz mamy więcej maszyn połączonych w sieć i z dostępem do Internetu niż kiedykolwiek wcześniej. A większość z nich rozmawia z jakąś bazą danych. Wydawałoby się więc, że wykorzystanie produktów, których twórcy spędzili ostatnie 20-30 lat pracując nad dystrybucją, koordynacją i optymalizacją transakcji, powinno wzrastać. I wygląda na to, że nie. Widzę kilka przyczyn, ale nie potrafię powiedzieć, czy są prawdziwe: 1. zapomnieliśmy, że współbieżność i dystrybucja są naprawdę trudne i źle to wszystko powtarzamy w Javie. 2. Erlang zabił ich wszystkich. 3. Projekty w dzisiejszych czasach zmieniły charakter, ponieważ większość oprogramowania biznesowego została już zbudowana i wszyscy wykonujemy usługi internetowe, używając takich rzeczy jak Node.js, Erlang, Haskell. (Użyłem RabbitMQ, który jest napisany w Erlangu, "ale to był mały wyspecjalizowany projekt poboczny"). 4. Obecnie nacisk kładzie się na BigData, a BigData nie potrzebuje zbyt wiele transakcji (?). Żadne z tych wyjaśnień nie wydaje mi się szczególnie przekonujące, dlatego szukam lepszego. Ktokolwiek?


title: „Zaakceptuj ludzką kondycję” to jedna z wartości szczupłego rozwoju oprogramowania. Czy możesz rozwinąć?

text: Konferencja Lean Software and System Consortium 2011, która odbyła się w zeszłym tygodniu, przedstawiła wizję i wartości szczupłego rozwoju oprogramowania. Oto sześć wartości szczupłego tworzenia oprogramowania sfotografowanych przez jednego z uczestników. Numer 1 to „**zaakceptuj ludzką kondycję**”. Choć wyczuwam w tym stwierdzeniu humanistyczny, a może nawet anty-Taylorystyczny nastrój, chciałbym poprosić ekspertów o wyjaśnienie tej zasady i jej zastosowania w naszej codziennej pracy.


title: Czy to czyni mnie złym programistą, jeśli nie lubię metodyki Agile?

text: Lubię małe iteracje. Lubię testy jednostkowe. Lubię przegląd kodu. To, co mi się nie podoba, to zaczynanie z niewielką ilością dokumentacji lub bez niej. Czy jestem w tym sam? Czy po prostu nie rozumiem procesu? Wszelkie myśli będą mile widziane.


title: Dlaczego ludzie wyłączają JavaScript?

text: Zadałem wczoraj pytanie Czy powinienem zawracać sobie głowę programowaniem z wyłączonym JavaScript?. Myślę, że konsensus jest następujący: Tak, powinienem programować z wyłączonym JavaScript. Teraz chcę tylko zrozumieć, dlaczego użytkownicy wyłączają JS. Wygląda na to, że wielu programistów (chyba ludzie, którzy odpowiedzieli na pytania, to programiści) wyłącza JS. Dlaczego. Dlaczego użytkownicy wyłączają JS? Dla ochrony? Prędkość? albo co?


title: Licencja tylko do użytku akademickiego?

text: Tworzę pakiet oprogramowania i chciałbym udostępnić go (i źródło) do użytku osobistego, akademickiego lub edukacyjnego, ale _nie do użytku komercyjnego_. Czy istnieje taka licencja? Najlepiej byłoby, gdyby było to wzajemne, więc jeśli ktoś opublikuje zmodyfikowaną wersję, będzie musiał przyznać te same prawa. Alternatywnie, czy byłoby możliwe zmodyfikowanie GPLv3 w taki sposób, aby zabraniała komercyjnego wykorzystania i przyznawała prawa tylko użytkownikom niekomercyjnym?


title: Możliwości przetwarzania transakcji offline w kontekście słabej łączności z Internetem

text: Posiadamy podstawowy produkt bankowy opracowany w ASP.NET w C# przy użyciu bazy danych Microsoft SQL Server 2008. Produkt jest hostowany na scentralizowanym serwerze i działa dobrze we wszystkich lokalizacjach (oddziały bankowe), gdzie łączność jest dobra i stabilna. Musimy wdrożyć to rozwiązanie w regionie, w którym łączność jest zawsze problemem. Ponieważ jest to rozwiązanie typu core-banking, nie powinno być żadnych przerw w obsłudze klienta z powodu problemów technicznych (np. łączność). Jak zaprojektować do tego architekturę i upewnić się, że w danym momencie nie ma problemów transakcyjnych, a jednocześnie scentralizowana baza danych zawiera najświeższe dane ze wszystkich oddziałów?


title: Czy prawidłowo podchodzę do nauki języka Java?

text: (Oryginalnie opublikowane na Stackoverflow) Przykro mi, jeśli to pytanie nie jest odpowiednie dla stackoverflow, wiem, że to nie jest pytanie techniczne, ale wydaje mi się, że jest istotne. Zawsze interesowałem się programowaniem, bawiłem się wieloma językami programowania i różnymi silnikami gier, tworząc proste aplikacje i tym podobne. Jawę zajmuję się nieco ponad rok. Ze względu na szkołę robiłem Javę głównie z przerwami. Zrobiłbym to przez około miesiąc, a potem zabrałbym się za 6-8 tygodni... w każdym razie chodzi mi o to, że dość dobrze znam podstawy Javy. To dlatego, że za każdym razem, gdy wskakiwałem z powrotem do javy, zawsze wracałem do początku. Rozumiem, że prawie nic nie wiem. Biorąc to pod uwagę, naprawdę chcę dowiedzieć się więcej o języku i być w nim lepszym. Mam dość wykonywania instrukcji System.out.Print(), czuję, że zrobiłem prawie wszystko, co mogłem z nimi zrobić. Wykonałem również podstawową pracę z GridLayouts i Swingiem. Odkąd skończyła się szkoła, dużo robię na Javie, przynajmniej kilka godzin dziennie. Śledziłem wraz z tymi samouczkami. http://zetcode.com/tutorials/javagamestutorial/ Pierwsze 3 lub więcej samouczków całkowicie rozumiem, ale potem robi się trochę trudniej. Nie jestem tutaj, aby zadawać konkretne pytanie dotyczące kodu. Ale chciałbym poznać opinię doświadczonego programisty Java. Czy podchodzę do tego we właściwy sposób? Jaki jest najlepszy sposób na nauczenie się większości Javy? Czuję, że w samouczkach doszło do punktu, w którym nie przystaję do nich tak, jak na początku. Czy powinienem trzymać się tego, co robię? Próbujesz zapamiętać kod? Czy ktoś mógłby wskazać mi inne miejsce, którego mógłbym się nauczyć? Nigdy nie chodziłem na zajęcia z programowania, będę maturą w liceum.


title: Dlaczego duże strony internetowe używają różnych języków dla backendu i frontendu?

text: Z małych aplikacji MVC rozumiem, że masz frontend, który zajmuje się HTML, JS, jQuery itp., i masz backend, który składa się z twoich kontrolerów i modeli. Jednak kiedy rozmawiam z programistami z dużych firm, często wspominają o warstwie frontendu i warstwie backendu. Czasami więc słyszę, że mają frontend z C# i backend z Javą. Dlaczego jakakolwiek firma miałaby chcieć backendu i frontendu w różnych językach? Czy to pomaga lepiej skalować dużą witrynę? Kiedy ludzie mówią, że ich frontend jest zbudowany w C#, czy oznacza to, że używają frameworka dla frontendu (takiego jak .NET) i dodatkowego frameworka na zapleczu (takiego jak Spring)? A może oznacza to coś zupełnie innego?


title: Czy wysyłanie hasła na adres e-mail użytkownika jest bezpieczne?

text: Jak bezpieczne jest wysyłanie haseł pocztą e-mail do użytkownika, ponieważ poczta e-mail nie jest zabezpieczona protokołem HTTPS. Jaki jest najlepszy sposób na jej zabezpieczenie? Czy powinienem używać szyfrowania?


title: Czy odpowiedź usługi sieci Web powinna używać klasy podstawowej, czy klasy ogólnej?

text: W mojej usłudze sieci web RESTful WCF mam coś takiego jak następujący obiekt odpowiedzi. public class WebResponse<T> { public bool Sukces { get; ustawić; } publiczne dane T { get; ustawić; } ciąg publiczny Komunikat o błędzie { get; ustawić; } } W ten sposób mogę przechwycić wszelkie błędy, które pojawiają się podczas żądania do usługi sieciowej. Oddziela również obiekt danych od obiektu odpowiedzi. Innym sposobem, w jaki można to zrobić, jest użycie takiej klasy bazowej odpowiedzi. public abstract class WebResponseBase { public bool Sukces { get; ustawić; } ciąg publiczny Komunikat o błędzie { get; ustawić; } } public class CarResponse : WebResponseBase { public string Producent { get; ustawić; } ciąg publiczny Make { get; ustawić; } } Osobiście preferuję pierwszą metodę, ponieważ daje mi ona wyraźne oddzielenie danych od statusu odpowiedzi/błędu i pozwala mi łatwo zwracać listy/tablice itp. bez konieczności tworzenia wielu klas. Czy są jakieś korzyści z używania klasy bazowej? Czy są jakieś ograniczenia w używaniu klasy generycznej?


title: Efektywna implementacja "tablicy" typu Int X String -> String w .NET lub ogólnie

text: Ogólne pytanie brzmi: czy istnieje bardziej efektywny sposób implementacji tabeli o strukturze takiej jak `Dictionary<int, Dictionary<string, string>>`? Powodem, dla którego o to pytam, jest to, że wykonałem kilka testów wydajności i nie działa dobrze dla danych z > 5 mln wierszy. Teraz naprawdę nie potrzebuję takiej ilości danych, ale zastanawiałem się, czy istnieje bardziej efektywny sposób. Może również zwiększyć wydajność w przypadku mniejszych tabel z tysiącami wierszy. Na koniec interesuje mnie, co _MOŻNA_ zrobić, aby to ulepszyć. To, o czym pomyślałem, to użyć string[][] i mieć jakąś metodę przekształcania wierszy/kolumn ciągów na liczby. To jednak wymagałoby dość znaczącego przepisania mojej dotychczasowej pracy. Czy jest coś prostszego? Potrzebuję rzędów, aby móc poradzić sobie z lukami. Tło mojego projektu: Mam domową strukturę obiektów reprezentujących stół wraz z kilkoma dodatkowymi funkcjami, których potrzebuję. Mam tabelę o nazwie T, która przechowuje dane (wiersze) w `Dictionary<int, TRow>`. Każdy TRow ma inny `dictionary<string, TCell>`, który reprezentuje dane wiersza, w którym komórki TCell są indeksowane według nazw kolumn. TCells jest w zasadzie opakowaniem wokół prostego łańcucha. Tabela i każdy wiersz ma definicję schematu (kolumna -> {INT, DOUBLE, STRING, BOOL, ...}, która jest parsowana podczas pobierania danych z tabeli za pomocą metod takich jak .getBool( wiersz int, kolumna ciągu ) itp. Każdy obiekt (T,TRow,TCell) ma całkiem sporo metod pomocniczych, których używam, więc nie są one prostym opakowaniem z metodami get.EDYTUJ, ABY ODPOWIEDZIEĆ PYTANIA DODATKOWE:Tabela jest przeznaczona do celów ogólnych.Brak szczególnego skupienia się na czytaniu /tylko zapis.Tabela jest często początkowo ładowana ze zbioru wyników utworzonego przez procedurę składowaną w bazie danych, a następnie tylko odczytywana z - ale nie wyłącznie.Klucz złożony jest ciekawym pomysłem, ale to złamałoby moją strukturę T, TRow, TCell I Słownik INT X STRING -> STRING to tylko uproszczenie, jak napisano w moim ostatnim akapicie, tabela T ma Dictionary< int, TRow> a TRow ma Dictionary< string, string >. Powód, dla którego muszę zachować Table, Podział wierszy i komórek polega na tym, że czasami pracuję bezpośrednio z wierszami, np. jakaś metoda może zwrócić pojedynczy wiersz itp .Proszę o jakieś pomysły? Albo nie ma nic lepszego :/.


Czy definicja programowania strukturalnego uwzględnia tylko programowanie imperatywne? Mam na myśli to, że definicja programowania strukturalnego automatycznie wyklucza programowanie funkcjonalne (w najczęstszym użyciu, przez co rozumiem niekoniecznie programowanie czysto funkcjonalne, ale coś takiego jak Clojure). Programowanie strukturalne, przynajmniej z definicji, które znalazłem, wydaje się naprawdę mówić: „dobre programowanie nie powinno używać goto i powinno być modułowe”. Co niekoniecznie wyklucza programowanie funkcjonalne, podczas gdy większość definicji wydaje się zaczynać od „... jest podzbiorem programowania imperatywnego”. Myślę, że szukam trochę wyjaśnienia. BTW, przeczytałem "Jaka jest różnica między programowaniem imperatywnym, proceduralnym i strukturalnym?" co jest całkiem dobrym opisem historycznym.


title: Najlepsze praktyki w nazewnictwie zasobów systemu Android

text: Istnieje wiele typów zasobów Androida: układy, ciągi, elementy do rysowania i tak dalej. Rozumiem, że czytelność jego nazw jest ważna, ale nie mogę stworzyć tabeli zasad jak najlepiej je nazwać. Czy są jakieś najlepsze praktyki w tym zakresie?


title: Prosty sposób na wdrożenie aplikacji Winform na stronie internetowej

text: Przede wszystkim wiem, że nie ma idealnej odpowiedzi na moje pytanie. Jest to trochę osobiste, ale jestem pewien, że wielu programistów staje przed tym samym dylematem, gdy przechodzą od zwykłych aplikacji desktopowych do aplikacji internetowych typu klient/serwer: jaki jest „najlepszy” język/framework do użycia? Istnieje wiele wspaniałych rozwiązań, z których wszystkie mają mniej więcej te same zalety i funkcje. Tak więc chciałbym uzyskać poradę opartą na moich potrzebach i pochodzeniu. Jestem dość doświadczony z VB i PHP i mam trochę wiedzy o Javascript i C#. Obecnie mam doskonale działającą aplikację C# Wininform, którą chciałbym wdrożyć na mojej stronie internetowej. Aplikacja wykorzystuje kamerę internetową użytkownika do rozpoznawania karty do gry za pomocą percepcyjnego algorytmu mieszającego i wyświetla szczegóły najlepiej dopasowanej karty z bazy danych MySQL. Oto jak chciałabym, aby wersja internetowa działała: * serwer wysyła zestaw rekordów całej bazy danych z dopasowaniami ID/hashów do klienta * klient "skanuje" swoją kartę za pomocą kamery internetowej i tworzy hash * klient wyszukuje dopasowanie między tym hashem a tymi w zestawie rekordów * klient zwraca najlepsze dopasowanie do serwera * serwer wyświetla informacje o karcie z bazy danych Moje cele : * ogranicz (jeśli to możliwe) potrzebę instalacji przez użytkownika 3rd party oprogramowanie (flash, java, activex lub inne wtyczki) * stworzyć rozwiązanie, które dobrze integruje się ze środowiskiem Windows/Apache/PHP * stworzyć rozwiązanie, które jest najlepiej wieloplatformowe * przy użyciu kombinacji języka/frameworku, na której łatwo jest pisz, debuguj i utrzymuj kod Do tej pory przyglądam się Pythonowi w Eclipse lub JavaScript w Visual Studio. Czytałem ciekawe rzeczy o Ruby on rails, ale krzywa uczenia się może być dla mnie trochę stroma. Nie mam nic przeciwko uczeniu się nowego języka i ponownym kodowaniu aplikacji od zera, ale chciałbym w jak największym stopniu wykorzystać umiejętności i kod, które już mam. jakieś pomysły? Dziękuję!


title: Czy c# faktycznie jest językiem wieloplatformowym?

text: Wygląda na to, że C# (i ogólnie platforma .net) staje się dobrą opcją dla aplikacji wielokierunkowych: * oficjalny framework MS .net: pełny rozwój okien, programowanie asp.net, programowanie na telefony Windows itp. * mono i wszystkie jego pochodne: monotouch, monodroid: reszta świata. Te narzędzia to dziś RTM. * Czy to oznacza, że C# staje się dobrym językiem do targetowania na najpopularniejszych platformach: desktop, web i mobile? * Czy nadal lepiej jest używać "natywnego" języka platform docelowych (cel C, Java itp.) * Czy to tylko zasłona dymna i tylko język marketingowy? Proszę zauważyć, że jestem świadomy, że nie będę mógł kopiować/wklejać kodu pomiędzy platformami. Ale jestem pewien, że niższe warstwy aplikacji (modele, biznes itp.) mogą być ponownie użyte, ale wiem, że będę musiał dostosować wyższe warstwy (Gui itp.) do platformy. Moim celem jest bardziej skoncentrowanie się na wymaganych umiejętnościach niż udostępnianie kodu technicznego. [edytuj] **Jestem** programistą C# w firmie, która masowo używa C#. Dlatego mówiłem o c# w planie rozszerzenia zakresu platform docelowych w mojej firmie.


title: znajdź drugi najmniejszy element w Fibonacciego Heap

text: Muszę opisać algorytm, który znajduje drugi najmniejszy element w stercie Fibonacciego za pomocą operacji: Insert, ExtractMin, DecreaseKey i GetMin. Ostatni to algorytm zaimplementowany wcześniej do znajdowania i zwracania najmniejszego elementu sterty. Pomyślałem, że zacznę od wydobycia minimum, przez co jego dzieci zakorzenią się. Mogłem wtedy użyć GetMin, aby znaleźć drugi najmniejszy element. Ale wydaje mi się, że pomijam inne przypadki, ponieważ nie wiem, kiedy używać Insert i DecreaseKey, a sposób sformułowania pytania sugeruje, że powinienem ich potrzebować.


title: Czy powinienem pozwolić mojemu klientowi na samodzielne hostowanie?

text: Dopiero zaczynam jako projektant stron internetowych. Staram się zbudować portfolio na własną stronę internetową. Martwię się o zaprojektowanie strony i przekazanie jej klientowi. Gdy to zrobię, mogę stracić dostęp do witryny. Mogą zmienić dane logowania i nie muszą nimi zarządzać. Jeśli klient zmieni w witrynie coś, co zagraża mojej pracy projektowej, będzie to odzwierciedlać mój biznes. Nazwa mojej firmy będzie widoczna na stronie głównej witryny. Czy to uzasadniona obawa?


title: Jaki będzie lepszy sposób na dostęp do informacji z innego obiektu?

text: Mam obiekt `page`, który ma kolekcje obiektów `Paragraph` i `Image`, a każdy `paragraph` ma tylko `image_id(s)` które są przypisane do akapitu. Wszystkie inne informacje o obrazie są przechowywane w `Page->Image` Teraz z obiektu `paragraph` chcę uzyskać dostęp do informacji `image`, gdzie paragraf ma tylko `image_id`, a wszystkie inne informacje o obrazie znajdują się w `Page-> Obiekt obrazu. Jaki będzie lepszy sposób uzyskania dostępu do tych informacji? Czy powinienem przekazać obiekt `page` w każdym konstruktorze `paragraph`, czy coś innego? Nie mogę też zmienić struktury klasy, ponieważ została napisana przez kogoś innego.


title: Jak przeprowadzasz rozmowę techniczną, kiedy nie możesz się porozumieć z ankieterem?

text: Właśnie miałem wczoraj wieczorem rozmowę techniczną z deweloperem. Podobnie jak wiele wywiadów technicznych, wymaga ode mnie rozwiązania i wdrożenia algorytmu w czasie (1 godzina). Ale kiedy zaczyna się rozmowa kwalifikacyjna, zaczyna od przedstawienia swojego życia i długiego 13-letniego życia zawodowego przez jakieś 15 minut lub więcej (1/6 mojego czasu na rozwiązywanie problemów minęło). Wtedy zauważam, że naprawdę mam problemy ze zrozumieniem jego angielskiego, dlatego każde pytanie lub wyjaśnienia, które powiedział, muszę wielokrotnie prosić go, aby powtarzał i wyjaśniał wiele razy. Okazuje się, że zrezygnował z wyjaśnienia jednego pytania i zadania innego. Na koniec okazuje się, że nie mogłem mieć wystarczająco dużo czasu na implementację algorytmów, nawet miałem koncepcję do zaimplementowania. Próbowałem krótko wyjaśnić, jak powinien wyglądać mój pomysł i implementacje, ale jednocześnie bardzo martwię się, czy naprawdę rozumie moje wyjaśnienie (angielski). Czuję, że nie udało mi się przeprowadzić tego wywiadu, ale nie chcę powtarzać tej sytuacji ponownie. Więc jaki będzie najlepszy sposób, aby skomunikował się ze mną właściwie, żeby nie tracił tyle czasu na powtarzanie tego samego wyjaśnienia? I nie pozwalając mu myśleć, że nie mam pojęcia, jak zaimplementować algorytmy? Poboczne pytanie, jak mogę skrócić jego długie wprowadzenie?


title: C++, ile lat doświadczenia?

text: Od dłuższego czasu programuję w różnych językach, systemach itp. Natknąłem się na stary problem rekrutera, który chce wiedzieć "ile lat doświadczenia" mam w C++. Jestem trochę zbity z tropu, ponieważ przez wiele lat odbijałem się od niego wiele razy. Nie sądzę, że mogę po prostu zsumować miesiące/lata. Postawiłbym się gdzieś w okolicach 3-5 roku życia. Wiem, że to trochę szeroki zakres, ale nie jestem do końca pewien, z nowszymi standardami i bibliotekami, starsze rzeczy prawdopodobnie stają się przestarzałe. Więc chciałem zapytać o twoją opinię. Czego można oczekiwać od programisty C++ z (i) 3 letnim i (ii) 5 letnim doświadczeniem (głównie na systemach Unix/Linux)? Być może, co ważniejsze, jaka byłaby różnica między programistą w wieku 3 lat a programistą 5 lat (i powyżej)? Wiem, że to wszystko jest trochę niejasne, a prawidłowa odpowiedź brzmi: „to zależy”. Ale jeśli ktoś ma dobrą opinię, chciałbym wiedzieć.


title: Hosting współdzielony dla aplikacji PHP

text: Czytałem Essential PHP Security, a rozdział 8 mówi o problemach z hostingiem aplikacji PHP we współdzielonym środowisku hostingowym. Niektóre z wymienionych przez niego problemów to: **\- Odsłonięty kod źródłowy i przeglądanie systemu plików.** > serwer WWW musi być w stanie odczytać kod źródłowy, aby go wykonać. > Ponieważ serwer WWW jest współdzielony, skrypt PHP napisany przez innego programistę > może odczytywać dowolne pliki. Atakujący może również stworzyć skrypt > przeglądający system plików. **\- Ujawnione dane sesji i wstrzykiwanie sesji.** > Domyślnie PHP przechowuje dane sesji w /tmp, do którego mogą zapisywać wszyscy użytkownicy, > więc Apache ma uprawnienia do zapisywania tam danych sesji. Prosty skrypt może > zezwolić innym użytkownikom na odczytywanie, dodawanie, modyfikowanie lub usuwanie sesji. To tak, jakby wszystko było narażone i podatne na ataki, gdybym korzystał z hostingu współdzielonego w ten sposób. Moje pytania: 1. Biorąc pod uwagę, że książka została wydana 8 lat temu, czy problemy te nadal występują, czy też zostały jakoś złagodzone w ciągu ostatnich kilku lat? 2. Dlaczego miałby wybrać hosting współdzielony, jeśli spowoduje to te ogromne obawy dotyczące bezpieczeństwa? 3. Rozumiem, że hosting współdzielony jest tani, ale musi istnieć dla niego bezpieczniejsza alternatywa i tańsza niż hosting dedykowany? 4. W przypadku, gdy klient poprosi mnie o stworzenie aplikacji, która będzie hostowana na współdzielonym hostingu, czy istnieje pełny dowód na stworzenie bezpiecznej aplikacji, czy jest to tylko recepta na katastrofę?


title: Oblicz osiągalność jednego punktu od drugiego

text: Mam tablicę, która przechowuje zestaw dodatnich współrzędnych x w posortowany sposób, powiedzmy „arr={1, 4, 5, 9, 12, 45}” itd. I mam maksymalną odległość „k”, z której mogę przejść jeden punkt do drugiego punktu niech `k=3`. Teraz, mając dwa punkty `x` i `y(arr[x]<arr[y])` muszę określić, czy mogę sięgnąć od `x` do `y`. Będę mógł osiągnąć „y” od „x”, jeśli odległość między każdymi dwoma przeskokami jest mniejsza lub równa „k”. Załóżmy, że `x=1 y=4` wtedy mogę przejść od 1->2 następnie 2->3, ale ponieważ odległość między 3 a 4 jest większa niż 3, nie mogę iść, więc w tym przypadku nie mogę osiągnąć. Ale jeśli `x=1` i `y=2` to mogę osiągnąć. Można to po prostu rozwiązać za pomocą O(n). Stworzyłem pętlę for od `arr[x]` do `arr[y]` i dla każdej pary punktów sprawdzam, czy odległość między nimi jest mniejsza lub równa `k`. Ale chcę lepszego algorytmu. Zastanawiam się nad zrobieniem czegoś takiego jak wyszukiwanie binarne. Czy ktoś może zaproponować dobry algorytm?


title: Jak poprawić wysiłek związany z pisaniem kodu?

text: Kod należy zapisać do pliku, w drodze lub w inny sposób. Chociaż wszyscy programiści powinni starać się pisać nie więcej kodu niż to konieczne, ta „mała” część musi być napisana. Jakie masz wskazówki, jak poprawić wysiłek związany z pisaniem kodu? Wykorzystanie IDE? Różne klawiatury lub układy znaków? Minimalne użycie myszy? Narzędzia do generowania kodu? Co jeszcze możesz wymyślić?


title: Czy wtyczka Java jest nadal aktualna?

text: Kiedy rzuciłem wyzwanie zespołowi programistów Chrome o ich decyzji o domyślnym blokowaniu każdej wersji wtyczki Java (http://code.google.com/p/chromium/issues/detail?id=84001). Odpowiedzieli, że wtyczka Java nie jest już powszechnie używana. Google również oficjalnie to oświadcza: https://www.google.com/support/chrome/bin/answer.py?answer=1247383&hl=pl-PL. Zdaję sobie sprawę, że aplety jako narzędzie do celów projektowych (banery, menu itp.) są przestarzałe i muszę przyznać, że minęło trochę czasu, odkąd opracowałem coś poważnego, który wykorzystywał wtyczkę Java (miałem trochę zabawy z Aplikacje JavaFX i Web Start, które można przeciągać do celów edukacyjnych, ale to prawie wszystko). Mimo to wtyczka Java stanowi ważną część mojego surfowania (jestem smutnym typem dorosłego, który wciąż gra w gry takie jak Runescape. Mój bank używa apletu Java do klawiatury bezpieczeństwa, a kilka stron, które często odwiedzam, używa apletów do rzeczy, takie jak przesyłanie plików i uwierzytelnianie). Moje pytanie brzmi: czy uważacie, że aplikacje internetowe Java po stronie klienta są nadal aktualne? Proszę zignorować aplikacje desktopowe i po stronie serwera... Wszyscy wiemy, jak popularna jest Java (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html). To pytanie dotyczy konkretnie wtyczki Java.


title: Dlaczego tak trudno jest rekrutować na stanowiska związane z kompilatorami?

text: W zeszłym tygodniu kilku kolegów i ja braliśmy udział w targach kariery na trzech dużych uniwersytetach (dwóch tutaj w USA i jeden w Anglii), gdzie próbowaliśmy (bez większych sukcesów) rekrutować na kilka stanowisk kompilatorskich, od stażu po dla naszego zespołu na poziomie podstawowym i wyższym. Ku naszemu zdziwieniu 80% uczniów, z którymi rozmawialiśmy, odpowiedziało gdzieś długą linią „Chcę tworzyć aplikacje Ansroid” na pytanie, czym są zainteresowani robieniem. (A pozostałe 20%? „Aplikacje na iPhone'a”! ) Niektórzy nawet otwarcie stwierdzili, że nie „chcą zbudować kompilatora,…, to nudne”; powiedzieli, a ja zacytowałem. Co zatem takiego jest w aplikacjach mobilnych, które są obecnie tak atrakcyjne dla (młodych?) „programistów”? A tym samym, dlaczego kompilator jest dla nich tak „nudnym” tematem? (Niekoniecznie uważam, że te dwie rzeczy wzajemnie się wykluczają. Z pewnością można zbudować kompilator na telefon komórkowy, ale to nie ma znaczenia) Co możemy zrobić, jeśli w ogóle, aby przyciągnąć więcej talentów, a nawet tylko zainteresowanych kandydatów?


title: Czy dobrze jest mieć interfejs wielu metod, które należą do różnych koncepcji, tylko po to, aby zachować zasadę Liskova?

text: Obecnie studiuję kurs oparty na projektowaniu oprogramowania i dyskutowałem w klasie z moim profesorem i kilkoma kolegami na temat problemu reprezentowanego przez następny scenariusz: **Scenariusz** > _Wyobraź sobie, że mamy aplikację graficzną, która pozwala nam zaplanować wnętrze > projekt naszego przyszłego domu z perspektywy od góry. Jesteśmy w stanie dodać > lub usunąć niektóre elementy jak meble i zmienić ich położenie, ale > oczywiście nie możemy przesuwać ścian domu, ponieważ był już > wybudowany._ **Rozwiązanie 1** Aby rozwiązać ten problem, niektórzy z moich kolegów z klasy zaproponowali rozwiązanie, które można wyrazić za pomocą następującego diagramu UML: ![Diagram UML dla rozwiązania 1](http://i.stack.imgur.com/nV7Ne.jpg) Jak widać, zgodzili się użycie wspólnego interfejsu o nazwie „Drawable”, który reprezentuje obiekty graficzne wyświetlane w interfejsie użytkownika. Ogólna klasa "App" zarządza listą obiektów do rysowania, a każdy z nich ma zestaw metod. Ten interfejs jest implementowany przez różne klasy, takie jak Furniture, Wall lub Window. Rzecz w tym, że meble można przesunąć, ale nie ściany ani okna. Tak więc meble zaimplementowałyby metodę „przenieś” zdefiniowaną w Drawable. W przeciwieństwie do tego, Wall i Window po prostu napiszą to puste. W tym momencie inni koledzy i ja narzekaliśmy na tę decyzję, ponieważ projekt nie wymaga spełnienia ograniczeń (takich jak obiekty ruchome lub nie do rysowania, w zależności od ich charakteru). W ten sposób projekt umożliwi przeniesienie niektórych nowych obiektów, chociaż prawdopodobnie nie powinno. Profesor powiedział jednak, że ten projekt jest dobry, ponieważ jest elastyczny i przejrzysty dla klasy App, ponieważ ta klasa nie wie, jakim rodzajem instancji zarządza. _Przypadek rozszerzony_ Dodatkowo moglibyśmy pomyśleć o przypadku ekstremalnym, w którym dodamy kilka metod do interfejsu Drawable, takich jak „sprzedaj”, „otwórz” i „wypożycz”. Stosując to samo podejście opisane powyżej, otrzymamy interfejs, który może zrobić wszystko, jak Superman. Dlatego uważam, że jest to złe rozwiązanie projektowe, ponieważ mieszamy zachowania, które należą do różnych koncepcji (Movable, Sellable, Open, itd.). Ponadto pozwalamy, aby obiekt Wall mógł zaimplementować metodę „sprzedaj”, co kompletnie nie ma sensu… ale mój profesor nadal upierał się przy swoim punkcie widzenia i nie widział problemu. **Rozwiązanie 2 (na podstawie rozszerzonego przypadku)** Inne osoby zasugerowały, że możemy dodać te interfejsy (Movable, Sellable, Openable), a każdy z nich będzie dziedziczył po interfejsie Drawable. W ten sposób: * Ściana zaimplementowałaby bezpośrednio do rysowania * Meble zaimplementowałyby ruchome i sprzedawane * Okno zaimplementowałoby tylko otwieralne Następny diagram podsumowuje to podejście: ![Diagram UML dla rozwiązania 2](http://i.stack.imgur .com/xvqVi.jpg) [Edycja: Metoda przenoszenia Drawable powinna zostać usunięta, jest to błąd, ponieważ jest teraz umieszczona w interfejsie Movable] **Pytania i wątpliwości** Wreszcie, gdy już zrozumiesz problem, może pomóż mi i odpowiedz na te pytania, proszę? 1. Czy nie łamiemy _Zasady pojedynczej odpowiedzialności_ za pomocą tego super-mega-boga-interfejsu? 2. Czy oba podejścia są zgodne z _zasadą substytucji Liskova_? Myślę, że jest zepsuty w pierwszym przypadku, ponieważ warunki końcowe są zepsute, ponieważ niektóre metody nic nie robią. W każdym razie w drugim podejściu też nie jestem pewien ze względu na drzewo dziedziczenia interfejsów 3. Być może inną alternatywą mogłaby być definicja podstawowych obiektów Drawable (za pomocą metod 'click' i 'draw'). W ten sposób możemy skorzystać z pewnego rodzaju mechanizmu, takiego jak wzorzec Decorator, w celu dynamicznego dodawania zachowań. Ale jak? 4. Jeśli używamy języka bez interfejsów, takich jak JavaScript czy Python, jak możemy poradzić sobie z tym problemem?


title: Jak mogę przygotować się do rozmowy kwalifikacyjnej przez TeamViewer i Skype?

text: Mam duży dylemat, co robić, a co nie... Jutro mam wywiad na TeamViewer i Skype na stanowisko web developera w PHP. Chcą tam przeprowadzić mój wywiad techniczny, więc myślę, że dadzą mi program PHP do napisania. Rzecz w tym, że PHP ma ogromną różnorodność funkcji, więc nie jest możliwe, aby wszystkie funkcje były na uwadze lub na wyciągnięcie ręki: Google jest naprawdę potrzebny. Wiem, jak rozwiązywać problemy, ale może być tak, że nie znam dokładnej składni pytań, które zadają. Co więc powinienem zrobić w tym przypadku? Jak mogę ich przekonać, że wiem, jak to zrobić, ale dokładna składnia nie przychodzi od razu do głowy? Ponadto, jakiego rodzaju pytania mogą zadać? _Coś o mnie, więc być może możesz odpowiednio doradzić_ Jestem młodszym programistą stron internetowych, który ma 14-miesięczne doświadczenie w PHP. Moje umiejętności: PHP, Mysql, Magento, Wordpress, CSS, HTML, Javascript...


title: Algorytm rozpoznawania wzorców macierzy dla przestrzeni 2D

text: Mam obrazek, który opracowuję swoim programem, aby otrzymać listę współrzędnych. Na obrazku przedstawiona jest macierz. W idealnym teście otrzymałbym tylko szesnaście centralnych punktów każdego kwadratu macierzy. Ale w rzeczywistych testach mam kilka punktów hałasu. Chcę użyć algorytmu do ekstrapolacji z listy współrzędnych grupy utworzonej przez 16 współrzędnych, które najlepiej reprezentują macierz. * Przykład znalezionych punktów: ![](http://i.stack.imgur.com/HhriV.png) * Przykład żądanego wyniku: ![](http://i.stack.imgur.com/WfCHq. png) Jak to zrobić? Uwaga: Matryca na obrazie również może być nieco obracana, więc algorytm niezależny od rotacji byłby świetny.


title: Co Rich Hickey miał na myśli, mówiąc: „Cała ta specyfika [interfejsów/klas/typów] zabija twoje ponowne użycie!”

text: W prowokującym do myślenia przemówieniu na konferencji goto „Wartość wartości” po 29 minutach Rich Hickey mówi o narzutach związanych z językiem takim jak Java i stwierdza: „Wszystkie te interfejsy zabijają twoje ponowne użycie”. Co on ma na myśli? Czy to prawda? W poszukiwaniu odpowiedzi natknąłem się na: * Zasada najmniejszej wiedzy, czyli Prawo Demeter, które zachęca do hermetycznych interfejsów API. Wikipedia wymienia również pewne wady. * Imperial Clothing Crisis Kevlina Henneya, który twierdzi, że użycie, a nie ponowne użycie, jest właściwym celem. * Przemówienie Jacka Diedericha „Stop Writing Classes”, które ogólnie sprzeciwia się nadmiernej inżynierii. Najwyraźniej wszystko, co zostało napisane wystarczająco źle, będzie bezużyteczne. Ale w jaki sposób interfejs dobrze napisanego API uniemożliwiłby użycie tego kodu? W całej historii istnieją przykłady tego, że coś stworzonego w jednym celu jest używane częściej do czegoś innego. Ale w świecie oprogramowania, jeśli używasz czegoś do celu, do którego nie było przeznaczone, zwykle się psuje. Szukam jednego dobrego przykładu dobrego interfejsu zapobiegającego legalnemu, ale niezamierzonemu użyciu jakiegoś kodu. Czy to istnieje? Nie potrafię tego sobie wyobrazić.


title: Mam problem ze zrozumieniem sformułowań w tych ćwiczeniach

text: Ćwiczenie 1-20. Napisz detab programu, który zastępuje tabulatory w wejściu odpowiednią liczbą spacji w celu spacji do następnego tabulatora. Załóżmy stały zestaw tabulatorów, powiedzmy co n kolumn. Czy n powinna być zmienną czy symbolicznym parametrem? Ćwiczenie 1-21. Napisz program entab, który zamienia ciągi znaków odstępów na minimalną liczbę znaków tabulacji i odstępów, aby uzyskać takie same odstępy. Użyj tych samych tabulatorów, co w przypadku detab. Kiedy albo tabulator, czy pojedyncze puste miejsce wystarczy do osiągnięcia tabulatora, co powinno być preferowane? czy mógłbyś je dla mnie sparafrazować. Dziękuję


title: Krotka: tople czy tuh-ple?

text: Słyszałem, że to kolejny spór Europa z Ameryką, tak jak z „routerem”. Innym razem słyszę, że tuh-ple jest specyficzne dla Pythona (i prawdopodobnie także dla niektórych innych języków), podczas gdy w matematyce i CS jest "zbyt dużo" na wszystkich kontynentach. Co o tym wiesz?


title: Czy generatory testów jednostkowych pomogły Ci podczas pracy ze starszym kodem?

text: Patrzę na małą (~ 70kLOC, w tym wygenerowaną) bazę kodu C# (.NET 4.0, niektóre Silverlight), która ma bardzo niski zasięg testów. Sam kod działa pod tym względem, że przeszedł testy akceptacji użytkownika, ale jest kruchy iw niektórych obszarach niezbyt dobrze uwzględniony. Chciałbym dodać solidne pokrycie testami jednostkowymi wokół starszego kodu przy użyciu zwykłych podejrzanych (NMock, NUnit, StatLight dla bitów Silverlight). Moje normalne podejście to rozpoczęcie pracy nad projektem, testowanie jednostkowe i refaktoryzacja, aż będę zadowolony ze stanu kodu. Robiłem to wiele razy w przeszłości i działało to dobrze. Jednak tym razem myślę o użyciu generatora testów (w szczególności Pex) do stworzenia frameworka testowego, a następnie ręcznym jego uzupełnieniu. Moje pytanie brzmi: czy w przeszłości korzystałeś z generatorów testów jednostkowych, rozpoczynając pracę nad starszym kodem, a jeśli tak, czy poleciłbyś je? Obawiam się, że wygenerowane testy będą pomijać semantyczne niuanse bazy kodu, co doprowadzi do przerażającej sytuacji posiadania testów ze względu na metrykę pokrycia, a nie testów, które jasno wyrażają zamierzone zachowanie w kodzie.


title: Najlepsza metodologia rozwoju dla jednej osoby?

text: Dużo czasu spędzam pracując nad projektami, w których jestem jedynym developerem, kierownikiem projektów, projektantem, osobą QT (Tak, wiem... Źle!), a czasami jestem nawet klientem. Próbowałem prawie wszystkiego w planowaniu projektów i zarządzaniu sobą, od zwykłego siedzenia i pracy w stylu freestyle, aż do ukończenia projektu, jak długo to trwa, do jednoosobowej wersji scrum, w której odbyłem spotkanie z samym sobą na temat postępów. -człowiek spalić wykres każdego ranka (nie żartuję). Dla tych z Was, którzy spędzają dużo czasu pracując samotnie, jaki jest najlepszy sposób na zorganizowanie się, zarządzanie dużymi (dla jednej osoby) projektami i utrzymanie jak najwyższej produktywności?


title: Metodologie projektowania i rozwoju dla jednego dewelopera

text: W mojej pracy zazwyczaj programiści tutaj pracują osobno, możemy udostępniać projekty, ale często robimy to tylko wtedy, gdy ktoś inny nad tym nie pracuje (dla porównania, jesteśmy firmą konsultingową. Więc ktoś może pracować nad projektem A przez jeden miesiąc, potem trzy miesiące spóźnienia, ja też mogę). Jakich metodologii możemy użyć, aby poprawić jakość tworzonego kodu, gdy zazwyczaj w projekcie jest tylko jeden programista (maksymalnie trzech)?


title: Jak zarządzać całym projektem, gdy jesteś jedynym zasobem

text: Frustrujące jest zajmowanie się całym projektem/zarządzanie projektem, gdy jesteś jedynym programistą/programistą/programistą w Projekcie. Jak możemy obsłużyć projekt? Czy są jakieś kroki, które należy wykonać, aby ukończyć projekt w określonym czasie?


title: Metodologia rozwoju dla jednego web developera?

text: > **Możliwe powielenie:** > Metodologie projektowania i rozwoju dla jednego programisty Jestem programistą stron internetowych, który głównie pracuje ze stosem LAMP, jeśli chodzi o moje własne projekty. Przez większość czasu po prostu zaczynam kodować w projekcie, naprawiam błędy i dodawaję funkcje w miarę postępów. Często będę się starał wykorzystać istniejące rozwiązanie takie jak Wordpress czy Drupal. Teraz, gdy myślę o stworzeniu własnej aplikacji internetowej z biznesem jako grupą docelową, czuję **potrzebę odpowiedniej analizy i projektowania**. Coś lekkiego dla **projektu jednoosobowego** i wciąż wystarczająco solidnego, aby sprostać wymaganiom, interfejsom użytkownika, bezpieczeństwu itp. Gdybyś mógł **polecić metodologie i literaturę** byłbym wdzięczny.


title: Zaszyfruj i odszyfruj hasło do określonej aplikacji

text: Posiadam podstawową aplikację internetową, w której użytkownicy mogą się logować i edytować swój profil. W profilu mogą podać nazwę użytkownika i hasło do innej aplikacji. Chciałbym wziąć to hasło i je zaszyfrować. Później, gdy chcę połączyć się z inną aplikacją, muszę odszyfrować hasło. Czy istnieje wspólny wzorzec dla tego scenariusza? A może masz jakąś inną radę? Na wszelki wypadek chcę połączyć się z JIRA bez konieczności podawania przez użytkownika hasła przy każdym żądaniu / logowaniu do strony. Dzięki, Sven **Aktualizacja** Aby było jaśniej, mam aplikację internetową, w której użytkownicy mogą się zarejestrować/logować/itp., używa biblioteki uwierzytelniania/autoryzacji (znajomego) i wszystko działa dobrze. Jednak z mojej aplikacji internetowej chcę, aby użytkownicy łączyli się z instancją jira, którą mogą wybrać i gdzie muszą podać kombinację nazwy użytkownika/pw, której nie mogę zahaszować, ponieważ muszę wysłać je bez zaszyfrowania do instancji JIRA. To, o czym teraz myślę, to wyświetlenie użytkownikowi okna dialogowego logowania, gdy tylko zechce zażądać swojej instancji JIRA. Podaje tam swoją kombinację nazwy użytkownika/hasła dla JIRA, a ja wysyłam żądanie REST do JIRA po stronie klienta, więc żaden użytkownik/hasło nie jest wysyłany do mojego serwera. Otrzymuję wtedy identyfikator sesji, który mogę wykorzystać do dalszych żądań. Co myślisz o takim podejściu?


title: Testy jednostkowe, fabryki i prawo Demeter

text: Oto jak działa mój kod. Mam obiekt, który reprezentuje bieżący stan czegoś podobnego do zamówienia koszyka na zakupy, przechowywanego w interfejsie API zakupów innej firmy. W moim kodzie kontrolera chcę mieć możliwość wywołania: myOrder.updateQuantity(2); Aby faktycznie wysłać wiadomość do osoby trzeciej, osoba trzecia musi również znać kilka rzeczy, które są specyficzne dla TEGO zamówienia, takie jak `orderID` i `loginID`, które nie zmienią się w trakcie życia aplikacji . Więc kiedy pierwotnie tworzę `myOrder`, wstrzykuję `MessageFactory`, która zna `loginID`. Następnie, gdy wywoływana jest „updateQuantity”, „Zamówienie” jest przekazywane wraz z „orderID”. Kod sterujący jest łatwy do napisania. Inny wątek obsługuje wywołanie zwrotne i aktualizuje `Order`, jeśli jego zmiana się powiodła, lub informuje `Order`, że jego zmiana nie powiodła się, jeśli tak się nie stało. Problem polega na testowaniu. Ponieważ obiekt `Order` zależy od `MessageFactory` i potrzebuje `MessageFactory`, aby zwrócić rzeczywiste `Message` (które na przykład wywołuje `.setOrderID()`), teraz muszę ustawić bardzo skomplikowane „MessageFactory” kpi. Dodatkowo nie chcę zabijać żadnych wróżek, ponieważ „Za każdym razem, gdy Mock zwraca Mocka, wróżka umiera”. Jak mogę rozwiązać ten problem, zachowując równie prosty kod kontrolera? Przeczytałem to pytanie: http://stackoverflow.com/questions/791940/law-of-demeter-on-factory-pattern-and-dependency-injection, ale to nie pomogło, ponieważ nie mówiło o problemie z testowaniem . Kilka rozwiązań, o których myślałem: 1. W jakiś sposób zrefaktoryzuj kod, aby nie wymagał, aby metoda fabryki zwracała rzeczywiste obiekty. Może to mniej fabryka, a bardziej „MessageSender”? 2. Utwórz implementację tylko testową `MessageFactory` i wstrzyknij ją. * * * Kod jest dość skomplikowany, oto moja próba sscce: public class Order implementuje UpdateHandler { private final MessageFactory factory; prywatna końcowa warstwa MessageLayer; prywatne dane OrderData; // Pakiet prywatnego konstruktora, powinien być wywoływany tylko przez obiekt OrderBuilder. Order(OrderBuilder builder, OrderData inicjał) { this.factory = builder.getFactory(); this.layer = budowniczy.getLayer(); this.data = oryginał; } // Wiele metod takich jak ta public String getItemID() { return data.getItemID(); } // Zwraca true, jeśli wiadomość została pomyślnie umieszczona w wychodzącej kolejce sieciowej. Jednak nie blokuje się do odbioru. public boolean updateQuantity(int newQuantity) { Wiadomość nowaWiadomość = factory.createOrderModification(messageInfo); // *** TO JEST KLUCZOWA LINIA *** // zgłasza NPE, jeśli fabryka jest fałszywą. nowaWiadomość.setQuantity(nowaIlość); return layer.send(nowaWiadomość); } // z interfejsu UpdateHandler // zostaje wywołany asynchronicznie @Override public handleUpdate(OrderUpdate update) { messageInfo.handleUpdate(update); } }


title: Doświadczenie zawodowe zamiast edukacji?

text: Chciałem nazwać ten temat „Edukacja kontra doświadczenie”, ale ten temat już istnieje. Przeczytałem tę dyskusję i chociaż to, o co chciałbym zapytać, jest związane z tym tematem, pytanie jest zupełnie inne. Zacząłem uczyć się programowania około 12 lat temu. Od 4 lat pracuję jako programista w outsourcingu oprogramowania (z siedzibą w Rosji). Myślę o opuszczeniu Rosji i przeprowadzce w inne miejsce, takie jak Australia (w zasadzie to nie ma znaczenia). Mam kilka przykładów ilustrujących ogólne umiejętności i historie sukcesu, ale wciąż jest różnica między tymi wszystkimi ludźmi a moim przypadkiem. Mam spore doświadczenie techniczne - podstawowe obszary to C++ i .NET. Uczestniczyłem już w 7 projektach opartych na różnych technologiach/platformach (Windows, Linux, Android, Qt, .NET, etc). Wierzę więc, że _jestem zdolny_ do pracy jako programista. Po prostu weźmy to - "z technicznego punktu widzenia ten gość jest absolutnie w porządku". Jedynym problemem jest to, że nie mam wykształcenia. Oto pytanie: **Czy w większości przypadków mogę czytać słowa takie jak „BS w CS, równoważne lub lepsze” jako „N lat doświadczenia”?** **Aktualizacja**: czy jest sens zdobywanie certyfikatów jak MCSD (dla .NET)? Wiem, że na to pytanie jest osobny temat, ale nadal pytam o przypadek, gdy nie ma wykształcenia, a są certyfikaty i doświadczenie.


title: Wielowarstwowe wykorzystanie obiektów JAXB w aplikacjach korporacyjnych

text: Zostałem poproszony o refaktoryzację i utrzymanie aplikacji korporacyjnej. Zwykle jestem przyzwyczajony do używania wzorca projektowego MVC. Tym razem jednak chciałbym wszystko rozdzielić na warstwy (architektura wielowarstwowa). Coś w stylu (Microsoft Application Architecture Guide, 2nd Edition - October 2009): ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/Pqqq0.png) Moje źródła danych to ogólne pliki XML . Pliki te są odczytywane i zapisywane za pomocą JAXB, a to znajduje się w warstwie danych. Za każdym razem, gdy ładuję określony XML, „dostawca” użyje JAXB do skonstruowania drzewa obiektów reprezentujących strukturę XML. Te obiekty/informacje muszą być wykorzystywane w warstwie biznesowej, usługowej i prezentacyjnej. W każdej warstwie informacje muszą być traktowane inaczej, tj. warstwa biznesowa wymusza reguły biznesowe na obiektach/informacjach, podczas gdy warstwa prezentacji potrzebuje dodatkowych informacji interfejsu użytkownika, aby wszystko było widoczne dla użytkownika. Poszukuję twoich wskazówek / doświadczeń, jeśli chodzi o korzystanie ze źródeł danych w wielowarstwowej aplikacji. Czy powinienem: 1. Utworzyć jakiś rodzaj mapowania, tak aby nowe drzewo obiektów było budowane w każdej warstwie? 2. Pracować z wykorzystaniem linii agregacji, tak aby moje źródła danych mogły być ozdobione dodatkową funkcjonalnością/informacją wewnątrz obiektu, który znajduje się w innej warstwie? 3. Czy obiekty JAXB są "grube", z interfejsem, który obsługuje wszystkie moje potrzeby, które pochodzą ze wszystkich innych warstw? Chciałbym usłyszeć twoje myśli!


title: Jak nazywa się ta kategoria zmiennych (NOWA, STARA itd.) w wyzwalaczach?

text: Muszę przeprowadzić bardzo szczegółowe wyszukiwanie w Internecie, ale aby to zrobić, muszę wiedzieć, jaka jest techniczna nazwa kategorii/typu zmiennych, takich jak NEW, OLD, USER (może być więcej), do których można uzyskać dostęp z poziomu wyzwalacz w RDBMS bez konieczności ich deklarowania. Pytanie, które chcę zadać, brzmi: „czy `<RDBMS>` obsługuje zmienne `<xxxx>` w wyzwalaczach? ale nie wiem, co umieścić w symbolu zastępczym `<xxxx>`. Na przykład, zmienne takie jak `:var` w zapytaniu nazywane są _powiązanymi zmiennymi_.


title: Projektowanie i wersjonowanie API przy użyciu EJB

text: Mam API oparte na EJB (tj. Istnieją zdefiniowane interfejsy zdalne), z którego korzysta większość klientów. Wraz ze wzrostem bazy klientów pojawiają się problemy z aktualizacjami interfejsu API i zmuszanie klientów do aktualizacji do najnowszej wersji i definicji interfejsu. Chciałbym ewentualnie przyjrzeć się wdrożeniu kilku wersji API na raz (tj. mieć wdrożonych wiele plików EAR z różnymi wersjami API), aby nie zmuszać klientów do częstej aktualizacji. Nie przejmuję się faktycznym wdrożeniem tego, ale zamiast tego szukam przemyśleń i doświadczeń, które inni mają na temat używania EJB jako klienta API. * Jak wspierasz aktualizacje wersji, czy klienci muszą aktualizować? * Czy ktoś uruchamia wiele wersji w środowisku produkcyjnym? Czy są wady pro? * Jakieś inne doświadczenia lub przemyślenia na temat tego podejścia i posiadania interfejsu API skoncentrowanego na EJB?


title: Po co zbierać śmieci, jeśli istnieją inteligentne wskaźniki

text: W dzisiejszych czasach zbieranych jest tak wiele języków. Jest nawet dostępny dla C++ przez strony trzecie. Ale C++ ma RAII i inteligentne wskaźniki. Jaki jest więc sens korzystania ze zbierania śmieci? Czy robi coś ekstra? A w innych językach, takich jak C#, jeśli wszystkie referencje są traktowane jako inteligentne wskaźniki (pomijając RAII), przez specyfikację i implementację, czy nadal będą potrzebne garbage collectory? Jeśli nie, to dlaczego tak nie jest?


title: Czy istnieje potrzeba wyrzucania elementów bezużytecznych w języku opartym na stosie?

text: Jaka jest potrzeba wyrzucania elementów bezużytecznych (GC) w języku opartym na stosie? Czy w języku takim jak Forth lub RPL (w kalkulatorach HP) istnieje potrzeba zbierania śmieci? Pomyślałbym, że skoro wyjście jest zdejmowane ze stosu, nie byłoby żadnej potrzeby. Czy czegoś mi brakuje?


title: Dlaczego nie zwolnić pamięci, gdy tylko jej licznik referencyjny osiągnie zero?

text: Wiele języków, takich jak Java i C#, ma odśmiecacze pamięci, które zwalniają pamięć, gdy ta pamięć nie ma już żadnego odniesienia. Jednak nie zwalniają go natychmiast po tym, jak licznik odwołań osiągnie zero, ale zamiast tego co jakiś czas sprawdzają całą pamięć, aby zobaczyć, czy ta pamięć ma jakieś odwołanie i usuwa je, jeśli tak nie jest. Jaka jest korzyść z takiego postępowania? Wadą takiego działania jest to, że tracisz destruktor, ponieważ nie możesz zagwarantować, kiedy zostanie wywołany. Wyobrażam sobie, że jest to zrobione w ten sposób ze względu na wydajność, ale czy było jakieś badanie, które wykazało, że odśmiecacz, który działa w ten sposób, ma lepszą wydajność niż `std::shared_ptr` znaleziony w C++?


title: Wskazówki dotyczące projektowania dla tego scenariusza w C#?

text: Muszę stworzyć system walidacji (nie chcę używać adnotacji danych ani żadnego innego systemu) dla mojej aplikacji C# przy użyciu .Net Compact Framework, gdzie mam `object`, który zawiera wiele innych obiektów. Wiele właściwości jest od siebie zależnych, co oznacza, że mają pewne zależności. Mogę napisać prostą klasę `validator`, która przechodzi przez wszystkie właściwości i sprawdza je jedna po drugiej z dużą ilością `if and else`, ale chcę zaprojektować coś dynamicznego, np. Powinienem być w stanie określić listę zależności od właściwości i określić metodę, która powinna być wywołana podczas walidacji. Mam na myśli, że niektóre wytyczne projektowe byłyby mile widziane? Przykład ( tylko do celów demonstracyjnych ): public enum Category { Toyota, Mercedes, Tata, Maruti } class MyBigClass { public Category Category { get; ustawić; } public double LowerPrice { get; ustawić; } public double UpperPrice { get; ustawić; } public SomeOtherObject InnyObject { get; ustawić; } public List<ciąg> Validate() { List<ciąg> listErrors = new List<ciąg>(); ParameterInfo pInfo = null; switch (Category) { case Category.Toyota: pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Toyota); przerwanie; case Kategoria.Mercedes: pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Mercedes); przerwanie; case Category.Tata: pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Tata); przerwanie; case Category.Maruti: pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Maruti); przerwanie; domyślnie: przerwa; } if (NiższaCena < pInfo.Min || NiższaCena >= pInfo.Max) { listErrors.Add("NiższaCena"); } if (UpperPrice > pInfo.Max || UpperPrice <= pInfo.Min) { listErrors.Add("UpperPrice"); } return listErrors; } } public enum PTYPE { RATING, Category_Tata, Category_Toyota, Category_Mercedes, Category_Maruti } public class ParameterInfo { public PTYPE Type { get; ustawić; } public int Min { get; ustawić; } public int Max { get; ustawić; } public int Domyślnie { get; ustawić; } } public class ParameterStorage { private static Dictionary<PTYPE, ParameterInfo> _storage = new Dictionary<PTYPE, ParameterInfo>(); static ParameterStorage() { _storage.Add(PTYPE.Category_Maruti, new ParameterInfo { Type = PTYPE.Category_Maruti, Min = 50000, Max = 200000 }); _storage.Add(PTYPE.Category_Mercedes, nowe ParameterInfo { Type = PTYPE.Category_Mercedes, Min = 50000, Max = 800000 }); _storage.Add(PTYPE.Category_Toyota, new ParameterInfo { Type = PTYPE.Category_Toyota, Min = 50000, Max = 700000 }); _storage.Add(PTYPE.Category_Tata, new ParameterInfo { Type = PTYPE.Category_Tata, Min = 50000, Max = 500000 }); } public static ParameterInfo GetParameterInfo (typ PTYPE) { ParameterInfo pInfo = null; _storage.TryGetValue(typ, out pInfo); zwróć pInfo; } } W powyższym przykładzie mam `MyBigObject`, który zawiera pewne właściwości i kilka innych obiektów oraz mam klasę `storage`, która zachowuje wszystkie ograniczenia właściwości, które będą wymagane do walidacji właściwości. Jak opisano w powyższym przykładzie, muszę pobrać `ParameterInfo` dla każdej właściwości, a następnie porównać, szukam jakiegoś automatycznego/dynamicznego sposobu robienia tego samego.


title: Dlaczego zwykle (zawsze?) wykrzykuje się sekcję dotyczącą wyłączenia gwarancji?

text: Na przykład szablony udostępnione na stronie Open Source Initiative dla 3-klauzulowej licencji BSD i licencji MIT zawierają wyłączenie odpowiedzialności gwarancyjnej w całości, chociaż reszta licencji jest napisana normalnymi wielkimi literami. Czy jest jakiś prawdziwy powód? A może to tylko tradycja, że utrudnia się czytanie zrzeczenia się gwarancji?


title: Wybór bazy danych dla frameworka z wywołaniami asynchronicznymi i synchronicznymi

text: Buduję framework, który będzie działał jako uniwersalny potok astronomiczny i zanim zajdę zbyt daleko w rozwój, miałem nadzieję, że spełnię moje potrzeby przez was wszystkich, aby zobaczyć, czy są jakieś optymalizacje lub pułapki, których mi brakuje. To długa sprawa, więc dziękuję każdemu, kto poświęci czas, aby to przejrzeć. Moje główne potrzeby są następujące (w kolejności): 1. Wieloplatformowy i łatwy w instalacji bez wielu zależności. Większość astronomów, z którymi pracuję, jest bardzo dobra w rozumieniu fizyki i astronomii, ale mają słabsze umiejętności programowania i ze względu na ograniczenia czasowe raczej nie przyjmą nowego rozwiązania w celu zmniejszenia ich danych, chyba że jest lekkie i łatwe do zainstalowania w wybranym przez nich systemie operacyjnym . Jeśli coś wydaje się skomplikowane w instalacji lub konfiguracji, prawdopodobnie będą szukać czegoś innego lub będą nadal korzystać z oprogramowania, którego obecnie używają. Lubię też używać Pythona, ponieważ używa go coraz więcej osób w społeczności astro. 2. Centralnie zlokalizowany na serwerze. Obecnie większość rozwiązań open source do redukcji danych znajduje się na maszynie użytkownika. Oznacza to, że każdy użytkownik w grupie musi pobrać te same dane z serwera, marnując miejsce na dysku i czas (często rozmiary plików mogą wynosić O (100 Mb) lub więcej). Oznacza to również, że muszą instalować i konfigurować różne programy napisane przez różne osoby, a pełne skonfigurowanie jednej maszyny może zająć tygodnie… do następnej aktualizacji oprogramowania, gdy coś się zepsuje i procedura musi zostać uruchomiona od nowa. Więc chcę użyć rozwiązania internetowego, w którym wszystkie obrazy będą znajdować się na serwerze, który wykonuje większość przetwarzania, a moja aplikacja jest w zasadzie tylko interfejsem użytkownika w przeglądarce internetowej, aby wchodzić w interakcje z całą nieprzyjemnością, jaką jest polecenie astronomii open source oprogramowanie linii. 3. Możliwość uruchamiania zarówno krótkich, jak i długich funkcji wykonawczych. Na przykład mam przeglądarkę, która konwertuje pasujący obraz na kilka kafelków png i wysyła je do klienta w celu wyświetlenia na płótnie. Należy to zrobić jak najszybciej. Inne zadania będą uruchamiać procedury, takie jak fotometria lub redukcja danych, które mogą zająć godzinę lub dłużej, w zależności od zadania i zestawu danych. Dlatego ważne jest, aby niektóre procedury działały asynchronicznie (np. budowanie i ładowanie obrazów), podczas gdy inne zadania są ustawiane w kolejce (np. znajdowanie wszystkich jasnych i izolowanych gwiazd na danym obrazie). 4. Struktura modułowa. Planuję zbudować podstawowy framework UI w pythonie, który może być łatwo rozszerzany przez użytkowników. Umożliwi to społeczności udostępnianie większej ilości kodu i instalowanie tylko elementów potrzebnych do badań indywidualnych lub grupowych. Funkcje zasadniczo stają się stronami internetowymi z przeglądarką obrazów, instrukcjami i interfejsem dla parametrów, aby zminimalizować czas potrzebny nowym studentom na naukę obsługi oprogramowania. 5. Mała grupa użytkowników. Jeśli z serwera korzysta jednocześnie 10 osób, to zwykle jest to dużo. Ale jeśli to możliwe, byłoby miło mieć coś, co łatwo się skaluje, aby większe projekty mogły dostosować to do swoich potrzeb. 6. Przetwarzanie na wielu rdzeniach. Chociaż nie jest to konieczne, nasz serwer grup ma więcej procesorów niż członkowie grupy. Byłoby więc miło, gdyby każdy użytkownik mógł się zalogować i mieć własny rdzeń do wykonywania swoich zadań bez ingerencji w innych użytkowników. Zacząłem więc rozwijać serwer tornado w Pythonie z rozwiązaniem mongodb na serwerze. Klienci łączą się z serwerem przez gniazdo sieciowe i wysyłają zadania do przetworzenia. Serwer zadań następnie uruchamia procedurę określoną przez klienta i wysyła wynik do klienta lub wysyła łącze, jeśli obraz lub duży plik danych jest gotowy do pobrania. Baza danych jest opcjonalna, ale przydatna (jest to część, którą teraz wdrażam). Zazwyczaj pliki graficzne, z którymi mamy do czynienia, zawierają nagłówek zawierający około 100 słów kluczowych. Tak więc po pobraniu nowego zestawu obrazów użytkownik może załadować nagłówki do bazy danych (może to być setki plików). Z wielu powodów użytkownik może chcieć przeszukać pliki pod kątem jednego ze stu słów kluczowych, a nie tylko kilku kluczowych indeksów. Kiedy zrzucam dane nagłówka do obiektu cpickle, jest to ponad 100 MB i ładowanie zajmuje około minuty. Mam nadzieję, że mongodb (lub jakaś inna baza danych z interfejsem Pythona) jest szybsza i pozwoli wielu użytkownikom na jednoczesny dostęp do danych, ale nauczyłem się, że bazy danych mogą być bardzo różne, a wydajność może się znacznie różnić w zależności od potrzeb . Dodatkową funkcją bazy danych będzie śledzenie kont użytkowników i katalogów obrazów, które mogą oglądać (na przykład współpracownik z innej uczelni może miećdostęp do zbioru danych zebranych razem podczas gdy inne zbiory danych sątylko do użytku wewnętrznego ). Jedną z rzeczy, o których myślałem, jest napisanie ogólnego interfejsu db api. Ponieważ większość wyszukiwań będzie dość prostymi funkcjami, mogą po prostu wywołać procedurę getFiles, która pozwala im wprowadzić listy kryteriów wyboru, a następnie użytkownik musi po prostu dodać poprawną składnię dla swojej konkretnej bazy danych w funkcji get. Być może jest to przesada, ale jedną z głównych rzeczy, z którymi próbuję walczyć, jest tendencja w astronomii do używania przestarzałego kodu i technologii, ponieważ nikt nie chce poświęcać czasu na ich aktualizację. Mam nadzieję, że czyniąc to tak elastycznym, jak to tylko możliwe, można go łatwo zmienić, gdy dostępne będą nowe narzędzia (takie jak lepiej dopasowany serwer sieciowy, baza danych lub nawet częściej używane języki programowania, pamiętając, że wielu moich współpracowników nadal używa fortranu 77 kod napisany zanim się urodziłem). Rozważałem również uruchomienie wielu serwerów zadań, jeden do zadań, do których trzeba mieć szybki dostęp, a drugi do zadań o długim czasie działania. Ale byłoby miło mieć rozwiązanie jednoserwerowe. Do tej pory poświęciłem około miesiąca na budowanie frameworka i jeśli nie ma bardzo dobrego powodu do zmiany serwerów aplikacji internetowych, chciałbym pozostać przy Tornado. Jest lekki, łatwy w użyciu i wydaje się, że spełnia wszystkie moje potrzeby. Właśnie zacząłem przyglądać się bazom danych, więc jestem o wiele bardziej elastyczny i otwarty na inne opcje. Dziękuję każdemu, kto przeczytał lub przejrzał większość tego, każda rada jest bardzo ceniona.


title: Lepszy i najczystszy sposób na powiązanie ICommand z RelayCommand

text: Czytając różne kody źródłowe, widzę, że istnieją różne sposoby powiązania ICommand z RelayCommand : * Z konstruktora MyAwesomeViewModel() { this._fooCommand = new RelayCommand((x) => Bar(x)) } * Bezpośrednio z właściwość polecenia private ICommand _fooCommand ; public ICommand SearchCommand { get { return _fooCommand ?? (_fooCommand = nowy RelayCommand()); } } Który sposób jest lepszy z Twojego punktu widzenia?


title: Jak zarządzać pamięcią w interfejsie C dla implementacji C++ biorąc pod uwagę c++11?

text: Mam bibliotekę zaimplementowaną w C++, która ma interfejs C. Ten interfejs C jest, pod każdym względem, jedynym sposobem korzystania z tej biblioteki. C++11 wydaje się zniechęcać do używania surowych wskaźników, ale ani shared_ptr, ani unique_ptr nie są w tym przypadku odpowiednie. Z tego, co rozumiem, intrusive_ptr jest opcją, ale nie jestem pewien, jak różni się to od utrzymywania własnego licznika ref (jestem nowy w C++) i obawiam się przedzierania się do boosta (jestem nowy w C ++). Jak mam obsługiwać zarządzanie pamięcią w C++11 i nowszych? Podaję specyfikację tylko po to, aby jasno powiedzieć, że chcę korzystać z funkcji najnowszej specyfikacji i nie mam potrzeby utrzymywania zgodności ze starszymi specyfikacjami.


title: Testowanie jednostkowe z problemem optymalizacji

text: Załóżmy, że tworzę algorytm, który identyfikuje temat obrazu. Może to być wszystko, czego komputer nie radzi sobie tak dobrze, ale nie oczekuję za każdym razem prawidłowej odpowiedzi - 80% jest w porządku. Załóżmy dalej, że dokładność kroków pośrednich była również nieco rozmyta. Czy istnieje sposób na włączenie testów jednostkowych? Opcja, która natychmiast przychodzi na myśl, to dodanie 1 do wyniku i za każdym razem, gdy „test” przejdzie, zwiększaj wynik. Kiedy to się skończy, podziel przez sumę i przetestuj „zaliczenia/testy > 0,8”, ale wydaje się to niełatwe. EDYCJA: Dziękuję wszystkim za miłe słowa i dobrze uzasadnione odpowiedzi. Mój konkretny problem, choć niewyraźny, nie ma nic wspólnego ze zdjęciami, a obecnie osiągam około 80% wyników. Dla mnie krótkoterminową wartością w schemacie testowym byłaby wiedza, czy małe korekty byłyby bardziej korzystne globalnie, czy katastrofalne. Wartość testów długoterminowych powinna być oczywista.


title: Modele Widoki i Kontrolery pracy

text: Po pierwsze, wiem, że jest wiele odpowiedzi na temat MVC, ale potrzebuję bardziej szczegółowej odpowiedzi opartej na moim prawdopodobnie złym zrozumieniu MVC. Przeczytałem już tę bardzo dobrą odpowiedź (Wyjaśnij kontroler widoku modelu), ale nadal potrzebuję wyjaśnienia. Muszę zrozumieć, czy zrozumiałem, jak działa MVC, ponieważ używam go w pewnego rodzaju frameworku MVC, który rozwijam. * Mam widoki, które w tej chwili są tylko „głupimi” szablonami * Modelami, które są „rzeczami”, które pobierają dane z bazy danych (lub innych źródeł) i przekształcają je w tablice przekazywane do widoków. * Kontrolery, które są w większości skryptami javascript ajax i obserwatorami dla przycisków i innych zdarzeń użytkownika oraz skryptów PHP, które są wywoływane przez skrypty Ajax, gdy potrzebuję wykonać operacje po stronie serwera, takie jak aktualizacje SQL, wstawienia itp. Więc moje „rozumienie MVC” sprawia, że moja aplikacja działa w ten sposób: otwieram indeks, który ładuje **viewsloader** (model), ten ładuje zawartość wywołując **contentsloader** (model), który wywołuje inny skrypt w zależności od widoku użytkownika żądanie. Następnie, gdy wszystkie dane są ładowane do jednej tablicy, **viewsloader** (model) używa ich do renderowania żądanego widoku i przekazuje go użytkownikowi. Teraz użytkownik może kliknąć jakiś przycisk (na przykład przycisk „wyświetl kontakty”) i pod maską mój **contactslistener** (kontroler) wywołuje **contactsloader** (model), aby załadować listę kontaktów, tablicę dostarczoną przez **contactsloader** (model) przeszedł przez **contactslistener** (kontroler), który wstrzykuje go do widoku. * * * Myślę, że mam poważne problemy z modelem MVC, wygląda na to, że **kontrolery** robią zbyt różne rzeczy. Prawdopodobnie powinienem umieścić obserwatorów/słuchaczy w części **widoki** i użyć **kontrolerów** tylko do załadowania zawartości dostarczonej przez **modele**. * Czy **modele** są przeznaczone tylko do pobierania i organizowania danych (na przykład pobierania z bazy danych i umieszczania ich w tablicy, organizując je z odpowiednią strukturą)? * Czy **kontrolery** mają obsługiwać zdarzenia użytkownika, czy też powinienem używać do tego celu **widoków**? Czy mam ich używać do wysyłania zapytań do **modeli** i wstrzykiwania odpowiedzi do **widoków**? * Czy **widoki** to tylko głupie szablony, czy też powinienem umieścić tam jakąś logikę biznesową, taką jak odbiorniki zdarzeń? Zgodnie z tym, co przeczytałem, powinienem umieścić tutaj całe skrypty po stronie interfejsu i umieścić tylko skrypty po stronie (klienta/serwera) w kontrolerach. Ale w tym przypadku nie mam pojęcia, co powinien zrobić kontroler...


title: Wielopoziomowe tabele stronicowania

text: Odnosząc się do obrazu tutaj: ![http://en.wikipedia.org/wiki/File:X86_Paging_4K.svg](http://i.stack.imgur.com/B5cyA.png) Z http://en. wikipedia.org/wiki/File:X86_Paging_4K.svg Czy ktoś mógłby mi coś wyjaśnić? Nie rozumiem dokładnie, jak to działa. Jak rozumiem, „katalog” strony zawiera encję, która zasadniczo wskazuje na początek „tablicy stron”. Jednak z pewnością wszystkie encje w „katalogu” strony zawierałyby dokładnie tę samą wartość? Czy to oznacza, że mamy 1x „katalog”, ale N-stronicowe „tabele” (na tym samym poziomie w wielopoziomowej hierarchii stron)?Jeśli jest N-stronicowych „tabel” i jednej strony „katalog”, rozumiem, dlaczego PD wskazałby jeden z PT N. Jeśli nie, to jestem naprawdę zdezorientowany.


title: Zdezorientowany w modelu danych NoSql

text: Mam aplikację internetową, która używa `MongoDB` jako podstawowej bazy danych. To pierwszy projekt, który robię z bazą danych NoSql, próbuję stworzyć model aplikacji, ale jestem zdezorientowany. Wiem, że NoSql nie są znormalizowane i normalne jest replikowanie danych bez sprzężeń (które nie są obsługiwane), ale myślę teraz o następującym scenariuszu: mam klasę `User` zawierającą adres e-mail i użytkownik może ją zmienić w Strona profilowa. Ten adres e-mail jest wyświetlany na kilku stronach w różnych środowiskach i myślę, że właściwym wyborem jest osadzenie tej właściwości w kilku dokumentach klasy (np. subskrypcja produktu, faktura, koszyk, ... ). Co się stanie, jeśli użytkownik zmieni swój adres e-mail? Czy muszę wyzwalać wiele aktualizacji, aby zmienić każdą kolekcję, każdy dokument zawiera tę właściwość?


title: Cykl życia kontroli WPF i nawigacja po kontenerach, aby ustawić fokus

text: Chciałem zrozumieć cykl życia kontrolki w WPF. Pozwolę sobie wyjaśnić mój scenariusz: mam złożony ekran zawierający różne kontrolki kontenerów hostujące formularze. Powiedzmy, że mój ekran ma 3 elementy akordeonu. W pierwszym elemencie Accordion mam TabControl, a ten TabControl ma 4 TabItems. Każdy TabItem ma różne formularze zawierające pary etykieta-wartość, takie jak pola wyboru, pola kombi, pola tekstowe, RadWatermarkTextBoxes itp. Teraz użytkownik wprowadza błąd w jednym z pól tekstowych obecnych w AccordionItem#1 --> TabControl#1 --> TabItem #1 --> TextBox#1 (na przykład), a następnie przełącza się na TabItem#2 w TabControl#1. Teraz, gdy użytkownik przełącza się na TabItem#2, czy TextBox#1 umiera? Czy jest ponownie tworzony po rozwinięciu TabItem#1? Co dokładnie się dzieje, gdy kontener jest zwinięty i jak mogę ustawić fokus na element, którego już nie ma w widoku? Pozwólcie, że wyjaśnię to bardziej szczegółowo... Załóżmy teraz, że użytkownik wprowadził różne błędy w różnych formach TabItems. i wyszedł z AccordionItem#1 i wszedł do AccordionItem#2. Istnieje wiele błędów (użytkownik o tym wie i chciałby je później poprawić, przechodząc do nich). Po zakończeniu całej formy wypełniając wszystkie akordeony. Zaczyna przeglądać błędy przed zapisaniem. Użytkownik musi nawigować i aby to zrobić, mamy ikonę i kliknięcie tej ikony przeniesie nas do następnego błędnego pola, co oznacza, że muszę automatycznie otworzyć AccordionItem#1 --> TabControl#1 --> TabItem #1 --> TextBox#1 i ustaw fokus na tę kontrolkę, aby użytkownik mógł rozpocząć jej edycję. Gdy użytkownik zakończy poprawianie błędu w tym polu, ponownie naciśnie ikonę i muszę automatycznie otworzyć na przykład AccordionItem#2 --> TabControl#2 --> TabItem#3 --> TextBox#4. Wszystko to zostało wcześniej zwinięte, tak jak poprzednio w AccordionItem#1?! Więc chciałem zrozumieć, czy coś takiego jest możliwe, czy nie? Zastanawiałem się, jaki wzór pomoże nam osiągnąć taką funkcjonalność. Kiedy znajdę błąd. Czy mogę przechowywać referencję do tego elementu (używając jego identyfikatora GUID - tj. wartości x:Name) i kiedy użytkownik kliknie kolejny błąd, wywołać na nim zdarzenie, które będzie propagować w górę drzewa wizualnego, pozwalając karcie nadrzędnej obsłużyć go, przekazując dalej i dalej, aż osiągnę najwyższy poziom, a następnie przekażę kolejne wydarzenie wzdłuż linii, aby każdy z tych rodziców mógł następnie rozszerzyć się, wejść w pole widzenia i ostatecznie skupić się na błędnej kontroli? Czy coś takiego jest możliwe? Jest to ciekawy scenariusz i prawdopodobnie wielu programistów mogło napotkać taki problem podczas projektowania i tworzenia dużych aplikacji.


title: Wskazówki i rekomendacje dotyczące rozmowy telefonicznej

text: Jakiś czas temu zadałem to pytanie, mam bardzo fajne wyniki, ale teraz mam podobną sytuację, ale szukam porad i chcę wiedzieć, czy myślisz, że można powiedzieć, czy chcesz programistę tylko z wywiadem telefonicznym . Powiedzmy, że musisz przeprowadzić rozmowę kwalifikacyjną z kandydatem, który nie znajduje się w Twoim kraju, więc w przypadku, gdy chcesz go zatrudnić, musisz dostarczyć pakiet relokacyjny, poczekaj, aż uzyska on całe pozwolenie na pracę w porządku i wszystkie te rzeczy, więc musisz się upewnić, że ta osoba jest tego warta. Załóżmy, że kandydat ubiega się o stanowisko młodszego programisty jako programista C#/ASP.NET w małej/średniej firmie programistycznej. * Czy możesz powiedzieć podczas rozmowy telefonicznej, czy chcesz kandydata? * Jakieś rekomendacje dla kandydata, aby zaimponować ankieterowi?


title: Kariera w PeopleSoft

text: Mam 3 letnie doświadczenie w pisaniu aplikacji w Javie. Robię teraz mój Mistrz. W zeszłym roku zacząłem pracować z systemami PeopleSoft dla mojej uczelni. Od teraz uważam to za swoją ścieżkę kariery. Próbuję określić jakie byłyby za to plusy i minusy.


title: Jakieś zalecenia dotyczące zarządzania projektami dochodzeniowymi?

text: Pracuję nad śledztwem w dziedzinie NLP. Ponieważ inżynieria oprogramowania i dokumentacja oprogramowania nie są głównymi problemami w całym moim dochodzeniu, postanowiłem zrobić to za pomocą XP. Moje pytanie brzmi, czy możesz polecić: * Jakiekolwiek narzędzie, którego używałeś do zarządzania projektami XP * Wszelkie zalecenia/linki dotyczące zarządzania projektami badawczymi Jestem bardzo stronniczy w stosunku do XP, ponieważ używałem go wcześniej, ale jeśli ktoś ma lepszą metodologię możesz również opublikować


title: Czy ekspansja nowych technologii powoduje odczuwalny niedobór umiejętności?

text: Programowanie systemów i tworzenie aplikacji desktopowych to dobrze ugruntowana dziedzina. W ostatnich latach rozwój sieci i urządzeń mobilnych wykazał szybki rozwój. Jako inżynier oprogramowania rozumiem, że _programowanie to programowanie_ , a C++, Javascript i API Androida to narzędzia, z którymi poradzi sobie każdy godny uwagi inżynier. Niestety istnieją rekruterzy, menedżerowie i firmy, które nie rozumieją, że umiejętności niekoniecznie są powiązane z narzędziami. Ponadto niektóre firmy po prostu nie są zainteresowane zapewnieniem czasu potrzebnego na rozwój, gdy zatrudniają inżyniera z niewielkim bezpośrednim doświadczeniem z oprogramowaniem używanym przez ich istniejący zespół programistów. Czy to połączenie rosnącego zapotrzebowania na aplikacje zbudowane przy użyciu niedawno powstałych narzędzi/platform oraz zestawienie doświadczenia w zakresie _programowania_ z doświadczeniem w zakresie _narzędzi_ powoduje (choć prawdopodobnie niepoprawny) postrzegany niedobór umiejętności przydatnych w nowych technologiach? Ujmując to inaczej, biorąc pod uwagę dwóch podobnie utalentowanych inżynierów, czy ten, który zajmuje się tworzeniem aplikacji w C++, jest mniej ceniony na rynku niż ten, który ma na swoim koncie kilka aplikacji internetowych?


title: Dynamiczne tworzenie kontrolek w kodzie lub ViewModel?

text: W tej chwili pracuję nad migracją aplikacji, którą stworzyłem w całości przy użyciu kodu z tyłu do MVVM i miałem pytanie, gdzie mam dynamicznie tworzyć kontrolki. Zasadniczo mam usługę sieciową, która zwraca {#} elementów. Dla każdego elementu zostanie utworzony przycisk i element zostanie przypisany do jego kontekstu danych. Teraz do tej pory wiem, że powinienem ustawić Command na ViewModel, a także właściwość Command. Wiem też, że powinienem wywołać te elementy w mojej usłudze sieciowej wewnątrz modelu widoku (lub modelu, w tej chwili nie ma to znaczenia dla pytania). Wątpliwe jest, gdzie tworzyć przyciski. Nie podobał mi się pomysł tworzenia przycisków w moim ViewModelu, ponieważ był on związany z Widokiem. Czy to jest poprawne, czy powinienem tworzyć je wewnątrz ViewModel, a następnie jak przekazać je z powrotem do widoku za pośrednictwem wiadomości?


title: Strategie usuwania register_globals z pliku

text: Mam plik (a raczej listę około 100 plików) w repozytorium mojej witryny, który nadal wymaga użycia register_globals i innych nieprzyjemnych rzeczy (takich jak niestandardowe raportowanie błędów itp.), ponieważ kod jest tak zły, rzuca powiadomienia i jest 100% proceduralny z kilkoma podprogramami. W tym roku chcemy przejść na PHP 5.4 (i ostatecznie 5.5), ale nie możemy tego zrobić, dopóki nie przeniesiemy tych plików, wyczyścimy je itp. Średnia długość pliku to około 1000 wierszy. Wyczyściłem już kilka nisko wiszących owoców, jednak praca zajęła prawie cały dzień dla 2 300-500 pilników wierszowych. Jestem tutaj w tarapatach (giggity). W każdym razie, czy ktoś inny zajmował się tym w przeszłości? Czy istnieją jakieś strategie poza śledzeniem wstecz w kodzie? Większość narzędzi do analizy statycznej nie patrzy na kod poza funkcjami - czy są takie, które będą patrzeć na kod proceduralny i pomóc znaleźć przynajmniej niektóre problemy?


title: Operator łączenia właściwości dla C#

text: Operator łączenia wartości null w c# umożliwia skrócenie kodu, jeśli (_mywidget == null) return new Widget(); w przeciwnym razie zwróć _mojwidget; Do: return _mojwidget ?? nowy widżet(); Ciągle odkrywam, że użytecznym operatorem, który chciałbym mieć w C#, byłby taki, który umożliwiałby zwrócenie właściwości obiektu lub innej wartości, jeśli obiekt ma wartość null. Więc chciałbym zastąpić if (_mywidget == null) return 5; w przeciwnym razie zwróć _mojwidget.Length; Z: return _mywidget.Length ??! 5; Nie mogę oprzeć się wrażeniu, że musi być jakiś powód, dla którego ten operator nie istnieje. Czy to zapach kodu? Czy istnieje lepszy sposób na napisanie tego? (Jestem świadomy wzorca zerowego obiektu, ale wydaje się, że użycie go do zastąpienia tych czterech wierszy kodu jest przesadą).


title: Wiele plików źródłowych a biblioteki dla jednego projektu

text: Piszę dużo oprogramowania naukowego i początkowo programowałem za pomocą F77. Około 10 lat temu przeniosłem się do C++, aby zająć się moim podstawowym programowaniem, ale łapię się na nawykach F77. Jedyną rzeczą, do której nie mogę się przyzwyczaić, jest korzystanie z biblioteki. Żeby było jasne, rozumiem, dlaczego ktoś miałby chcieć go używać, ale w przypadku większości kodu, który piszę, nikt poza użytkownikiem końcowym i opiekunami nigdy nie będzie używał procedur, które piszę, więc kwestionuję przydatność dla mnie. Dobrze, więc biblioteki są dobrym miejscem do przechowywania kodu wielokrotnego użytku, który jest łatwy do naśladowania i utrzymania. Ale czy oddzielne pliki źródłowe nie rozwiązały już tego problemu w mojej sytuacji? Jakie korzyści odniosę umieszczając moje pliki źródłowe w bibliotece? Rozumiem oszczędność rozmiaru pliku wykonywalnego dzięki bibliotekom współdzielonym, ale czy to wszystko jest takie ważne? Mam wiele ogólnych procedur matematycznych, które można wyodrębnić do biblioteki współdzielonej, ale czy powinienem? Większość z nich jest wywoływana tylko raz przez jeden punkt w moim kodzie i zwykle tylko przez jeden projekt, więc czy coś zyskam? Czy żadne oszczędności pamięci nie zniknęły w momencie rozwiązania symbolu i załadowania kodu? Dziękuję.


title: Organizowanie projektów w SVN

text: Jestem całkiem nowy w SVN i chciałbym usłyszeć o tym, jak inni ludzie organizowaliby projekty w SVN. Mamy projekty, które mają różne typy plików źródłowych: C#, SQL i Matlab. Oprócz tego typu plików mamy raporty plików Excela i Worda, których nie zamierzamy umieszczać w SVN. Powiedzmy, że mamy katalog projektów: Projects\ Projects\Project1 Projects\Project2 ... Teraz dla repozytorium SVN, czy ma sens kategoryzowanie rzeczy według typu pliku źródłowego (C#, SQL, Matlab), a następnie projektu: SVN\C# \Project1 SVN\C#\Project2 SVN\SQL\Project1 SVN\SQL\Project2 SVN\Matlab\Project1 SVN\Matlab\Project2 \Project1\SQL SVN\Project1\Matlab SVN\Project2\C# SVN\Project2\SQL SVN\Project2\Matlab A może jest na to lepszy sposób? Ponadto, jak najlepiej wskazać w folderach projektów (nie SVN), że projekt zawiera pliki zapisane w SVN? Na przykład, gdybym wszedł do folderu projektu dla Projektu1 (Projects\Project1) i zobaczył tylko raporty Excela i Worda, jaki byłby najlepszy sposób na wskazanie, że są inne pliki wpisane do repozytorium SVN? Ponadto, co wszyscy myślą o umieszczaniu pobranych plików SVN na dyskach współdzielonych? Na przykład załóżmy, że Projects\Project1 zawiera następujące pliki: Report1.doc Script.sql (Jest to pobrany plik SVN w folderze Projects, który jest współdzielonym dyskiem sieciowym) W tej sytuacji bardzo łatwo byłoby zobacz, kiedy w projekcie są używane pliki SVN, ALE posiadanie wyewidencjonowanego pliku SVN na dysku współdzielonym znacznie utrudniłoby współpracę. Czy to robią inni?


title: Czy wykonywanie zapytań na pary klucz-wartość jest wydajne w porównaniu z obiektami o dwóch właściwościach?

text: Pracuję nad usługą internetową i zwracam JSON. Jednak zwracam `List<KeyValuePair<string, int>>`, ponieważ to wszystko, z czym mam do czynienia (właściwość => wartość) Teraz czasami sam będę wywoływał te funkcje, aby zagregować wyniki, więc kończę z czymś takim jak List<KeyValuePair<string, int>> myList = resultList.where(o => o.Key =="StringKEY"); a czasami List<KeyValuePair<string, int>> myList = resultList.sum(o => o.Key =="StringKEY"); Moje pytanie brzmi, czy bardziej wydajne byłoby wykonanie następujących czynności (klasa niestandardowa a słownik): List<MyObject> myObj = resultObjList.where(o => o.Property1 == "stringProperty") i tak dalej. Czy jest jakaś korzyść z używania obiektów niestandardowych? Nigdy nie będę musiał dodawać właściwości, aw tym przypadku mogę powiedzieć, że nigdy nie będzie potrzeby dodawania dodatkowych właściwości.


title: Czy mini-projekty B+R to dobre zajęcie dla stażystów?

text: Zamierzam wkrótce zatrudnić kilku stażystów do naszego działu oprogramowania (samochodowe systemy informacyjno-rozrywkowe) i projektuję program stażowy. Główne działanie produkcyjne "menu" jakie dla nich planuję składa się z: * Testów weryfikacyjnych * Pisania testów jednostkowych (zautomatyzowanych, z frameworkiem zgodnym z xUnit [kilka języków w naszych projektach]) * Dokumentowania * Kodu * Aktualizacji wiki * Aktualizacji diagramów & dokumentacja projektu * Pomoc przy biletach o niskim priorytecie (nadzorowane/mentorowane) * Wyłapywanie i czyszczenie ostrzeżeń kompilatora/czasu działania * Refaktoryzacja/czyszczenie kodu wbrew naszym standardom kodowania Ale mam też taki pomysł, że dobrze by było, gdyby wykonywali małe projekty badawczo-rozwojowe przetestować ich talent i sprawić, by się dobrze bawili. Te mini-projekty to: * Eksperymentalne implementacje i optymalizacje * Implementacje dowodu koncepcji dla nowych technologii * Małe artykuły (~2-5 stron) zawierające formalne badania dotyczące poprzednich dwóch punktów * Aplikacje (z puli miniprojektów) Tego rodzaju projektów byłyby z góry określone i bardzo konkretne, chociaż nowe pomysły samych stażystów byłyby mile widziane. Nawet jeśli projekt jest zbyt duży lub został porzucony, pomysł polegałby również na przygotowaniu gruntu, aby mógł zostać ponownie przyjęty przez innego stażystę lub zespół stażystów. Chociaż uważam, że jest to dobre w koncepcji, nie wiem, czy mogłoby to być dobre w praktyce, ponieważ oczywiście zmniejszyłoby to ich produktywność w „prawdziwej pracy” (pracy z natychmiastową wartością dla firmy), ale myślę, że może to pomóc zaprosić na pokład bardzo błyskotliwych ludzi i sprawić, by chcieli zostać w przyszłości (co, jak sądzę, jest ostatecznym celem każdego programu stażowego). Moje pytanie brzmi, czy te działania są zbyt otwarte lub trudne do wykonania dla przeciętnego stażysty i czy R&D jest efektywnym wykorzystaniem czasu stażystów, czy też bardziej sensowne jest przydzielanie pracy projektowej stażystom.


title: Niezależne projekty jako student, aby popisać się umiejętnościami

text: Jestem niedoświadczonym studentem informatyki (poznałem struktury danych i algorytmy za pośrednictwem różnych zasobów internetowych) i mam nadzieję, że dostanę pracę jako programista jakiś czas po wykonaniu kilku niezależnych projektów. Moje pytanie brzmi, jak wybrać projekty, nad którymi będę pracować? Rozglądałem się po stackoverflow - ludzie zwykle mówią, aby wybrać to, co cię interesuje, ale nie mam wystarczającego doświadczenia, aby nawet wiedzieć, co konkretnie mnie interesuje, a co ważniejsze, nie wiem jakie są niektóre typowe typy projektów dla początkujących. Zasadniczo jestem na granicy między pracą na kursie (i projektami związanymi z tymi zajęciami) a prawdziwym programowaniem i nie do końca wiem, jak zacząć. Jeśli ktoś z was ma jakieś pomysły, bardzo bym to docenił.


title: Kosztorysowanie oprogramowania

text: Widziałem na moim miejscu pracy (Uniwersytecie) większość studentów, którzy szacowali koszty oprogramowania swojej pracy dyplomowej za pomocą COCOMO. Domyślam się, że ten sposób szacowania kosztów jest nieco stary (daty COCOMO z 1981 r.), stąd moje pytanie: Jak szacujesz koszty w swoim oprogramowaniu? Widziałem takie rzeczy jak: Koszt = ( HoursOfWork + EstimatedIddle ) * HourlyRate To nie jest to, czego chcę, szukam odpowiednio (naukowo) zdefiniowanego modelu kosztów **EDYTUJ** Znalazłem kilka powiązanych pytań na SO: * Jakie są niektóre metody i modele szacowania kosztów oprogramowania? * Jak szacujesz koszt opracowania wymagań oprogramowania?


title: Dlaczego obiekt „Zamówienie” powinien mieć właściwość „Status”?

text: Zawsze widzę standardowe klasy Order zaimplementowane z właściwością „Status”, ale nie czuję się z tym komfortowo. Czy status nie jest właściwością procesu realizacji, a nie samego zamówienia? A co z zamówieniami, które mogą podlegać różnym procesom realizacji?


title: Komunikujesz się z komponentów niższego poziomu do GUI?

text: Jaki jest zalecany sposób komunikacji komponentu/modułu oprogramowania niższego poziomu z GUI? Używam C++. Mam klasę warstwy usług, która w przypadku wystąpienia pewnych warunków musi powiadomić użytkownika, ale nadal kontynuować przetwarzanie. W przypadku nieodwracalnego błędu rozumiem, że mogę użyć wyjątków, aby przejść do GUI, ale co z prostym komunikatem, który należy przekazać użytkownikowi, gdy komponent niższego poziomu nadal wykonuje się? **AKTUALIZACJA** Tylko w celu wyjaśnienia warstwy usługowej (aka logiki biznesowej, warstwy obliczeniowej itp.) nie „wiem” o GUI ani nie chcę tego.


title: Wytyczne dotyczące korzystania z biblioteki/ram

text: W głębi duszy jestem programistą strukturalnym, informatycznym (na studiach musiałem dużo programować w C, C++, a nawet COBOL (!)) i odkrywam coraz większy konflikt z rdzeniem podstawy, które opracowałem na studiach CS, w przeciwieństwie do współczesnego świata tworzenia stron internetowych, w którym jestem obecnie zanurzony. Jednym z tych konfliktów, który mam, jest miejsce bibliotek/frameworków w tworzeniu stron internetowych. Odkrywałem i eksperymentowałem z kilkoma bibliotekami/frameworkami do tworzenia aplikacji internetowych, które robiłem. Niektóre, z których korzystałem i/lub z którymi eksperymentowałem, to jQuery, jQueryUi, TinyMCE, CodeIgniter, Struts, Spring i GWT. Obawiam się, że zbyt intensywnie korzystam z tych bibliotek/frameworków z powodu szybko zmieniającej się natury technologii internetowej. Wydaje się, że co minutę dostępna jest jakaś nowa biblioteka/framework do wykorzystania w tworzeniu stron internetowych, niezależnie od tego, czy jest to nowa platforma, czy ulepszenie istniejącej technologii. To naprawdę ociera się o świat akademicki, w którym się znajdowałem, ponieważ na ogół spędzaliśmy cały semestr na nauce języka/koncepcji z oczekiwaniem, że później będziemy skutecznie wykorzystywać tę wiedzę w miejscu pracy. Obawiam się, że brak dobrego zrozumienia biblioteki/szkieletu doprowadzi mnie do ślepej ścieżki, w której będę miał więcej problemów niż ten, który zamierzałem rozwiązać na początku. Przepraszam za wędrówkę, ale zastanawiam się, czy ktoś jeszcze doświadczył takiego strachu? Zastanawiam się również, jakie mogą być ogólne wytyczne dotyczące wdrażania bibliotek/frameworków do aplikacji sieci Web. tj. Czy powinien istnieć limit liczby bibliotek/frameworków używanych podczas tworzenia aplikacji internetowej? Czy programista powinien poświęcić tydzień (lub 2 lub 3...) naprawdę na zapoznanie się z biblioteką/frameworkiem przed próbą zaimplementowania go w swojej aplikacji internetowej? Docelowo szukam odpowiedzi w kontekście bibliotek/frameworków, które (luźno) zawierają wszystko, co jest zaimplementowane w aplikacji internetowej poza podstawową technologią (Java, JSP, PHP, HTML, CSS i JavaScript to podstawowe technologie, z których osobiście korzystam).


title: Czy powinniśmy sprawdzić w projekcie instalacyjnym programu Visual Studio?

text: Z tego, co rozumiem, idealnym sposobem na przygotowanie kompilacji przy użyciu programu Visual Studio jest użycie jednej maszyny do kompilacji. Oznacza to, że podczas gdy programiści przechodzą przez proces rozwoju przy użyciu odpowiedniej maszyny, kompilacja nie jest przygotowywana z żadnej z tych maszyn, a zamiast niej używany jest komputer do budowania. Pod tym warunkiem konieczne jest zaewidencjonowanie (przy użyciu TFS jako przykładu tutaj) projektu instalacyjnego. Nie ma żadnej kontroli wersji w tym konkretnym projekcie, ponieważ wszelkie wymagane zmiany zostałyby wykonane w samej maszynie kompilacji i nie ma to żadnego znaczenia dla innych.


title: Wskaźniki w C vs Brak wskaźników w PHP

text: Oba języki mają tę samą składnię. Dlaczego C ma dziwny znak `*` oznaczający wskaźniki (który jest rodzajem adresu pamięci zawartości zmiennej?), skoro PHP go nie ma i możesz robić w PHP prawie te same rzeczy, które możesz zrobić w C, bez wskaźników? Wydaje mi się, że kompilator PHP obsługuje to wewnętrznie, dlaczego C nie robi tego samego? Czy to nie dodaje niepotrzebnej złożoności w C? Na przykład nie rozumiem ich :)


title: Aplikacja dla dużych przedsiębiorstw - klienci chcą używać zduplikowanych adresów e-mail?

text: Chciałbym poznać opinie ludzi, reakcje na klientów i rozwiązania techniczne (jeśli dotyczy) na temat aplikacji korporacyjnej, w której klient chce używać zduplikowanych adresów e-mail? Aby wyjaśnić, kiedy mówię zduplikowane adresy e-mail, mam na myśli ten sam system kliencki, mający wielu użytkowników, którzy mają ten sam adres e-mail. A więc nie tylko przy użyciu ogólnych adresów e-mail, ale także przy użyciu adresu e-mail innego użytkownika. np. Bob Jenkins: bjenkins@myorg.com James Jeffery: bjenkins@myorg.com **Kontekst** Aby nadać temu dodatkowy kontekst, w sektorze e-learningu powszechne jest, że chociaż wszyscy pracownicy organizacji muszą ukończyć e-learning - mogą nie mieć własnego adresu e-mail, dlatego decydują się na korzystanie z adresu e-mail menedżera. Choć wbrew dobrym praktykom w miejscach publicznych... jest to wymóg, który nieustannie stosujemy, gdy organizacja jest podzielona między personel biurowy i być może np. personel w magazynie. **Tam, gdzie leży problem** Panie Stek, słuszna uwaga, problem leży w resetowaniu hasła i być może w sytuacjach, w których można wysłać częściowo osobiste informacje (nie są wystarczająco poufne, aby martwić się o niepewność poczty e-mail). Być może przypomnienia o konkretnych działaniach systemu, które byłyby mylące dla niezamierzonej strony, aby zobaczyć (jeśli być może błędnie odczytali zamierzonego adresata e-maila) **Możliwe rozwiązania** * System znający różnicę między „dla uwagi” a skierowaniem do osoba wysyła e-maile, włączając to w treści. * Korzystanie z alternatywnej komunikacji, takiej jak SMS * Po prostu nie wysyłanie e-maili do osób, które nie są zamierzonym odbiorcą. * Zapewnienie sobie usługi e-mail (nieopłacalne dla korporacyjnego działu IT) Myśli?


title: wersjonowanie schematu danych w pamięci wewnętrznej Androida

text: Używam pamięci wewnętrznej systemu Android do przechowywania danych dla mojej aplikacji i próbuję znaleźć dobry sposób na obsługę odczytu danych ze starszego schematu. Załóżmy na przykład, że zserializowałem i napisałem kilka wystąpień klasy Data do pliku public class Data{ private String text; dane publiczne(tekst){ this.text = tekst; } }, a później odczytałem te skrócone dane z powrotem i rzutowałem na (Data). Ale potem powiedz, że zmieniam dane, aby wyglądały jak ta klasa publiczna Data{ private String name; public Data(name){ this.name = nazwa; } } teraz, gdy właściwość ma inną nazwę, po odczytaniu danych zapisanych w oryginalnym schemacie nie będzie łatwo rzutować na nowy typ. Jakie są rozwiązania dotyczące wersji danych, aby można było odczytać stare dane i przesłać je do nowego typu?


title: Pisanie parsera CSS w C#. Jak myślisz, jaka jest najlepsza strategia?

text: Jestem w trakcie pisania parsera CSS w C#. Jestem na dobrej drodze, ale zdarzają mi się też chwile, w których zastanawiam się, czy obieram najlepsze podejście. Rozważałem następujące rzeczy: 1. Prześlij gramatykę CSS z W3C do generatora parserów i pracuj nad tym. 2. Ręcznie zakoduj parser CSS z gramatyki. 3. Użyj wygenerowanego tokenizera, ale ręcznie zakoduj parsowanie produkcji. 4. Odwrotność (3) - generuj produkcje, ale ręcznie zakoduj tokenizer. Nie ujawniając mojego obecnego podejścia, zastanawiałem się, co myślą o tym inni, i doceniam wszelkie komentarze i wskazówki z twojego doświadczenia. Częścią tego jest również zobaczenie, jakie pytania zadają ludzie i porównanie ich z tym, co sam sobie zadałem.


title: Jak odzyskać niespójny stan zadania bez odpytywania bazy danych

text: Pracuję nad skalowaniem aplikacji, która obecnie sonduje bazę danych mySQL w celu wysyłania zadań asynchronicznych do systemu przetwarzania w tle. Maszyna stanów jest używana do śledzenia postępu jednostek w całym przepływie pracy. Na przykład możemy mieć trzy stany: * Zaplanowane * Przetwarzanie * Zakończone Mój plan polega na dodaniu systemu kolejki komunikatów, który będzie pośredniczył w zadaniach wysyłanych do systemu przetwarzania w tle. Zatem `Aplikacja A` wstawia nową jednostkę, a następnie wysyła wiadomość do kolejki. „Aplikacja B” zużyje te wiadomości i przekieruje je do właściwego zadania przetwarzania w tle. def do_work(entity) # Sprawdzenie warunku wstępnego podniesienie "Wrong State" chyba że entity.scheduled? # Aktualizuj stan do przetwarzania entity.processing # ... do work # Aktualizuj stan do ukończenia entity.complete end Biorąc pod uwagę zadanie takie jak powyżej, mam trudności z określeniem, w jaki sposób byłoby możliwe odzyskanie z sytuacji, w której wystąpił błąd między przejściami zdarzeń „processing” i „complete”. Na przykład awaria procesu. Procesor zadań próbowałby ponownie wykonać zadanie, ale teraz jednostka jest w niespójnym stanie i zakończy się niepowodzeniem. Jak mogę obsłużyć ten przypadek bez powrotu do odpytywania tabeli encji w poszukiwaniu nieaktualnych zadań? **Edytuj** W grę wchodzą dwie różne koncepcje. Mamy dane i mamy stan danych w odniesieniu do realizacji zlecenia (zaplanowane/przetwarzanie) + stan przepływu pracy (zakończony). Obie te informacje znajdują się w tej samej tabeli. Tak więc po wzroście danych proces odpytywania staje się nieefektywny (ciągłe odczytywanie/aktualizacja/wstawianie). Może więc rozwiązaniem jest przeniesienie przez `Aplikację B` aktywnych zadań do oddzielnego magazynu danych. Tak więc, gdy uruchomione jest zadanie „czyszczenia”, do którego odnosi się @Ӎσᶎ, zestaw danych powinien być znacznie mniejszy. Ostatecznie wydaje się, że nie ma sposobu, aby uniknąć odpytywania bazy danych, aby upewnić się, że dane są poprawne.


title: Czy istnieją inne przypadki użycia dla dostawców typu F#?

text: Myślę więc, że znam główny przypadek użycia dostawców typów F# 3.0, tj. mi. lepszy Intellisense podczas pracy z bazami danych, które ich używają. Czy istnieją inne przypadki użycia dla dostawców typów, czy to prawie wszystko?


title: Czy interfejs nie może być abstrakcyjny?

text: Znajomy powiedział, że nie każdy interfejs jest abstrakcyjny. Nie mam okazji z nim dyskutować, ale skłania mnie to do myślenia o nie abstrakcyjnym interfejsie w jakimkolwiek języku. Czy istnieje nie abstrakcyjny interfejs?


title: Dzień Kariery: jak sprawić, by „programista komputerowy” brzmiał fajnie do 8 roku życia?

text: Muszę wygłosić wykład na Dniu Kariery w szkole mojego dziecka i poszukać pomysłów, jak sprawić, by „programista komputerowy” brzmiał fajnie do 8 roku życia.


title: Czy powinienem się martwić, jeśli podczas stażu nie mam nic do roboty?

text: Jestem stażystą w tej firmie od około czterech miesięcy. Na początku było super, bo nie miałam mnóstwa godzin, praca była ciekawa i nie przeszkadzała w szkole. Jednak wraz z nadejściem lata pojawiły się pewne problemy. Zmienili mojego bezpośredniego przełożonego z osoby zarządzającej programistami na jednego z inżynierów oprogramowania. Jest bardzo zajęty i nie ma zbyt wiele czasu, żeby mi pomóc, więc mogę utknąć na kilka dni, zanim w końcu otrzymam pomoc od kogoś. To dość frustrujące, ponieważ naprawdę nie mam nic do roboty w tym okresie, a mój nowy przełożony jest niezwykle trudny do zdobycia. Jako praktykant naprawdę czuję, że potrzebuję więcej wskazówek i pomocy. Szybko kończą mi się rzeczy do zrobienia lub jestem całkowicie przytłoczony, gdy przydzielam im szerokie zadania. Tak naprawdę nigdy nie jestem „sprawdzany”, więc mogę siedzieć przez długi czas, nic nie robiąc i nikogo to nie obchodzi. Wielokrotnie próbowałem prosić o pomoc, ale albo nie odpowiada na moje e-maile, albo odwołuje nasze spotkania. Czy to normalne dla stażysty? Czy jest coś, co powinienem zrobić, aby być bardziej produktywnym? Czy powinienem poprosić kierownictwo o pomoc, czy byłoby to uważane za nieodpowiednie dla stażysty? Czy naprawdę nie powinienem się tym martwić, skoro to tylko staż?


title: Użycie słowa kluczowego "Używanie" w interfejsie C#

text: Kiedy używam C# do pisania kodu i definiuję interfejs za pomocą Visual Studio 2010, zawsze zawiera szereg instrukcji "using" (jak pokazano w przykładzie) using System; za pomocą System.Collections.Generic; za pomocą System.Linq; za pomocą System.Text; przestrzeń nazw TestEngine.TestNameSpace { interfejs ITest1 { bool testMethod(int xyz); } } Zastanawiam się, do czego służą i czy są naprawdę potrzebne. Czy mogę je pominąć? Czy są one potrzebne tylko wtedy, gdy używam tych części w opisie interfejsu?