title: „Nadruk” jako funkcja językowa?

text: ## Pomysł Miałem pomysł na funkcję języka, która moim zdaniem byłaby przydatna, czy ktoś zna język, który implementuje coś takiego? Chodzi o to, że oprócz dziedziczenia klasa może również używać czegoś, co nazywa się „imprinting” (z braku lepszego terminu). Klasa może odcisnąć jedną lub kilka (nieabstrakcyjnych) klas. Kiedy klasa odciska inną klasę, otrzymuje wszystkie swoje właściwości i wszystkie swoje metody. To jest jak klasa przechowująca instancję odciśniętej klasy i przekierowująca do niej jej metody/właściwości. Klasa, która odciska inną klasę, dlatego z definicji implementuje również wszystkie swoje interfejsy i swoją klasę abstrakcyjną. Więc jaki jest sens? Cóż, trudno o dziedziczenie i polimorfizm. Często kompozycja daje dużo większą elastyczność. Dziedziczenie wielokrotne oferuje mnóstwo różnych problemów bez większych korzyści (IMO). Często piszę klasy adapterów (w C#), implementując jakiś interfejs i przekazując rzeczywiste metody/właściwości do hermetyzowanego obiektu. Wadą tego podejścia jest to, że jeśli interfejs się zmieni, klasa zostanie zerwana. Musisz także włożyć dużo kodu, który nie robi nic poza przekazywaniem rzeczy do zamkniętego obiektu. Klasycznym przykładem jest to, że masz klasę, która implementuje IEnumerable lub IList i zawiera klasę wewnętrzną, której używa. Dzięki tej technice byłoby znacznie łatwiej ## Przykład (c#) [imprint List<Person> as peopleList] public class Ludzie : PersonBase { public void SomeMethod() { DoSomething(this.Count); //Count jest z listy } } //Teraz People mogą być traktowane jako Lista<Person> People people = new People(); foreach(Osoba osoba w osobach) { ... }Listaludzie to alias/nazwa zmiennej (do wyboru)używany wewnętrznie do aliasu instancji, ale można go pominąć, jeśli nie jest potrzebny. Jedną rzeczą, która jest przydatna, jest przesłonięcie wdrukowanej metody, którą można osiągnąć za pomocą zwykłej składni override public override void Add(Person person) { DoSomething(); OsobyLista.Dodaj(osoba); } zauważ, że powyższe jest funkcjonalnym odpowiednikiem (i mógłby zostać przepisany przez kompilator) do: public class People : PersonBase , IList<Person> { private List<Person> personList = new List<Person>(); public override void Add(object obj) { this.personList.Add(obj) } public override int IndexOf(object obj) { return personList.IndexOf(obj) } //etc itp. dla każdego podpisu w interfejsie } tylko wtedy, gdy zmieni się IList twoja klasa się zepsuje. IList się nie zmieni, ale interfejs, który zaprojektowałeś Ty, ktoś z Twojego zespołu lub osoba trzecia, może się po prostu zmienić. Oszczędza to również pisania dużej ilości kodu dla niektórych interfejsów/klas abstrakcyjnych. ## Zastrzeżenia Jest kilka błędów. Najpierw musimy dodać składnię, aby wywołać konstruktory klas imprintowanych z konstruktora klas imprinting. Ponadto, co się stanie, jeśli klasa odciska dwie klasy, które mają tę samą metodę? W takim przypadku kompilator wykryłby to i zmusił klasę do zdefiniowania przesłonięcia tej metody (gdzie możesz wybrać, czy chcesz wywołać klasę imprintowaną, czy obie). Więc jak myślisz, czy byłoby to przydatne, jakieś zastrzeżenia? Wydaje się, że zaimplementowanie czegoś takiego w języku C# byłoby całkiem proste, ale może mi czegoś brakować :) **Sidenote - Dlaczego to różni się od wielokrotnego dziedziczenia** Ok, więc niektórzy pytali o to. Dlaczego różni się to od dziedziczenia wielokrotnego, a dlaczego nie. W języku C# metody są albo wirtualne, albo nie. Powiedzmy, że mamy ClassB, która dziedziczy po ClassA. ClassA ma metody MethodA i MethodB. Klasa B zastępuje MethodA, ale nie MethodB. Teraz powiedz, że MethodB ma wywołanie MethodA. jeśli MethodA jest wirtualna, wywoła implementację, którą ma ClassB, jeśli nie, użyje klasy bazowej, MethodA ClassA i skończysz się zastanawiać, dlaczego twoja klasa nie działa tak, jak powinna. Według terminologii sofar możesz już się pomylić. Więc co się stanie, jeśli ClassB dziedziczy zarówno z ClassA, jak iz innej ClassC. Założę się, że zarówno programiści, jak i kompilatorzy będą drapać się po głowach. Zaletą takiego podejścia IMO jest to, że klasy imprintingu są całkowicie hermetyzowane i nie muszą być projektowane z myślą o wielokrotnym dziedziczeniu. Możesz w zasadzie odcisnąć wszystko.


title: Czy szablony C++ to tylko rodzaj gloryfikowanych makr?

text: Z różnych porównań między szablonami C++ i rodzajami C#/Java, takimi jak ten - http://stackoverflow.com/questions/31693/what-are-the-differences-between-genericals-in-c-and-java-and-templates -in-c/31929#31929 Mam wrażenie, że szablony C++ są implementowane przez pewien rodzaj wstępnego przetwarzania (zastąpienie zwykłego tekstu przed parsowaniem), a nie kompilację. Ponieważ sprawdzanie typu w szablonach C++ przypomina makra C. Mam na myśli, że jeśli są jakieś błędy, to są to błędy z wygenerowanego kodu po przetworzeniu szablonowych bloków kodu, a nie z samych szablonów. Innymi słowy, są one po prostu rodzajem wyższej wersji makr w C. Potem znalazłem kilka innych faktów na poparcie tego- * Pomyślałem, że jeśli szablony C++ są implementowane przez wstępne przetwarzanie, będą problemy z dynamicznym linkowaniem (przy użyciu .dll) . Poparło to szybkie googlowanie. * Inną kwestią jest to, że stałe całkowite mogą być przekazywane jako argumenty do szablonów. A nawet obsługuje pewien rodzaj rekurencji. Ale ta rekursja nie znajduje się w skompilowanym kodzie zestawu/maszyny. Rekurencja jest zarządzana w czasie kompilacji poprzez generowanie funkcji dla każdego wywołania rekurencyjnego, a tym samym posiadanie większego, ale szybszego pliku binarnego. Chociaż w przeciwieństwie do makr C, ma pewne lepsze możliwości. Ale czy szablon C++ nie jest zaimplementowany z pewnym rodzajem wstępnego przetwarzania? Jak to jest zaimplementowane w różnych kompilatorach C++?


title: Jakie są dobre pytania do rozmowy kwalifikacyjnej dla testera oprogramowania z naciskiem na automatyzację?

text: Dzisiejsze testy nie przypominają wczorajszych testów. Więcej usług, więcej systemów rozproszonych, więcej automatyzacji. Chcę takich testerów, którzy potrafią samodzielnie rozpocząć pracę i będą stale wychodzić z pracy, pisząc kod testowy. Jakie są dobre pytania do rozmowy kwalifikacyjnej dla współczesnego testera oprogramowania?


title: Jak tworzyć strony html, które nie zmieniają się bardzo i niezbyt często?

text: Mam serwer Rails, który łączy się z API json na innym serwerze, aby uzyskać dane do dynamicznego kompilowania stron. Strony te jednak nie zmieniają się bardzo i niezbyt często. Myślałem, że mógłbym skrócić czas ładowania strony, a także znacznie ograniczyć wywołania interfejsu API JSON, gdybym tylko okresowo wywoływał interfejs API JSON i zapisywał pliki html jako statyczne strony html. W jaki sposób można budować od podstaw pliki html w ruby/rails?


title: Jakie są zalety konstruktora Nothing w Haskell?

text: Jestem nowy w Haskell i nie jestem zbytnio sprzedany na konstruktorze `Nothing`. Brzmi to jak kolejna cicha porażka, która spowoduje bóle głowy. Wydaje się, że o wiele bardziej przydatne jest zgłoszenie błędu, abym miał pojęcie, co się dzieje. Dlaczego się tutaj mylę?


title: Poza programowaniem obiektowym

text: Czy jest coś poza OOP? W dzisiejszym świecie prawie każdy problem można rozwiązać, korzystając z OOP jako podstawy. Ale ile z nich jest naprawdę skutecznych? Na przykład Java jest zorientowana wyłącznie obiektowo. Generuje kod bajtowy i interpretuje go. Teraz oczywiście czas wykonania jest dłuższy w Javie w porównaniu z C i C++. Problemy mają różny charakter. Niektóre są naprawdę wymagające obliczeniowo, inne to programowanie GUI, a jeszcze inne chcą skrócić czas odpowiedzi. Czy globalnie OOP może rozwiązać te wszystkie problemy, czy też istnieje życie poza tym?


title: Różnice między poziomami certyfikacji jakości oprogramowania?

text: Po pierwsze dzięki za przeczytanie pytania. Rozumiem, że teoretycznie najlepiej byłoby zadać to pytanie w obszarze stosu SQA \- ale - biorąc pod uwagę, że to jeszcze oficjalnie nie istnieje, może to było na razie najbardziej odpowiednie miejsce. Zastanawiam się nad wyśledzeniem certyfikacji w zakresie jakości oprogramowania, jednak jest tak wiele różnych organów przyznających i certyfikatów, że trudno jest je odróżnić. Jak dotąd znalazłem: * Six Sigma - proces kontroli jakości, pierwotnie założony przez Motorolę i nie ograniczony do oprogramowania. (w rzeczywistości nie jestem pewien, czy obejmuje nawet rozwój oprogramowania). Oparta na serii „pasów” (czarny jest najlepszy, zakładam, że zaczyna się od zielonego? czy białego?) * ASQ - American Society of Quality - oferuje liczne certyfikaty jakości * CQA - Quality Auditor * CQE - Quality Engineer * CQIA - Associate Improvement Associate * CQI - Inspektor Jakości * CQPA - Analityk Procesów Jakości * CQT - Technik Jakości * CRE - Inżynier Niezawodności * QAI Global * Testowanie Oprogramowania * Zapewnienie Jakości Oprogramowania * Inżynieria Procesu * Zarządzanie Procesami mam problem ze zrozumieniem różnic i „punktu początkowego” i progresji między poziomami. (Czy są hierarchią, czy równolegle?)


title: Etymologia słowa „wirtualny” (metoda/tabela metod/dziedziczenie)

text: O ile wiem, ogólnie odnosi się to do _późnego_ lub _dynamicznego wiązania. Dlaczego więc nie użyto słowa takiego jak _późny_ lub _dynamiczny_?


title: Jakie są wielkie nierozwiązane wyzwania (lub ostatnie obiecujące przełomy) związane z programowaniem dla przedsiębiorstw?

text: Moje doświadczenie z programowaniem wywodziło się z dziedziny lingwistyki komputerowej, w której jest DUŻO nierozwiązanych problemów (modelowanie obliczeniowe języka naturalnego lub posiadanie skutecznych przybliżeń statystycznych). To nie jest wyjątek: wiele innych dziedzin (takich jak biologia obliczeniowa) ma duże nierozwiązane problemy i obiecujące przełomy. Jednak większość wykonywanego programowania (i większość pieniędzy z niego zarobionych) wydaje się dotyczyć obszarów takich jak planowanie zasobów przedsiębiorstwa, zarządzanie relacjami z klientami itp. Firmy wydają się być w stanie wypuszczać nowe wersje takiego oprogramowania i zarabiać więcej z roku na rok, a klienci wciąż wydają pieniądze na aktualizację do nowszych wersji..itd. Tak więc, jako osoba z zewnątrz tego świata, zastanawiam się: jakie są wielkie postępy stymulujące ten wzrost? Czy były jakieś wielkie wyzwania, które zostały rozwiązane lub są rozwiązywane?


title: Czy metoda sprawdzania typu przesyłanego pliku należy do kontrolera?

text: Jeśli tworzę kontroler, który ma metodę `ActionResult UploadFile(HttpPostedFileBase file)` Gdzie jest najlepsze miejsce na dodanie kodu, który sprawdzi, czy jest to dobry i użyteczny plik? Powodem, dla którego pytam, jest to, że będę musiał sprawdzić więcej niż tylko rozszerzenie pliku. Na przykład; sprawdź liczbę kolumn w arkuszu kalkulacyjnym, sprawdź nazwy kolumn itp.


title: Czy lepiej umieścić kod JS w pliku html czy w pliku zewnętrznym?

text: Jeśli projektuję witrynę typu one page, czy lepiej utworzyć zewnętrzny plik dla mojego kodu JS, czy po prostu umieścić go w kodzie html? Czy umieszczenie go na stronie ładuje się szybciej? Czy mogę zmienić uprawnienia, aby odmówić użytkownikom żądań kodu, ale strona html może nadal wywoływać kod?


title: Dlaczego odwołania o wartości NULL są unikane, gdy zgłaszanie wyjątków jest uważane za prawidłowe?

text: Nie do końca rozumiem konsekwentne bicie referencji zerowych przez niektórych ludzi zajmujących się językiem programowania. Co jest w nich takiego złego? Jeśli zażądam dostępu do odczytu do pliku, który nie istnieje, jestem całkowicie szczęśliwy, że otrzymam wyjątek lub odwołanie o wartości null, a mimo to wyjątki są uważane za dobre, ale odwołania o wartości null są uważane za złe. Jakie jest to uzasadnienie?


title: Czy przekazywanie Modelu w ten sposób jest uważane za złą praktykę?

text: Jeśli mam widok o nazwie na przykład `ViewDetails`, który wyświetla informacje o użytkowniku w etykietach i ma model o nazwie `ViewDetailsModel` i jeśli chcę umożliwić użytkownikowi kliknięcie przycisku w celu edycji niektórych z tych szczegółów, czy jest to uważane za złe praktyka polega na tym, że przekazuję cały model w znaczniku do metody kontrolera, która następnie przypisuje wartości do innego modelu, używając wartości przechowywanych w modelu, który został przekazany jako parametr do tej metody akcji? Jeśli tak, czy zamiast tego powinna istnieć metoda usługi, która pobiera dane wymagane dla widoku edycji? Na przykład: W widoku `ViewDetails` użytkownik klika przycisk edycji, który wywołuje metodę akcji w kontrolerze (i przekazuje obiekt Model). Następnie metoda akcji wykorzystuje dane z obiektu Model do wypełnienia innego modelu, który zostanie użyty dla zwróconego widoku `EditDetails`.


title: Czy istnieje studium przypadku, które w przekonujący sposób pokazuje, że czysty kod usprawnił programowanie?

text: Jestem w swojej pierwszej prawdziwej pracy jako programista i to, co widzę, to tylko kod „Wielka Kula Błota” (też bez przydatnych komentarzy), ale lubię robić czysty kod i naprawdę ciężko mi kodować w gorszym droga. Poszukuję jakiegoś studium przypadku, w którym użycie czystego kodu (tu widzę różne definicje tego, czym jest czysty kod) poprawiło rozwój i łatwość utrzymania.


title: najlepsze praktyki projektowania baz danych NoSQL

text: Właśnie zacząłem używać bazy danych opartej na dokumentach NoSQL (MongoDB) i jestem ciekawy najlepszych praktyk projektowania baz danych. Zakładam, że architektura powinna różnić się od relacyjnych baz danych? Czy nadal powinienem dążyć do znormalizowanej bazy danych? Na przykład mam konkretny przypadek użycia; > Mam użytkownika z historią wypożyczeń (tablicą adresów), czy ta tablica > powinna być tablicą użytkownika, czy oddzielną kolekcją ze współdzielonym kluczem?


title: Jak wdrożyć proces tworzenia oprogramowania w istniejącym projekcie?

text: Moje pytanie dotyczy przygotowania procesu tworzenia oprogramowania. Gdybyś przystąpił do istniejącego projektu, który nie miał formalnej metodologii ani ustanowionego procesu, a następnie został poproszony o utworzenie takiego samego, jak byś sobie z tym poradził? Przyjrzałem się różnym metodologiom, takim jak Agile, lub ich podzbiorom, takim jak XP, ale mają one przede wszystkim na celu tworzenie nowych projektów. Nie jestem pewien, jak je zaimplementować do istniejącego projektu. Ponadto wiele z nich jest skierowanych do aplikacji internetowych lub stacjonarnych. Mój projekt oprogramowania jest systemem wbudowanym, więc chociaż wiele ich aspektów ma zastosowanie, próba ustalenia, którego użyć i jak przekonwertować do użytku w systemie wbudowanym, jest nieco przytłaczająca. Testowanie jednostkowe na sprzęcie wbudowanym (zwłaszcza z komputerem jednopłytkowym, dla którego nie istnieje symulator) jest niezwykle trudne, szczególnie jeśli oprogramowanie jest bardzo zaawansowane, a dodanie warstwy abstrakcji sprzętowej, aby wspomóc testowanie jednostkowe, wymagałoby dramatycznego rozerwania kodu. Jakie wskazówki miałbyś, aby skonfigurować proces tworzenia oprogramowania dla istniejącego projektu, dla programisty, który umie programować, ale jest nowy w zarządzaniu procesem tworzenia oprogramowania?


title: Czy są jakieś przykłady wdrażania i skutecznego reagowania na „Małpę Chaosu”?

text: Jeff Atwood napisał niedawno post na blogu o implementacji „Małpy chaosu” przez Netflix. Jest to artykuł na bardzo wysokim poziomie. Jestem ciekaw, czy ktoś faktycznie zaimplementował tę technikę do testowania systemu. Myślę, że to, co naprawdę próbuję zapytać, to: Jakie strategie wdrażasz, aby zapewnić, że Twoja architektura może przetrwać część awarii systemu?


title: Dlaczego miałbyś używać wbudowanego WebDev zamiast lokalnego IIS?

text: Odkąd zacząłem tworzyć projekty ASP.NET, jestem zaznajomiony z dotykaniem F5 w celu debugowania. Myślę, że większość z nas tak się uczy? Od tego czasu i dużo później nauczyłem się żyć z upiornym poświęceniem numeru portu, wieloma instancjami WebDevXX.exe na pasku powiadomień i stosunkowo wolnym czasem ładowania. Częściowo przez uruchomienie, a częściowo także przeglądanie i testowanie. Kto uniknął jakichkolwiek problemów z błędnymi lokalizacjami plików PDB? (Nie można było trafić w punkt przerwania) Nie ja! Nigdy nie miałem prawdziwego powodu, by to kwestionować. Ale karta ustawień projektu zawsze tam była. Zakładka „Sieć”, „Serwery”. Nigdy go nie dotknąłem. Czasami ręcznie wprowadzałem numer portu i/lub ścieżkę strony startowej. Niestandardowy serwer sieci Web IIS? Niestandardowy serwer WWW? Ta opcja wyglądała zbyt strasznie, by jej dotknąć. Zrobiłem teraz krok, aby kopnąć ten absurdalny program "WebDev", odświeżyć moją lokalną instalację IIS i podłączyć go do środowiska Visual Studio, aby zobaczyć i zdecydować, co na tym stracę... Co zaskakujące, po prostu wciskam F5. Strona internetowa otwiera się zaskakująco szybko (w porównaniu do webdev). Punkty przerwania zostały trafione natychmiast. Przeglądanie i testowanie aplikacji internetowej przebiega prawie tak samo szybko jak wdrożona. Pomyślałem: „OK, zgubiłem się w usługach IIS, jeśli chodzi o debugowanie zawartości po stronie klienta”. Znowu byłem zaskoczony. Umieszczam punkty przerwania w linii JavaScript. Dostałem superszybkie złamanie kodu, a drugi później Visual Studio pokazał mi punkt przerwania. Moje pytanie do dyskusji brzmi: dlaczego tak automatycznie używamy Cassini i jakie są wady lokalnych usług IIS? Mówię „my”, ponieważ wiem, że robi to wielu programistów – w tym kilku naprawdę doświadczonych.


title: Jak przejść od umiejętności pisania kodu do bycia dobrym programistą?

text: Jestem sfrustrowany brakiem konkretnych wyjaśnień, jak przejść od umiejętności pisania skryptów (bash, awk) i pisania prostych aplikacji (c, php, python) do projektowania i tworzenia większego, bardziej skomplikowanego oprogramowania. Wydaje się, że z jednej strony są to książki o językach programowania, az drugiej strony o inżynierii oprogramowania/zarządzaniu projektami przeznaczone dla zespołów programistów. Przeczytałem wiele z obu. Przeczytałem klasyki XP/Agile i mam przyzwoite _teoretyczne_ zrozumienie procesu tworzenia oprogramowania. Lubię czytać kod innych ludzi i całkiem nieźle go stosuję. Ale kiedy mam pomysł na projekt lub chcę przejść od „tu jest problem/potrzeba” do „oto rozwiązanie”, mój umysł jest pusty i nie wiem od czego zacząć. Czy po prostu to zhakuję? Czy istnieją ustrukturyzowane przepływy pracy dla indywidualnych programistów, które nie pracują w zespołach lub dla dużego software house'u? Naprawdę nie mam ochoty na PMP lub pracę w firmie programistycznej. Po prostu szukam efektywnego, wydajnego, praktycznego przepływu pracy.


title: Dlaczego tagi <b> i <i> są przestarzałe?

text: To pytanie pojawiło się na jednym z moich zajęć w college'u. Profesor odpowiedział tylko, że jest bardziej opisowy, ale wydaje się, że „<b>” i „<i>” są dość jednoznaczne w swoim znaczeniu i łatwiej je wpisać niż „<strong>” i „<em> `. **Jakie były oficjalne argumenty za wycofaniem tych tagów?**


title: Kłamstwo, aby znaleźć pracę

text: Od około roku szukam sposobu na zajęcie się programowaniem. Mam około 2 lata doświadczenia w pisaniu skryptów i programowaniu w domu i pracuję w firmie 'IT' od prawie 2 lat. Mówię luźno firma IT. To firma informatyczna, ale dosłownie każdy może wykonać tę pracę. Moim problemem jest znalezienie pracy bez żadnego doświadczenia zawodowego (jestem pewien, że większość ludzi może się z tym utożsamić). W tym roku odbyłem kilka wywiadów na temat ról help desk i devops, wszystkie z tym samym wynikiem: „jesteś dobry, ale potrzebujemy kogoś z większym doświadczeniem zawodowym”. Mam zamiar ubiegać się o stanowisko młodszego inżyniera oprogramowania, ale chcę robić rzeczy trochę inaczej. Kłamię i jestem zbyt szczery, jeśli chodzi o wywiady. Ale czuję, że muszę kłamać na temat mojej obecnej pracy, aby uwzględnić rzeczy, które robię w domu. Wiem, że mogę wykonywać pracę, o którą się ubiegam, ale bez odpowiedniego wykształcenia lub odpowiedniego doświadczenia nie mogę udowodnić, że potrafię robić to, czego ode mnie potrzebują. Niedawno założyłem stronę internetową, którą wykorzystuję jako platformę do prezentacji mojej pracy i tego, co robię. Tak naprawdę nie miałem jeszcze okazji pochwalić się tym potencjalnym pracodawcom. Na pewno kiedyś będę pracować w tworzeniu oprogramowania i nie mam co do tego wątpliwości, bo jestem tak zdeterminowany. Chcę tylko wiedzieć, czy można kłamać, żeby iść na skróty. W skrócie moje pytanie brzmi. Czy można kłamać na temat tego, co robisz w pracy podczas rozmowy kwalifikacyjnej, o ile wiesz, że jesteś w stanie to zrobić? Zastanawiam się również nad powrotem do edukacji w związku z informatyką. Mam już dyplom z inżynierii strukturalnej, więc nie jest to decyzja, którą chcę lekceważyć, biorąc pod uwagę, że musiałbym ją sfinansować sam, ale jeśli miałoby to zapewnić mi pracę, zdecydowanie pomyślałbym, że byłoby to warte zachodu. PS referencje nie są dla mnie problemem.


title: Jakiego typu zapytania optymalizują sklepy z szeroką kolumną

text: Mam pewne doświadczenie ze sklepami opartymi na dokumentach (MongoDB i CouchDB) i interesuje mnie eksploracja baz danych o szerokich kolumnach. Na podstawie moich wstępnych eksploracji mogę uchwycić podstawową wiedzę o tym, jak różnią się magazyny szerokich kolumn, ale tak naprawdę nie rozumiem, w jakim typie operacji są one lepiej dopasowane niż magazyn dokumentów indeksowanych. Moje początkowe wrażenie jest takie, że magazyny kolumn są lepsze, jeśli kombinacje kolumn dla zapytań są bardzo dynamiczne (nie ma tak naprawdę wymaganego widoku indeksowanego) i/lub jeśli występuje wysoki wskaźnik pisania (który uruchamia indeksy redukujące mapę w magazynie dokumentów). Jeśli chodzi o wydajność, wydaje się, że magazyny kolumn mogą być lepsze, jeśli mam dokumenty z wieloma właściwościami, ale nie wszystkie z nich są potrzebne. Magazyny dokumentów wydają się promować, że cały dokument zostanie pobrany, ale nie jest pewien, jaki to naprawdę ma wpływ. Może dokument musi mieć wiele filtrowanych kolumn, aby coś zmienić? Mam również wrażenie, że magazyny kolumn „mogą” być bardziej wydajne w przypadku systemów z wieloma dzierżawcami, które współdzielą bazę danych, w której jedna z kolumn zawiera identyfikator dzierżawy, a może inna role. **W jakim typie zapytań magazyny szerokokolumnowe lepiej pasują do magazynów dokumentów?** **AKTUALIZACJA** : Po przeczytaniu mojego pytania mam wrażenie, że magazyny szerokokolumnowe są bardzo dobre dla zapytań wykonywanych przez dane aplikacje analityczne, w których istnieje duży zestaw zebranych danych dla każdego wpisu, tylko kilka pól musi zostać wyodrębnionych, a kombinacja kolumn jest całkowicie losowa.


title: Jak zarządzać oczekiwaniami klienta podczas pracy z frameworkiem typu BDD?

text: Ostatnio badałem specyfikację SpecFlow i widzę wartość przy pisaniu specyfikacji klienta/właściciela, które mogą pokazywać postęp funkcji, ale obawiam się, że przedstawię je klientowi... Wyobraź sobie funkcję: Biorąc pod uwagę, że jestem na Strona "Moje konto" I wpisuję "Liath" w polu tekstowym "Nazwa" Kiedy klikam "Zapisz" Wtedy moja nazwa użytkownika powinna być "Liath" Piszemy te funkcje, pokazujemy klientowi zestaw czerwonych ikon i uruchamiamy programistów. Jeśli nasz programista przejdzie szczęśliwą ścieżkę, ikona zmieni kolor na zielony, a klient zobaczy, że ta funkcja jest gotowa. Jednak nasz programista wie, że nadal muszą rozważyć takie rzeczy jak: 1. Sprawdzenie nazwy użytkownika, aby zobaczyć, czy jest używana 2. Sprawdzenie nazwy użytkownika pod kątem wulgaryzmów 3. Obsługa błędów z bazy danych 4. Pewna forma walidacji w celu zapewnienia nazwy użytkownika używa tylko poprawnych znaków Oczywiście, jeśli klient zobaczy rząd zielonych świateł, nie będzie chciał dalej płacić za resztę rozwoju, będzie to wyglądać tak, jakbyśmy próbowali rozciągnąć pracę. Jaką wartość mają te testy jako wskaźnik postępu, jeśli wskazują one, że praca została zakończona na długo przed jej ukończeniem? Jakich technik musielibyśmy użyć, aby dać dokładniejszy przykład postępu?


title: zamiennik dla wydruków na papier składany

text: Na uniwersytecie byliśmy w stanie drukować „nieograniczone” wydruki na szerokim papierze składanym (może 128 znaków lub więcej). Mogłem wtedy rozwinąć wydrukowany kod na biurkach lub w pokoju i uzyskać doskonały przegląd mojego kodu, narysować kółka i strzałki oraz akapit na każdym z nich na szerokim marginesie, sprawdzić, czy ten kod pasuje do tego kodu, dostosować nazwy zmiennych za pomocą widząc ich braci itp. i bardzo mi się to podobało. Obecnie używam xcode do programowania iOS, ale niezależnie od używanego edytora pojawia się pytanie: jak mogę uzyskać dobry przegląd kodu, który jest większy niż mój ekran?


title: Framework do tworzenia front-endu z back-endem jako REST

text: Obecnie zajmuję się tworzeniem back-endu aplikacji PHP z wykorzystaniem Recess Framework. Prawie skończyłem i teraz muszę zrobić front-end. Mam wiele alternatyw i wolę CMS. Alternatywami w mojej wiedzy są Drupal lub Wordpress. Problem w tym, że nigdy nie korzystałem z Drupala i Wordpressa (ani żadnego lepszego). W związku z tym nie wiem, który wybrać, aby opracować aplikację do interakcji z interfejsem REST. Czy możesz mi pomóc w wyborze najlepszego CMS do interakcji z interfejsem REST


title: Przewidywanie zalet denormalizacji bazy danych

text: Zawsze uczono mnie, aby dążyć do najwyższej normalnej postaci normalizacji bazy danych, a algorytm syntezy Bernsteina pozwalał na osiągnięcie 3NF. To wszystko bardzo dobrze i przyjemnie jest znormalizować bazę danych, wiedząc, że pola można modyfikować, zachowując spójność. Jednak wydajność może ucierpieć. Dlatego zastanawiam się, czy jest jakiś sposób na przewidzenie przyspieszenia/spowolnienia podczas denormalizacji. W ten sposób możesz zbudować swoją listę FD z 3NF, a następnie jak najmniej denormalizować. Wyobrażam sobie, że zbyt duża denormalizacja zmarnowałaby miejsce i czas, bo m.in. gigantyczne obiekty blob są zduplikowane lub trudniej jest zachować spójność, ponieważ trzeba zaktualizować wiele pól za pomocą transakcji. Podsumowanie: Mając zestaw 3NF FD i zestaw zapytań, jak przewidzieć przyspieszenie/spowolnienie denormalizacji? Doceniane są również linki do artykułów.


title: Czy powinienem się martwić, jeśli wiele problemów rozwiążę w ten sam sposób?

text: Bardzo lubię programowanie gier i twórców puzzli. Wiele z tych problemów konstruuję w ten sam sposób i ostatecznie używam podobnej techniki do ich programowania, z którą czuję się naprawdę komfortowo. Aby dać ci krótki wgląd, lubię tworzyć wykresy, w których węzły są reprezentowane przez obiekty. Obiekty te przechowują dane, takie jak współrzędne, pozycje i oczywiście odniesienia do innych sąsiednich obiektów. Umieszczę je wszystkie w strukturze danych i podejmę decyzje na podstawie tych informacji w „pętli gry”. Chociaż jest to krótki przykład, nie jest on dokładny we wszystkich sytuacjach. To tylko jeden ze sposobów, w którym czuję się naprawdę komfortowo. Czy to źle?


title: Czy powinienem utworzyć nowy otwarty projekt, aby zastąpić istniejący?

text: Ostatnio przyglądałem się projektowi open source, do którego mógłbym się przyczynić, jednak po przejrzeniu brzydkiej bazy kodu (która wydaje się trochę psuć) i przeczytaniu kilku rzeczy o obecnym opiekunie, zdecydowałem, że będzie to dla mnie dobre. W tej chwili myślę po prostu o rozpoczęciu nowego projektu z tym samym celem, ale przy użyciu innego zestawu technologii, które moim zdaniem lepiej pasują do problemu, jedynym powodem, dla którego mnie powstrzymuje, jest uniknięcie efektu drugiego systemu, biorąc pod uwagę fakt, że system jest aktywny i działa. Mógłbym przyczynić się do innego projektu i dzięki temu uniknąć tworzenia dwóch różnych rozwiązań tego samego problemu lub rozwiązać problem w sposób, w jaki uważam, że powinien zostać rozwiązany, a następnie zobaczyć, który system zyskuje większą popularność. Czy jest jakiś stan techniki dotyczący tych okoliczności, o którym powinienem wiedzieć, rozważając tę decyzję?


title: Wartość frameworków dla mobilnych aplikacji webowych

text: **Wersja dłuższa, poniżej TL;DR** Jako programista z dużym doświadczeniem w tworzeniu „klasycznych” aplikacji internetowych myślałem o architekturach mobilnych aplikacji internetowych. Jedno pytanie, na które tak naprawdę nie mogę odpowiedzieć, brzmi: po co ci framework taki jak Sencha Touch (może nawet jQuery mobile, chociaż wydaje się o wiele lżejszy)? Pozwól, że rozwinę tę kwestię: dla mnie mobilne aplikacje internetowe wydają się bardzo podobne do „klasycznych” aplikacji internetowych z MVC po stronie klienta. OK, musisz być bardzo ostrożny, jeśli chodzi o wydajne manipulacje DOM, transfer (statycznych) zasobów, obsługę offline i kilka innych rzeczy, ale poza tym jedyną zauważalną różnicą wydaje się być doświadczenie użytkownika. Użytkownicy oczekują typowych widżetów mobilnych, które najlepiej zachowują się jak te natywne. Z tego powodu uważam, że frameworki i biblioteki dla MVC po stronie klienta, które są wykorzystywane do „klasycznych” aplikacji webowych, są również wystarczające dla mobilnych aplikacji webowych i że jedynym niezbędnym dodatkiem jest zestaw widżetów przypominających mobilność. **TL;DR** Jaka jest wartość frameworków dla nietrywialnych mobilnych aplikacji internetowych (pomyśl na poziomie przedsiębiorstwa z latami rozwoju...) w porównaniu z istniejącymi frameworkami do tworzenia "klasycznych" (desktopowych) aplikacji internetowych? A co z „klasycznymi” frameworkami aplikacji internetowych + zestawami widżetów mobilnych?


title: Dyskusje o prostocie

text: Ostatnio w mojej firmie toczyliśmy małą debatę na temat abstrakcji kontra prostoty. Jedna ze szkół myślenia, którą określiłabym jako „DRY i abstrakcja nie mogą zaszkodzić” i prowadzi do kodu takiego: def make_foo_binary(binaryName, objFiles, fooLibsToLinkAgainst) make_exe_task(binaryName, objFiles.ext('.o'), fooLibsToLinkAgainst ) end i this: class String def escape_space return self.gsub(' ', '\ ') end end Moim zdaniem tworzenie takiej abstrakcji, która jest używana tylko w jednym miejscu, czyni kod mniej czytelnym, ponieważ ty zamieniamy wywołanie funkcji znane czytelnikowi (gsub) na inne, którego nigdy wcześniej nie widział (escape_space), które będą musieli przeczytać, jeśli chcą zrozumieć, jak faktycznie działa kod. Zastąpienie jest zasadniczo opisane w języku angielskim („escape space”), a angielski jest notorycznie niejasny. Na przykład, bez patrzenia na definicję, nie wiesz, czy ucieka wszystkie białe znaki, czy tylko znak spacji. Jest wiele tekstów wychwalających DRY i abstrakcję. ** Czy ktoś zna źródła opisujące ograniczenia abstrakcji? Że śpiewasz pochwały i dyskutujesz o pragmatyce prostoty kodu?** Edytuj: Potrafię znaleźć teksty, które zachęcają do prostoty w życiu lub w pisaniu (angielskim), np. „Uprość, uprość!” Thoreau czy „Vigorous writing is zwięzły” Strunk and White'a. Gdzie jest odpowiednik programowania?


title: Wyodrębnienie rodzaju nieruchomości

text: W Pythonie na szczęście w większości przypadków nie musisz pisać getterów i setterów, aby uzyskać dostęp do właściwości klasy. To powiedziawszy, czasami będziesz musiał pamiętać, że pewna właściwość jest listą lub czymś innym, a właściwość uratowałaby cię tam, abstrahując typ i dostarczając setter, aby dodać coś do takiej listy, na przykład, zamiast bezpośrednio eksponować listę. Gdzie narysujesz granicę między bezpośrednim ujawnieniem typu a zawinięciem jego dostępu we właściwości? Jaka jest ogólna rada „pytoniczna”?


title: Konwencja nazewnictwa „As”

text: Eksperymentuję z wymyśloną przez siebie konwencją nazewnictwa i szukam opinii. Wiąże się to z użyciem wrostka "As" i w tym momencie wyobrażam sobie go w kontekście kodowania JavaScript, C# i C++, aby pomóc w przejrzystości formatu/umowy danych podczas radzenia sobie z konwersjami lub wieloma reprezentacjami tych samych nieodłącznych danych lub obiekt. Przykłady: // ex 1. odbierz i przekonwertuj dane wejściowe użytkownika. string userInput = "123"; float userInputAsFloat = float.Parse(userInput); int userInputAsInt = (int)Math.Round(userInputAsFloat); // ex 2. przygotowanie obiektu do transportu json. Słownik<ciąg,obiekt> pakiet = new Słownik<ciąg,obiekt>(); string pakietAsJson = pakiet.ToJson(); // ex 3. interfejs z komponentem pod różnymi kątami. IUnknown foo = MyObjectFactory.CreateFoo(); IVisualizer fooAsVisualizer = (IVisualizer)foo; ILocator fooAsLocator = (ILocator)foo; Myśli za/przeciw? Czy ta konwencja ma nazwę?


title: konwencje dla metod zaprzyjaźnionych w Perl

text: Perl nie obsługuje relacji przyjacielskich między obiektami, ani nie obsługuje metod prywatnych lub chronionych. To, co zwykle robi się w przypadku metod prywatnych, to poprzedzenie nazwy znakiem podkreślenia. Czasami mam metody, które uważam za metody przyjacielskie. Oznacza to, że spodziewam się, że będą używane przez określony obiekt lub obiekt z konkretną odpowiedzialnością, ale nie jestem pewien, czy powinienem uczynić tę metodę publiczną (czyli `foo` ) czy prywatną ( `_foo` ) czy też lepsza konwencja? czy istnieje konwencja dla metod przyjacielskich?


title: Czy programiści javy powinni wiedzieć o algorytmach zbierania śmieci?

text: Niedawno zapytano mnie w wywiadzie, czy znam jakieś algorytmy zbierania śmieci. Wiedziałem, czym jest garbage collection, ale nigdy tak naprawdę nie myślałem o nauce o algorytmach garbage collection, ponieważ jako programista nigdy nie musiałem się tym martwić, a Garbage collector wykonuje za mnie całą ciężką pracę. Czy myślicie, że programiści Java powinni wiedzieć o algorytmach garbage collectora? Jeśli tak, czy możesz mi powiedzieć, którym powinienem się zająć?


title: Co mogę zrobić? Jak byś zareagował? WSPARCIE!

text: Staram się kierować zespołem programistycznym, który pozostaje w tyle. Jednym z głównych problemów jest to, że kiedy coś jest lekko trudne, muszę przypisać to sobie. Miałem jeszcze jednego programistę z umiarkowanymi umiejętnościami i pół stażysty. Niestety, umiejętności drugiego dewelopera nie obejmują projektowania. Więc błagałem mojego szefa o jednego z chłopaków z innej drużyny, pracuje tu dłużej niż ja (5 lat). Nie może konkurować ze mną w zakresie projektowania LUB języka, którego używamy, ale myślałem, że jest najbardziej kompetentny poza mną. Dzisiaj dał mi kawałek kodu, który nie różnił się w najmniejszym stopniu do: object const& my_class::get_object() const { return *std::unique_ptr<object>(new object()); } Zapytał mnie, czy to był problem! Powiedziałem jedyną rzeczą, o której mogłem pomyśleć: „Tak. To jest problem”. Potem podchodzi do mojego biurka i pyta, jak to naprawić! Powiedziałem: „Użyj obiektu, który przetrwa wywołanie funkcji”. Potem zaczyna wariować: „Tak, ale jak, jedyne, o czym mogę pomyśleć, to zrobić zmienną składową”. Byłem wtedy trochę zajęty, ponieważ próbowałem już włożyć dodatkową pracę, którą musiałem przejąć dla drugiego faceta z zespołu, ponieważ nie mógł tego rozgryźć... Powiedziałem facetowi, żeby sobie poszedł, ponieważ ja był zajęty i sam to rozgryźć. Potem wychodzi zirytowany, mówiąc, że to nie jego wina, jeśli coś schrzani. On wariuje odkąd dołączył do zespołu i nie sądzę, żeby było lepiej. Czuję się, jakbym tu tonął. CO mogę zrobić? Jak sobie z tym poradzić? Czy rozsądniej byłoby pomóc temu gościowi, który pisze w C++ od 7 lat, dowiedzieć się, jak poprawnie zwrócić referencję do obiektu, który nie jest zniszczony w momencie jego zwrotu? Czuję, że to po prostu śmieszne, zastanawiać się, jak do diabła mogę coś zrobić w ten sposób. Czasami myślę, że robią to celowo, ale wydaje mi się, że to po prostu walnięcie… ale z drugiej strony, podobnie jak pytanie, które właśnie zadano mi dzisiaj. To nie jest jakiś dzieciak siedzący w domu i próbujący rozgryźć swój pierwszy program, którego mózg rozsadzają wskaźniki.


title: jak przekonać menedżera, aby zezwolił na przepełnienie stosu

text: W mojej firmie mamy surowe ograniczenia w korzystaniu z internetu. Często muszę używać słabego interfejsu mobilnego tylko dla StackOverflow. Jednak strona jest bardzo przydatna do pracy. Jak przekonać menedżera do odblokowania StackOverflow? Czy istnieje podsumowanie korzyści dostępnych online dla menedżerów?


title: Czy istnieje wysoka korelacja między wypalaniem a programowaniem?

text: Wczoraj zadałem pytanie o wypalenie. Otrzymałem wiele komentarzy i odpowiedzi, co sprawiło, że zacząłem się zastanawiać, czy programiści są bardziej podatni na wypalenie niż inne zawody. Byłbym szczególnie zainteresowany studiami akademickimi, jeśli w ogóle. Przykład pytań o wypalenie tutaj na Programrs.SE: Wypalony na programowaniu i zrezygnowany? Co zrobić, gdy kodowanie zaczyna wydawać się nudne, jakby wszystko było po prostu takie samo? Jakie są zalecane opcje kariery dla wypalonego programisty? Jest też tag wypalenia. Czy uważasz, że istnieje wysoka korelacja między wypaleniem a byciem programistą, a przynajmniej korelacja wyższa niż wypalenie i inne zawody?


title: Najlepsze praktyki tworzenia wzorca kodów błędów dla projektu korporacyjnego w C#

text: Pracuję nad projektem korporacyjnym, który zostanie wdrożony w wielu małych i średnich firmach oraz przedsiębiorstwach. Wsparcie dla tego projektu byłoby trudne, więc chcę utworzyć wzorzec kodowania dla błędów ( _Jak kody stanu HTTP_ ). Umożliwi to pracownikom działu pomocy technicznej odwoływanie się do dokumentów i rozwiązywanie problemów tak szybko, jak to możliwe. **Jakie są sprawdzone metody i zalecenia, aby to zrobić?** Przyda się każda pomoc w tym zakresie.


title: Korzystanie z SSIS, wszelkie dobre tutoriale

text: Szukałem dobrego zasobu do nauki SQL Server Business Studio, a w szczególności pakietów SSIS, jakieś sugestie?


title: Rozpoczęcie programowania w Linuksie

text: Jestem od dawna programistą .NET i pracowałem z Mono, ale teraz chcę zacząć programować dla Linuksa, jakie byłoby dobre źródło do rozpoczęcia programowania natywnego Linuksa?


Czy to kiedykolwiek dobry pomysł, aby na stałe zakodować wartości w naszych aplikacjach? Czy też zawsze właściwe jest nazywanie tego typu wartości dynamicznie na wypadek konieczności ich zmiany?


title: Jeśli twój kod testu jednostkowego „śmierdzi”, czy to naprawdę ma znaczenie?

text: Zwykle po prostu łączę moje testy jednostkowe za pomocą kopiowania i wklejania i wszelkiego rodzaju innych złych praktyk. Testy jednostkowe zazwyczaj wyglądają dość brzydko, są pełne „zapachu kodu”, ale czy to naprawdę ma znaczenie? Zawsze powtarzam sobie, że dopóki „prawdziwy” kod jest „dobry”, tylko to się liczy. Ponadto testowanie jednostkowe zwykle wymaga różnych „śmierdzących hacków”, takich jak funkcje skrótu. Jak bardzo powinienem być zaniepokojony źle zaprojektowanymi ("śmierdzącymi") testami jednostkowymi?


title: Gdzie na kontrolerach ASP.NET MVC3 można utworzyć wystąpienie DataContext?

text: Gdzie w aplikacjach ASP.NET MVC 3 korzystających z DataContext lub DbContext utworzyć wystąpienie obiektu dostępu do danych? Oto niewyczerpująca lista miejsc, w których to widziałem: * Indywidualnie w ramach każdej metody kontrolera * W konstruktorze kontrolera * Jako właściwość (inicjowana leniwie) kontrolera * W ActionFilter, wepchnięta do ViewBag * W Global.asax Application_BeginRequest * W module HttpModule nie mogę zidentyfikować wyraźnego lidera wśród tych wszystkich. Co gorsza, za każdym razem, gdy zaczynam nowy projekt, zwykle go zmieniam, _tylko dlatego_. Czy ktoś ma jakieś sprawdzone w boju rady?


title: REST & Grails- Rozwiązanie w poszukiwaniu problemu?

text: Przez ostatni tydzień zmagałem się z adaptacją aplikacji Grails do korzystania z architektury REST. Problem polega na tym, że przez cały czas miałem tylko kłopoty. W przypadku tej aplikacji wybór między używaniem XML a JSON dosłownie sprowadzał się do rzutu monetą. Żaden z tych formatów nie oferował wiele nad drugim, więc wybrałem XML. Pisanie przekierowań URL i metod kontrolera było stosunkowo łatwe i zainteresowało mnie. Problemy pojawiły się podczas robienia rzeczy z nowymi funkcjami kontrolera. W szczególności wyszły na jaw dwa główne problemy Po pierwsze, widok listy obiektu działa ze zwykłą metodą CRUD. Dostosowanie do REST wymagało wykonania zapytania w celu pobrania wszystkich obiektów, zliczenia ich i renderowania danych wyjściowych zarówno w formacie HTML, jak i XML przy użyciu metody withFormat. Widok HTML nie pokazuje absolutnie nic w postaci wykazów, ale drzewo XML pojawia się, gdy komentuję sekcję HTML w withFormat. Więc wiem, że ta część działa. Po drugie, co zrobić, gdy pojawia się przedwczesny koniec wyjątku pliku XML, gdy w pierwszej kolejności jest to maszyna tworząca XML? W tym momencie przynajmniej dla mnie REST wydaje się bardziej rozwiązaniem w poszukiwaniu problemu. Zasadniczo kooptuje funkcje HTTP na własny użytek, gdy przekierowania kontrolera wydają się działać poprawnie. Czy to adaptacja skalowalności?


title: Czy powinniśmy używać Entity Framework?

text: Obecnie mamy następujący stos : * VS 2005 * Formularze sieci Web * SQL Server 2005 * IIS 6 Planujemy przejście do tego : * VS 2010 * MVC i formularze sieci Web * SQL Server 2008 * IIS 7 Moje pytanie brzmi, kiedy przenosimy do MVC z VS 2010, czy powinniśmy używać Entity Framework (lub innego ORM), mikro ORM (jak Massive), czy po prostu zwykłego SQL? Wszystkie samouczki, które przeczytałem o VS 2010, są nastawione na używanie Entity Framework do transakcji danych, ale czy to będzie dostępne w przewidywalnej przyszłości (5+ lat)? Jeśli ma to znaczenie, aplikacje naszego klienta mogą mieć od 10 do 1000 aktywnych użytkowników.


title: Czy tworzenie zupełnie nowego oprogramowania jest generalnie główną częścią większości prac programistycznych?

text: Pracuję w tworzeniu oprogramowania od ponad 10 lat i świta mi, że rzadko udaje mi się tworzyć coś „nowego”. Zdaję sobie sprawę, że „nowy” jest terminem niejasnym, ale zdefiniowałbym go jako wszystko, od oczywistego nowego projektu na dużą skalę do nowej dużej funkcji w istniejącym projekcie (powiedzmy coś, co wymagałoby przemyślenia w jego projektowaniu, a to może potrwa co najmniej 2 tygodnie). Może wstępna wytyczna jest czymś nowym, jeśli wymaga pisemnej specyfikacji. Myślę, że większość programistów wie, o czym mówię – jesteś w strefie, pisząc mnóstwo kodu w szybkim tempie. W każdym razie, wracając myślą do tego, co zrobiłem, szacowałbym, że mniej niż 10% mojego czasu spędzam na „nowej” pracy. Są takie rzeczy, jak „dostosowanie istniejącego systemu do pracy w nowym środowisku”, co z pewnością wymaga dużo planowania, ale samo kodowanie i „nowe rzeczy” sprowadzają się do wprowadzania drobnych zmian w wielu miejscach w kodzie. Podobnie w przypadku małych próśb o nowe funkcje - jeśli wiem, co robić, często można je ukończyć w mniej niż godzinę, a jeśli nie, to po prostu dużo czytam kod i zastanawiam się, co robić (co mnie frustruje, ponieważ uczę się znacznie lepiej robiąc, a nie czytając). Ogólnie czuję, że przez większość czasu niczego nie tworzę. Poniekąd założyłem, że tak jest w większości miejsc - nowy produkt wyjdzie dość szybko i wszyscy będą podekscytowani i szybko wywalą kod, ale potem, gdy już pojawi się na żywo, przechodzi w tryb konserwacji, gdzie kilka z późniejszych zmian uznano by za „nowe i kreatywne”. Czy się mylę? Czy dokładnie opisuję większość zadań programistycznych, czy większość programistów ma wrażenie, że często tworzy nowe rzeczy?


title: BDD/TDD czy JAD?

text: Proponowałem, aby moje miejsce pracy zaimplementowało Behavior-Driven-Development, pisząc wysokopoziomowe specyfikacje w formacie scenariusza i w taki sposób, aby można było sobie wyobrazić napisanie na to testu. Wiem, że praca z testowalnymi specyfikacjami zwiększa produktywność programistów. Przychodzi mi już do głowy kilka przykładów, w których miałoby to miejsce w naszym własnym projekcie. Jednak trudno jest wykazać wartość tego dla biznesu. Dzieje się tak, ponieważ mamy już proces wspólnego tworzenia aplikacji (JAD), w którym programiści, kierownictwo, doświadczenie użytkownika i testerzy spotykają się, aby uzgodnić wspólny zestaw wymagań. Pytają więc, dlaczego programiści powinni pracować przeciwko przypadkom testowym stworzonym przez testerów? Są one przeznaczone do weryfikacji i opierają się na specyfikacjach wyższego poziomu stworzonych przez zespół UX, nad którymi obecnie pracują deweloperzy. Mówią, że to wystarcza programistom i nie ma potrzeby zmieniać sposobu napisania specyfikacji. Wydaje się, że mają rację. Jaka jest rzeczywista korzyść z BDD/TDD, jeśli masz już zespół testowy, którego przypadki testowe są w pełni kompatybilne ze specyfikacjami wyższego poziomu, które są obecnie udostępniane programistom?


title: Wstrzykiwanie właściwości/ustawień do aplikacji

text: W aplikacjach, które piszę w pracy, często potrzebuję mieć zewnętrzny plik właściwości/ustawień, aby pewne parametry można było konfigurować po wdrożeniu aplikacji u użytkownika końcowego. Plik będzie zwykle tekstem lub XML i zazwyczaj będę implementował w C++ lub Javie. W przeszłości tworzyłem klasy Singleton do zarządzania wstrzykiwaniem tych właściwości/ustawień do mojej aplikacji. Klasa zostanie zainicjalizowana ze ścieżką do pliku, zostanie zakodowana na stałe z kluczami właściwości, których szuka w pliku, wczyta ją i przechowa wszystkie atrybuty. Inne klasy w aplikacji wykonałyby wtedy wywołanie, takie jak `propertySingleton::getInstance().getMyParameter()`. Im więcej czytam i dowiaduję się o inżynierii oprogramowania i projektowaniu, tym bardziej takie podejście wydaje się niezdarne i z natury złe. Zastanawiałem się, czy ktoś musiałby wykonywać podobne zadania i jak podejdzie do tego w przemyślany, obiektowy sposób?


title: Sesja Flash a TempData C# MVC 3

text: Trochę tła. Programista, z którym kiedyś pracowałem, nalegał na wyłączenie Tempdata i użycie Session Flash do przekazywania danych w widoku powrotu. Pytanie brzmi, czy jest jakaś korzyść z robienia tego w ten sposób? używanie wiadomości flash jest świetne do zwracania danych do użytkownika, ale miałem bóle głowy z przekazywaniem danych z jednego postu do następnego z wyłączonym tempdata. Czy jest jakiś problem z używaniem flasha i tempdata razem, czy jest to poważna fałszywa pauza w kodowaniu?


title: Okrągły stół — algorytm minimalnych kosztów

text: Problem Link - http://www.iarcs.org.in/zco2013/index.php/problems/ROUNDTABLE > W zamku Camelot jest pora obiadu, a przerażający Rycerze Okrągłego Stołu domagają się deseru. Ty, szefie kuchni, jesteś w zupie. Jest N > rycerzy, w tym Król Artur, z których każdy ma inne preferencje co do deserów, ale nie możesz sobie pozwolić na robienie deserów dla nich wszystkich. > > Otrzymujesz koszt wytworzenia ulubionego deseru każdego rycerza- > ponieważ jest to okrągły stół, lista zaczyna się od kosztu deseru króla Artura i biegnie w kierunku przeciwnym do ruchu wskazówek zegara. > > Decydujesz się wybrać najtańsze desery do zrobienia, tak aby z każdej pary sąsiadujących > Rycerzy co najmniej jeden otrzymał swój deser. Zapewni to, że > Rycerze nie będą protestować. Jaki jest minimalny koszt dzisiejszej kolacji, > biorąc pod uwagę ten warunek? Użyłem podejścia Dynamic Programming, biorąc pod uwagę najmniejsze z `i-1` & `i-2`, & wymyśliłem następujący kod - #include<cstdio> #include<algorithm> using namespace std; int main() { int n,i,j,c,f; scanf("%d",&n); int k[n],m[n][2]; for(i=0;i<n;++i) scanf("%d",&k[i]); m[0][0]=k[0]; m[0][1]=0; m[1][0]=k[1]; m[1][1]=1; for(i=2;i<n;++i) { c=1000; for(j=i-2;j<i;++j) { if(m[j][0]<c) { c=m[j][0]; f=m[j][1];} } m[i][0]=c+k[i]; m[i][1]=f; } if(m[n-2][0]<m[n-1][0] && m[n-2][1]==0) printf("%d\n",m[n-2 ][0]); else printf("%d\n",m[n-1][0]); } Użyłem drugiego wymiaru tablicy `m` do przechowywania, od którego rycerza rozpoczęła się dana sekwencja (1. lub 2.). Musiałem to zrobić ze względu na przypadek, w którym `m[n-2]<m[n-1]` ale sekwencja zaczynała się od skoczka 2, ponieważ utworzyłoby to dwa sąsiadujące skoczki bez deseru. Problem pojawia się z powodu okrągłego kształtu stołu. Teraz pojawia się anomalia, gdy rozważam przypadek – `2 1 1 2 1 2`. Program daje odpowiedź 5, gdy odpowiedź powinna wynosić 4, wybierając pierwszego, trzeciego i piątego rycerza. W tym momencie zacząłem wątpić w mój początkowy algorytm (podejście)! Gdzie popełniłem błąd?


title: Plusy i minusy Facebooka React vs. Web Components (polimer)

text: Jakie są główne zalety React Facebooka w stosunku do nadchodzącej specyfikacji Web Components i na odwrót (a może bardziej porównanie jabłek do jabłek byłoby z biblioteką Polymer Google)? Zgodnie z tym wykładem JSConf EU i stroną główną React, główne zalety Reacta to: * Oddzielenie i zwiększona spójność przy użyciu modelu komponentów * Abstrakcja, Kompozycja i Ekspresja * Wirtualne DOM i zdarzenia syntetyczne (co zasadniczo oznacza, że całkowicie ponownie zaimplementowali DOM i jego system zdarzeń) * Włącza nowoczesne zdarzenia HTML5 w IE 8 * Renderowanie po stronie serwera * Testowalność * Powiązania z SVG, VML i `<canvas>` Prawie wszystko, o czym wspomniano, jest integrowane z przeglądarkami natywnie przez komponenty sieciowe, z wyjątkiem wirtualnego DOM koncepcja (oczywiście). Widzę, jak wirtualne DOM i zdarzenia syntetyczne mogą być dziś korzystne we wspieraniu starych przeglądarek, ale czy na dłuższą metę wyrzucanie ogromnego kawałka natywnego kodu przeglądarki nie jest czymś w rodzaju strzelania sobie w stopę? Jeśli chodzi o nowoczesne przeglądarki, czy nie jest to zbyt wiele niepotrzebnych narzutów/wymyślania koła na nowo? Oto kilka rzeczy, których _myślę_, że brakuje Reactowi, a którymi zajmą się Web Components. Popraw mnie, jeśli się mylę. * Natywna obsługa przeglądarek (czytaj "gwarantowane szybsze działanie") * Pisanie skryptów w języku skryptowym, pisanie stylów w języku stylizacji, pisanie znaczników w języku znaczników. * Enkapsulacja stylu za pomocą Shadow DOM * Zamiast tego React ma to, co wymaga pisania CSS w JavaScript. Nie ładna. * Dwukierunkowe wiązanie


title: Jeśli większość zespołu nie może podążać za architekturą, co robisz?

text: Pracuję nad projektem greenfields z dwoma innymi programistami. Wszyscy jesteśmy wykonawcami, a ja i jeszcze jedna osoba właśnie rozpoczęliśmy pracę nad projektem, podczas gdy oryginalna osoba zajmowała się większością podstawowego kodowania frameworka. W zeszłym miesiącu mój kolega programista i ja byliśmy sfrustrowani decyzjami projektowymi podejmowanymi przez naszego współpracownika. Oto kilka podstawowych informacji: Aplikacja w wartości nominalnej wydaje się być twoją standardową n-warstwową aplikacją internetową używającą C# na frameworku 3.5. Mamy warstwę danych, warstwę biznesową i interfejs WWW. Ale kiedy zagłębiliśmy się w projekt, znaleźliśmy kilka bardzo interesujących rzeczy, które przysporzyły nam trochę kłopotów. Istnieje niestandardowa baza typu sqlHelper dostępu do danych, która akceptuje tylko wpisy o kluczu/wartości słownika i zwraca tylko tabele danych. Nie ma obiektów encji, ale istnieją masywne obiekty, które robią wszystko, a następnie są wrzucane do sesji dla wytrwałości. Ogólna idea jest taka, że strony (.aspx) nic nie robią, podczas gdy kontrolki (.ascx) robią wszystko. Ogólny przepływ polega na tym, że klient klika przycisk, który przechodzi do bazy kontroli użytkownika, która przekazuje żądanie procesu do klasy „BLL”, która trafia do procesora strony, który następnie przechodzi do getControlProcessor, który w końcu faktycznie przetwarza żądanie. Samo żądanie składa się ze słownika, który przekazuje nazwę metody o wartości ciągu, nazwę procedury składowanej, nazwę kontrolki i ewentualnie wartość. Całe przełączanie przetwarzania odbywa się poprzez porównanie wartości ciągów nazw kontrolek i nazw metod. Strony są połączone ze sobą za pomocą wspólnej kontrolki nagłówka, która wykorzystuje kombinację skryptu java i tabel, aby stworzyć efekt hiperłącza. A jak się wczoraj dowiedziałem, proste hiperłącze między jedną stroną a drugą nie działa, ponieważ w sesji trzeba mieć sporo informacji, aby określić, którą kontrolkę wyświetlić na stronie. Mój kolega programista i ja wierzymy, że jest to dziwne i nietypowe podejście do tworzenia aplikacji internetowych. Oboje jesteśmy w tej branży od ponad pięciu lat i żadne z nas nie widziało takiego podejścia. Moje pytanie brzmi, jak podejść do współpracownika i wyrazić swoje obawy i co zrobić, jeśli nie chce zaakceptować krytyka? Oboje nie chcemy obrażać wykonanej pracy, ale czujemy, że pójście naprzód stworzy koszmar dla rozwoju. Dzięki za komentarze.


title: Tworząc aplikację mobilną, jak pokazać pomoc, jeśli zawiera za dużo danych?

text: Tworzę aplikację mobilną, która ma wiele funkcji i jestem prawie pewien, że projekt wprowadzi użytkownika w błąd co do tego, jak korzystać z niektórych funkcji, więc zdecydowaliśmy się dołączyć pomoc, ponieważ widzimy ją regularnie w aplikacjach komputerowych, ale później znaleźliśmy tekst pomocy jest za długi. Uważamy, że jeden ekran nie wystarczy, aby opisać, co może zrobić użytkownik. Ponadto sam projekt podlega ewolucji w oparciu o fazę beta i raporty użytkowników. Po wielu przemyśleniach i spotkaniach zdecydowaliśmy się na trzy opcje, aby pokazać użytkownikom, co mogą zrobić. 1. Stwórz stronę internetową lub blog, abyśmy mogli poinformować użytkowników, co mogą zrobić z tą aplikacją, zaletą jest to, że może ona zapewnić nam dobre źródło marketingu, ale w tym celu muszą uzyskać dostęp do witryny, podczas gdy większość aplikacja może być używana w trybie offline we wcześniejszych wersjach. 2. Stwórz w aplikacji sekcję o nazwie demos, aby pokazywać to samo lokalnie, ale obawiamy się, że zwiększy to rozmiar, którego naszym zdaniem można uniknąć (a planujemy tego uniknąć, jeśli jest jakaś opcja) 3. Pokaż wyskakujące okienka, ale odrzuciliśmy myślenie, że wyskakujące okienka irytują użytkownika bez względu na platformę. Chcę wiedzieć od społeczności, którą opcję wybierzesz, jesteśmy również otwarci na przyjęcie innych pomysłów, jeśli masz.


title: Czy możliwe jest wzajemne wykluczanie wątków bez obsługi systemu operacyjnego?

text: Przypuszczam, że mógłbyś zaadaptować rozproszone algorytmy wzajemnego wykluczania (Ricart/Agrawala itp.), ale oprócz tych bardziej egzotycznych podejść, czy musisz używać prymitywów dostarczanych przez system operacyjny, aby osiągnąć wzajemne wykluczanie? Na przykład w C# użyjesz czegoś takiego jak lock: lock (myobject) { // Zrób coś } Lock następnie używa zmiennej warunkowej dostarczonej przez system operacyjny (chyba?). Ze wszystkiego, co przeczytałem o monitorach, wszystkie polegają na tym, że pewne sekcje implementacji monitora są wykonywane atomowo. A jedynym sposobem (który przychodzi mi do głowy) zagwarantowania tego jest to, że jądro wyraźnie to uczyniło. Czy to jest poprawne?


title: Czy sprzedawcy powinni ingerować w analizę i projektowanie aplikacji?

text: Pracujemy nad czymś w rodzaju CMS, szybkim, hostowanym, scentralizowanym narzędziem do tworzenia stron internetowych, takim jak Weebly. Korzystamy również z modelu rozwoju Scrum. Ale wydaje się, że są tu pewne problemy. Nasz kierownik sprzedaży zawsze przychodzi do nas, narzekając na projekt aplikacji, elementy interfejsu użytkownika itp. i utrudniając proces rozwoju, wykonując kolejne poprawki. Przykłady to: 1. Dlaczego masz akcje dotyczące elementów, takie jak usuwanie i edycja elementów w siatce? Wystarczy mieć listę działań jako pasek narzędzi na górze siatek. Brak akcji dotyczącej przedmiotu. 2. Dlaczego kolor czerwony? Użyj zielonego. To jest to, co ludzie lubią. 3. Użyj drzewa do treści, a nie siatki. Moje pytanie jest naprawdę proste. Czy ingerowanie w analizę i projektowanie aplikacji jest uważane za produktywne, a nawet normalne, że personel sprzedaży?


title: Orientacja obiektów wykonana poprawnie z PHP

text: Zacząłem pracować z tworzeniem stron internetowych używając PHP jako języka programowania po stronie serwera. W tamtym czasie nie znałem korzyści z orientacji obiektowej i miałem trudności z pisaniem bardziej łatwego w utrzymaniu kodu (na przykład oddzielenie prezentacji od logiki itp.). Po kilku latach wiedziałem o ASP.NET MVC i spróbowałem. Nauczyłem się, jak pracować z platformą .NET przy użyciu języka programowania C# i naprawdę odkryłem, jak lepiej zorganizowane mogą być moje aplikacje przy użyciu dobrej orientacji obiektowej (na przykład wstrzykiwanie zależności było czymś, co gdy zobaczyłem to po raz pierwszy, pomyślałem : "to wszystko, czego zawsze potrzebowałem"). Chodzi o to, że chociaż jestem zadowolony z pracy z ASP.NET MVC, to w niektórych projektach nadal potrzebuję pracować z PHP, jednak zastanawiałem się, czy da się wnieść wszystkie korzyści z orientacji obiektowej na PHP. Nie znalazłem sposobu, aby to zrobić samodzielnie, ponieważ na przykład PHP nie jest silnie wpisane, więc korzystanie z wstrzykiwania zależności staje się trochę skomplikowane, czego nauczyłem się podczas pracy z ASP.NET MVC. Ponadto wiele rzeczy, których nauczyłem się podczas pracy z MVC w ASP.NET, chociaż bardzo fajne i przydatne, nie znalazłem sposobu, aby zrobić to samo w PHP. Teraz pojawia się pytanie: czy ktoś wie o zasobach, aby dowiedzieć się, jak czerpać korzyści z tych wszystkich fajnych rzeczy, od OOP do PHP? Interesują mnie wszelkie zasoby: książki, samouczki, filmy itp. Z góry bardzo dziękuję i przepraszam, jeśli to pytanie jest głupie.


title: Jak najlepiej rozpoznać doskonałego programistę podczas rozmowy o pracę?

text: W kontekście rozmowy kwalifikacyjnej: Jaki jest najlepszy sposób, aby wiarygodnie zidentyfikować, kiedy ktoś jest **doskonałym programistą**. Rozumiem przez to, że jest jednym z tych, którzy są 10-15 razy wydajniejsi / szybsi / lepiej niż jego rówieśnicy w dolnej części spektrum. Wielu z nas słyszało o problemie FizzBuzz jako o sposobie na wyeliminowanie słabych. Z pewnością poświęcenie 5-10 minut na rozwiązanie tego problemu jest poważnym wskaźnikiem, że kandydat jest słabym kandydatem. Uważam, że dobrym wskaźnikiem jest możliwość rozwiązania tego tak szybko, jak możesz pisać. To jednak nie wydaje się wystarczające. Czy to może być coś w rodzaju udostępnienia mu umiarkowanie skomplikowanego programu z błędami i zobaczenia, jak szybko może go znaleźć i zidentyfikować wszystkie problemy z nim?


title: Dostęp do historii `ref` w Clojure

text: Dokumentacja dla ref pokazuje opcję :max-history i stwierdza, że "odnośniki gromadzą historię dynamicznie w miarę potrzeb, aby poradzić sobie z żądaniami odczytu". Widzę, że w REPL jest historia, ale nie widzę, jak znaleźć poprzednie wartości ref: user=> (def the-world (ref "hello" :min-history 10)) #'user/ the-world user=> (do (dosync (ref-set the-world "better")) @the-world) "better" user=> (let [exclamator (fn [x] (str x "!"))) ] (dosync (zmień wykrzyknik-świat) (zmień wykrzyknik-świat) (zmień wykrzyknik-świat)) @the-world) "lepiej!!!" user=> (ref-history-count the-world) 2 Przypuszczalnie świat-świat miał wartości "hello", "lepiej" i "lepiej!!!". Jak uzyskać dostęp do tej historii? Jeśli nie można uzyskać dostępu do tej historii, czy istnieje typ danych, który przechowuje historię jego wartości, które można później przeszukiwać? A może dlatego stworzono datomową bazę danych?


title: Jak można ulepszyć strukturę mojego kodu?

text: Szukam porady, jak najlepiej ustrukturyzować mój kod. class Password { prywatny szyfr łańcuchowy; Hasło(cipher cipher) { this.cipher = cipher; } public string HashPassword() { } public bool VerifyPassword() { } } Ideą tej klasy jest abstrakcja procesu haszowania haseł. Klasa przedstawi użytkownikowi dwie funkcje, `HashPassword()` i `VerifyPassword()`, które wykonają zupełnie inne algorytmy haszujące w zależności od wartości zmiennej `cipher`. Obecnie używam zestawu instrukcji warunkowych `if/else` w obrębie tych dwóch funkcji, aby określić, który algorytm mieszający wykonać. Jednak wydawało mi się to dość nieeleganckie. Czy istnieje lepszy sposób na uporządkowanie mojego kodu?


title: Czy termin „Front-End” jest synonimem „Strona klienta”? Jeśli tak, czy tak jest zawsze?

text: Jako stosunkowo nowy (samouk) programista WWW dość często słyszałem terminy _front-end_ , _client-side_ , _back-end_ i _server-side_. Dla mnie front-end i back-end zawsze były synonimami odpowiednio po stronie klienta i po stronie serwera. Jednak, gdy zacząłem pracować z frameworkami MVC, takimi jak CodeIgniter, natknąłem się na kilka przypadków front-endu odwołującego się w zasadzie do wszystkiego, co widzi użytkownik końcowy (w tym kodu po stronie serwera), podczas gdy back-end odnosi się do czegokolwiek użytkownik końcowy nie widzi (w tym CMS). Po stronie klienta i po stronie serwera są dla mnie znacznie bardziej konkretne w swoich znaczeniach; mają bardzo wyraźną linię oddzielającą je. Z drugiej strony front-end i back-end nie. Pamiętam, że w rozmowie z innym web developerem odniósł się do CodeIgniter (w całości) jako front-end i to mnie zaskoczyło. Nie byłam pewna, czy mam go poprawić i powiedzieć, że CodeIgniter był moim zapleczem, czy też moje definicje tych dwóch terminów były całkowicie błędne. Poszukiwanie definicji front-endu i back-endu nieco bardziej zdezorientowało mnie pod pewnymi względami, chociaż wyjaśniło kilka rzeczy. Chciałbym tylko wiedzieć, gdzie są narysowane linie między tymi czterema terminami i jak łączą się one w kontekście tworzenia stron internetowych (w szczególności na stosie LAMP).


title: Czy powinienem przygotować się do konkurowania z firmą, która mnie nie zatrudnia?

text: Rozmawiałem ostatnio z firmą programistyczną i w moim ostatnim (i ostatnim) wywiadzie dowiedziałem się więcej o projekcie, nad którym będę pracował: jak jest zaprojektowany, co wymaga konserwacji i jakie są ich główne obawy ulepszanie go w przyszłości. Chodzi o to, że zrobiłem kilka niezależnych badań, które byłyby idealne do zintegrowania z ich systemem, ale nie wiem jeszcze, jak oni uważają, że przebiegł mój wywiad. Czy powinienem przygotować się na możliwość, że nie zostanę zatrudniony, zaczynając rozwijać swój pomysł, co jest równoznaczne z bezpośrednim konkurentem ich produktu? Byłaby to znaczna inwestycja czasowa, ale ma dwa możliwe pozytywne skutki: sam liczę na swój pomysł lub w końcu i tak mnie zatrudniają, dając mi coś do pokazania dla siebie. Najbardziej prawdopodobny negatywny wynik jest taki sam, jak w przypadku każdego nieudanego spekulacyjnego projektu oprogramowania: stracony czas, który można było poświęcić na mniej ryzykowne przedsięwzięcia. Po prostu ciekaw, co powinienem zrobić. Jestem zajętym facetem i ważne jest, żebym był zdecydowany.


title: Jaka jest największa wada projektowa, z którą miałeś do czynienia w jakimkolwiek języku programowania?

text: Wszystkie języki programowania mają swoje wady projektowe po prostu dlatego, że żaden język nie może być doskonały, tak jak w przypadku większości (wszystkich?) innych rzeczy. Poza tym, który błąd projektowy w języku programowania irytował cię najbardziej w twojej historii jako programisty? Zwróć uwagę, że jeśli język jest „zły” tylko dlatego, że nie jest przeznaczony do konkretnej rzeczy, nie jest to wada projektowa, ale _cecha_ projektu, więc nie wymieniaj takich uciążliwości języków. Jeśli język nie jest dostosowany do tego, do czego jest przeznaczony, jest to oczywiście wada projektu. Wdrożenie konkretnych rzeczy i rzeczy pod maską też się nie liczą.


title: Jak porównać oferty pracy programistów z firm z różnych krajów?

text: _To nie jest pytanie dla programistów, ale nie jestem pewien, czy jest to bardziej odpowiednie miejsce, i myślę, że użytkownicy tej witryny najlepiej potrafią odpowiedzieć na to pytanie w kontekście programistów._ Wydaje się, że przeprowadzka do Stanów Zjednoczonych dość powszechne w branży programistycznej. Mieszkam w Wielkiej Brytanii i może pewnego dnia też to zrobię. Jeśli więc ten dzień nadejdzie - jak byś porównywał oferty pracy? Świadczenia są dość łatwe do porównania, ale biorąc pod uwagę różnice w kosztach życia, jak byś porównywał zarobki i jakość życia? W kraju, w którym koszty utrzymania są niższe, możesz zaakceptować niższą pensję (w oparciu o kurs wymiany) i nadal mieć taką samą jakość życia. Ale co możesz zrobić, aby to zapewnić? W niektórych przypadkach możesz nawet przyjąć „podwyżkę płac” pod względem kursu wymiany, ale kończy się to znacznie gorzej. Jak możesz porównać oferty pracy w różnych krajach, aby zorientować się, jakiej pensji potrzebujesz, aby nie czuć, że się „cofasz”?


title: Słyszałem „dynamiczne” zmiany w czasie działania? Co to jest?

text: Słyszałem, że te (powiedzmy na przykład Groovy) języki mają możliwość dynamicznej zmiany nazwy zmiennej lub wywoływania metod w czasie wykonywania! Co miałeś na myśli mówiąc **dynamiczne** języki? A jaka jest rzeczywista potrzeba zmiany dowolnych wartości w czasie wykonywania? Czy to nie prowadzi do nieporozumień, ponieważ w czasie wykonywania, jeśli zmienisz jakąkolwiek wartość (lub twoje elementy programistyczne coś zmienią), to jaka jest potrzeba kompilacji (ponieważ decyduje i potwierdza, że te wartości zostaną użyte, to nie ma sensu zmieniając to dynamicznie)? I wiem, że powinno być coś pożytecznego, więc tylko ludzie wprowadzili te pojęcia! Wydaje mi się, że moje pytanie jest jasne! I potrzebuję krótkiego wyjaśnienia :)


title: Pytanie terminologiczne ISTQB (Defekt)

text: Według ISTQB (i kilku innych źródeł + wiki ) defekt/błąd jest faktyczną przyczyną błędu w oprogramowaniu, np. nieprawidłowe stwierdzenie, błąd logiczny lub semantyczny. Właściwa definicja to: wada w systemie lub komponencie, która może prowadzić do awarii. Ale co z błędami specyfikacji? Nie mogę się do tego odnieść. Błędy specyfikacji są dość powszechne, ale jeśli programista implementuje oprogramowanie zgodnie ze specyfikacją z błędem, to nie jest to jego wina (IMHO). Ale wtedy definicja nie mogła mieć zastosowania i jestem pewien, że musiała zostać jakoś rozwiązana. Czy możesz mi pomóc to zrozumieć?


title: Link Visual Basic do danych wyjściowych SQL do Worda

text: Potrzebuję porady / referencji. Obecnie staram się opracować interfejs dokumentów prawnych. Istnieją pewne pola, w których muszę wysyłać zapytania z mojej bazy danych sql i wyświetlać te pola w dokumencie, który można wydrukować. Staram się opracować interfejs użytkownika, w którym ludzie będą mogli wprowadzać pola, które wyjdą do szablonu dokumentu, ale jednocześnie potrzebuję szablonu, aby móc pobierać dane z bazy danych SQL. To jest powód, dla którego uważam, że VB może być moim najlepszym wyborem i dlatego, że jest to jeden z niewielu języków OOP, który znam obecnie. Czy ktoś zna ten najlepszy sposób, aby poradzić sobie z tego typu pracą? Wiem, że możesz używać VBA w MS Word i mieć zmienne wyjściowe formularza do szablonu słowa. Ale czy istnieje sposób, aby dokument Word pobierał również informacje z bazy danych SQL? Czy najlepszą opcją jest użycie VB połączonego z SQL i uruchomienie zapytań w celu uzyskania informacji z bazy danych, a następnie wyprowadzenia ich do for w obrębie VB? Czy jest możliwe, aby VB był połączony z bazą danych SQL, a zmienne wyjściowe i pola SQL z szablonem Word? Zajrzałem do funkcji korespondencji seryjnej i widzę, że umożliwia ona użytkownikom pobieranie danych z zapytania programu Access, ale nie sądzę, aby było to łatwe do zautomatyzowania i wydaje się, że użytkownicy musieliby mieć zaawansowaną wiedzę na temat MS Word i Access, aby sobie z tym poradzić . Nie znajduję wielu przydatnych informacji w Internecie, więc trafiłem tutaj. Wszelkie porady lub referencje byłyby bardzo mile widziane. Jeśli istnieje lepszy sposób, daj mi znać.


title: Skąd wiedzieć, jakich technologii użyć?

text: Jestem świeżo upieczonym absolwentem szkoły inżynierskiej SW i chcę stworzyć mały program. Na przykład program może być programem sieci Web z klientem, który nie jest przeglądarką (mobilny lub stacjonarny), lub bez niego. Moje pytanie brzmi, skąd mam wiedzieć, jakich technologii i języków użyć? Jest tak wiele modnych słów.


title: Czy możliwe jest iteracyjne tworzenie dokumentacji i czy dostarcza to efektywnej dokumentacji?

text: Mam projekt na uniwersytet, którego nie zacznę od razu, ale myślę o nim dość długo. Rozumiem, że rozwój projektów uniwersyteckich nie jest podobny do przemysłu (sam obecnie jestem praktykantem), więc sytuacja, którą w tym momencie zwrócę, prawdopodobnie wyda się nieco śmieszna dla prawdziwych programistów. ^^' Sam projekt wymaga dużo udokumentowania naszej pracy. Tak więc, poza dostarczeniem kodu, który liczy się do niektórych punktów, musimy dostarczyć dokumenty, w tym: * Dokument analizy wymagań * Plan projektu * Planowaną listę przypadków użycia, modeli obiektowych i dynamicznych oraz testów akceptacyjnych * Dokumentację testów proces i skuteczność testów * Niektóre inne dyskusje i analizy wykorzystania czasu itp. Te wyniki mają być dostarczone w następujący sposób: * Najpierw RAD * Następnie plan projektu, przypadki użycia, modele i testy (około 3 tygodnie później ) * Wreszcie, dokumentacja rzeczywistego programu, procesu testowania itp. + samo rzeczywiste programowanie (około 5 tygodni później) Tak więc, z tego, co rozumiem, jest to naprawdę ukierunkowane na podejście do projektu w stylu Wodospadu. Jedynym problemem (moim zdaniem) jest to, że jest to projekt uniwersytecki, a studenci już mają wystarczającą presję, jak w przypadku prób rozwijania projektów pod koniec semestru podczas tygodnia projektowego. Tak naprawdę nie chcę kodować/rozwijać/testować wszystkiego pod koniec semestru, kiedy będę panikować z tyloma innymi ocenami, z którymi mam do czynienia. Chciałbym przynajmniej spróbować wykonać jakiś iteracyjny cykl rozwojowy, co oznacza, że możemy zacząć kodować/prototypować wcześnie, mieć ciągły cykl rozwojowy, który nie jest skoncentrowany na robieniu wszystkiego na ostatnią chwilę i nie wywierać tak dużej presji na koniec semestru na zakończenie tego projektu. A teraz nadchodzą moje pytania: * Czy mogę jakoś pogodzić konieczność dostarczenia całej tej dokumentacji z szybkim, iteracyjnym/prototypowym cyklem rozwoju? * Czy istnieją strategie generowania dokumentacji w sposób iteracyjny? * Czy jestem całkowicie nierozsądny, pytając o to i oczekując, że będzie to wykonalne na uniwersytecie? Rozumiem również, że to pytanie jest bardzo zlokalizowane, więc chciałbym zadać te same pytania, które zadałem powyżej w odniesieniu do branży i czy wiele tego rodzaju problemów, z którymi borykają się procesy zwinne, jest różnych dla każdego zespołu lub firma. W każdym razie przepraszam za to, jak długo to trwa, a jeśli skończyłeś czytać do końca, dziękuję! Gdybyś mógł poświęcić czas na odpowiedź, byłbym bardzo wdzięczny! Dziękuję Ci!


title: Jak zakpić metodę z zakodowanym na sztywno obiektem?

text: Pracuję nad aplikacją, która ma wiele warstw. Warstwa dostępu do danych do pobierania i zapisywania danych ze źródła danych, logika biznesowa do manipulowania danymi, interfejs użytkownika do wyświetlania danych na ekranie. Wykonuję również testy jednostkowe warstwy logiki biznesowej. Jedynym wymaganiem jest przetestowanie przepływu logiki warstwy biznesowej. Dlatego używam frameworka Moq do makiety warstwy dostępu do danych i testów jednostkowych warstwy logiki biznesowej za pomocą MS Unit. Używam programowania interfejsu, aby projekt oddzielić jak najwięcej, aby można było wykonać test jednostkowy. Warstwa biznesowa Warstwa dostępu do danych połączeń poprzez interfejs. Mam problem, gdy próbuję przetestować jedną z metod logiki biznesowej. Ta metoda działa i tworzy obiekt i przekazuje go do warstwy dostępu do danych. Kiedy próbuję zakpić, że metoda warstwy dostępu do danych nie może skutecznie zakpić. Tutaj próbuję stworzyć kod demonstracyjny, aby pokazać mój problem. Model: public class Pracownik { public string Nazwa { get; ustawić; } } Warstwa dostępu do danych: identyfikator interfejsu publicznego { string GetMessage(Employee emp); } public class Dal : IDal { public string GetMessage(Employee emp) { // Wykonywanie jakiejś pracy związanej z dostępem do źródła danych... return string.Format("Witaj {0}", emp.Name); } } Warstwa logiki biznesowej: interfejs publiczny IBll { string GetMessage(); } public class Bll : IBll { private readonly IDal _dal; public Bll(IDal dal) { _dal = dal; } public string GetMessage() { // Obiekt tworzący wewnątrz metody logiki biznesowej. Pracownik emp = nowy Pracownik(); ciąg msg = _dal.GetMessage(emp); wiadomość zwrotna; } } Test jednostkowy: [TestMethod] public void Is_GetMessage_Return_Proper_Result() { // Rozmieść. Pracownik emp = nowy Pracownik; // Nowy obiekt. Mock<IDal> mockDal = new Mock<IDal>(); mockDal.Setup(d => d.GetMessage(emp)).Returns("Witaj " + emp.Name); IBll bll = nowy Bll(mockDal.Object); // Działać. // Spowoduje to utworzenie kolejnego obiektu pracownika w // metodzie logiki biznesowej, który różni się od obiektu // wysłanego przeze mnie w czasie kpiny. ciąg msg = bll.GetMessage(); // Potwierdź. Assert.AreEqual("Witaj arnab", msg); } W przypadku testu jednostkowego w momencie mockowania wysyłam obiekt Employee, ale podczas wywoływania metody logiki biznesowej tworzy inny obiekt Employee wewnątrz metody. Dlatego nie mogę kpić z obiektu. W takim razie jak zaprojektować, abym mógł rozwiązać problem?


title: Jakie są przykłady odwróconego dziedziczenia klasycznego?

text: Czy są jakieś przykłady dziedziczenia w językach, w których klasy nazywają metody swoich podklas, a nie metodami swoich superklas? Nie powinien zachowywać się jak tradycyjne dziedziczenie, jak poniżej. Parent.method = function () { // Rób rzeczy } Child.method = function () { // Rób rzeczy super.method() // Rób rzeczy } Zamiast tego powinien zachowywać się tak. Parent.method = function () { // Robi rzeczy sub.method() // Robi rzeczy } Child.method = function () { // Robi rzeczy } Czy ten wzorzec ma nazwę?


title: Zapytania w architekturze trójpoziomowej

text: Zastanawiam się, gdzie powinny znajdować się zapytania DB w architekturze trójwarstwowej. Pierwsze skojarzenie, które myśli, znajduje się w DAL. Ale jeśli BL chce szukać obiektu, DAL musi publikować metody dla każdego możliwego wyszukiwania (nierealistyczne - dużo pracy). Druga opcja znajduje się w BL. Ale wtedy BL musi wiedzieć, jak DB zaprojektował ... (Enkapsulacja nie jest dobra) Trzecią opcją jest to, że DAL opublikuje jakiś obiekt, taki jak "QueryBuilder" lub coś podobnego, a BL zbuduje zapytanie ze słabym powiązaniem ( ale nadal potrzebne) do DB. Jaka jest najlepsza opcja, aby umożliwić BL przeprowadzenie wyszukiwania?


title: Pomóż mi myśleć w C++

text: Używam głównie języków dynamicznych. Od wielu lat widzę statycznie typowane przykłady hello world, takie jak const int STACK_SIZE = 100; I pomyślę „wow, nie mogę tak myśleć”. Rozumiem zarządzanie pamięcią, składnię, wskaźniki (głównie). Proszę, wpuść mnie na chwilę do swojego mózgu i przeanalizuj ze mną ten przypadek użycia. Załóżmy, że mamy aplikację wiersza poleceń, która pozwoli nam zarządzać pracownikami (ekscytujące!). Skupmy się tylko na dodawaniu nowych pracowników. Jesteśmy nowym, modnym startupem, który zrobi zdjęcie księżyca, więc nasza lista pracowników zacznie się od 1, ale w końcu dodamy 7 miliardów współzałożycieli, a może więcej (obcy? psy? koty?). W ruby/python/javascript po prostu utworzyłbym tablicę i cierpiał/refaktorował później, gdy wydajność jest straszna. Oczywiście użyjesz bazy danych w C++ lub w innym języku. Ale zajmijmy się tym przez chwilę. Czy osoba C++ rozwiązałaby problem poza jedną strukturę danych? Myślę o tym problemie jako o problemie „tablicy”. Ale może ktoś z mniejszym doświadczeniem myśli tak? * Utwórz bufor do przechowywania listy, gdy użytkownik dodaje nazwy, może to być stały rozmiar * Okresowo opróżniaj bufor do pliku lub czegoś podobnego. Czy to realistyczne? Rozumiem, że wymagania tutaj są wymyślone i niejasne. Ale powiedzmy, że programista C++ tworzył tę małą aplikację dla siebie. Czy po prostu użyliby inteligentnego wskaźnika, czy czegoś, co rosłoby z czasem, czy też stworzyliby `std::string*`? Podam inny przykład. Powiedzmy, że piszesz problem, aby przejść przez plik w pętli i zrobić coś z każdym wierszem. Niektórzy ludzie (w tym ja) zaczynają myśleć od małego przykładowego pliku. Później okazuje się, że Twój problem nie radzi sobie z dużymi plikami. Ups. Czasami wydaje mi się, że programiści niższego poziomu naturalnie dokonaliby wstępnej optymalizacji z powodu dyscypliny lub doświadczenia, aby odczytać plik w buforze lub coś w tym rodzaju. Czy sie zgadzasz?


title: Zrozumienie powiązania danych dla Windows Phone 7

text: Chcę stworzyć prostą aplikację na platformę Windows Phone 7. Jest to w zasadzie gra oparta na słownictwie, która polega na przenoszeniu płytek słów z jednego obszaru do drugiego, aby zdobyć punkty. Chcę wiedzieć, jaki jest najlepszy sposób powiązania interfejsu użytkownika z zapleczem gry? Widziałem filmy inicjujące Windows Phone 7, tam poprawiają wiązanie danych, ale tak naprawdę nie wchodzą w żadne szczegóły. Jestem nowicjuszem i nie mam żadnego doświadczenia w projektowaniu architektury aplikacji na telefon. Byłoby wspaniale, gdyby ktoś mógł wyjaśnić, jakie kroki powinienem podjąć lub poprowadzić mnie do zasobu, z którego mogę dowiedzieć się więcej.


title: Która technologia dla wieloplatformowego oprogramowania do zarządzania hotelem w przeglądarce internetowej/komputerowej?

text: mam nadzieję, że jestem we właściwym miejscu, aby o to zapytać. Klient, dla którego stworzyłem oprogramowanie do zarządzania grupą (w Flex) prosi mnie teraz o stworzenie pełnoprawnego oprogramowania do zarządzania hotelem (dostosowanego do jego konkretnych potrzeb, dlatego nie korzysta z już istniejącego). Chce jednak mieć do niego dostęp w sieci i mieć wersję tylko na komputer (jeśli internet z jakiegoś powodu nie będzie działał). Co więcej, powinno działać na komputerach Mac i Windows. Oprogramowanie powinno być w stanie wykonać księgowość, zarządzanie pokojami, edycję szablonów, tworzenie plików PDF, eksportowanie Excela, tworzenie wiadomości e-mail w formacie HTML, wiele raportów itp. To dla mnie prawdziwy problem, ponieważ wiem, że większość z tych aplikacji jest napisany w .NET lub podobnym, aby mieć łatwy dostęp do wszystkich komponentów Office, Outlooka itp. Jednak potrzebujemy również wsparcia dla komputerów Mac. Myślałem o użyciu Flex/Air, które dałoby mi wiele platform, sieci i pulpitu, ale obawiam się, że Air nie zawiera wszystkich możliwości eksportu do Excela, edycji szablonów, integracji z Outlookiem itp. A także czasu rozwoju może być znacznie wyższa niż w .NET, obawiam się. Jakieś sugestie, jak poradziłbyś sobie z tym problemem? Dzięki, Martin


title: Czy „Junior” może być użyty w CV?

text: Nie wiem, czy „Junior” to przydatny tytuł. Czy tytuł Jr. Developer można wykorzystać w CV? Chcę dobrze pasować do czegoś, co jest na poziomie podstawowym, ale wciąż stanowi wyzwanie. Przykłady: Jr. Web Developer, Jr. Developer, Jr. Software Engineer


title: Metoda Java Object.wait z nanosekundami: czy to żart, czy czegoś mi brakuje?

text: Z ciekawości sprawdzałem kod źródłowy Java API (Java 8). I znalazłem to w `java/lang/Object.java`. Istnieją trzy metody o nazwie `wait`: * `public final native void wait(long timeout)`: To jest rdzeń wszystkich metod wait, które mają natywną implementację. * `public final void wait()`: po prostu wywołuje `wait(0)`. * A potem jest `public final void wait (długi limit czasu, int nanos)`. Dokument JavaDoc dla konkretnej metody mówi mi, że > Ta metoda jest podobna do metody wait z jednym argumentem, ale umożliwia > lepszą kontrolę nad czasem oczekiwania na powiadomienie przed > poddaniem się. Ilość czasu rzeczywistego, mierzona w nanosekundach, wyraża się wzorem: > > > 1000000*timeout+nanos > Ale w ten sposób metody _osiągają_ "lepszą kontrolę nad czasem oczekiwania": if (nanos >= 500000 || (nanos != 0 && timeout == 0)) { timeout++; } czekaj(limit czasu); Więc ta metoda w zasadzie robi zgrubne zaokrąglanie nanosekund do milisekund. Nie wspominając o tym, że wszystko poniżej 500000ns/0,5ms zostanie zignorowane. Czy ten fragment kodu jest zły/niepotrzebny, czy może brakuje mi jakiejś niewidzialnej cnoty deklarowania tej metody i nie jest to kuzyn argumentów, jak są?


title: Firma wysyła do klientów wersje debugujące oprogramowania

text: Hej, jestem młodszym programistą pracującym w firmie. Właśnie dowiedziałem się, że od czterech lat udostępniają klientom kompilację debugowania swojego produktu, ponieważ wersja wydania jest zepsuta (i jest od kilku lat). Moją pierwszą reakcją było przerażenie i nadal jestem, ale czy to powszechne? Czy nie jest to tak duży problem (zarówno biznesowy, jak i pod względem kodu), jak mi się wydaje? Z góry dziękuję za odpowiedź i przepraszam, jeśli źle to oznaczyłem.


title: Czy Open Source prowadzi do złego kodowania?

text: Mam myśl, że próbowałem zapytać w SO, ale nie wydawało mi się to odpowiednim miejscem. Myślę, że strony źródłowe, takie jak Google Code, GitHub, SourceForge... odegrały ważną rolę w historii programowania. Jednak odkryłem, że jest jeszcze jedna zła rzecz w tego typu witrynach, a mianowicie, że możesz po prostu „skopiować” kod od prawie każdego, nie wiedząc, czy jest to dobre (przetestowane) źródło, czy nie. Ten tok myślenia sprawił, że uwierzyłem, że strony internetowe z kodem źródłowym prowadzą wielu programistów (najprawdopodobniej niedoświadczonych) do kopiowania/wklejania ogromnych ilości kodu, co jest po prostu błędne. Naprawdę nie wiem, jak dobrze skoncentrować się na pytaniu, ale podstawową myślą byłoby: Czy to jest w porządku? Czy Open Source przyczynia się do tego, czy po prostu widzę duchy... Mam nadzieję, że ludzie się zainteresują, ponieważ myślę, że to ważny temat.


title: Wyszukiwanie przyrostowe wyników MySQL

text: Podczas wyprowadzania danych w dużym pliku staram się wyrobić w sobie nawyk stopniowego wyprowadzania danych porcjami, aby zapobiec odczytaniu całego dużego pliku do pamięci. Jako przykład pokażę, o co mi chodzi: $fp = fopen('ścieżka/do/pliku.txt', 'r'); while (!feof($fp)) { echo fread($fp, 8192); } fclose($fp); Czy ta sama praktyka byłaby możliwa przy pobieraniu wartości z wyniku bazy danych? Jeśli tak to jak? O ile mi wiadomo, możliwość pobierania niebuforowanych wyników z MySQL ma zastosowanie tylko do wiersza po wierszu — a nie do kolumny. Poniżej przedstawiono podstawowy przykład (jestem świadomy, że rozszerzenie mysql jest przestarzałe - służy to jedynie celom ilustracyjnym): $q = mysql_incremental('SELECT `filedata` FROM `large_files` WHERE `id` = 1'); while (!mysql_incremental_eof($q, 'filedata')) { echo mysql_fetch_incremental($q, 'filedata'); } mysql_free_result($q); Możliwym rozwiązaniem, o którym pomyślałem, jest połączenie wielu zapytań o części pliku, korzystając z funkcji `SUBSTRING()` dostępnej w MySQL. Wyobrażam sobie, że chociaż może to być bardziej wydajne pod względem pamięci, zastanawiam się, jaki będzie wpływ na wykorzystanie sieci i aktywność dysku?


title: Jakie są ogólne wytyczne i porady, aby oszacować, ile powinieneś zapłacić za projekt, będąc początkującym freelancerem?

text: Jestem doświadczonym programistą, ale zupełnie nowym na rynku. Ktoś chce, żebym zrobił dla nich projekt, ale nie wiem ile to jest warte. Jakie są ogólne wytyczne/rady dotyczące określenia wartości projektu na rynku? Jeśli mogę tutaj zapytać o ten konkretny, jest to strona HTML5 z formularzem logowania/rejestracji i odtwarzaczem wideo, który musi odtwarzać zsynchronizowane wideo wykładowe i slajdy PowerPoint. Dadzą mi wideo, audio powerpointy. Powinienem też wcześniej edytować wideo.


title: Jakie są zalety jednostki SKU $ VS2012 nad Express?

text: Będę używał programu Visual Studio tylko do tworzenia aplikacji C#/XAML Windows Store. Czy jest jakiś powód, dla którego mam kupić „Professional” SKU VS 2012, zamiast korzystać z wersji Express (bezpłatnej) „Metro apps with C#/XAML”? Jedyne, co przychodzi mi do głowy, to to, że nie będę mógł korzystać z Resharpera w wersji Express (na którą już wykupiłem licencję, ale używam go w pracy, więc nie będzie to strata pieniędzy jeśli nie mogę go używać w domu) - plus, wierzę, że nawet Express SKU VS 2012 będzie miał wbudowane narzędzie do podobnej jakości kodu.


title: Jak obsłużyć licencjonowanie kodu Ruby on Rails, który zawiera bibliotekę LGPL?

text: Moja firma chce wydać kod aplikacji demonstracyjnej Ruby on Rails, która zawiera kod naszej własnej biblioteki LGPL. Z prawnego punktu widzenia koszerne jest stwierdzenie, że zawartość całego repozytorium jest udostępniana na licencji LGPL, chociaż zawiera ona „gotowe” pliki Ruby on Rails, które są generowane z każdą aplikacją, np. `boot.rb` i `application.rb` ?


title: Czy istnieją scenariusze, w których „wzorzec usuwania” nie powinien być używany w obiekcie zawierającym zasoby zarządzane i niezarządzane?

text: MSDN mówi, że aby prawidłowo wyczyścić obiekt, który zawiera zarządzane i niezarządzane zasoby, musisz zaimplementować „Wzorzec usuwania”. Biorąc pod uwagę, że klasa implementuje interfejs IDisposable i przesłania metodę Object.Finalize() (ma destruktor), **czy jest jakiś powód, dla którego kompilator nie powinien automatycznie zaimplementować wzorca za Ciebie?** Na przykład kompilacja: public class Przykład : IDisposable { public void Dispose() { //Usuwanie implementacji obiektów zarządzanych } ~Przykład() { //Usuwanie implementacji obiektów niezarządzanych } } Jakby to było wpisane w następujący sposób: public class Przykład : IDisposable { private bool previousDisposed = fałszywy; private void CleanResources(bool safeToCleanManagedResources) { if (!this.previouslyDisposed) { _finalize(); if (safeToCleanManagedResources) { _dispose(); } this.previousDisposed = true; } } public void Dispose() { CleanResources(true); GC.SuppressFinalize(to); } ~Przykład() { CleanResources(false); } private void _dispose() { //Zawartość metody Dispose() została przeniesiona tutaj. } private void _finalize() { //Zawartość metody ~Example() została tutaj przeniesiona. } } Z tego co rozumiem, powinno to być **zawsze bezpieczne i prawidłowe**. Nie przychodzi mi do głowy żaden scenariusz, w którym należałoby złamać te zasady. Wiem, że nie jest to najpilniejsza funkcja, nad którą pracuje zespół C#, ale poza tym: ** Czy istnieją scenariusze, w których obiekt zawierający zarządzane i niezarządzane zasoby nie chciałby postępować zgodnie ze wzorcem usuwania? ** Mówię o kompilatorze generującym metodę, która działa jak `CleanResources()` i przenosi metody `Dispose()` i `~Example()` do anonimowych metod tworzenia kopii zapasowych (podobnie jak auto-właściwości generują prywatne pola zapasowe). Oznaczałoby to, że wszelkie wywołania `Dispose()` lub `~Example()` automatycznie zaimplementowałyby 'Dispose Pattern'.


title: Jakaś wskazówka, aby zaprogramować serwis internetowy "w abonamencie"

text: Mam zaprogramowane kilka stron internetowych, wiem, że robię to w zasadzie za pomocą Pythona i PHP. Zwykle są to proste strony internetowe, ale teraz chcę udostępniać usługi sieciowe REST, ale tylko dla dozwolonych użytkowników (dozwolonych przeze mnie). Widziałem, że wiele usług korzysta z koncepcji „KEY” i „SECRET_KEY”, co wydaje mi się tym, czego potrzebuję (jeśli dobrze rozumiem). Moje przypuszczenia są następujące: 1. Jeśli wykonam tylko usługę GET, aby odzyskać, np. wszystkich moich klientów, już bez, każdy może odzyskać moich klientów bez ograniczeń. 2. Potrzebuję generatora KEY, aby dostarczyć klucze moim dozwolonym użytkownikom, aby mogli korzystać z moich usług internetowych. 3. Tylko z KEY to za mało: ktoś może ukraść KEY i zastąpić mojego użytkownika (i to jest powód, ponieważ istnieje SECRET_KEY, prawda?). Jeśli to wszystko jest w porządku, jak mogę stworzyć/używać takiego systemu w moich usługach internetowych? Jakiś przykład open source? A może są inne proste rozwiązania, których nie rozważam? Moim celem jest umożliwienie niektórym użytkownikom korzystania z moich usług internetowych.


title: wyrażenia warunkowe, poprawne użycie

text: Ostatnio zafascynowałem się wyrażeniami warunkowymi w Pythonie. Najwyraźniej niektórzy uważają, że jest to niepytoniczne, a to, czy wyrażenia warunkowe / trójskładnikowe są nawet Dobrą rzeczą, wydaje się być przedmiotem dyskusji - ale ostatnio je kopałem. x if C else y Jak dotąd zauważyłem, że Python będzie wydawał się „pozwalać” na użycie tej składni na dwa sposoby, chociaż w oficjalnej dokumentacji widzę tylko wskaźnik do pierwszej, więc nie jestem pewien, czy druga metoda (z której jeszcze nie korzystałem) jest uważana za dobrą praktykę lub nie. Pierwsza, to: mojazmienna = x jeśli C inaczej y ##także, "zwróć x jeśli C inaczej y" Wydaje się dość powszechne; można to znaleźć w JavaScript i Ruby oraz w zasadzie w każdym innym języku, w którym musiałbyś rzucić jedną linijkę zamiast trzech linii z if C: mojazmienna = x else: mojazmienna = y Jednak widzę, że Python ci na to pozwoli 'uciekaj' z linią taką jak ta, bez przypisywania czegokolwiek: foo() if C else bar() Naprawdę jestem całkiem nowym programistą, więc staram się wahać przed wdrożeniem niewłaściwego narzędzia do pracy. Dla mnie wygląda to na ciekawą metodę kontrolowania przepływu programu, jeśli nie jest to typowy sposób robienia tego. Na przykład, jeśli otrzymamy wysoki wynik w Stick's Asteroid's Clone v.001: record_score() if currentscore > first scores else display_scores() uważam, że jest to czytelne (inne mogą nie) i opisowe. _Jednak_ , w moich niewyczerpujących, niezależnych badaniach nad możliwością używania wyrażeń warunkowych w sposób inny niż przypisanie, nie widzę zbyt wielu precedensów dla tego. To skłania mnie do myślenia, że w ogóle nie użyłoby się go w ten sposób, niezależnie od języka, w którym się posługujesz, ponieważ po prostu nie jest to właściwy sposób na radzenie sobie ze stanem twojego programu. Dodatkowo, zdaję sobie sprawę, że różnica między „dobrą” implementacją tego a „złą” może polegać na skorzystaniu z funkcji „return” i ponownym rozważeniu odpowiedniego kodu. return record_score if currentscore > maximumscore else display_scores ##a następnie przejmuje automat stan To też w porządku, ale wciąż mam pytanie, czy sugerowane sformułowanie będzie w ogóle akceptowalne. Pytam więc, czy używanie wyrażeń warunkowych oprócz przypisania to w ogóle dobra praktyka? Albo, mówiąc dokładniej, czy dopuszczalne jest używanie go jako środka do kontrolowania przepływu programu?


title: Baza danych z historią wersji?

text: Tworzę grę z architekturą opartą na komponentach. Chcę przechowywać opisy jednostek w bazie danych SQLite dla zwartości i wygody. Oczywiście kod zaplecza jest (i schemat bazy danych będzie) pod kontrolą wersji. Ponieważ ważne zachowanie jest w bazie danych i ponieważ wiele osób będzie nad nim pracowało, uważam, że to również powinno być odpowiednio wersjonowane. Jak dotąd moje jedyne rozwiązania to: * **Tworzenie okresowych kopii zapasowych bazy danych.** Byłoby to niezgodne z istniejącą konfiguracją kontroli wersji, a tym samym podatne na błędy. * **Zrzuć bazę danych do formatu diffable i wersji, która to jest.** Wymaga to zaimportowania tego formatu, co jest podobne do kompilacji, której należy unikać. Chciałbym czystszych alternatyw w ramach istniejącej konfiguracji lub ważnego powodu, aby przejść na inny. Czy istnieje ładna biblioteka C++ do manipulowania bazami danych tekstowych (tj. Danymi, a najlepiej nie XML)?


title: Jaka jest preferowana metoda pobierania przez aplikację ustawień, które nie powinny być przechowywane w kontroli wersji?

text: Załóżmy, że aplikacja, którą piszę, wymaga hasła do czegoś, ale nie chcę, aby to hasło było zapisywane w kontroli wersji (więc nie trzeba kodować hasła na stałe). To, co robiłem, to tworzenie pliku o nazwie `PASSWORD`, który jest raz odczytywany przez aplikację i ignorowany przez kontrolę wersji. Czy istnieje bardziej preferencyjna metoda radzenia sobie z tą sytuacją?


title: Utwórz powiązanie między informacjami

text: Kilka dni temu wdrożyłem projekt, który pozwala wyodrębnić niektóre artykuły medyczne na podstawie wyników ankiety wypełnionej przez użytkownika. Na przykład, jeśli odpowiem na ankietę, że cierpię na cukrzycę typu 2 i palę papierosy, mój algorytm wyodrębnia wszystkie artykuły związane z cukrzycą, a wszystkie artykuły zawierają informacje o cukrzycy typu 2 i paleniu. Zasadniczo stworzyliśmy listę tematów i dla każdego tematu definiujemy rodzaj "wytycznych" pozwalających na wydobycie i uporządkowanie informacji dla użytkownika. Jestem pewien, że jest jakiś lepszy sposób na umieszczenie treści relacji 2, ale nie mogłem ich znaleźć w sieci. Czy mógłbyś zasugerować mój model, algorytm lub artykuł, aby lepiej zrozumieć tego rodzaju problem i który pomoże mi znaleźć szybszy i dokładniejszy sposób na wyodrębnienie informacji dla użytkownika?


title: Czy nadal jest w sprzedaży urządzenie, które wymaga wydajnego programowania? Co to jest?

text: **Edytuj:** jak już wielu z Was zauważyło, wydajność może oznaczać wiele rzeczy. Myślę, że kiedy mówię, że urządzenie „wymaga wydajnego programowania”, mam na myśli, że urządzenie nie ma dużej ilości pamięci ani bardzo wysokiego taktowania procesora i dlatego musi być programowane z uwzględnieniem tych ograniczeń. **Pytanie oryginalne:** Czasami, aby trenować, sportowcy będą pracować w miejscach położonych na większej wysokości. Dzieje się tak, ponieważ jest mniej powietrza, co oznacza, że trening jest znacznie trudniejszy. Kiedy sportowcy przyzwyczaili się do ćwiczeń w takich warunkach, znacznie łatwiej będzie im wykonywać pracę fizyczną na normalnej wysokości. Chcę zrobić to samo, z wyjątkiem tworzenia oprogramowania, a dokładniej tworzenia gier. Chcę znaleźć system z małą ilością pamięci RAM (w kilobajtach), niską częstotliwością zegara procesora i kilkoma rejestrami. Myślę, że nauka programowania gier na tego rodzaju systemie byłaby bardzo przydatna w nauce pisania wydajnego kodu. Poza tym byłoby bardzo fajnie :) Systemy, o których myślałem, to te stare Nintendo; GBA, NES, SNES. Ale nauczyłem się na własnej skórze, że zdobycie ich, a następnie otrzymanie dla nich fiszek jest bardzo trudne i na granicy bycia nielegalnym. Więc moje pytanie, czy istnieje kiepskie urządzenie, które nauczy mnie pisać wydajny kod, który nadal istnieje i jest sprzedawany? Chciałbym, aby było to urządzenie _fizyczne_, patrzenie na moje programy uruchamiane na fizycznych maszynach byłoby o wiele bardziej satysfakcjonujące niż oglądanie ich na emulatorze, a emulatory mogą być wadliwe.


title: CRM 2011 - Workflow vs JavaScripts

text: W encji Kontakt mam następujące atrybuty Preferowany adres e-mail — pole tylko do odczytu typu E-mail Osobisty adres e-mail 1 — pole e-mail Osobisty adres e-mail 2 — pole e-mail służbowy adres e-mail 1 — pole e-mail służbowy adres e-mail 2 — pole e-mail szkolny adres e-mail - Pole e-mail Inny e-mail - Pole e-mail Preferowana opcja e-mail - Opcja ustawiona z następującymi wartościami {Osobisty e-mail 1, Osobisty e-mail 2, służbowy e-mail 1, służbowy e-mail 2, szkolny e-mail i Inny e-mail). Żadne z wyżej wymienionych pól nie jest wymagane. **Wymaganie** Gdy użytkownik wybierze wartość z opcji Preferowany e-mail, kopiujemy adres e-mail dostępny w tym polu i stosujemy to samo w polu Preferowany e-mail. **Wdrożenie** Architekt Rozwiązań zasugerował, abyśmy zaimplementowali powyższe wymaganie jako Workflow. Podał powód, dla którego w większości przypadków wartości te są wypełniane przez zewnętrzną stronę internetową, a następnie dane są wprowadzane do systemu CRM 2011. Tak więc, gdy zaktualizują opcję Preferowanej poczty e-mail za pośrednictwem połączenia usługi sieciowej z CRM, WF uruchomi i zaktualizuje pole Preferowana poczta e-mail. **Mój argument/rozwiązanie** * Co się stanie, jeśli nie wybiorę wartości z zestawu opcji preferowanego adresu e-mail? Czy ustawię go na którykolwiek z adresów e-mail, który ma w nim wartość? Jeśli tak, co się stanie, jeśli zostanie wypełnionych więcej niż jedno pole adresu e-mail, tj. Co się stanie, jeśli zostanie wypełniony Osobisty adres e-mail 1 i Służbowy adres e-mail 1, ale w Zestawie opcji nie zostanie wybrana żadna wartość? * Co się stanie, jeśli wartość istnieje w zestawie opcji preferowanego adresu e-mail, a następnie zmienię ją na NULL? * Czy pole Preferowany e-mail (w którym przechowywana jest wartość tekstowa adresu e-mail) powinno być ustawione na Tylko do odczytu? * Jeśli nie, co zrobić, jeśli wybrałem Osobisty adres e-mail 1 w Zestawie opcji, a następnie edytowałem pole tekstowe Preferowany adres e-mail z zupełnie nowym adresem e-mail * Jeśli tak, wymuszamy, aby preferowany adres e-mail był jednym z e-maili osobistych 1 , Osobisty adres e-mail 2, służbowy adres e-mail 1, służbowy adres e-mail 2, szkolny adres e-mail lub inny adres e-mail [Moja preferencja to ta] * Co jeśli w polu osobisty adres e-mail 1 ma wartość helloworld@yahoo.com, a osobisty adres e-mail 2 jest pusty i wybierz wartość Osobisty adres e-mail 1 z menu rozwijanego Preferowany adres e-mail (spowoduje to ustawienie pola Preferowany adres e-mail na helloworld@yahoo.com), a później zmienię wartość na Osobisty adres e-mail 2 w polu Preferowany adres e-mail. Zastępuje prawidłowy adres e-mail niczym. Zgadzam się, że byłoby bardzo mało prawdopodobne, aby użytkownik wybrał Preferowany e-mail jako Osobisty e-mail 2 i nie miał w nim wartości, ale mimo to jest to możliwy scenariusz, prawda? * Co się stanie, jeśli użytkownicy wpiszą wartość w polu Osobisty e-mail 1, ale przez pomyłkę wybrali Osobisty e-mail 2 w zestawie opcji, a pole Osobisty e-mail 2 nie miało w nim żadnej wartości. **Rozwiązanie** 1. Pole Opcja Preferowany e-mail powinno być polem wymaganym 2. JS powinien być uruchamiany przy każdej zmianie opcji Preferowany e-mail. Ta funkcja JS powinna ustawić odpowiednie pole e-mail zgodnie z wymaganiami (na podstawie wybranej opcji) i wywołać inną funkcję JS (patrz krok 3). 3. Funkcja JS powinna zaktualizować wartość Preferred e-mail o wartość w polu e-mail (jak wybrano w zestawie opcji). 4. Funkcję JS należy również uruchamiać za każdym razem, gdy ktoś aktualizuje rzeczywiste pole e-mail, które jest wybrane w zestawie opcji. Ludzie, którzy zarządzają zewnętrzną witryną, powinni zaktualizować pole Preferowany e-mail — z pewnością, jeśli mogą zaktualizować opcję Preferowany e-mail za pośrednictwem połączenia z usługą sieci Web, łatwo jest zaktualizować pole Preferowany e-mail, prawda? **Pytanie** Która metoda jest lepsza? Czy powinien być napisany jako JS czy WorkFlow? Ponadto, czyja jest odpowiedzialność za aktualizowanie pola Preferowana poczta e-mail, gdy dane przepływają z zewnętrznej witryny internetowej? Jestem nowy w CRM 2011, ale mam około 6 lat doświadczenia jako konsultant CRM (z innymi produktami). Nie pochodzę ze środowiska programistycznego, ponieważ zaczynałem jako inżynier wsparcia aplikacji, ale zacząłem programować w ciągu ostatnich kilku lat.