title: Ogólna architektura z tabelami kodów?

text: Pracowałem tylko w jednym miejscu od czasu ukończenia studiów CS. To dość podstawowe pytanie o architekturę, ale nie wiem lepiej, ponieważ pracowałem tylko w jednym miejscu. Tam, gdzie pracuję, utrzymujemy dużą liczbę tabel kodów. Na przykład załóżmy, że masz system sprzedaży/zamówień i masz status zamówienia. Utrzymywalibyśmy tabelę statusu zamówienia, która wyglądałaby następująco: OrderStatus: OrderStatusId(PK TinyInt) OrderStatusDesc(VarChar(50)) 1 Utworzono 2 Przesłano 3 Przetwarzanie 4 Anulowano 5 Zweryfikowano 6 Ukończono Następnie tworzymy wyliczenie z każdej tabeli kodów. Na przykład: Public Enum TblSalesOrderStatus eosCreated = 1 eosSubmitted = 2 eosProcess = 3 eosCanceled = 4 eosVerified = 5 eosComplete = 6 End Enum Następnie w naszym kodzie mamy kod podobny do następującego: If OrderStatus = eosCreated ThenElse OrderStamittus = e ... trochę pracy Koniec jeśli Na każdym ekranie, który tworzymy, identyfikator jest przechowywany w kontrolkach (takich jak pola combobox). Nie wiem, coś o tym zawsze sprawiało, że myślałem, że to zły projekt. Może się jednak mylę. Zwłaszcza, gdy zacząłem zajmować się projektowaniem REST. chciałem przekazać identyfikatory, a nie opisy. Oczywiście nie wydaje się to właściwe, ponieważ byłbym jedynym, który kiedykolwiek widział, aby przekazywał tego typu identyfikatory w usłudze REST. Czy to zły projekt? Edycja: próba wyjaśnienia. Czy tabele kodów są przechowywane tylko w dwóch miejscach: Enum + Baza danych. Gdy potrzebujemy nowego identyfikatora, gdy wysyłamy e-mailem do naszego personelu bazy danych, który tworzy dla nas nową wartość tabeli kodów i wysyła nam e-mailem z powrotem identyfikator. Kiedy następnie wstawiamy nową wartość do naszych wyliczeń. Nigdy nie mieliśmy problemów z brakiem synchronizacji, ale jeśli potrzebowaliśmy usunąć wartości lub zmienić je w przeszłości (dodawanie jest łatwe), co było uciążliwe, ponieważ wszystko w systemie musiało zostać ponownie skompilowane. Poszliśmy drogą, próbując sprawić, by rzeczy były półdynamiczne (co nie działa w każdym przypadku, ale pomaga w niektórych). Istnieje mnóstwo przykładów, ale prostym przykładem jest flaga IsVisible w niektórych tabelach kodu. Jeśli kiedykolwiek będziemy chcieli przestarzać lub sprawić, że jedna z wartości nie będzie możliwa do wybrania, ustawiamy flagę IsVisible = 0. Wolą to w porównaniu z koniecznością zmiany kodu/kompilacji/wdrożenia. Myśląc o tym myślę, że byłoby lepiej mieć to w logice biznesowej i przetestować wokół tego (czego nie robimy :-( ) w zależności od twoich perspektyw.


title: Jak radzić sobie z bezpieczeństwem danych tymczasowych na serwerze WWW?

text: Jestem przede wszystkim programistą ASP.NET, ale to pytanie naprawdę dotyczy niezależnie od języka. Oczywiście dobrym pomysłem jest zapobieganie atakom zewnętrznym wynikającym z przejmowania sesji i ataków csrf. Ale co z atakami wewnętrznymi, gdy dane są tymczasowe, potrzebne przez całą sesję, ale także wrażliwe i warte kradzieży? Istnieje naturalnie tylko trasa wynajmu godnych zaufania osób, ale powiedzmy, że to nie ma zastosowania. Załóżmy, że masz już przeglądy kodu i rygorystyczne uprawnienia dostępu do danych produkcyjnych, aby zapobiec kradzieży przez programistów. Aplikacja szyfruje poufne dane przed ich przechowywaniem, aby zapobiec kradzieży przez dbas. Jak chronić tymczasowe dane wrażliwe przed administratorami serwerów internetowych? Wydaje się, że mogą pobierać informacje poprzez inspekcję logów serwera WWW, podsłuchiwanie ruchu i inspekcję zawartości pamięci procesu. Naturalnie powiedziałbym, że administratorzy serwerów produkcyjnych nie mają dostępu do surowego kodu źródłowego.


title: Co oznacza termin „Ładowność” w programowaniu?

text: Przeglądałem kod źródłowy frameworka open source, w którym wielokrotnie widziałem zmienną „payload”. Jakieś pomysły, co oznacza „ładowność”?


title: Najlepszy sposób na powiązanie zapachów kodu z odbiorcami nietechnicznymi?

text: Zostałem poproszony o przedstawienie przykładów problemów z kodem, które zostały wykryte podczas przeglądu kodu. Moi odbiorcy są w większości nietechniczni i chcę spróbować wyrazić problemy w taki sposób, aby przekazać wagę „dobrego kodu” w przeciwieństwie do „złego kodu”. Ale kiedy przeglądam moją prezentację, wydaje mi się, że przeoczyłem powody, dla których pisanie dobrego kodu jest ważne. Wspomniałem o kilku powodach, w tym o łatwości konserwacji, zwiększonym prawdopodobieństwie wystąpienia błędów, ale z moim „nietechnicznym” kapeluszem wydają się nieprzekonujące. Jaka jest Twoja rada, aby pomóc nietechnicznym odbiorcom zrozumieć znaczenie dobrego kodu?


title: Dlaczego JSF automatycznie generuje nazwy dla komponentów HTML i czy można to przesłonić?

text: Czytam na JSF. Zauważyłem jedną rzecz, że tagi takie jak h:inputText i h:inputTextarea automatycznie generują losową nazwę. Czy jest jakiś sposób, aby to obejść?


title: Niespecyficzne dla języka pytania do rozmowy kwalifikacyjnej dla starszego web developera

text: Natknąłem się na ogłoszenie o pracę na stanowisko starszego web developera. W wiadomości napisano, że rozwój zostanie wykonany przy użyciu **Ruby on Rails** , ale nie jest wymagana żadna wcześniejsza wiedza. Z kontaktem w tej firmie potwierdziłem, że może się o nią ubiegać programista PHP, a nawet programista ASP.Net. Potwierdziłem również, że wywiad nie będzie zawierał żadnych pytań dotyczących PHP lub Ruby on Rails. Czy ktoś może podać dobrą listę pytań do starszego programisty stron internetowych, która nie jest specyficzna dla określonego języka? **Uwaga** To pytanie nie jest duplikatem podobnych postów z pytaniami dotyczącymi PHP, .Net lub Ruby. Poza tym nie szukam tematów do nauki jako web developer, ale raczej ciekawych pytań do wywiadu technicznego, biorąc pod uwagę poprzednie warunki.


title: Jak bardzo powinienem polegać na Auto Generated Code programu Visual Studio?

text: Czytam o ASP.NET (VB.NET) i chcę zbudować moją profesjonalnie stronę internetową. Zastanawiam się jednak; Nadal korzystam z podstaw, więc naprawdę jestem tylko nowicjuszem, ale jak bardzo powinienem polegać na Visual Studio, aby tworzyć moje elementy? Czy powinienem tworzyć własne pola tekstowe i mieć własną procedurę logowania, czy po prostu korzystać z funkcji logowania ASP.NET? Wiem, że w końcu musisz używać własnych klas i takich, w których pojawia się prawdziwe kodowanie, ale nie jestem pewien, jak wiarygodne, elastyczne i bezpieczne są wstępnie napisane elementy? Każda pomoc byłaby bardzo mile widziana.


title: Jak poradzić sobie z „animowaną” grą, w której wizualizacja powinna „animować” zamiast gwałtownie się zmieniać?

text: Bawiłem się i uczyłem JavaScript/KineticJS tworząc kilka prostych gier (myślę jak gry planszowe). Mam model gry, który jest dość logicznie prosty. Kiedy mój model gry otrzyma „ruch”, aktualizuje właściwości wszystkich elementów. Chciałbym jednak, aby widok miał ładną animację. Na przykład, gdy bierze się sześć elementów, nie chcę, aby zniknęły wszystkie naraz, wolałbym, aby były animowane 1 na 1. Aby rozwiązać ten problem, po prostu mam model gry, który mówi mój widok „Zaktualizowałem następujące elementy: [lista]” A mój widok dodaje je do „wizualnej kolejki aktualizacji”, którą wątek czasomierza zawsze sprawdza i obsługuje jeden po drugim za każdym razem, gdy jest wyzwalany. Interesują mnie wszelkie opinie na temat tego podejścia, a ponieważ oczywiście było to już wcześniej brane pod uwagę, to czy ktokolwiek z Was poradzi sobie z tym problemem inaczej. Dziękuję!


title: Czy kod dziedziczy GNU GPL, jeśli po prostu łączy się z biblioteką GPL?

text: Przepraszam, za słaby angielski. Załóżmy, że istnieje biblioteka `xxx` na licencji GNU GPL, która udostępnia funkcję `yyy`. Załóżmy, że mój kod łączy się z biblioteką i użyj tej funkcji. Czy mój kod dziedziczy licencję GPL? IANAL, ale moje myśli są sprzeczne: * Z jednej strony mój kod jest pochodną biblioteki, więc powinien dziedziczyć GPL. * Z drugiej strony mój kod po prostu używa linku do `xxx`. Być może istnieją inne biblioteki, które mają ten sam interfejs (w szczególności udostępniają funkcję `yyy` z taką samą funkcjonalnością, ale inną implementacją). Mój kod może łączyć się z dowolnym. Mój kod tak naprawdę nie _bezpośrednio_ pochodzi od `xxx`, po prostu używa jego interfejsu. Więc mój kod nie powinien dziedziczyć GPL. Jestem zmieszany. **DODANO.** Pytanie jest absolutnie abstrakcyjne. Nie mam na myśli żadnej konkretnej biblioteki GPL.


title: Jak wybrać narzędzie do ciągłej integracji?

text: Znalazłem tę fajną tabelę porównawczą serwerów integracyjnych na Wikipedii, ale jestem trochę niepewny, jak uszeregować narzędzia w stosunku do moich potrzeb i zainteresowań. Sam wykres wydaje się mieć wiele pól oznaczonych jako nieznane, więc jeśli nie masz nic przeciwko aktualizowaniu go na Wikipedii, to też może być świetne. Czy istnieje kilka najskuteczniejszych produktów, dzięki czemu mogę szybko zawęzić do czterech lub pięciu opcji? Które produkty wydają się mieć największe społeczności użytkowników oraz najwięcej bieżących ulepszeń i integracji z nowymi narzędziami? Czy oferty open source są najlepsze, czy też istnieją wysokiej jakości narzędzia, które mogą być świetną okazją dla pojedynczego użytkownika w domu? Czy korzystanie z wielu systemów (główny komputer stacjonarny, tylko lokalny serwer sieci domowej, notebooki osobiste i służbowe, wiele maszyn wirtualnych rozproszonych we wszystkich) spowoduje problemy i jak można nimi zarządzać?


title: Strategie produktywności dla jednego programisty korzystającego z wielu komputerów PC

text: W przemówieniu na temat zarządzania czasem znany informatyk powiedział: > „Jedna maszyna w twoim życiu to właściwa liczba”. Polecił laptopa ze stacją dokującą. Po wypróbowaniu tego podejścia przez około miesiąc tęsknię za moim mocniejszym komputerem stacjonarnym (czterordzeniowy Hyperthread i7), ale nie jest w mojej mapie drogowej technologii (ani w budżecie) na modernizację mojego starego notebooka Intel Core 2 Duo (2006) w tym roku . Jakie strategie mogą mi pomóc w korzystaniu z komputera stacjonarnego przy biurku i bez większego wysiłku ręcznego z notebooka, gdy jestem w podróży?


title: Czym są paradygmaty algorytmiczne?

text: Ogólnie mówimy o paradygmatach programowania jako funkcjonalnych, proceduralnych, obiektowych, imperatywnych itp., ale co powinienem odpowiedzieć, gdy zapytają mnie o paradygmaty algorytmów? Na przykład: Travelling Salesman Problem, Dijkstra Shortest Path Algorithm, Euclid GCD Algorithm, Binary search, Minimum Spanning Tree Kruskala, algorytmiczne paradygmaty Tower of Hanoi? A może paradygmaty to struktury danych, których użyłbym do zaprojektowania tych algorytmów?


title: Automatyczne przekształcanie tekstu w hiperłącza — dobry czy zły interfejs użytkownika?

text: Używam Traca, osobistego narzędzia wiki. Używam SVN Tortoise, narzędzia subversion, którego używam Outlook, Word itp. We wszystkich tych programach, za każdym razem, gdy chcę wpisać adres URL lub adres e-mail, oprogramowanie zamienia go w hiperłącze, nagle zmieniając zachowanie tekstu, często traktowanie jako jeden podmiot. (tj. pojedynczy back-space usuwa cały adres URL, zaznaczanie tekstu przeskakuje, aby wybrać cały adres URL zamiast pojedynczych liter itp.) Jest dla mnie tak pomocny, jak spinacz biurowy Microsoft Office. Czy tylko ja denerwuję się tymi rzeczami? Jeśli ogólnie uważa się za zły interfejs użytkownika, robienie nieoczekiwanych rzeczy. Z pewnością jest to zły interfejs użytkownika. **Aktualizacja** : Jak Sii mówi poniżej: > "W większości ludzie wolą hiperłącza... domyślnie" Przypuszczam, że jest to truizm, w który wątpię. Czy są jakieś badania lub dowody na poparcie tego?


title: Jak wytłumaczyłbyś wielowątkowość siedmioletniemu dziecku?

text: Jeśli musisz wyjaśnić koncepcję wielowątkowości siedmioletniemu dziecku, jak byś to zrobił? Niedawno dostałem to pytanie w wywiadzie. Wymyśliłem historię używającą miejsc pracy (zadanie do wykonania) i robotników (wątki), ale nie była do końca przekonująca (biorąc pod uwagę, że dzieciak jest za młody). Gdybyś został poproszony o opisanie tego, jak byś to zrobił?


title: Jakie zestawy narzędzi i aplikacje mają pokrewieństwo z programowaniem wieloprocesorowym?

text: W szkole podyplomowej uczęszczałem na zajęcia z wieloprocesorowych i rozproszonych systemów operacyjnych. Myślę, że rozwój oprogramowania wieloprocesorowego stanie się coraz ważniejszy i będzie napędzany potrzebą utrzymania korzyści, do jakich jesteśmy przyzwyczajeni z prawa Moore'a, jak opisano w artykule Herba Suttera. Darmowy lunch dobiegł końca: fundamentalny zwrot w kierunku współbieżności w oprogramowaniu http://www.gotw.ca/publications/concurrency-ddj.htm Z zajęć dowiedzieliśmy się trochę o wątkach, procesach, wzajemnych wykluczeniach, blokadach obrotów wątki, semafory, architektury UMA i CCNUMA oraz OpenMP. Ale myślę, że to dopiero początek. * Czego powinienem się nauczyć, aby lepiej przygotować się do tego rodzaju pracy? * Kto realizuje projekty w tym obszarze? * Czy wkrótce stanie się to powszechną umiejętnością, a jeśli tak, jak najlepiej wykorzystać to, co wiem dzisiaj?


title: Pytanie o funkcje statyczne

text: Coś przyszło mi dzisiaj do głowy. Robiłem wiele z następujących nowych Object().doSomething(); Tworzę obiekt i wywołuję jego funkcje, po czym zapominam o obiekcie. Nie potrzebuję tego poza tą jedną instancją. Czy to sygnalizuje zły styl kodowania. Czy najlepiej jest przekonwertować te metody na funkcję statyczną, aby nie trzeba było za każdym razem tworzyć nowego obiektu?


title: Serializacja struktur danych w C

text: Ostatnio przeczytałem trzy oddzielne książki o algorytmach i strukturach danych, programowaniu gniazd TCP/IP i programowaniu z pamięcią. W książce o pamięci krótko omówiono temat serializacji struktur danych w celu przechowywania ich na dysku lub przesyłania ich przez sieć. Nic na to nie poradzę, ale zastanawiam się, dlaczego pozostałe dwie książki w ogóle nie omawiały serializacji. Po nieudanym wyszukiwaniu w Internecie / książce zastanawiam się, gdzie mogę znaleźć dobrą książkę / artykuł / samouczek dotyczący serializacji struktur danych w C? Gdzie lub jak się tego nauczyłeś?


title: Jaki jest ogólnie akceptowany sposób nazywania zmiennych, które kończą się i zaczynają od tej samej litery?

text: Czy coś takiego jest do zaakceptowania, czy też jest niemile widziane? String newsSymbol Po prostu wygląda to dziwnie, ale jest to najlepszy sposób na opisanie, czym jest zmienna i jakie dane będą przechowywane. Mógłbym zmienić jego nazwę na coś w rodzaju String articleSymbol, ale wtedy musiałbym zmienić nazwę całej innej grupy zmiennych. Jakie są Twoje myśli? Tak lub nie?


title: Tabulatory kontra spacje — jaki jest właściwy znak wcięcia dla wszystkiego, w każdej sytuacji, kiedykolwiek?

text: Standardy kodowania kodu hostowanego na drupal.org sugerują użycie dwóch spacji do wcięcia kodu; inne strony sugerują użycie tabulatorów do wcięcia kodu. Jaki jest właściwy charakter wcięcia we wszystkim iw każdej sytuacji? Proszę o wyjaśnienie udzielonej odpowiedzi.


title: C++: spacje kontra tabulatory

text: > **Możliwy duplikat:** > Tabulatory a spacje – jaki jest właściwy znak wcięcia dla wszystkiego, > w każdej sytuacji, kiedykolwiek? Zawsze używałem tabulatorów w całym moim kodzie (C, C++, python itp.), ale właśnie zapoznałem się z wytycznymi dotyczącymi kodowania Google C++(1) i stwierdziłem, że mówią, że _musisz_ używać spacji, a nie tabulatorów w swoim kodzie. Nie mogłem wymyślić powodu, dla którego o to pytają. Czy to dlatego, że karty pokazują niespójne wyniki w różnych edytorach lub coś podobnego? Czy ktoś wie, jaki jest lub może być powód?


title: Płatności i kredyty na Facebooku a świat rzeczywisty i organizacje charytatywne

text: Mam trudności ze zrozumieniem wewnętrznego „mikrokosmosu e-commerce” Facebooka i tego, co pozwala on programistom Facebook App robić (i co im ogranicza). Dwa przypadki użycia: * Jestem sprzedawcą internetowym sprzedającym ubrania i kubki do kawy (rzeczywiste towary) na mojej stronie internetowej; Chcę napisać aplikację na Facebooka, która umożliwia użytkownikom Facebooka kupowanie moich rzeczywistych towarów z poziomu Facebooka za prawdziwe pieniądze ($ USD) * Jestem uczniem liceum, próbującym zebrać pieniądze na wycieczkę klasową dla seniorów i chcę zbudować Facebooka Aplikacja, która umożliwia użytkownikom Facebooka przekazywanie darowizn na naszą klasę za prawdziwe pieniądze ($ USD) Czy te dwa scenariusze są możliwe? Jeśli nie, dlaczego (jakie zasady Facebooka mi tego zabraniają)? Jeśli tak, jakich interfejsów API używam: płatności czy kredytów? A jak (konkretnie) by to działało? Czy użytkownicy Facebooka muszą najpierw kupić „kredyty” (które są przyporządkowane do wartości $ USD pod maską) i zapłacić/podarować kredytami, czy też mogą wyciągnąć kartę kredytową i zapłacić/podarować bezpośrednio przez moją aplikację na Facebooku? Myślę, że to ostatnie pytanie naprawdę podsumowuje moje zamieszanie: **czy użytkownicy Facebooka mogą wprowadzać informacje o swojej karcie kredytowej bezpośrednio do aplikacji Facebooka, czy też jako „pośrednik” musisz przejść przez interfejs API płatności/kredytów**?


title: Dzielenie się pomysłami bez ryzyka wycieku

text: Jako freelancerzy spotykamy się gdzieś i rozmawiamy o nowym pomyśle na projekt, burzy mózgów itp. Do tej pory robiliśmy notatki z pomysłów, ale chcielibyśmy móc efektywniej dzielić się pomysłami między sobą. Obawiam się jednak, że jeśli skorzystam z jakiegoś produktu online (takiego jak Google Docs) te pomysły mogą zostać zauważone przez osoby spoza zespołu (pracownicy firmy produktu online, inni użytkownicy...). Nie jestem pewien, czy jestem małą _Paranoidalną papugą_... Jednym z rozwiązań, które rozważaliśmy, jest zainstalowanie Subversion z jednym plikiem _ideas.txt_. Ale to wymagałoby serwera w jednym z naszych domów, co jest trochę niewygodne. Jak więc podzielić się swoimi pomysłami na nowy projekt ze swoim zespołem, nie ryzykując, że pomysły zostaną _skradzione_?


title: Ogórkowy interfejs sieciowy dla biznesu

text: Staram się znaleźć sposób, aby projekty, nad którymi pracuję, były bardziej przejrzyste dla wielkości firmy, mimo że programowanie backendowe nie jest cały czas widoczne. W tym celu chcę wypróbować ATDD i zbudować testy akceptacyjne za pomocą `Cucumber`. Czy istnieje przyjazny sposób na pokazanie tych testów firmie — nadal uważam, że uruchamianie ich z wiersza poleceń jest tak samo tajemnicze, jak do tej pory? Myślę o interfejsie internetowym lub czymś w tym rodzaju.


title: Czy dobrym stylem jest jawne sprawdzanie wartości null w testach jednostkowych?

text: To, czy wartość jest „null”, czy nie, można sprawdzić niejawnie w następujący sposób: attachThat(value).isEqualTo("coś"); Lub można to sprawdzić jawnie: attachThat(value).isNotNull(); attachThat(wartość).isEqualTo("coś"); Ten ostatni sprawia, że oczekiwania są nieco jaśniejsze, ale rozsadza kod testowy. Czy jest dobry powód, aby preferować drugie podejście od pierwszego?


title: Notacje/Systemy Węgierskie Węgierski Czy powinienem?

text: Zastanawiałem się, czy warto byłoby użyć formy standardu, takiej jak Węgierska Notacja/Systemy Węgierskie? Po co miałbym się przejmować, jeśli wszystko, co teraz robię, działa dobrze?


title: Czy warto wykonać montaż wizualny?

text: Mamy już: * Visual Basic * Visual C++ * Visual C# Dlaczego nie ma Visual Assembly? Czy warto to zrobić?


title: Czy rozsądne jest używanie opartego na dokumentach NoSQL do przechowywania dużych tabel danych?

text: W NoSQL opartym na dokumencie do tworzenia tabel (AFAIK) potrzebuję: Utworzyć tyle wierszy w dokumentach tabeli z tym samym polem ID (który będzie identyfikatorem tabeli) i za każdym razem trzeba ustawić kolumny (dla każdego dokumentu). Następnie najpierw przeszukujesz dokumenty według identyfikatora (tabeli), a następnie przeszukujesz to, czego potrzebujesz w selekcji. Proszę poprawić, jeśli źle to rozumiem... I czy to rozsądne? Jak to mogło być szybkie?


title: Model Driven Architecture Approach w programowaniu / modelowaniu

text: Znam podstawy architektury opartej na modelu: chodzi o modelowanie systemu, który chcę stworzyć, a następnie stworzenie podstawowego kodu. Używałem CORBA jakiś czas temu. Pierwszą rzeczą, którą musiałem zrobić, było stworzenie abstrakcyjnego interfejsu (jakiś model systemu, który chcę zbudować) i generowanie kodu rdzenia później. Ale mam inne pytanie: czy architektura oparta na modelu jest podejściem szerokim, czy nie? Mam na myśli, powiedzmy, że mam język (język modelowania), w którym chcę zamodelować ISTNIEJĄCY system (w przeciwieństwie do systemu, który chcę STWORZYĆ), a następnie przeanalizować model stworzonego systemu i różne fakty dotyczące tej modelowanej abstrakcji . Czy w takim przypadku opisany powyżej proces można uznać za podejście oparte na architekturze modelowej? To znaczy mam model, ale to jest model istniejącego systemu, a nie system, który ma powstać.


title: Jak ważna jest znajomość funkcjonalności przed kodowaniem?

text: Pracuję dla firmy zajmującej się tworzeniem oprogramowania, gdzie prace programistyczne zostały nam zlecone. Zespół na lądzie zajmuje się wsparciem i rozmawia bezpośrednio z klientami. Nigdy nie rozmawiamy bezpośrednio z klientami, po prostu rozmawiamy z ludźmi z zespołu na lądzie, którzy rozmawiają bezpośrednio z klientami. Kiedy pojawiają się wymagania, zespół na lądzie rozmawia z klientami i sporządza dokumenty dotyczące wymagań i informuje nas. Dokumenty projektowe wykonujemy po zapoznaniu się z wymaganiami (stosujemy tradycyjny model wodospadu). Ale w całym procesie jest jeden problem: nikt na morzu ani na lądzie nie rozumie w pełni funkcjonalności aplikacji. Po prostu wiemy, że jest to duża złożona aplikacja internetowa obsługująca złożone przetwarzanie zamówień, zarządzanie katalogiem, zarządzanie kampaniami i inne czynności. Zmagamy się z dokumentem projektowym, ponieważ wymagania nie byłyby jasne. Następnie przechodzi do serii pytań / odpowiedzi między zespołem na lądzie, zespołem na morzu i klientami. Często mówiono nam, abyśmy rozumieli funkcjonalność kodu. Ale zwykle jest to niewykonalne, ponieważ baza kodu jest ogromna i nawet zrozumienie prostego elementu menu zajmuje kilka dni, jeśli nie tygodnie. Próbowaliśmy powiedzieć klientom, aby przekazali nam _transfer wiedzy_ o aplikacji, ale bezskutecznie. Nasz kierownik często kazał nam zacząć kodować, nawet jeśli dokument projektowy nie jest kompletny lub wymagania nie są jasne. Zaczęlibyśmy od zakodowania części wymagania, która wydaje się jasna, i poczekalibyśmy na resztę. To zwykle opóźniłoby wdrożenie o miesiąc. W skrajnych przypadkach mielibyśmy bardzo mało błędów w rozwoju i produkcji, ale klienci powiedzieliby, że nie o to proszą. Rozpoczęłoby to grę w obwinianie i serię próśb o zmianę, a skończyłoby się na opracowaniu czegoś zupełnie innego. Moje pytanie brzmi: jak wykonałbyś pracę programistyczną, jeśli nie znasz w pełni funkcjonalności aplikacji? AKTUALIZACJA Co do metodologii rozwoju to nie jest mój wybór i nie jestem liderem mojego zespołu Tak to się zaczęło. Próbowałem opowiadać ludziom o zaletach agile, ale bezskutecznie. Poza tym uważam, że mój zespół nie ma odpowiedniego nastawienia do pracy w środowisku AGILE.


title: Czy Hackathon to dobre miejsce do prezentacji poważnych projektów?

text: Już niedługo biorę udział w moim pierwszym hackathonie. Mam świetny pomysł, który od jakiegoś czasu krąży mi po głowie, a jeśli wystartuje, to oczywiście chciałbym, żeby było na nim moje nazwisko/zarobiłem na nim trochę pieniędzy. Czy hackathon to dobre miejsce do zaprezentowania projektu, do którego traktuję poważnie? Jak będzie działać własność? Myślę, że mógłbym uruchomić projekt podczas weekendu wydarzenia, ale na pewno chciałbym go później rozwinąć. Chciałbym być cytowany z tą koncepcją, ale ludzie, którzy pracują ze mną nad tym, byliby oczywiście częściowymi właścicielami (lub cokolwiek, co byłoby uważane za sprawiedliwe). Moim głównym celem jest, aby ten projekt wystartował, ale nie chcę też zostać pominięty, jeśli skończy się na zarabianiu pieniędzy.


title: Definicja składni RFC

text: Chciałbym wprowadzić nasze specyfikacje na wyższy poziom drobnoziarnistej definicji składni, semantyki i tym podobnych. Przeczytałem sporo RFC i po prostu uwielbiam sposób, w jaki definiują takie rzeczy, jak „jak wygląda adres e-mail” lub „jaki jest poprawny adres URL”. Ale nie znalazłem jeszcze definicji składni tych definicji. Jak np. jak definiujesz części opcjonalne? Jak definiujesz powtórzenie? Jak poprawnie zdefiniować alternatywy (`/` vs `|`) Czy istnieje dokument RFC, który definiuje składnię, której używają wszystkie inne dokumenty RFC do definiowania ich rzeczywistych definicji specyficznych dla domeny, które mógłbym dostosować do naszych specyfikacji?


title: Jakie informacje są pożądane przy profilowaniu funkcji pod kątem wykorzystania czasu?

text: Piszę program podobny do modułu `timeit` Pythona. Chodzi o to, aby określić czas funkcji, wykonując ją w dowolnym miejscu od 10 do 100 000 razy, w zależności od tego, jak długo to trwa, a następnie zgłosić wyniki. Czytałem, że najważniejszą liczbą jest minimalny czas wykonania, ponieważ jest to liczba, która najlepiej odzwierciedla, jak szybko maszyna może uruchomić dany kod przy braku innych programów rywalizujących o czas procesora i pamięć. Ten argument ma dla mnie sens. Czy byłbyś z tego zadowolony? Czy chcesz znać średni czas lub odchylenie standardowe? Czy jest jakiś inny środek, który uważasz za ważniejszy?


title: Jako młodszy programista, jak mogę szybko wprowadzać zmiany w dużym nieznanym oprogramowaniu?

text: > **Możliwy duplikat:** > Wskazówki lub techniki, których możesz użyć, gdy nie wiesz, jak coś zakodować? Niedawno ukończyłem kurs informatyki i na szczęście dostałem pracę jako młodszy programista. Teraz dostałem szereg zadań z większego projektu. Moja firma (podobno) kupiła oprogramowanie do przychodów/sprzedaży napisane w PHP. Zasadniczo cały ten duży kawałek oprogramowania musi zostać zmodyfikowany, aby spełniał standardy mojego kraju. Otrzymałem wiele zadań do wykonania w stosunkowo krótkim czasie. To może być moje własne zrozumienie całego problemu z synchronizacją, ale wydaje się to bardzo ważne, ponieważ muszę w pełni zrozumieć: 1. całą strukturę systemu 2. „Styl”, w jakim został napisany, klasy, funkcje itp. 3. struktura bazy danych Mając na uwadze powyższe, muszę dodać kilka funkcjonalności, z których część można uznać za „podstawową”, co moim zdaniem jest zbyt długą pracą do wykonania w 6 dni. Rozumiem, że podałem zbyt mało informacji, aby ktokolwiek mógł zrozumieć poziom trudności wspomnianych zadań, ponieważ dla niektórych osób może to być niemożliwe, a dla innych może być bardzo proste, dlatego chcę zapytać: Do osób, które przeszły obok podobna sytuacja, jaki był twój wynik? Czy mogę zacząć uważać się za nieprzygotowanego, czy może proszą za dużo? Jakie było twoje doświadczenie w podobnej sytuacji?


title: Drzewo a wykresy w wyszukiwaniu

text: Czy ktoś mógłby podać jasne i zwięzłe wyjaśnienie, kiedy używasz wykresów, a kiedy używać drzew do struktur danych?


title: Wprowadzenie do mowy

text: Obecnie pracuję nad przemówieniem wprowadzającym do podręcznika programowania C++. Samo przemówienie będzie dotyczyło tematów zawartych w podręczniku (które są bardzo podstawowymi pojęciami, takimi jak typy danych itp.). general** , i szukam osoby, która przyciągnie uwagę, aby rozpocząć moją przemowę od ciekawostki lub cytatu o C++ lub interesującej statystyki dotyczącej C++. Chcę czegoś, co uczniowie zrozumieją, a to wzbudzi ich zainteresowanie. Czy ktoś ma jakieś dobre pomysły, z których mogę skorzystać? Dziękuję!


title: Najlepsze podejście do włączenia standalone.xml JBossa do struktury SVN?

text: Naszym serwerem aplikacji jest JBoss 7 as. Używamy SVN jako naszego repozytorium kodu. Muszę wysłać naszą niestandardową domenę bezpieczeństwa w formacie standalone.xml, który jest plikiem jboss (nie jest spakowany w pliku war mojej aplikacji). Jednak nie chcę zatwierdzać całego JBossa w SVN. Podejście, o którym myślę, polega na zatwierdzeniu pliku standalone.xml w osobnym folderze w moim repozytorium SVN i przeniesieniu go do właściwej lokalizacji pod JBoss, gdy aplikacja zostanie wdrożona w witrynie produkcyjnej. Czy to najlepszy mechanizm?


title: Nowy projekt klienta — użyj starszej aplikacji lub zaprojektuj coś nowego

text: Rozpoczynamy nowy projekt z nowym klientem. Mamy starszą aplikację z roku 1997, którą planujemy wykorzystać, aby spełnić wymagania biznesowe klienta. Nie wiedziałem, czy jest to rzeczywiście właściwy kurs zarówno dla naszej firmy, jak i dla klienta. Nie chcę przepisywać aplikacji bez powodu, ale czuję, że ta starsza technologia MFC, VC6 - przeżyła swoją przydatność. Jeśli mam być ze sobą szczery – nie chcę też spędzać więcej swojej kariery na starszej aplikacji. W tym celu uzasadniłem sobie, że powinienem przedstawić kierownictwu plan opracowania nowego, świeżego rozwiązania w oparciu o aktualne metodologie. 1) Czy się mylę, myśląc, że to dobry pomysł. 2) Jeśli nie - jak mogę to sprzedać firmie. Z perspektywy bieżącego wsparcia klienta są określone korzyści (więcej osób z umiejętnościami w nowszych technologiach - w tym przypadku prawdopodobnie będzie to .NET z konfiguracją opartą na XML lub Lua). na pytania wyjaśniające moje zamiary.


title: OOP - Oddzielna klasa menedżera

text: Ostatnio zacząłem używać OOP w PHP. Do każdego modelu tworzę dwie klasy. Jedna klasa dla operacji odczytu i inna klasa Manager dla wszystkich operacji tworzenia / aktualizacji / usuwania. Na przykład <?php // To jest przykładowa klasa, tylko po to, by przekazać klasę pomysłu Image { public static function loadById() {} public static function loadByName() {} public static function search() {} public function __construct ( ) {} public function __get() {} public function getData() {} public function getRating() {} public function getSimilar() {} public function getRelatedNews() {} } class ImageManager extends Image { public function __construct() { } public function __set() {} public function remove() {} public function update() {} public function save() {} private function updateSomethingElse() {} } ?> Powodem, dla którego podzieliłem to na dwie klasy było to, że uważał, że jest to nieco bezpieczniejsze, ponieważ nie udostępnia metod C/U/D zwykłemu użytkownikowi. Pomyślałem też, że może to być szybsze / wydajniejsze pod względem pamięci, ponieważ ładuję tylko mniejszą klasę dla 95% żądań. Ale teraz myślę, że te powody są zbyt nieistotne, aby utrzymywać dwa pliki. Czy to zła praktyka? Zwykle klasy Manager są ładowane tylko podczas operacji administracyjnych. Akcje użytkownika rzadko aktualizują bazę danych (może z wyjątkiem operacji oceny lub zadania cron w celu aktualizacji liczby wyświetleń). Czy powinienem połączyć obie klasy w klasę `Image`?


title: Dodanie nowej metody do biblioteki klas dla jej nowej wersji i udostępnienie opcji wersji, którą użytkownicy mogą wybrać

text: Czy to zły pomysł, aby dodać nową metodę (implementującą nowy algorytm) do biblioteki klas dla jej nowej wersji i udostępnić opcję wersji, którą mogą wybrać konsumenci? Jest to tylko dla kompatybilności wstecznej, gdzie stara aplikacja może potrzebować stałej sekwencji liczb losowych dla określonej liczby początkowej. Poniższy kod może znacznie lepiej przekazać mój pomysł. Mam nadzieję, że dostaniesz esencję. //Biblioteka klas: namespace MyGenerator { public sealed class MyRandom { public enum Version { jeden, dwa }// dodaj więcej opcji w przyszłości private int current; wersja prywatna wersja; public MyRandom(int seed, Version version = Version.One) { current = seed; this.version = wersja; } public int Next() { switch (wersja) { case Version.One: AlgorithmOne(); przerwanie; case Wersja.Druga: AlgorithmTwo(); przerwanie; // dodaj więcej opcji w przyszłości } return current; } private int AlgorithmOne() { bieżący = (bieżący * 1234567890 + 987654321) & 0x7FFFFFFF; prąd powrotny; } private int AlgorithmTwo() { bieżąca = (bieżąca * bieżąca + bieżąca) & 0x7FFFFFFF; prąd powrotny; } // w przyszłości dodamy więcej algorytmu } } i //Aplikację konsolową (w celach testowych): using MyGenerator; korzystanie z Systemu; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { const int seed = 12345; MyRandom rnd = new MyRandom(seed, MyRandom.Version.Two); Konsola.WriteLine(rnd.Next()); Konsola.CzytajLinię(); } } }


title: Jaka jest podobna funkcjonalność w JavaScript, która zapewnia, że obiekt ma dane X przed podjęciem jakichkolwiek działań?

text: Jeśli java/C#/etc można zrobić coś takiego jak utworzenie konstruktora z parametrem, parametrem, na który może działać reszta obiektu. Jak to się robi w JavaScript? Próbuję dowiedzieć się, co jest najlepszym rozwiązaniem z JavaScript, aby zrobić coś podobnego do tego obiektu C#/Java. public class Blagh{ public var ThingToActOn; // Odpowiednie metody pobierania i ustawiania tutaj. public new Blagh(variable ThingForObjectToActOn) { this.ThingToActOn = ThingForObjectToActOn; } } Myślałem o czymś takim w JavaScript, ale wygląda na to, że czegoś mi brakuje. Zdaję sobie również sprawę, że New in JavaScript jest mile widziany z wielu powodów, ale nie jestem pewien, jakie jest inne rozwiązanie. var Symphonize = function(specyfikacja_generacji){ this.gen_spec = specyfikacja_generacji; } Symphonize.prototype.act_on_object = function () { // Wykonaj tutaj akcje na wartości generation_specification. zwróć this.gen_spec; } blu = new Symphonize({"gen":"stuff"});


title: Wada mieszania kodu C++ z C dla celów wydajności

text: Często można zobaczyć odpowiedzi takie jak „Unikaj używania bibliotek C w kodzie C++” lub „Można to przepisać za pomocą STD/Boost w czystym C++”. Rozumiem, że C++ produkuje bardziej łatwy w utrzymaniu kod i ma wiele zalet, ale czy w rzeczywistości korzystanie z bibliotek C jest złe, gdy wydajność jest priorytetem? Mam na myśli pisanie w tak zwanym C-with-classes. Rozwijałem parser plików tekstowych w wersjach C i C++, a wersja C była znacznie szybsza. Chciałbym wiedzieć, czy korzystanie z bibliotek C w C++ ma ukryte wady oprócz tych oczywistych, takich jak zmniejszenie konserwacji kodu.


title: Jak pokazać obsługę wyjątków na diagramie klas?

text: Mam jedną klasę obsługi wyjątków. Chcę pokazać tę klasę na diagramie uml -- klas. Ale nie wiem, jak przedstawić relację między klasą `<X>` a klasą obsługi wyjątków. Jak mogę przedstawić relację między klasami na diagramie klas?


title: Obsługa uprawnień w aplikacji MVP

text: W aplikacji do obsługi list płac w systemie Windows wykorzystującym wzorzec `MVP` (dla klienta na małą skalę) zaplanuję obsługę uprawnień użytkownika w następujący sposób (na podstawie uprawnień), ponieważ w zasadzie jej implementacja powinna być mniej skomplikowana i prosta. **UWAGA** : System może być używany jednocześnie przez kilku użytkowników (maksymalnie 3), a baza danych znajduje się po stronie serwera. To jest mój `UserModel`. Każdy użytkownik ma nadaną mu listę uprawnień. class User { string ID użytkownika { get; ustawić; } string Nazwa { get; ustawić; } string NIC {get;set;} string Oznaczenie { get; ustawić; } string Hasło { get; ustawić; } List <string> PermissionList = new List<string>(); stan bool { get; ustawić; } DataGodzina WprowadzonaData { get; ustawić; } } Gdy użytkownik zaloguje się do systemu, aktualny użytkownik zachowa w pamięci. Na przykład w widoku `BankAccountDetailEntering` kontroluję uprawnienia kontrolera w następujący sposób. public częściowa klasa BankAccountDetailEntering : Form { bool AccountEditable {get; set;} private void BankAccountDetailEntering_Load(object sender, EventArgs e) { cmdEditAccount.enabled = false; OnLoadForm (nadawca, e); // Zdarzenie uruchamiane... If (AccountEditable ) { cmdEditAccount.enabled=true; } } } W tym celu wszyscy moi odpowiedni prezenterzy (np. BankAccountDetailPresenter) powinni być świadomi istnienia `UserModel`, a także odpowiedniego `Modelu` biznesowego, który prezentuje `View`. class PrezentacjaSzczegółówKontaBankowego { WprowadzanieSzczegółówKontaBankowego _Widok; KontoBankowe _Model; Użytkownik _UserModel; Usługa danych _Usługa danych; BankAccountDetailPresenter( widok BankAccountDetailEntering, model KontaBankowego, Użytkownik userModel, DataService dataService ) { _View=view; _Model = model; _ModelUżytkownika = ModelUżytkownika; _DataService = dataService; Zdarzenia WireUp(); } private void WireUpEvents() { _View.OnLoadForm += new EventHandler(_View_OnLoadForm); } private void _View_OnLoadForm(Object sender, EventArgs e) { foreach(string s in _UserModel.PermissionList) { If(s =="CanEditAccount") { _View.AccountEditable =true; zwrócić; } } } public Show() { _View.ShowDialog(); } } Tak więc zajmuję się uprawnieniami użytkownika w prezenterze, iterując po liście. Czy należy to wykonać w „Prezent” czy „Widoku”? Jakieś inne, bardziej obiecujące sposoby na zrobienie tego?


title: Czy istnieje prosty sposób na wpisywanie popularnych symboli matematycznych?

text: _Zastrzeżenie: Jestem pewien, że ktoś będzie narzekał na łatwość użycia, na potrzeby tego pytania rozważ czytelność jako jedyny czynnik, który ma znaczenie_ Więc znalazłem tę stronę, która konwertuje na współrzędne wschodnie, ** nie jest to naprawdę ważne co to w ogóle oznacza** ale oto jak wygląda fragment javascriptu. /** * Konwertuj współrzędną wschodnią/północną odniesienia siatki Ordnance Survey na szerokość/długość geograficzną (OSGB36) * * @param {OsGridRef} gridref - współrzędna wschodnia/północna do przekształcenia na szerokość/długość geograficzną * @returns {LatLonE} szerokość/długość geograficzna (w OSGB36) dostarczonego odniesienia do siatki */ OsGridRef.osGridToLatLong = function(gridref) { var E = gridref.easing; var N = gridref.północ; zm a = 6377563,396, b = 6356256.909; // Przewiewne 1830 główne i mniejsze półosie var F0 = 0.9996012717; // Współczynnik skali NatGrid na południku środkowym var φ0 = 49*Math.PI/180, λ0 = -2*Math.PI/180; // Prawdziwe źródło NatGrid var N0 = -100000, E0 = 400000; // północ i wschód rzeczywistego pochodzenia, metry var e2 = 1 - (b*b)/(a*a); // mimośród do kwadratu var n = (a-b)/(a+b), n2 = n*n, n3 = n*n*n; // n, n², n³ var φ=φ0, M=0; zrobić { = (N-N0-M)/(a*F0) + φ; var Ma = (1 + n + (5/4)*n2 + (5/4)*n3) * (φ-φ0); var Mb = (3*n + 3*n*n + (21/8)*n3) * Math.sin(φ-φ0) * Math.cos(φ+φ0); var Mc = ((15/8)*n2 + (15/8)*n3) * Math.sin(2*(φ-φ0)) * Math.cos(2*(φ+φ0)); var Md = (35/24)*n3 * Math.sin(3*(φ-φ0)) * Math.cos(3*(φ+φ0)); M = b * F0 * (Ma - Mb + Mc - Md); // łuk południkowy } while (N-N0-M >= 0,00001); // tj. do < 0,01mm var cosφ = Math.cos(φ), sinφ = Math.sin(φ); var ν = a*F0/Math.sqrt(1-e2*sinφ*sinφ); // nu = poprzeczny promień krzywizny var ρ = a*F0*(1-e2)/Math.pow(1-e2*sinφ*sinφ, 1.5); // rho = południkowy promień krzywizny var η2 = ν/ρ-1; // eta = ? var tanφ = Math.tan(φ); var tan2φ = tanφ*tanφ, tan4φ = tan2φ*tan2φ, tan6φ = tan4φ*tan2φ; var secφ = 1/cosφ; zmienna ν3 = ν*ν*ν, ν5 = ν3*ν*ν, ν7 = ν5*ν*ν; var VII = tanφ/(2*ρ*ν); var VIII = tanφ/(24*ρ*ν3)*(5+3*tan2φ+η2-9*tan2φ*η2); var IX = tanφ/(720*ρ*ν5)*(61+90*tan2φ+45*tan4φ); var X = sekφ/ν; var XI = sekφ/(6*ν3)*(ν/ρ+2*tan2φ); var XII = sφ/(120*ν5)*(5+28*tan2φ+24*tan4φ); var XIIA = sekφ/(5040*ν7)*(61+662*tan2φ+1320*tan4φ+720*tan6φ); var dE = (E-E0), dE2 = dE*dE, dE3 = dE2*dE, dE4 = dE2*dE2, dE5 = dE3*dE2, dE6 = dE4*dE2, dE7 = dE5*dE2; φ = φ - VII*dE2 + VIII*dE4 - IX*dE6; var λ = λ0 + X*dE - XI*dE3 + XII*dE5 - XIIA*dE7; zwróć nowe LatLonE(φ.toDegrees(), λ.toDegrees(), GeoParams.datum.OSGB36); } Uważam, że jest to naprawdę fajny sposób na napisanie algorytmu, przynajmniej jeśli chodzi o redability. Czy jest jakiś sposób na łatwe napisanie specjalnych symboli. I przez łatwe pisanie mam na myśli NIE kopiowanie/wklejanie ich.


title: Najlepsze praktyki i wskazówki dotyczące czytania kodu źródłowego

text: Czytanie kodu jest ważną częścią życia programisty, ponieważ zwykle pracujemy w grupach i musimy utrzymywać, uzupełniać lub wnosić wkład w kody innych programistów. Z tego punktu widzenia czytanie kodu jest nieuniknione. Nasze kryteria wydajności to nie tylko szybkie czytanie czy interpretacja. Ale również zrozumienie i poprawne zinterpretowanie kodu jest bardzo ważne w naszym codziennym życiu zawodowym. Zwykle mamy do czynienia z kilkoma różnymi rodzajami kodów, takimi jak dobrze udokumentowane, źle napisane, nieudokumentowane, z błędami, a nawet spaghetti. Zwykle mamy do czynienia z każdym z nich przy użyciu różnych technik i krótko moje pytania dotyczą tego, jak radzisz sobie z czytaniem tych kodów, na przykład rozważ radzenie sobie z nieudokumentowanymi i źle napisanymi kodami. Na przykład stosuję kilka małych metod dla kodu C/C++: * Znajdź zależności kodu i spróbuj znaleźć ogólny przegląd relacji między klasami lub funkcjami. W razie potrzeby wizualizuj na papierze lub tekturze. * Spróbuj zrozumieć stosowane przez nich konwencje kodowania i przyzwyczaj się do nich. * Zrozum ogólny cel funkcji w pliku (dowiedz się, dlaczego są one umieszczane w tym pliku). * Zacznij od głównego i znajdź miejsca, które w razie potrzeby będziesz musiał zmienić. * Wykonaj drobne modyfikacje i umieść instrukcje print w strategicznych miejscach, aby zrozumieć, co robi funkcja lub klasa. * Użyj cscope _Moje pytanie brzmi, czy masz jakieś tego rodzaju wskazówki, triki lub najlepsze praktyki, którymi chciałbyś się podzielić?_ EDIT: Zapomniałem zadać pytanie :)


title: MVC 3 — Jakieś nowe funkcje do zbadania dla istniejącej aplikacji MVC 2?

text: Mam istniejącą aplikację ASP.NET MVC 2, która działa dobrze i jest zwykle łatwa w utrzymaniu. Wczoraj miałem przerwę w rozwoju, więc zaktualizowałem rozwiązanie do ASP.NET MVC 3 i wszystko wydaje się działać. Badałem ASP.NET MVC 3 i jest wiele ulepszeń, w tym silnik widoku Razor, zintegrowana obsługa dyskretnego JavaScriptu itp. Wszystko to wydaje się interesujące, ale niekoniecznie dla istniejącej aplikacji, która ma już głupie widoki, dyskretne JavaScript z jQuery, wstrzykiwanie zależności, testowanie jednostkowe itp. Jakie funkcje ASP.NET MVC 3, jeśli w ogóle, mogą mieć największy wpływ na istniejącą aplikację MVC 2?


title: Czy kontrola jakości powinna być częścią działu rozwoju?

text: Pracuję dla małej firmy, która od dłuższego czasu ma dział rozwoju produktu. Nie mieliśmy jednak grupy QA/testów. Chcemy dodać grupę testową, ale staramy się określić, gdzie najlepiej umieścić ją w strukturze organizacyjnej firmy. W szczególności zamierzamy zatrudnić stanowisko „lead tester”. Czy powinny być one częścią działu rozwoju produktu, czy powinny być nowym działem? Czy powinny być gdzie indziej? Nasza firma ma mniej więcej następującą strukturę: * CEO * CTO * Director Product Development * Director Customer Care * Developers * VP Operations * Inżynierowie sieci * Inżynierowie sprzedaży/sprzedaży * President * Controller


title: Standardy głośnego odczytywania kodu?

text: Czy ktoś zdefiniował standard głośnego odczytywania kodu dla dowolnego języka? Wyobrażam sobie, że jest to ważne dla oprogramowania, takiego jak czytniki ekranu dla osób niedowidzących. Tego rodzaju rzeczy pojawiają się również, gdy dyskutujesz z kimś o kodzie, przeglądasz go w grupie lub uczysz klasę. W rodzinie języków C istnieje wiele słów z „oczywistą” wymową. Niektóre z nich to po prostu angielskie słowa: „for”, „break”, „case”, „default” itp. Niektóre skróty, takie jak „int”, są jednoznaczne. A potem jest „char”. Zawsze mówię to (i słyszę to w głowie) jak pierwszą sylabę „węgiel”. Zirytowało mnie, gdy pierwszy raz rozmawiałem o kodzie z kimś, kto wymówił go jak „samochód”, co w rzeczywistości ma więcej sensu, ponieważ „char” jest tak naprawdę skrótem słowa „znak”, więc wyraźnie powinno być wymawiane jako to samo. Ale nawet wiedząc o tym, węgiel jako węgiel wydaje mi się bardziej odpowiedni. A potem są zdania typu `foo = bar ? *(++baz) : zardoz`. Czy ktoś wyprodukował dokument dyktujący prawidłowy (w jego mniemaniu) sposób odczytywania kodu na głos? Czy dla określonego języka, czy może ogólnie kodu?


title: Dlaczego wiele języków nie obsługuje parametrów nazwanych?

text: Właśnie zastanawiałem się, o ile łatwiej byłoby odczytać kod, gdyby podczas wywoływania funkcji można było napisać: doFunction(param1=coś, param2=cośElse); Nie mogę wymyślić żadnych wad, a to sprawiłoby, że kod byłby o wiele bardziej czytelny. Wiem, że możesz przekazać tablicę jako jedyny argument i mieć klucze tablicy jako nazwy parametrów, jednak nadal nie byłoby to tak czytelne. Czy jest w tym wada, której mi brakuje? Jeśli nie, dlaczego wiele języków na to nie pozwala?


title: Krzywa uczenia się Androida (Hello, Android 3rd ed. Book)

text: Obecnie czytam książkę Hello, Android i mam około 100 stron. Problem polega na tym, że chociaż rozumiem instrukcje i co powinien zrobić kod, tak naprawdę nie mogę poskładać rzeczy w całość, jak rzeczy są połączone (metody , widoki, rzeczy przekazywane w różnych plikach (!!)). Przykład sudoku, którego używa ta książka, jest zbyt skomplikowany, by go naśladować; może zamiast tego powinni stopniowo pokazywać i _wyjaśniać_ każdy krok do zbudowania takiej aplikacji (pozwól czytelnikowi budować od prostych przykładów do bardziej skomplikowanych). Może później autor zaczyna wyjaśniać sprawy jaśniej. Czy powinienem po prostu dalej czytać/kodować książkę, czy powinienem skupić się bardziej na mojej książce o Javie i najpierw ją dokończyć? Jeśli ktoś ma doświadczenie z książką, chciałbym usłyszeć kilka myśli.


title: Jak określić czas działania podwójnej funkcji rekurencyjnej?

text: **Mając dowolną arbitralnie podwójną rekurencyjną funkcję, jak obliczyć jej czas działania?** _Na przykład (w pseudokodzie):_ int a(int x){ if (x < = 0) return 1010; w przeciwnym razie zwróć b(x-1) + a(x-1); } int b(int y){ if (y <= -5) return -2; w przeciwnym razie zwróć b(a(y-1)); } Albo coś w tym stylu. **Jakich metod można lub należy użyć, aby określić coś takiego?**


title: Jaka wiedza jest potrzebna, aby zostać programistą oprogramowania finansowego?

text: Mam ponad 4 letnie doświadczenie w inżynierii oprogramowania. Posiadam dobre kompetencje w zakresie projektowania, analizy i rozwoju systemów. Pracowałem ciężko w Javie i C++ i jestem pewny swoich umiejętności technicznych. Teraz myślę o znalezieniu pracy w sektorze finansowym. Jakich zasobów powinienem szukać? Jakich słów kluczowych powinienem szukać? Np. "handel algorytmiczny" Czy są jakieś książki skierowane do inżynierów oprogramowania?


title: Sugestie dotyczące frameworków CSS?

text: Zacząłem więc tworzyć strony internetowe i poznałem podstawy HTML i CSS. Jednak często wpadam na momenty WTF dotyczące układu; to, co wygląda dobrze w jednej przeglądarce, może wyglądać dziwnie w innej i nie wiem dlaczego. Czy muszę uczyć się CSS poza podstawami, czy są jakieś frameworki, które mogą ułatwić mi życie?


title: zwracanie wartości null vs zwracanie zera, co byłoby lepsze?

text: Odziedziczyłem projekt, którym zarządzam i który muszę utrzymywać do czasu przebudowy bazy kodu. W tej chwili mam za zadanie dodawanie małych funkcji w całym miejscu i przyzwyczaiłem się zwracać `null` zamiast zera w częściach kodu, nad którymi pracuję. Problem polega na tym, że mamy klienta, który używa tego kodu, a części kodu, które wymagają danych z moich zaimplementowanych funkcji, otrzymują „null” i zrzucają ślad stosu w interfejsie użytkownika. Chciałbym uniknąć tego całkowicie z moich danych wejściowych, ale bez `NullPointerException` istnieje możliwość wprowadzenia błędów do danych klienta, które mogą pozostać niezauważone. Zwykle wymyśliłbym własny system powiadamiania o błędach, ale nigdy wcześniej nie odziedziczyłem projektu. Więc nie jestem pewien, czy dalej podążać tą ścieżką. Nadal uważam, że zrzut stosu jest lepszy niż niezauważone uszkodzenie/niedokładności danych.


title: Czy wszystkie kompilatory zaczną wspierać C++0x, gdy tylko zostanie oficjalnie wydany?

text: Czasami frustrujące jest to, że jedna konkretna funkcja działa w jednym kompilatorze, a nie w innym. Nawet po pobraniu najnowszego gcc4.6 kilka tygodni temu niektóre funkcje C++0x nie działają. Czy **kompletna** obsługa C++0x zapewniona przez kompilatory (przynajmniej te popularne) już drugiego dnia po oficjalnym wydaniu C++11? Czy ci dostawcy kompilatorów zdecydowali o jakimkolwiek harmonogramie, aby zapewnić pełne wsparcie?


title: Pobierz kod z jednego projektu open source i dodaj go do innego

text: Znalazłem kilka funkcji, które chcę uzyskać z kodu źródłowego WordPressa i dodać chcę je dodać do mojego projektu, który ma być open source. Czy po prostu otrzymuję potrzebne funkcje i dodaję je do mojego projektu z małym komentarzem, że dostałem je od WP, np.: /** * Autor: WordPress **/ czy jest jeszcze coś, co muszę wziąć pod uwagę przed uzyskaniem kod? Czy oprócz powyższego pytania jest jeszcze coś, co muszę rozważyć, jeśli chcę komuś sprzedać swój projekt z tymi funkcjami?


title: Czy przed rozmową kwalifikacyjną wykonujesz niestandardowe testy/pracujesz dla potencjalnego pracodawcy?

text: W każdym sklepie, w którym pracowałem, przestrzegaliśmy tego, co uważałem za standardową sekwencję rekrutacyjną: 1. Pozyskiwanie CV 2. Kandydaci na ekran telefonu, którymi jesteśmy zainteresowani 3. Osobista rozmowa kwalifikacyjna 4. W niektórych sklepach druga rozmowa kwalifikacyjna ( tylko z CEO na przykład) Większość miejsc, w których aplikuję, aby podążać za czymś podobnym. Ale niektóre sklepy chcą mnie przetestować lub poprosić o zbudowanie czegoś po przesłaniu CV. Zwykle mówią „gratulacje, dotarłeś do drugiego etapu naszego procesu rekrutacji!” Ale z tego, co wiem, proszą każdego kandydata, od którego otrzymują CV, o zrobienie tego samego. To mnie denerwuje, ponieważ nie skaluje się. Jeśli ubiegam się o wiele stanowisk, nie mogę spędzać całego czasu na pracy, która potencjalnie może dać mi tylko jedną pracę. Poza tym nie ma wspólnego poświęcenia się procesowi. Jeśli zrobimy 45-minutowy ekran telefonu, to 45 minut firma zobowiązuje się do mnie i 45 minut, które zobowiązuję się do firmy w nadziei na potencjalne dopasowanie. Czy macie politykę dotyczącą tego rodzaju rzeczy?


title: Moja firma rości sobie wszelkie prawa do moich hobbystycznych aplikacji na iPhone'a. Jaka jest polityka Twojej firmy?

text: Na co dzień jestem programistą mobilnym. W wolnych chwilach (noce i weekendy) rozwijam swoje osobiste projekty hobbystyczne. Po opublikowaniu moich aplikacji na iPhone'a moja firma poinformowała mnie, że posiada wszelkie prawa do wszelkich materiałów związanych z technologią, które stworzę podczas mojej kadencji. Przeczytałem umowę, to prawda, jest surowa. Czy istnieje lepsza polityka firmy dotycząca rozwijania projektów hobbystycznych? Co twoje?


title: SQL Server 2000 czy 2008 Express?

text: Ze względu na to, że nie chcę płacić za licencje, moja firma nadal używa SQL Server 2000 do nowych projektów. Jest to bardzo ograniczające z wielu powodów. Zastanawiam się, jakie są ograniczenia korzystania z programu SQL Server Express 2008? Czy istnieje powód, aby NIE używać go do zasilania witryn ASP.Net MVC3?


title: Czy powinienem zbudować system wielowątkowy, który obsługuje zdarzenia z gry i sortuje je niezależnie na różne wątki na podstawie priorytetu?

text: Czy mogę zbudować system wielowątkowy, który obsługuje zdarzenia z gry i sortuje je niezależnie na różne wątki na podstawie priorytetu i czy to dobry pomysł? Oto więcej informacji: Zaraz zaczynam pracę nad przeniesieniem średniej wielkości gry z Flash/AS3 na Javę, abym mógł kontynuować rozwój z możliwościami wielowątkowości. Oto krótki opis gry: Gra zawiera liczne asynchroniczne czynności, takie jak „aktualizacja świata” (środowisko gry stale się zmienia w oparciu o zestaw praw i sił natury), proceduralne generowanie terenu, postacie niezależne, questy, przedmioty itp., a do tego efekty wszystkich interakcji gracza z jego otoczeniem są programowo obliczane w czasie rzeczywistym, w oparciu o zestaw ciągle zmieniających się „statystyk” i ponownie, prawa i siły natury. Wszystkie te rzeczy zachodzą na raz, w sposób asynchroniczny, bardzo dobrze nadają się do wielowątkowości. Moje pytanie brzmi: czy mogę zbudować jakiś centralny silnik, który obsługuje „układanie” wszystkich tych zdarzeń w miarę ich wyzwalania i dynamicznie sortuje je wśród dostępnych wątków, i czy byłby to dobry pomysł? Na przykład: Zasadniczo za każdym razem, gdy coś się dzieje (tzn. magiczny pocisk generowany przez zaklęcie lub kilka roślin musi urosnąć do następnego etapu), zamiast po prostu przetwarzać to zadanie od razu i dodawać nowy obiekt ( s) do listy zarządzanych obiektów, wyślij odwołanie do tego zdarzenia do podstawowej „obsługi zdarzeń”, która wrzuci je do stosu wszystkich innych aktualnie kolejkowanych zdarzeń, które następnie posortują je i uporządkowają według pilności, dzieląc je między wiele dostępnych wątków do jak najszybszego wykonania wielowątkowego.


title: Dokumentacja i zasoby H.264

text: Mam za zadanie używać API na małym wbudowanym urządzeniu linux. Korzystanie z interfejsu API jest dość proste, ale istnieje dziesiątki milionów (naprawdę nie udokumentowanych) parametrów służących do kontrolowania wielu aspektów kodeka. Parametry te wydają się nieudokumentowane, ponieważ nie są one obowiązkiem dostawcy kodeków, ale podstawowymi komponentami arkuszy specyfikacji h264. Chciałbym znaleźć więcej informacji z solidnymi źródłami na temat tego kodeka. Jak dotąd najlepsze, jakie znalazłem, to wikipedia. To dobry początek, ale nie jestem pewien, dokąd mam się stąd przenieść. Pytam tutaj, bo chciałbym znaleźć coś, co nie jest zbyt bolesne do przeczytania.


title: Jak mogę odpowiedzieć na pytania podczas rozmowy kwalifikacyjnej dotyczące rozwoju w zespole, skoro zawsze byłem samotnym programistą?

text: W wywiadzie zapytano mnie o moje doświadczenia w rozwijaniu w środowisku zespołowym. Byłem jednak samoukiem i pracowałem tylko nad projektami sam. Jak byś odpowiedział na to pytanie? Właśnie wspomniałem o klubach szkolnych io tym, jak dobrze grałem z innymi, ale to nie jest tak naprawdę związane z programistami.


title: Jak zarządzać kontrolą wersji w całej firmie?

text: Czy istnieją standardy branżowe lub najlepsze praktyki dotyczące zarządzania szybko zmieniającą się bazą kodu? Rodzaje aplikacji, które opracowuję, zawsze mają niestandardowy aspekt. Dlatego zawsze zostanie napisany kod, który jest specyficzny dla każdego projektu. Metoda, której teraz używamy, jest następująca: kilka projektów „CORE” istnieje w izolacji od siebie, każdy projekt podstawowy jest biblioteką klas, która może działać samodzielnie lub z zależnościami od innych modułów podstawowych. Wszystkie te podstawowe moduły są udokumentowane (Sandcastle) i utworzone dla nich pakiety NuGet, które są obsługiwane za pośrednictwem prywatnego źródła danych NuGet. Kiedy klient kupuje oprogramowanie, tworzymy projekt specyficzny dla klienta, który implementuje kod na zamówienie, którego potrzebuje, i w razie potrzeby pobiera pakiety NuGet z podstawowych bibliotek. Kompilacja tego projektu jest dostarczana klientowi, a każdy projekt klienta ma własne repozytorium Git. Działało to dobrze przez około rok, ale wydaje mi się, że wraz z dodawaniem funkcji do podstawowych bibliotek liczba pakietów nuget rośnie dość szybko. Czy istnieje lepsza metoda organizowania kodu przy jednoczesnym upewnieniu się, że nie ma osobnych wersji tego samego kodu? Wiem, że w tym poście stackoverflow stwierdza się, że: > Google udaje się przechowywać kod źródłowy wszystkich swoich projektów, ponad 2000, w > jednym pniu kodu zawierającym setki milionów linii kodu, a ponad 5000 programistów ma dostęp do tego samego repozytorium . Ale wydaje się, że powoduje to dla nas problemy z powodu wdrożeń na zamówienie. Jakieś pomysły lub komentarze na temat tego, co robię źle? ## Edytuj Problemy, które przewiduję, idąc ze sposobem google są głównie związane z zarządzaniem wydaniami i problemami z kompilacją. Stosujemy ciągłą integrację, dzięki czemu każde zatwierdzenie kompilacji zostanie wyzwolone, a test zostanie automatycznie uruchomiony. Jeśli użyjemy jednego obejmującego wszystkie repozytorium, nie jestem pewien, jaki będzie to miało wpływ na serwery kompilacji i testów. Czy będzie musiał zbudować każdy projekt klienta? A może byłby oddział na klienta? W jakim przypadku jest to lepsze niż repo na klienta?


title: Opatentuj program: możliwy czy nie?

text: Załóżmy, że opracowałem nowy algorytm, który rozwiązuje konkretny problem szybciej/lepiej niż obecnie dostępny najszybszy algorytm dla tego konkretnego problemu. Przez szybszy i lepszy mam na myśli **drastycznie** szybszy czas wykonania i lepszy pod względem **bardzo mniejszego zużycia przestrzeni** w porównaniu z istniejącym algorytmem. Moje pytanie brzmi, czy mogę opatentować ten program? Czy potrzebuję drugiej osoby jako partnera? Co ważniejsze, **czy powinienem to opatentować?**


title: C++ dla programistów Java

text: Mam zamiar poprowadzić wykład o C++ dla doświadczonych programistów Java. Ponieważ C++ to duży język i mam tylko jeden wykład, chciałbym wskazać najważniejsze "gotchas" i cechy C++ podczas migracji z Javy do C++. Ja sam poszedłem w odwrotną stronę (C++ -> Java) i dlatego chciałbym usłyszeć różne opinie na ten temat. O czym byś wspomniał, gdybyś był mną? Lista, którą mam do tej pory: * Przypadki użycia dla C++ (kiedy użyć C++ zamiast Javy) * Etapy kompilatora (preprocesor, kompilator, linker) * Różnice w typach danych (atomowe typy danych, tablice, struktury, klasy, unie, wyliczenia), automatyczna konwersja * Wskaźniki i zarządzanie pamięcią, różnica między wskaźnikami a referencjami, alokacja stosu i sterty * Interfejsy i dziedziczenie w C++ (wielokrotne dziedziczenie, funkcje wirtualne i potrzeba wirtualnego słowa kluczowego, czysto wirtualne funkcje) * Przepisywanie generyków do szablonów * STL (dzięki Péter) * Przeciążanie operatorów * Podstawy makr EDYCJA: dodano sugestie z odpowiedzi


title: Jak odpowiedzieć na to pytanie z wywiadu HashTable?

text: Dzisiaj podczas wywiadu zadano mi to pytanie: > Co się stanie, jeśli nie nadpiszemy metody hashcode dla naszej klasy, > dodamy ją do `HashTable` i spróbujemy pobrać obiekty? Czy możesz mi pomóc odpowiedzieć na to pytanie?


title: Czy profilowanie bez benchmarkingu prowadzi do mikrooptymalizacji?

text: **Przeczytaj najpierw:** Aby poznać definicję tych dwóch terminów („profilowanie” i „benchmarking”) oraz potrzebę ich rozróżnienia, przeczytaj tę odpowiedź na poprzednie pytanie. Muszę przyznać, że dopóki nie zobaczyłem odpowiedzi Winstona Ewerta, nigdy nie myślałem o potrzebie rozróżnienia tych dwóch technik. Po prostu uważam, że „profilowanie” może być stosowane na różnych „poziomach skali” oprogramowania, a gdy jest stosowane na wyższym poziomie, kod profilujący na niższych poziomach powinien zostać wyłączony, aby obniżyć narzut agregacji. Po zastanowieniu się nad odpowiedzią mogło to wyjaśnić, dlaczego padłem ofiarą mikrooptymalizacji w moim poprzednim projekcie. Próbując zoptymalizować podczas tego projektu, zaimplementowałem profiler o niskim nakładzie pracy (wstawiony do kodu źródłowego), który jest dobry w generowaniu dokładnych wyników profilowania na poziomie milisekund. Całe dni spędziłem na majsterkowaniu przy nim i zoptymalizowałem dużo kodu w oparciu o wynik profilera. W końcu udało mi się skrócić część _obliczeniową_ projektu z kilku sekund do mniej niż ułamka sekundy. Kolejna rzecz, której się nauczyłem, ku mojemu przerażeniu: kiedy zoptymalizowany moduł był używany w większym projekcie, _I/O i konwersja danych_ całkowicie zdominowały czas _obliczeń_ modułu. Część nieobliczaniowa mieści się w zakresie 1-2 sekund, co sprawia, że moje wysiłki optymalizacyjne są dyskusyjne. Do tej pory nie mam jeszcze szansy na prawdziwy „benchmarking”, chociaż wkrótce spróbuję. Biorąc pod uwagę, że „Czy robiłeś profilowanie?” stał się banałem zarówno na StackOverflow, jak i Programers.SE, czy istnieje niebezpieczeństwo, że mój rodzaj ignorancji jest faktycznie powszechny wśród innych programistów? Czy ta ignorancja prowadzi do mikrooptymalizacji we wszystkich miejscach?


title: Co powinienem zrobić, jeśli członek Scrum odejdzie w połowie drogi?

text: Ze względu na stan zdrowia jednego z członków scrum musi opuścić zespół. Moje pytanie brzmi, czy muszę ponownie rozpocząć sesję planowania sprintu? czy zmienić wykres wypalania? lub poprosić wszystkich członków zespołu o ugryzienie kuli i wykonanie dodatkowej pracy, aby osiągnąć cel? Dziękuję


title: Czy ramy ankiety powinny być zamknięte?

text: Rozmawiałem ze współpracownikiem, który pracuje nad aplikacją i frameworkiem do ankiet. Zadawał pytania techniczne i zasugerowałem, aby otworzył aplikację, aby uzyskać lepsze opinie od programistów, którzy są zainteresowani tym problemem i są gotowi go obciążyć. Ma inny punkt widzenia, który moim zdaniem jest nadal aktualny, więc chcę otworzyć to pytanie do dyskusji tutaj. Mówi, że uważa, że coś takiego jak ramy ankietowania **nie** powinno być open source, ponieważ zmniejszy to jego bezpieczeństwo i ważność, gdy ludzie ujawnią luki, przez które mogą oszukiwać. Nie mogę powiedzieć, że całkowicie się nie zgadzam. Widzę w tym trochę słuszny punkt, ale zawsze uważałem, że rozwiązania opracowane przez grupę ludzi są prawie zawsze lepsze niż rozwiązanie pomyślane przez pojedynczą osobę pytającą niewielką liczbę współpracowników, bez względu na to, jak mądra jest ta osoba. Znowu jestem gotów zaakceptować, że być może niektóre typy aplikacji są inne. Czy ktoś ma argument na jego korzyść? Naprawdę chciałbym przedstawić mu twoje odpowiedzi.


title: Co pomogłoby podczas refaktoryzacji dużej metody, aby upewnić się, że niczego nie zepsuję?

text: Obecnie refaktoryzuję część dużej bazy kodu bez żadnych testów jednostkowych. Próbowałem zrefaktoryzować kod w brutalny sposób, tj. próbując odgadnąć, co robi kod i jakie zmiany nie zmienią jego znaczenia, ale bez powodzenia: losowo psuje funkcje w całym kodzie. Zwróć uwagę, że refaktoryzacja obejmuje przeniesienie starszego kodu C# do bardziej funkcjonalnego stylu (starszy kod nie korzysta z żadnych funkcji .NET Framework 3 i nowszych, w tym LINQ), dodawanie generyków, w których kod może z nich skorzystać itp. I nie mogą używać formalnych metod, biorąc pod uwagę, ile by to kosztowało. Z drugiej strony zakładam, że przynajmniej zasada „Każdy zrefaktoryzowany stary kod będzie zawierał testy jednostkowe” powinna być ściśle przestrzegana, bez względu na to, ile by to kosztowało. Problem polega na tym, że kiedy refaktoruję niewielką część prywatnej metody 500 LOC, dodanie testów jednostkowych wydaje się trudnym zadaniem. Co może mi pomóc w określeniu, które testy jednostkowe są istotne dla danego fragmentu kodu? Zgaduję, że statyczna analiza kodu byłaby pomocna, ale jakich narzędzi i technik mogę użyć, aby: * dokładnie wiedzieć, jakie testy jednostkowe powinienem utworzyć, * i/lub wiedzieć, czy wprowadzona przeze mnie zmiana wpłynęła oryginalny kod w sposób, który będzie wykonywał się inaczej niż teraz?


title: W jaki sposób oryginalna licencja (w tym przypadku MIT) wpływa na kod wyprodukowany na platformie open source

text: Zastanawiam się nad stworzeniem nowej komercyjnej aplikacji PHP dla klienta, która będzie hostowana jako usługa płatna i prawdopodobnie odsprzedana stronom trzecim z klauzulą zakazu konkurowania. Przetestowałem kilka frameworków i wybrałem Laravela na licencji MIT License. Sam framework nie zostanie zmodyfikowany, ale aplikacja będzie w dużym stopniu zależna od funkcji i architektury Laravela. W jaki sposób oryginalna licencja wpływa na kod wyprodukowany z oprogramowaniem, którego dotyczy? MIT jest licencją niewirusową, domyślam się, że mój kod może być rozpowszechniany na bardziej przyjaznej komercyjnej licencji, która uniemożliwia stronom trzecim robienie czegokolwiek innego niż używanie aplikacji jako produktu końcowego, o ile zachowana jest oryginalna licencja dla części ramowej. Czy się mylę? Jak mam to zrobić?


title: Jakie są alternatywne metody dla IronPython do wywoływania kodu Pythona z .NET?

text: Istnieje kilka świetnych bibliotek dla Pythona, które mają kuzynów w świecie .NET, ale niektóre nie mają sobie równych. Zdając sobie sprawę, że Python jest językiem dynamicznym, co utrudnia mieszanie z (w dużej mierze) statycznie typowanym językiem, takim jak C# (chociaż wydaje się to coraz łatwiejsze w przypadku .NET 4.0), istnieją opcje takie jak IronPython, które mogą pomóc dopasować te dwa języki . Nigdy nie spotkałem się z innymi opcjami łączenia bibliotek Pythona z .NET. Czy są na to inne wypróbowane i prawdziwe sposoby? Mam znacznie mniejsze doświadczenie z Pythonem, więc całkiem możliwe, że coś przeoczam.


title: Ile kopii potrzeba do powiększenia tablicy?

text: Czytam analizę na tablicach dynamicznych (z podręcznika algorytmu Skiena). Tj. kiedy mamy strukturę tablicy i za każdym razem, gdy brakuje nam miejsca, alokujemy nową tablicę dwukrotnie większą od oryginału. Opisuje marnotrawstwo, które występuje, gdy tablica musi zostać zmieniona. Mówi, że (n/2)+1 do n zostanie przesunięty co najwyżej raz lub wcale. To jasne. Następnie opisując, że połowa elementów porusza się raz, ćwierć elementów dwukrotnie i tak dalej, całkowita liczba ruchów M jest dana wzorem: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com /cm5Mm.jpg) Wydaje mi się, że dodaje więcej kopii niż faktycznie się dzieje. Np. jeśli mamy: tablica 1 elementu +--+ |a | +--+ podwój tablicę (2 elementy) +--++--+ |a ||b | +--++--+ podwój tablicę (4 elementy) +--++--++--++--+ |a ||b ||c ||c | +--++--++--++--+ podwójna tablica (8 elementów) +--++--++--++--++--++--++-- ++--+ |a ||b ||c ||c ||x ||x ||x ||x | +--++--++--++--++--++--++--++--+ podwójna tablica (16 elementów) +--++--++-- ++--++--++--++--++--++--++--++--++--++--++--++--++ --+ |a ||b ||c ||c ||x ||x ||x ||x || || || || || || || || | +--++--++--++--++--++--++--++--++--++--++--++--++- -++--++--++--+ Mamy element x skopiowany 4 razy, element c skopiowany 4 razy, element b skopiowany 4 razy i element skopiowany 5 razy, więc suma to 4+4+4+5 = 17 kopii/ruchów. Ale zgodnie ze wzorem powinniśmy mieć 1*(16/2)+2*(16/4)+3*(16/8)+4*(16/16)= 8+8+6+4=26 kopii elementy do powiększenia tablicy do 16 elementów. Czy to jakiś błąd, czy celem wzoru jest przybliżenie przybliżenia górnej granicy? Czy może coś tutaj źle rozumiem?


title: Praktyczne wykorzystanie struktur w c#

text: > **Possible Duplicate:** > Kiedy używasz struktury zamiast klasy? Podczas pracy w obiektach obiektowych zawsze walczymy o struktury i klasy. Ale w prawdziwym świecie zawsze trzymamy się zajęć. Chcę tylko wiedzieć, jakie jest praktyczne wykorzystanie struktur w C# i gdzie są one korzystne w stosunku do klas. Albo są tylko tematem do teorii.


title: Publikowanie Ms Build a publikowanie w środowisku IDE programu Visual Studio

text: Obecnie pracuję nad kompilacją ms, aby opublikować moją aplikację winform w oparciu o wybrane środowisko (Dev lub Prod). Aby osiągnąć ten cel, używam zadania Ms Build Community i odwołuję się do tego artykułu. Miałem kilka teoretycznych wątpliwości na podstawie aplikacji wydawniczej. 1) Czy jest jakaś różnica w publikowaniu poprzez ideę visual studio i msbuild? 2) Czego większość programistów woli używać i dlaczego? 3) Jakie są zalety używania programu MsBuild do publikowania aplikacji w porównaniu z publikowaniem za pośrednictwem środowiska IDE Visual Studio? 4) Co jest szybsze? Używam aplikacji winform .net 3.5 opracowanej w Csharp i moje pytanie dotyczy tylko aplikacji Windows Clickonce. Proszę pomóż mi rozwiać te wątpliwości


title: Doradztwo, jakich technologii użyć w aplikacji desktop klient-serwer

text: Piszę aplikację desktopową w Javie, która pozwoli klientom uwierzytelnić się na serwerze za pomocą swoich danych uwierzytelniających, a następnie przeglądać i manipulować niektórymi danymi (zamówieniami, fakturami, pracownikami itp.) przechowywanymi na serwerze. Zdecydowałem się użyć Javy do napisania klienta, z SWT dla GUI. Ponieważ jednak nie pracowałem wcześniej nad żadnymi dużymi projektami Java, nie jestem pewien, jakich technologii użyć, aby ułatwić sobie pracę przy pisaniu serwera. Aplikacja serwera będzie nakładką na wewnętrzny RDBMS, umożliwiając pomyślnie uwierzytelnionym klientom wykonywanie różnych operacji na danych, na których użytkownik ma uprawnienia do pracy (nie wszyscy użytkownicy mają tę samą rolę). Mówiąc prościej, będzie to działać w podobny sposób, jak w wieloużytkownikowym RDBMS, w którym każdy użytkownik bazy danych może wykonywać tylko określone procedury składowane i nic więcej. Chciałbym jak najmniej zajmować się serializacją, powielaniem kodu, pisaniem własnego protokołu do komunikacji klient-serwer, ręcznym mapowaniem obiektowo-relacyjnym itp. Fajnie byłoby mieć możliwość powiązania danych między modelami i GUI oraz abstrahować od sieci (wyobrażam sobie, że przez jakąś formę RPC). Pierwszym pytaniem, jakie należy zadać, jest to, czy protokół byłby stanowy, czy bezstanowy, ale zakładam, że bezstanowy jest lepszy (podanie użytkownikowi identyfikatora sesji po pomyślnym uwierzytelnieniu). Następne pytanie brzmi, jakich technologii/protokołów/bibliotek powinienem używać? RPC czy coś innego? SOAP, coś innego niż HTTP, a nie HTTP? Zdaję sobie sprawę, że jest to poniekąd kwestia preferencji, ale tak naprawdę nie jestem świadomy, jakie mam opcje. Interesuje mnie to, co jest powszechnie używane w świecie Java itp. Prawdopodobnie potrzebowałbym również jakiegoś sposobu udostępniania definicji klas modeli (aby uniknąć duplikacji kodu) między klientem i serwerem. Klient wiązałby modele z widokiem i propagował zmiany na serwerze (serializowałby model prawdopodobnie przed wysłaniem). Serwer następnie zdeserializowałby obiekt modelu i wrzuciłby go do bazy danych za pomocą jakiegoś mapera obiektowo-relacyjnego. Oczywiście jest to zbyt uproszczone i tak sobie wyobrażam, że to zadziała, ale jestem otwarty na wszelkie sugestie. Moim początkowym impulsem było użycie Pythona na serwerze, ponieważ to by mnie ciekawiło (dodatkowo mam większe doświadczenie). Myślę jednak, że pójście w tym kierunku może nadmiernie skomplikować sprawy. Prawdopodobnie łatwiej jest napisać klasę modelu i używać jej zarówno w kliencie, jak i na serwerze niż pisać raz w Pythonie i raz w Javie i nigdy nie zapomnieć o synchronizacji zmian (ale z drugiej strony może będę w stanie użyć niektórych wspólny format do opisania modelu, a następnie wygenerowania kodu zarówno w Javie, jak i Pythonie; myślę, że ASN.1 robi coś takiego). Czy uważasz, że mogę to zrobić za pomocą serwera Pythona bez zbytniego marnowania czasu spowodowanego tym, że klientem jest Java? Dziękuję za poświęcenie czasu na przeczytanie tego. Wszystkie Twoje sugestie są mile widziane.


title: Czy Clojure pożycza pomysły współbieżności od Haskella?

text: W kwartalnym wywiadzie z Richem Hickey Michael Fogus wskazuje, że Clojure wiele zapożycza od Haskella: _Fogus: Jako ktoś, kto zna Haskella tylko tyle, by przeczytać gazety, Clojure wydaje się być pod wpływem tego w znacznym stopniu. Od nazw i sposobu działania podstawowych funkcji — bierz, upuszczaj, iteruj, powtarzaj itp. — po funkcje protokołów, w Clojure jest wiele rzeczy, które programista Haskell rozpoznałby. Czy możesz omówić wpływ Haskella na Clojure zarówno pozytywny, jak i negatywny? _Hickey: Myślę, że Haskell jest fantastycznym, inspirującym dziełem. Nie używałem go w złości, ale z pewnością miał pozytywny wpływ. Haskell oczywiście idzie znacznie dalej niż Clojure w realizacji ideałów programowania funkcjonalnego. W szczególności różnią się one podejściem do używania typów w celu wymuszenia pewnych rzeczy._ **Moje pytanie brzmi – Czy Clojure pożycza idee współbieżności od Haskella?** Fogus podpowiada pewną składnię i jest oczywiście funkcjonalne lenistwo. A co z operatorami STM i współbieżności? **Założenia:** * Zadaję to pytanie w pozytywnym tonie. Myślę, że to wspaniale, że Rich mógł zobaczyć niektóre skarby w Haskell i wykorzystać je.


title: Warstwy — separacja logiczna a fizyczna

text: Niektórzy programiści zalecają logiczną separację warstw od fizycznej. Na przykład, mając DL, oznacza to, że tworzymy przestrzeń nazw DL, a nie zestaw DL. Korzyści obejmują: 1. szybszy czas kompilacji 2. prostsze wdrożenie 3. Szybszy czas uruchamiania programu 4. Mniej złożeń do odniesienia Im w małym zespole 5 deweloperów. Mamy do utrzymania ponad 50 zespołów. IMO ten stosunek jest daleki od ideału. Preferuję ekstremalne podejście programistyczne. Gdzie, jeśli 100 zespołów jest łatwiejszych w utrzymaniu niż 10 000... to 1 zespół musi być łatwiejszy niż 100. Biorąc pod uwagę ograniczenia techniczne, powinniśmy dążyć do < 5 zespołów. Nowe zespoły są tworzone z wymagań technicznych, a nie warstwowych. Deweloperzy martwią się z kilku powodów. O. Ludzie lubią pracować we własnym środowisku, więc nie deptają sobie nawzajem. B. Microsoft ma tendencję do tworzenia nowych zestawów. NP. Asp.net posiada własną bibliotekę DLL, podobnie jak winforms. Itd. C. Deweloperzy postrzegają ten dysk dla wspólnego zestawu jako zagrożenie. Niektórzy członkowie zespołu mają tendencję do zmiany wspólnej warstwy bez względu na to, jak wpłynie to na zależności. Mój osobisty pogląd: postrzegam **A.** jako silosy, czyli programowanie kowbojskie i sugeruję, abyśmy zaimplementowali rozgałęzienie, aby stworzyć izolację. **C.** Po pierwsze, jest to ludzki problem i nie powinniśmy tworzyć rozwiązań technicznych dla ludzkiego zachowania. Po drugie, moim celem nie jest łączenie wszystkiego. Raczej chcę, aby partycje były tworzone w przestrzeniach nazw, a nie w zestawach. Posiadanie wspólnego zestawu nie sprawia, że wszystko jest wspólne. Chcę, żeby społeczność się włączyła i powiedziała mi, czy straciłem równowagę. Czy napęd na pojedynczy zespół lub mój punkt widzenia jest nielogiczny lub w inny sposób zły pomysł?


title: Python: licznik równoczesnych wywołań skryptu PHP?

text: Próbuję stworzyć skrypt przetwarzający kolejkę, którego celem jest znajdowanie określonych plików i stosowanie akcji w oparciu o określone parametry, w wyniku czego wywołujemy skrypt PHP, który służy do przetwarzania listy plików wiadomości, które wygenerowaliśmy i do niego przekazaliśmy . Jedną z rzeczy, które muszę określić w pliku konfiguracyjnym, jest maksymalna liczba jednoczesnych wywołań procesora PHP, które mogą być uruchomione w danym czasie, a jeśli maksymalna liczba wywołań wynosi >= to wykonaj pętlę do <= Należy również określić zmienna timeout 'tOut' w sekundach... Więc zasadniczo szuka najstarszego pliku w katalogu, lokalizuje zmienną w tej nazwie pliku 'chCode', szuka następnych najstarszych plików w katalogu z tym samym chCode i przestawia je i wyświetla zapisz listę tych ścieżek z prefiksami. Następnie za pomocą Popen lub Pcall skrypt z uruchom 'php /ścieżka/do/listy_plików' i jeśli: zwraca wynik '00' to kontynuuj... zwraca dowolny tekst inny niż 00, a następnie reprefix i mv.. nie zwraca nic dla tOut secs, a następnie reprefix i mv. Licznik jest częścią, w której naprawdę potrzebuję pomocy, ponieważ musi być odpowiednio dokładny i wydajny, z partiami setek tysięcy wychodzących wiadomości tekstowych, które są sortowane za pomocą tego. Mogę potwierdzić licznik ze skryptu PHP, ale jak powiedziałem, musi być dokładny. Korzystanie z Pythona 2.7 na CentOS6.


title: Czy używany język programowania lub baza danych ma wpływ na sprzedaż Twojej witryny?

text: Właśnie zastanawiałem się, czy używany język programowania lub baza danych ma jakiś wpływ na sprzedaż Twojej witryny innej firmie? Chodzi mi o to, czy łatwiej jest sprzedać stronę PHP niż w innym języku? A co z typem bazy danych? Gdybym używał Redisa zamiast MySQL, czy miałoby to jakiekolwiek znaczenie?


title: Zwiększanie niezawodności mojego kodu

text: Niedawno ukończyłem fragment kodu, który przeszedł wszystkie testy. (Oto pomysł na to, co robi i Oto trochę prawdziwego kodu.) Problemy zaczęły się jednak, gdy uruchamiałem mój kod w chmurze z rzeczywistymi danymi. W szczególności zdalna baza danych, do której wysyłam dane, odrzuca żądania, jeśli dane nie są zgodne z określonym schematem. Np. Nie mogę wysłać dwóch takich skrótów: array( array('key' => 'string'), array('key' => array('string1', 'string2')) ) Tutaj musi być typ `key` fixed -- albo łańcuch albo tablica łańcuchów (lub coś innego). Próbowałem szybko naprawić ten problem, co prowadziło do nieporządnego zachowania, pokazując, że mój kod nie jest jeszcze solidny, a moje testy nie są jeszcze wystarczające. Zastanawiam się, jakie są tutaj najlepsze praktyki. Przeczytałem książkę Wujka Boba, w której zaleca testowanie pod kątem _Wartości granicznych_. Czy oznacza to wypróbowanie wszystkich możliwych typów danych jako argumentów metody do testowania? Czy to znaczy, że powinienem rozpocząć każdą metodę od wielu instrukcji „jeśli”, aby sprawdzić poprawność danych wejściowych, aby te testy zakończyły się pomyślnie? Czy są przypadki, w których nie ma sensu martwić się błędami, ale raczej pozwolić im odejść i zająć się nimi tylko wtedy, gdy wystąpią? Czy istnieje dobra zasada, kiedy zgłaszać „wyjątki”, a kiedy tylko rejestrować komunikaty? Próbowałem zastosować podejście polegające na rzuceniu „wyjątku”, gdy coś _nie powinno się zdarzyć_ i wypisaniu „komunikatu”, gdy może się to zdarzyć, ale nadal chcę kontynuować. Na rozdanie nadal mogę rzucić „wyjątek” i złapać go później, więc nadal nie jestem pewien, co jest dobrym podejściem. Nadal nie używałem niestandardowych „Wyjątków”, żadnych dobrych praktycznych przykładów, które znasz, aby się o nich dowiedzieć? Czy istnieją dobre źródła, z których można się dowiedzieć o tych rzeczach? Wiem, że to duży temat i czytałem długie artykuły filozoficzne na temat TDD i BDD, ale mają one tendencję do przebywania na poziomie abstrakcyjnym, bez rozbijania się o proste praktyczne zasady poparte prostymi przykładami. Więc szukam tutaj bardziej praktycznej pomocy, wielkie dzięki!


title: Budowanie silnego, solidnego systemu klient-serwer

text: Potrzebuję pomocy w zaimplementowaniu wstępnie zaprojektowanego systemu, który ma 4 komponenty i kilka ograniczeń. Spędziłem około 50 godzin, próbując określić najlepszy sposób zbudowania tego systemu; jednak nie sądzę, abym w tej chwili posiadał wystarczająco mocne rozwiązanie. ### ~~~ Informacje ogólne ~~~ Celem tego projektu jest umożliwienie właścicielom firm (i ich programistom) zdalnego dostępu do danych. Posiada 4 składniki. 1. Usługa sieciowa 2. Klient 3. Baza danych dla usługi sieciowej 4. Baza danych dla klienta Interfejs użytkownika musi mieć postać usługi sieciowej, ponieważ jest to jedno z wymagań projektowych. Klient jest przechowywany na komputerze właściciela firmy (w którym znajduje się ich baza danych). Jest to program lokalny zaprogramowany na platformie .net. Właściciele firm uzyskują dostęp do usługi sieciowej, która następnie uzyskuje dostęp do klienta, żąda danych i przekazuje te dane klientowi. Powyższe jest znane i niezmienne (ponieważ nie jestem osobą, która tworzy specyfikację projektu) ### ~~~ Prawdziwy problem ~~~ Problem polega na tym, że Klient niekoniecznie musi być za każdym razem w tym samym miejscu, IP klienta może ulec zmianie. Klient może również po prostu nie być online w momencie żądania od właściciela firmy. ### ~~~ Moje obecne rozwiązanie ~~~ Moje obecne rozwiązanie tego problemu polega na utworzeniu serwera TCP/IP na kliencie. Gdy Klient jest włączony lub uruchomiony, może "zarejestrować" swoje poświadczenia serwera TCP/IP (informacje potrzebne do skontaktowania się z nim) na serwerze wraz z pewnymi informacjami identyfikacyjnymi. ~~~Edytowane dla jasności~~~ Kiedy usługa sieciowa otrzymuje żądanie, może otworzyć losowe połączenie TCP/IP i pozwolić klientowi (Pamiętaj, że serwer TCP/IP jest na kliencie) wie, że ma żądanie danych. Klient może następnie otrzymać żądanie, przetworzyć je i wysłać odpowiedź z „identyfikatorem żądania”. Na podstawie tego identyfikatora żądania usługa sieciowa może odebrać połączenie, poinformować klienta, że ma żądanie, klient może wysłać zapytanie do usługi sieciowej o żądanie, pobrać żądanie, przetworzyć żądanie i wysłać odpowiedź z powrotem do sieci usługa, która może następnie przetworzyć odpowiedź (wyodrębnić z niej identyfikator żądania) i odesłać ją do odpowiedniego wywołującego usługę sieciową. ~~~ Koniec Edytuj ~~~ (wow, to zdanie jest kęsem do przeczytania na głos) ### ~~~ Czego bym chciał ~~~ Czuję, że moje rozwiązanie jest pobieżne i naprawdę chciałbym trochę opinii na temat potencjalnych pułapek abym nie widział lepszych sposobów podejścia do tego.


title: Przewodnik po stylu dla C++

text: Obecnie używam Przewodnika po stylu Google C++ w swoim kodzie C++ i byłem z niego całkiem zadowolony. Niedawno powiedziano mi, że ten przewodnik jest bardzo zły: jest używany wewnętrznie przez Google (wiedziałem o tym), jest przestarzały i promuje bardzo złe praktyki. Więc chcę użyć innego stylu kodowania. Jakie są dobre i uczciwie używane przewodniki po stylu C++? Piszę kod zarówno dla gcc, jak i Visual Studio, i korzystam z wielu funkcji C++11. To, co bardzo podobało mi się w przewodniku po stylu Google C++, to wcięcia, odstępy i konwencje nazewnictwa (szczególnie nazywanie wszystkich klas, typów - w tym typedefs, aliasy typów i aliasy szablonów - z wielką pierwszą literą). Wiem, że każda odpowiedź jest subiektywna (mam nadzieję, że jest w porządku na tej stronie) i byłbym wdzięczny za każdą opinię, ale interesuje mnie, jakie przewodniki są obecnie używane.


title: Dwukierunkowa synchronizacja kalendarza z dowolnym klientem

text: Posiadam bazę wydarzeń kalendarzowych, którymi może zarządzać użytkownik poprzez aplikację webową. Chciałbym zaoferować użytkownikowi funkcjonalność przeglądania kalendarza w dowolnym, wybranym przez siebie kliencie (w zakresie, w jakim są zaimplementowane otwarte standardy), przede wszystkim w Outlooku i kalendarzu Google. Chciałbym również, aby klienci, tacy jak Outlook, mogli edytować i usuwać zdarzenia, które następnie byłyby przesyłane do aplikacji internetowej lub które aplikacja internetowa ściągałaby, lub po prostu: które byłyby w jakiś sposób zsynchronizowane. Ponadto fajnie byłoby mieć możliwość utworzenia wstępnego zdarzenia w bazie danych, wysłania wezwania na spotkanie do klienta i otrzymania w jakiś sposób raportu o stanie akceptacji lub odrzucenia przez klienta do aplikacji. Ale jeśli nie można tego osiągnąć, to nic wielkiego. Jakie byłoby najlepsze podejście do takiej integracji? Czy moja aplikacja musiałaby mieć wbudowaną obsługę komunikacji z każdym interfejsem API klienta, takim jak Exchange itp.? Czy są jakieś otwarte standardy, które mógłbym przyjąć? Moje pierwsze próby z iCalem jak dotąd nie przyniosły satysfakcji. Być może próbuję zrobić coś, czego iCal nie może zrobić. W takim razie, czy istnieją inne techniki, które mogą?


title: Opinie na temat logowania w aplikacjach wieloprocesowych

text: Napisaliśmy aplikację, która uruchamia co najmniej 9 równoległych procesów. Wszystkie procesy generują dużo informacji o logowaniu. Obecnie używamy Pythona QueueHandler do konsolidacji wszystkich logów w jednym pliku. Niestety czasami skutkuje to bardzo niechlujnymi plikami, które utrudniają ich odczytanie (np. Śledź, co dokładnie dzieje się w jednym wątku). Czy uważasz, że jest to realna opcja, aby podzielić wszystkie wiadomości na dedykowane pliki, czy może to sprawi, że będzie jeszcze bardziej bałagan ze względu na dużą liczbę plików? Jakie są twoje ogólne doświadczenia z pisaniem plików dziennika dla aplikacji wieloprocesowych/wielowątkowych?


title: Zwinna metoda dla nietechnicznego właściciela produktu + jednego programisty

text: Mój obecny klient ma kilka wewnętrznych produktów, które obsługuje dział IT. Wszyscy właściciele produktów nie są techniczni, a każda aplikacja jest zawsze opracowywana przez jednego programistę (podobnie jak wszystkie żądania zmian). Obecna metodologia przypomina trochę wodospad. Wszystkie przypadki użycia są najpierw definiowane przez właściciela produktu. Następnie aplikacja jest rozwijana i udostępniana w środowisku testowym. Użytkownik testuje to i mówi tak/nie. Wszelkie zmiany skutkują żądaniem zmiany i nową wersją (w tym pakietami instalacyjnymi). I tak trwa, dopóki użytkownik nie będzie zadowolony, co powoduje, że produkt trafia do produkcji. Zamiast tego chcę wprowadzić zwinną metodę, aby szybciej uchwycić zmiany i skupić się na najważniejszych funkcjach od samego początku. Scrum wydaje się przesadą, ponieważ na projekt przypada tylko jeden programista. Jakieś inne sugestie? **Edytuj** Mój klient nie będzie używał niczego, co nie jest udokumentowane. Dlatego szukam sprawdzonej i udokumentowanej metody (jeśli jest taka, która odpowiada jednemu programiście).


title: grupowanie argumentów z nawiasami są poprawne w C++?

text: Na pythonie mogę grupować argumenty w krotkę, coś w rodzaju def func((a, b, c, d), x): print a, b, c, d, x Zastanawiałem się, czy jest możliwe grupowanie argumentów w tak samo w C++, coś takiego: void func((int a, int b, int c, int d), float x) { cout << a << b << c << d << x << endl; };


title: Czy opakowania parametrów żądania/odpowiedzi są dobrą praktyką?

text: Widziałem kilka różnych sposobów projektowania usług WCF i wydaje się, że niektórzy deweloperzy preferują opakowania parametrów, podczas gdy inni preferują parametry „nagie”. Aby wyjaśnić, o co mi chodzi, rozważ następujące interfejsy usług: **'Nagie' Parametry** [ServiceContract] public interface IService { [OperationContract] string[] GetValuesByType(string groupName, ValueTypeEnum valueType) } **Opakowania parametrów** [DataContract ] public class GetValuesByTypeRequest { [DataMember] public string GroupName { get; ustawić; } [DataMember] public ValueTypeEnum ValueType { get; ustawić; } } [Kontrakt Danych] public class GetValuesByTypeResponse { [DataMember] public string[] Wynik { get; ustawić; } } [ServiceContract] public interface IService { [OperationContract] GetValuesByTypeResponse GetValuesByType(GetValuesByTypeRequest request) } Przypuszczam, że zdarzają się przypadki, w których wrappery parametrów ułatwiają utrzymanie usługi na różnych wersjach oprogramowania, ponieważ można kontrolować serializację każdego członka a nieco bardziej bezpośrednio niż w przypadku pierwszej metody. Ale szczerze mówiąc, wrappery parametrów wydają się po prostu dużo więcej kodu przy bardzo małych korzyściach. Czy się mylę tutaj?


title: Najlepsze praktyki dotyczące funkcji fabryki Pythona

text: Załóżmy, że mam plik `foo.py` zawierający klasę `Foo`: class Foo(object): def __init__(self, data): ... Teraz chcę dodać funkcję, która tworzy obiekt `Foo` w w pewien sposób z surowych danych źródłowych. Czy powinienem umieścić to jako metodę statyczną w Foo, czy jako inną oddzielną funkcję? class Foo(object): def __init__(self, data): ... # opcja 1: @staticmethod def fromSourceData(sourceData): return Foo(processData(sourceData)) # opcja 2: def makeFoo(sourceData): return Foo( processData(sourceData)) Nie wiem, czy ważniejsze jest, aby być wygodnym dla użytkowników: foo1 = foo.makeFoo(sourceData) czy ważniejsze jest zachowanie jasnego sprzężenia między metodą a klasą: foo1 = foo.Foo. fromSourceData(sourceData)


title: Zapobiegaj oszustwom kliknięć w systemie ogłoszeniowym za pomocą PHP i JavaScript

text: Chciałbym zbudować projekt reklamowy z PHP, MySQL i Javascript. Mówię o czymś takim jak... * Google Adsense * BuySellAds.com * Dowolna inna platforma reklamowa Moje pytanie dotyczy głównie tego, na co muszę zwracać uwagę, aby zapobiec oszukiwaniu systemu przez ludzi i wszelkim innym problemom, które mogę napotkać? Moja koncepcja projektowa. Ogłoszenie jest rekordem w Bazie Danych, kiedy strona jest ładowana za pomocą Javascript, wywołuje mój serwer, który z kolei użyje skryptu PHP do zapytania Bazy Danych i uzyskania losowego Ogłoszenia. (Może to zrobić kore, np. uzyskać reklamę opartą na danych demograficznych lub innych kryteriach) Skrypt PHP następnie zwróci reklamę do serwera/strony internetowej, która ją wywołuje i pokaże ją na stronie jako obraz, który będzie miał specjalne śledzenie połączyć. Będę musiał... * Zliczyć wszystkie wyświetlenia (gdy reklama jest wyświetlana na stronie) * Zliczyć wszystkie kliknięcia na link Reklama * Zliczyć wszystkie unikalne kliknięcia na link Reklama Moje pytanie dotyczy wyłącznie zapytania i wyświetlania reklamy i nic wspólnego ze stroną administracyjną. Jeśli z kupnem/sprzedażą przestrzeni reklamowej związane są kiedykolwiek pieniądze, statystyki muszą być dokładne i upewnić się, że ludzie nie będą mogli łatwo oszukać systemu. Czy śledzenie adresu IP naprawdę jest jedynym sposobem zapobiegania oszustwom związanym z kliknięciami? Mam nadzieję, że ktoś z pewnym doświadczeniem może wyjaśnić, że jestem na dobrej drodze? Jak również udzielić mi rad, wskazówek lub czegokolwiek innego, co powinienem wiedzieć o robieniu czegoś takiego?


title: Jak radzić sobie z prawie tymi samymi wyliczeniami?

text: Muszę zdefiniować **wyliczenia** w kilku klasach. **Większość** pól jest taka sama we wszystkich wyliczeniach. Ale jeden ma jedno lub dwa pola więcej, inny ma mniej pól. Teraz zastanawiam się, jak najlepiej sobie z tym poradzić? 1. Utwórz oddzielne wyliczenia public enum Foo {field1, field2, field5 }; public enum Bar {pole1, pole2, pole3, pole4 }; 2. lub użyj ogólnego enum dla nich wszystkich public enum FooBar {field1, field2, field3, field4 , field5}; Wyliczenia zawierają listę akcji dostępnych dla każdej klasy. **Aktualizacja** : przepraszam, jeśli pytanie nie było wystarczająco jasne . Chcę użyć tych wyliczeń jako `parametrów` w klasach **methods** . na przykład `classOne` ma metodę jak poniżej: public void DoSomeThing(Foo action,object moreData) { // operacja pożądana } tutaj chcę, aby **akcja** była ograniczona do `Insert` , `Update` i `Delete` while in `classTwo` : public void DoSomeThingElse(Foo action) { // operacja pożądana } Chcę ograniczyć **action** dostępne do `Insert` i `Select`


title: Czy programowanie w prawdziwym świecie jest znacznie mniej związane z samym programowaniem?

text: Jestem na drugim roku studiów CS i do tej pory większość projektów, nad którymi pracowałem, była dość "intensywna programistyczna", co lubię. Na przykład opracowanie solwera Sudoku, stworzenie od podstaw systemu zarządzania bazą danych w C, wdrożenie algorytmów do znajdowania najkrótszych tras między miastami i tak dalej. Ostatnio zacząłem pracować nad niektórymi projektami poza środowiskiem akademickim. Należą do nich aplikacja internetowa i kilka aplikacji na Androida, które wysłałem i korzystałem z niektórych osób. Zauważyłem, że w przypadku tych „rzeczywistych” projektów spędzam znacznie mniej czasu na programowaniu, a dużo więcej czasu ucząc się o platformach, przeszukując sieć w poszukiwaniu tej biblioteki, której potrzebuję, próbując rzeczy, aż zadziałają tak, jak potrzebuję, ucząc się używać narzędzi, które mogą pomóc w projekcie i tak dalej. Innymi słowy, piszę od 5 do 10 linijek kodu dziennie, ponieważ resztę czasu spędzam na nauce pomocniczych rzeczy. **Moje pytanie** : Czy to normalne w przypadku projektów w prawdziwym świecie, czy po opanowaniu platformy, na której pracujesz, wrócisz do intensywnej pracy programistycznej?


title: Jedna ogromna aplikacja webowa czy wiele małych aplikacji internetowych?

text: Mamy do opracowania ogromny system, który ma 3 główne funkcje: 1. Dostawca API 2. Pracownik do automatycznego pobierania danych 3. Zarządzanie danymi wbudowane w pracowników Wszyscy dzielą tę samą bazę danych, ale dla celów skalowalności mamy co najmniej jeden serwer dla każdej funkcji, co oznacza, że początkowo pomyśleliśmy o takiej strukturze serwerów: 1. 1 serwer dla DB (postgresql) 2. 1 serwer dla load balancera (nginx + sekcja zarządzania) 3. N serwerów dla dostawców API (aplikacja sinatra) 4. N serwerów dla workerów (sidekiq lub Resque) Moim problemem jest obsługa migracji i modeli, które opisałem tutaj na SO. Ponieważ nie znalazłem żadnych rozwiązań, które by nam się podobały, zacząłem myśleć o zbudowaniu jednej aplikacji rails i wysłać wszystko w środku (upuść sinatrę i zostaw wszystko dla aplikacji rails) 1. Czy to dobre rozwiązanie, aby zbudować ogromny Rails aplikacji i krojenie jej na każdym serwerze? 2. Czy to dobry pomysł, aby zostawić tylko minimalny kod niezbędny do uruchomienia serwera?


title: Jak powinienem robić dalsze postępy jako programista?

text: Właśnie opuściłem szkołę po ukończeniu inżynierii komputerowej, podczas mojego życia w college'u próbowałem pracować jako freelancer na lokalnym rynku. Udało mi się w zeszłym roku i zarobiłem niewielkie kwoty w oparciu o pracę opartą na joomla, wordpress i visual basic. miał też kilka małych projektów na php, mysql. Po ukończeniu studiów licencjackich usiadłem na pisemny test na stanowisko programisty Pythona i na szczęście dostałem pracę i tam pracuję (jest to mała firma programistyczna wykonuje większość zadań w pythonie). Z dnia na dzień zdobywałem doświadczenie z rdzeniem Pythona. W międzyczasie firma świadcząca usługi internetowe z siedzibą w USA zadzwoniła do mnie na rozmowę kwalifikacyjną i po ukończeniu trzech kroków (ustny + mini projekt kodowania + końcowy ustny) wybrali mnie (byłem zaskoczony!). I dołączę do nich za kilka dni. Muszę pracować w pythonie (w oparciu o framework Django, znam tylko podstawy tego frameworka). Mój problem polega na tym, że gdy zacząłem pracować z pythonem jednocześnie pracowałem w Odesku jako programista wordpress, joomla, drupal, php. Teraz od wielu dni czuję, że dostaję „Jack of all trades master of none”. Moja obecna sytuacja jest taka, że znam kilka popularnych technologii internetowych, ale nie jestem ekspertem. Chcę zdobyć umiejętności. Jak powinienem się zorganizować, aby zostać wykwalifikowanym programistą internetowym?


title: Jakie rodzaje artefaktów niebędących źródłami są niezbędne w procesie tworzenia?

text: „Klasyczne” artefakty programistyczne to dokumenty wymagań i specyfikacje projektowe. Ale proces rozwoju obejmuje wiele innych artefaktów niezwiązanych z kodem źródłowym: bazy danych śledzenia błędów, e-maile, wiki. Jakie artefakty niezwiązane z kodem źródłowym są Twoim zdaniem najważniejsze w procesie tworzenia? A jak aktualizujecie te dokumenty? Ponadto, czy są jakieś artefakty, które niekoniecznie uważasz za przydatne, ale musisz użyć, ponieważ jest to wymagane przez wykonawcę lub kierownictwo?


title: Jak poprawić pamięć i pamięć?

text: Jak mam poprawić swoją pamięć i przypomnieć sobie w odniesieniu do programowania? Mam tendencję do krótkoterminowego buforowania informacji API, a następnie natychmiastowego wyrzucania ich z głowy, gdy przechodzę do czegoś innego. To czasami sprawia, że wyglądam źle, ponieważ nie pamiętam informacji API o kodzie, który powinienem naprawdę znać. To też może być wielkim zatopieniem czasu, ponieważ często wiem, że mogę coś zrobić za pomocą API, ale muszę sprawdzić szczegóły, jak to zrobić. Czy są jakieś narzędzia lub metody, których mógłbym użyć, aby nadrobić braki w mojej pamięci?


title: Jak wydać dołączone oprogramowanie z różnymi licencjami?

text: Ostatnio znalazłem się w sytuacji, w której chciałem wydać prosty kawałek oprogramowania JavaScript na licencji open source. Zrezygnowałem jednak z tego, ponieważ oprogramowanie zawierało kilka komponentów open source, które zostały wydane na różnych licencjach. Pod jaką licencją powinno zostać wydane dołączone oprogramowanie (biorąc pod uwagę, że różne komponenty stron trzecich są mieszane z oprogramowaniem na poziomie kodu)?


title: iOS NSError z globalną obsługą

text: Jestem na początku programowania aplikacji na iOS. Po przeczytaniu poradników Apple dotyczących radzenia sobie z błędami, otrzymałem następujące najważniejsze punkty: * Wyjątki dotyczą programistów * Użyj `NSError` dla użytkownika Teraz `NSError` jest zwykle przekazywany jako argument, który może być następnie użyty wewnątrz i musi zostać sprawdzony przez dzwoniącego. Jednak zadaję sobie pytanie, czy dobrym pomysłem jest użycie globalnego modułu obsługi błędów, powiedzmy singletona, który otacza `NSError` i może być używany do wyzwalania błędów i obsługi błędów z wywoływanej funkcji. Czy jest coś przeciwko tej metodzie, czy byłaby to zła praktyka?


title: jak zadawać pytania dotyczące złych praktyk w stackoverflow (lub innych forach technicznych)

text: Miałem przypadek, kiedy musiałem zrobić w kodzie coś, o czym **wiedziałem, że to zła praktyka**. ale ze względu na wyjątkową sytuację i po dokładnym rozważeniu ryzyka zdecydowałem, że warto. Nie mogę zacząć wyjaśniać wszystkich moich rozważań, które obejmują tajemnice biznesowe przez Internet, ale potrzebuję pomocy technicznej. kiedy próbowałem zapytać w SA, otrzymałem gorące odpowiedzi, dlaczego jest to zła praktyka, zamiast odpowiedzi, jak to zrobić. ludzie są tak zaniepokojeni tym, jaki jest właściwy sposób pisania kodu, że zapominają o innych kwestiach. czy ktoś może dać wgląd w to, jak poprawnie zadać takie pytanie, aby uniknąć odpowiedzi „to jest zła praktyka” i uzyskać prawdziwe odpowiedzi?


title: Zemsta z przeglądu kodu

text: W firmie, w której pracuję, robimy przeglądy kodu. Dałem kilka negatywnych komentarzy na temat kodu (duplikacji kodu) programisty A. Mój commit był w porządku i gotowy do scalenia, a następnie programista A dodał negatywne komentarze do mojego kodu w zemście. Co myślisz o takiej sytuacji?


title: Czy użycie wyrażeń LINQ i Lambda prowadzi do mniej czytelnego kodu?

text: Rozmawiam ze współpracownikiem na Linq, skopiuję tutaj: > Współpracownik: Bądźmy szczerzy tutaj. Składnia Linq jest do bani. To mylące i > > intuicyjne. >> Ja: daj spokój, bardziej zagmatwane niż T-SQL? > > Współpracownik: uh, tak. > > Ja: ma te same podstawowe części, wybierz, gdzie i z > > Współpracownik: Linq to dla mnie bękart relacyjny + OO. Współpracownik: > Nie zrozum mnie źle — jest niesamowicie potężny, ale zmienili przeznaczenie SQL, aby > używać go w kolekcjach obiektów. Uważam, że używanie Linq + Lambda jest bardzo potężne (zgadza się), a także ułatwia czytanie kodu (w tym punkcie się nie zgadza): pickFiles = from f in pickFolder.GetFiles("*.txt") gdzie ValidFileName.IsMatch(f.Name) wybierz f; lub var existing = from s in ActiveRecordLinq.AsQueryable<ScannedEntity>() gdzie s.FileName == f.FullName && s.DocumentType != "Nieznany" wybierz s; lub (tutaj kod VB) Dim notVerified = Z obrazka In images.AsParallel Group Dołącz VerifyFile In VerifyFolder.GetFiles("*.vfy").AsParallel.Where( Function(v) v.Length > 0 ).AsParallel On image.Name .Replace(image.Extension, ".vfy") Równa się VerifyFile.Name Into VerifyList = Group From Verify In VerifyList.DefaultIfEmpty Gdzie Verify jest niczym Wybierz Verify Dla mnie jest to czyste i łatwe do odczytania (przynajmniej łatwiejsze niż alternatywy), jakie są twoje opinie na ten temat?


title: Django - Używanie ciągu JSON jako mapy atrybutów, aby uniknąć podklasy

text: Mam model Django o nazwie Entity. Różne typy Entity mają różne atrybuty (np. niektóre mają powiązaną walutę, inne nie). Wolałbym nie tworzyć nowej podklasy dla każdej permutacji atrybutów. **Pytanie** : Czy utworzenie pola CharField lub TextField o nazwie „atrybuty”, które używa mapy zakodowanej w formacie JSON z nazwami i wartościami atrybutów dla danej encji, to zła decyzja projektowa? Na potrzeby odpowiedzi załóżmy, że nie mam wielu rekordów Entity (~8000) lub użytkowników (~100 jednorazowo, najgorszy przypadek), z którymi muszę sobie poradzić, więc nie jestem pewien, czy wydajność spadła z radzenia sobie z obiekt JSON to duży problem.