title: Zapewnienie bezpieczeństwa ciągu połączenia podczas pracy z innymi

text: Załóżmy, że rozpocząłeś projekt open source i publikujesz go w publicznym repozytorium. (tak jak ja, używając Codeplex.) Jeden z kluczowych plików po prostu nawiązuje połączenie z bazą danych, zawiera login/hasło i jest po prostu dołączany z dowolnego innego pliku źródłowego, który wymaga połączenia z bazą danych. Jaki jest najlepszy sposób na udostępnienie projektu bez podawania hasła? Jak dotąd specjalnie go usunąłem przed wprowadzeniem jakichkolwiek zmian, ale myślę, że musi być lepszy sposób.


title: Dlaczego Java nie zezwala na używanie nagłówków jak w C++

text: Mam pytanie, na które nie znalazłem odpowiedzi poza następującą odpowiedzią, która nie spełnia moich wymagań: > „Ponieważ James Gosling nie chciał” Wiem, że Java może mieć interfejsy (tylko czyste funkcje wirtualne, bez atrybutów) , ale nie jest to dokładnie to samo, co definicje klas.


title: Co oznacza „Program musi przetworzyć każdy znak przed przeczytaniem następnego”?

text: Z książki _Myśl jak programista_ (podkreślenie moje) > Formuła Luhna jest szeroko stosowanym systemem do sprawdzania poprawności > liczb. Używając oryginalnej liczby, podwój wartość każdej innej cyfry. > Następnie dodaj wartości poszczególnych cyfr razem (jeśli podwojona wartość > ma teraz dwie cyfry, dodaj cyfry pojedynczo). Numer identyfikacyjny > jest ważny, jeśli suma jest podzielna przez 10. Napisz program, który przyjmuje > numer identyfikacyjny o dowolnej długości i określa, czy liczba > jest ważna ze wzoru Luhna. **Program musi przetworzyć każdy znak > przed przeczytaniem następnego.** W szerszym sensie, co to znaczy przetworzyć każdy znak przed przeczytaniem następnego? Jak to wygląda składniowo? Co oznacza przeciwieństwo i jak _to_ wygląda składniowo? **Update:** Dla pewnego kontekstu, oto moja próba rozwiązania problemu (w JavaScript): Array.prototype.sum = function() { var sum = 0, itemCount = this.length, i; for(i = 0; i <= liczba pozycji - 1; i++) { suma += to[i]; } zwróć sumę; } function validateNumberWithLuhnForumla(number) { var numbersArray = number.toString().split(''), numberCount = numbersArray.length, i = 0, isValid = false, doubledDigit, suma kontrolna, numbersToSum = []; for(i = 0; i <= liczbaCount - 1; i++) { if(i % 2 > 0 && i > 0) { doubledDigit = liczbyArray[i] * 2; if(podwójna cyfra > 9) { numberToSum.push(1, (podwójna cyfra - 10)); } else { NumbersToSum.push(doubledDigit); } } } Suma kontrolna = liczbyDo Sumy.sum(); if(suma kontrolna % 10 === 0) { isValid = true; } return isValid; }


title: Synchronizowanie obiektów z kodu z widokiem w WPF

text: Trochę się do niej doczytałem, ale jestem pod presją czasu, więc teraz potrzebowałbym prostego rozwiązania i obiecuję, że przeczytam o tym później. Pochodzę z tła winforms c# i ostatnio pracuję z WPF. Ponieważ implementowany przeze mnie interfejs użytkownika nie wymaga dużej ilości danych wejściowych, do tej pory korzystałem z INotifyPropertyChanged. Dopóki nie wpadłem na to: mam interfejs 3D z biblioteki innej firmy (MogreInWpf). Po kliknięciu obiektu w interfejsie 3D muszę wyświetlić niektóre właściwości obiektu (położenie, rozmiar itp.). Oto jak wygląda mój kod. Mam klasę, nazwijmy ją objectOfInterest, która zapisuje wszystkie te właściwości, dane 3D i zawiera kilka metod manipulujących obiektem. W jednej z tych metod generuję siatkę zawierającą pola tekstowe, aby symulować pary właściwości nazwa-wartość. Jak „Pozycja X:” „134”. Ponieważ te właściwości są zmieniane tylko przez użytkownika, udało mi się powiązać pole tekstowe w zdarzeniu zmiany tekstu, aby odpowiedzieć na większość zmian, tj. gdy rozmiar zostanie zmieniony z 134 na 1345. Po wygenerowaniu tej siatki jest ona wyświetlana w główne okno za pomocą ContentPresenter i ustawienie jego zawartości na objectOfInterest.grid. Działa jak marzenie. Teraz muszę zaimplementować właściwość, która zmienia wygląd siatki właściwości w zależności od pola kombi zawartego w tej siatce. Na przykład, jeśli obiekt jest sześcianem, chcę pokazać szerokość/wysokość/długość, podczas gdy chcę pokazać tylko właściwość promienia, jeśli jest to kula. Utknąłem tutaj, ponieważ ponowne generowanie siatki po combobox selectedValueChanged nie powiadamia widoku, a generowanie odbywa się w klasie objectOfInterest zamiast w klasie głównego okna, co oznacza, że nie mogę ponownie powiązać siatki po jej zregenerowaniu (ja nie można ponownie wywołać contentPresenter.Content = objectOfInterest.grid, ponieważ główne okno nie ma pojęcia, jak zmieniła się siatka instancji). Tak więc bez pełnego zrozumienia metod MVVM i przepisania większości aplikacji w celu dopasowania do modelu, jak można to osiągnąć?


title: przetwarzanie dziennika Postfix za pomocą pythona

text: Muszę przetworzyć wszystkie wiadomości dziennika z Postfixa (`/var/log/mail/mail.log`) i wydrukować podsumowanie/statystyki (ile wiadomości e-mail zostało wysłanych/otrzymanych oraz z/na które adresy e-mail) Sytuacja jest zajęta bardziej skomplikowane przez fakt, że Postfix ma wieloliniowe wpisy w logu (w przeciwieństwie do tego, na przykład `Apache` ma wpisy jednoliniowe i zadanie byłoby znacznie prostsze). Przykładowy dziennik Postfix może wyglądać mniej więcej tak: 2013-12-03 14:40:45 postfix: 6F1AA10B: client=unknown[64.12.143.81] 2013-12-03 14:40:45 postfix: 6F1AA10B: message-id= <529DDF56.6050403@aol.com> 2013-12-03 14:40:45 postfix: 6F1AA10B: from=<martin.vegter@aol.com>, size=1571, nrcpt=1 (kolejka aktywna) 2013-12- 03 14:40:45 postfix: 6F1AA10B: to=<martin@example.com>, relay=local, delay=0,13, delays=0,13 2013-12-03 14:40:45 postfix: 6F1AA10B: usunięty 2013-12- 03 14:52:07 przyrostek: 9DD9610B: klient=nieznany[209.85.219.65] 2013-12-03 14:52:07 przyrostek: 9DD9610B: id-wiadomości=<CANE3EAQUsGwj6ZBAU-awymzsG=76XZnHih@mail.gmail.com> 2013 -12-03 14:52:07 postfix: 9DD9610B: from=<martin.vegter@gmail.com>, size=2388, nrcpt=1 (kolejka aktywna) 2013-12-03 14:52:07 postfix: 9DD9610B: to=<martin@example.com>, orig_to=<martin@example.com>, relay=local 2013-12-03 14:52:07 postfix: 9DD9610B: usunięto Każda wiadomość e-mail, która została przetworzona przez Postfix ma unikalny identyfikator wiadomości (w moim przykładzie `6F1AA10B`). Jakie byłoby najlepsze podejście do przetwarzania dzienników w Pythonie? Jaką strukturę danych poleciłbyś użyć do przechowywania wpisów?


title: Jaka jest różnica między inżynierem testów oprogramowania a analitykiem testów oprogramowania?

text: Czy różnią się rolą i obowiązkami. Lub warunki zależą od obszaru geograficznego.


title: Różnica między MPL 2.0 a LGPL 2.1 (+wyjątek łączenia statycznego)?

text: Czy istnieje różnica między MPL 2.0 a LGPL 2.1 ( **+wyjątek łączenia statycznego** )? Jeśli tak, co to jest? Tak długo, jak rozumiem, jedyną różnicą między nimi jest to, że nie możesz używać znaków towarowych współtwórców w ramach MPL[1].


title: Zmuś użytkowników do aktualizacji do najnowszej wersji mojej aplikacji w Sklepie Google Play

text: Czy istnieje sposób na przeprowadzenie „krytycznej aktualizacji” mojej aplikacji w Sklepie Google Play, która wymagałaby od użytkownika aktualizacji aplikacji, aby móc z niej nadal korzystać? Na przykład, powiedzmy, że wypycham aktualizację, która przynosi kilka poprawek. Nic obowiązkowego, użytkownik aktualizuje, jeśli chce: to aktualizacja niekrytyczna. Teraz powiedzmy, że naprawiam bardzo poważny problem z zabezpieczeniami w mojej aplikacji i chcę, aby wszyscy użytkownicy zaktualizowali tę wersję, aby nadal mogli z niej korzystać: jest to aktualizacja krytyczna. Zasadniczo, jeśli jest aktualizacja krytyczna, a użytkownik jeszcze się nie zaktualizował, nie może korzystać z aplikacji, dopóki tego nie zrobi. Czy to możliwe w Sklepie Play? Dziekuję za odpowiedź!


title: Czy jestem za młoda, żeby martwić się teraz o studia?

text: Mam 19 lat i zajmuję się programowaniem hobbystą od pierwszego roku liceum (2002). Niedawno ukończyłem studia w maju '08. Zaraz po ukończeniu szkoły średniej miałem pierwszą umowę o pracę programistyczną w firmie (zostałem zauważony z mojej osobistej strony internetowej). Początkowo rozmawialiśmy z dyrektorem generalnym o pracy przez około rok w domu przed wyjazdem tam, jak niedawno ukończyłem studia, bez wcześniejszych prac, bez pieniędzy, i chcieli, abym przeprowadził się przez Stany Zjednoczone, po 6 tygodniach pracy i dwóch projektach, które podjąłem decyzję o pozostaniu z rodziną, ponieważ mój ojciec może stracić pracę, a moja siostra i matka próbują ukończyć studia, a ja chcę być tutaj, aby pomóc, jeśli sprawy staną się naprawdę trudne. - Na tym skończyła się praca kontraktowa, co mi odpowiadało, spodziewałem się tego. Pracując dla nich, szybko się uczyłem i byłem bardzo chętny i szczęśliwy, pracując dobrze ponad 12 godzin dziennie, aby zrobić wszystko, co we mnie rzucili. Pracowałem bezpośrednio pod kierownictwem starszego programisty, którego mój przyjaciel i wydawało się, że lubili moją pracę i że robiłem dobrą robotę. Praca dla nich jako całości była bardzo dobra, profesjonalna i bardzo wygodna. Zawsze myślałem, że szkoła to żart i tak naprawdę niczego nie udowadnia (pokazują to moje oceny z liceum, bez wszystkich zajęć z technologii, które wygrałem) - Ale zawsze czuję, że tak naprawdę nie wiem wystarczająco dużo, aby zapewnić dobre praca programistyczna. Visual Basic .NET, C#, WinForms, sockety, to tylko niektóre z moich umiejętności... ale jestem bardzo skromny jeśli chodzi o to, co wiem, ponieważ jest tyle rzeczy, których muszę się nauczyć. Pytanie brzmi… jak cenna może być „naprawdę” uczelnia? Jak mogę naprawdę doszlifować swoje umiejętności i wypełnić luki w wiedzy, których mogę brakować? Jak mogę naprawdę dowiedzieć się, na czym muszę się skupić i co dalej? Często czuję się przytłoczony, ponieważ staram się prowadzić witrynę programistyczną, wiele projektów, a także pomagać innym programistom, którzy wiedzą znacznie mniej ode mnie, no i oczywiście życie osobiste, wszystko to jest bardzo frustrujące. Mam wiele kierunków do pójścia, ale jestem sparaliżowany w którą stronę wybrać.. Przeczytałem wiele tematów na ten temat już tutaj i w necie, ale jestem jeszcze młody i wydaje mi się, że dużo tego nie robi nie dotyczy mnie.


title: Najlepszy sposób na zarządzanie minutami spotkania

text: Jaki jest najlepszy sposób zarządzania codziennymi protokołami spotkań? Czy musimy zarządzać dokumentami w repozytorium takim jak VSS, czy może być on utrzymywany w samym arkuszu Excela. Uprzejmie podziel się swoim doświadczeniem dla tego samego i przewodnika. Z góry dziękuję


title: Czy zabezpieczenie danych karty kredytowej jest uważane za wymaganie od klienta?

text: Biorę udział w kursie Wprowadzenie do Agile Software Development, Instruktor omawiał przykład dotyczący sklepu internetowego i poprosił nas o napisanie **Historii użytkowników** i **Warunków zadowolenia**, a jedną z nich było _Jako użytkownik mogę zobowiązać się do zakupu wybranej wcześniej karty marketingowej_ , warunki zaspokojenia w tym przypadku zawierały dodatkowe warunki oprócz **System musi zabezpieczyć dane karty kredytowej przez łącze internetowe za pomocą https** * Nie zgadzam się z tym i powiedział, że jest to rzecz, którą trzeba zrobić, nie tylko na wypadek, gdyby użytkownik poprosił mnie o ochronę, a jest to śmiertelne zagrożenie jak lub ważniejsze niż SQl Injections i jest to wymóg niefunkcjonalny na poziomie technicznym a jeśli użytkownik wspomniał o tym lub nie, musiało to zostać wzięte pod uwagę podczas naszego rozwoju, niektórzy kierownicy projektów w trakcie kursu wyrazili sprzeciw i powiedzieli, że jest to strata czasu na funkcje, o które użytkownik nie prosił!, instruktor nie Nie daj mi comme Nie zwracałem na mnie uwagi i nie odpowiadałem. Naprawdę myślę, że jestem prawdziwy i nie jestem przekonany, ale wszyscy ci przeszkoleni ludzie nie zgadzali się ze mną [jestem nowy w dziedzinie inżynierii oprogramowania, ale zawsze pracowałem jako programista], więc pytam cię o to.


title: Czy są jakieś wielkoskalowe frameworki dla PHP?

text: Jestem ciekaw, czy istnieją powszechnie używane frameworki dla dużych przedsiębiorstw dla PHP, które byłyby całym lub większością twojego środowiska, gdybyś pracował w PHP. Coś porównywalnego do formularzy WebForm lub MVC ASP.NET, ponieważ podczas pracy w którymkolwiek z nich większość kodu i systemu opiera się na pracy integracyjnej w ramach tej struktury. Edycja: W szczególności szukam frameworka, który będzie pasował do tego, czego używałbyś do 99% swojej pracy nad pisaniem swojej strony internetowej, co oznacza: * pobieranie danych, jakiś rodzaj ORM we frameworku * reprezentację danych, pewnego rodzaju automatycznie konfigurowane kontrolki interfejsu użytkownika obsługujące dane, które ułatwiają odczytywanie i zapisywanie do bazy danych * buforowanie danych * serializacja danych * komunikacja danych, łatwy sposób generowania i hostowania różnego rodzaju usług internetowych


Mam doświadczenie informatyczne i byłem dość pewny siebie, dopóki w pracy nie pojawiła się okazja, aby przejść do programowania (C#). Nigdy wcześniej nie programowałem, a oprogramowanie, dla którego programuję, to program, którego nigdy wcześniej nie używałem (oprogramowanie do modelowania 3D). Od tego czasu minęło 6 miesięcy i mam ochotę się poddać. Nie miałem dużo treningów... około 3 tygodnie treningu rozłożone w ciągu ostatnich 6 miesięcy. Myślę, że byłbym dobry w programowaniu, ale to doświadczenie skłania mnie do przemyślenia mojej decyzji. Nie jestem pewien, czy to tylko ja, czy ta frustracja jest normalna. Jak mogę się dowiedzieć, czy programowanie jest dla mnie odpowiednie?


title: Jak utworzyć plik .sh, który liczy się za każdym razem, gdy kompilujesz?

text: Chciałem skompilować swój program i chciałem wiedzieć, ile razy go skompilowałem. Jak zrobić plik .sh, aby to zrobić? (Używam Maca, czy to plik .sh?)


title: Najlepsze praktyki, aby uniknąć fałszywych profili?

text: Oferując utworzenie profilu (na przykład login+hasło) dla usługi internetowej, jakie najlepsze praktyki należy wdrożyć, aby uniknąć masowego spamowania/tworzenia fałszywych profili? Zastanawiam się nad potwierdzeniem e-maila, captchami itp. jakieś inne pomysły, które sprawdzają się w praktyce?


title: Najlepsza technika komunikacji z bazą danych w C#

text: Kilka dni temu przeczytałem odpowiedź stwierdzającą, że pisanie zapytań w kodzie c# już dawno minęło. Nie jestem pewien, co konkretna osoba miała na myśli w komentarzu, ale dało mi to do myślenia. W firmie, w której pracuję, utrzymujemy montaż zawierający wszystkie zapytania do bazy danych (nazwijmy to Zapytaniami). Do tego zestawu odwołuje się zestaw QueryService (Pobierz poprawne zapytania), do którego z kolei odwołuje się zestaw UnitOfWork (Klasy złączy bazy danych, mamy różne klasy złączy dla SQL, MySQL itp.). Używamy tych trzech zestawów do wykonywania operacji na naszej bazie danych, a wszystkie zapytania/polecenia są zapisywane w kodzie C#. Czy istnieje lepszy sposób komunikowania się z bazą danych i czy istnieje lepszy sposób komunikowania się z różnymi typami baz danych?


title: Jak mam zmierzyć wpływ artykułu na internet?

text: Dla mojej aplikacji analizuję sentyment artykułów, używając NLTK, do wyświetlania trendów sentymentu. Ale teraz wszystkie artykuły ważą tyle samo. Nie pokazuje to bardzo dokładnego obrazu, ponieważ niektóre artykuły mają większy wpływ na Internet niż inne. Na przykład wpis na blogu z jakiegoś nieznanego bloga nie powinien ważyć tyle samo, co artykuł z New York Times. Jak mogę określić ich wpływ?


title: Jaki jest najlepszy sposób na określenie, kiedy należy korzystać z bazy danych?

text: Karierę programistyczną rozpocząłem od tworzenia stron internetowych z wykorzystaniem PHP i MySQL. Przyzwyczaiłem się do używania bazy danych do przechowywania większości dynamicznych danych, a także niektórych danych ustawień/parametrów. Czasami będzie dużo danych, a innym razem wpisów w tabelach będzie niewiele. Wydawało mi się to po prostu naturalne i, o ile wiem, jest to mniej więcej akceptowalne podejście w tworzeniu stron internetowych. (Proszę mnie poprawić, jeśli się mylę...) Zagłębiam się teraz w aplikacje komputerowe i moją naturalną skłonnością jest ponowne wykorzystanie bazy danych do przechowywania wielu informacji, które zostaną wygenerowane podczas korzystania z aplikacji. ~~Jednak, o ile wiem, nie widzę aplikacji (z których korzystam) bardzo często korzystających z bazy danych.~~ _[EDYTUJ: Od tego czasu wskazano, że było to błędne założenie, ponieważ wiele aplikacji to robi użyj lekkich baz danych osadzonych w samym programie.]_ Jaki jest tego powód? W którym momencie należy korzystać z db? Czy istnieją jakieś standardy w tej sprawie? Jakie są również powody, aby NIE używać bazy danych do tworzenia aplikacji desktopowej?


title: Kiedy należy używać klasy 2-property na wstępnie zbudowanej strukturze, takiej jak KeyValuePair?

text: Kiedy należy umieścić typ danych typu klucz/wartość w jego własnej klasie zamiast używać wstępnie zbudowanej struktury ogólnej, takiej jak `KeyValuePair` lub `Tuple`? Na przykład większość tworzonych przeze mnie ComboBoxów zawiera DisplayName i Value. To jest rodzaj danych, które próbuję zdecydować, kiedy umieścić w nowej klasie, a kiedy po prostu użyć KeyValuePair. Obecnie pracuję nad czymś, co używa `iCalendar`, a dane wybranego użytkownika są ostatecznie łączone w łańcuch typu `key1=value1;key2=value2;`. Zacząłem od umieszczenia danych w `KeyValuePair<string,string>`, ale teraz zastanawiam się, czy zamiast tego powinna to być jego własna klasa. Ogólnie rzecz biorąc, jestem zainteresowany dowiedzeniem się, jakie wytyczne są używane przy podejmowaniu decyzji o użyciu istniejącej struktury/klasy, takiej jak `KeyValuePair` nad obiektem 2-właściwości, oraz w jakich sytuacjach można użyć jednej nad drugą.


title: AGPL - co możesz zrobić, a czego nie

text: AGPL jest dość nową licencją, która miała przejść na GPL przez sieci. Jednak nie będąc prawnikiem i właściwie nie przeczytałem całej licencji, nie mogę zrozumieć, co dokładnie możesz robić swobodnie, a co nie z AGPL. Moja niepewność jest podsycana tym postem o MongoDB (czyli AGPL), a jeszcze bardziej komentarzami poniżej. Jeśli podążymy za komentarzami, okaże się, że możesz używać bibliotek AGPL z komercyjnym oprogramowaniem po stronie serwera o zamkniętym kodzie źródłowym, o ile nie modyfikujesz biblioteki. Czy tak jest? A może musisz rozpowszechniać całą aplikację, korzystając z biblioteki na licencji AGPL? Sprawa z MongoDB polega na tym, że używa licencji Apache dla kodu klienta, co rodzi kolejne pytanie. Co się stanie, jeśli użyjesz oprogramowania AGPL, ale wdrożysz je jako inną aplikację niż komercyjna aplikacja z zamkniętym kodem źródłowym? Na przykład weźmy iText \- jest to biblioteka AGPL: * jeśli używasz jej i modyfikujesz, czy musisz otworzyć całą aplikację, czy musisz redystrybuować tylko zmiany w iText? * jeśli go używasz i **nie** go modyfikujesz, to czy musisz otworzyć całą aplikację? * Jeśli zawijasz iText w innej aplikacji, którą uruchamiasz jako osobny proces, ale używasz go ze swojej głównej aplikacji, czy powinieneś otworzyć wszystko, czy tylko opakowującą aplikację? (Aplikacja opakowująca będzie interfejsem API opartym na HTTP, który pobierze pliki pdf i zwróci wyniki użycia iText jako JSON). Czy można to wykorzystać do obejścia licencji AGPL? Uwaga: pytanie dotyczy AGPLv3


title: Jakie są skuteczne sposoby na wprowadzenie koncepcji kodu kata do miejsca pracy?

text: W oparciu o twoje doświadczenia, jakie są skuteczne sposoby na wprowadzenie praktyki code kata do organizacji lub firmy? Żeby było jasne, nie interesuje mnie użyteczność kodu kata. Interesują mnie metody wprowadzenia tej koncepcji do zespołu programistów.


title: Podejście do kontroli źródła dla wtyczek?

text: Piszę aplikację i zestaw wielu małych wtyczek – gdzie „wiele” oznacza dziesiątki, a „małe” jedno lub dwa źródła. Niekoniecznie będzie możliwe podzielenie wtyczek na schludne, nienakładające się kategorie. Jaka byłaby najlepsza strategia kontroli źródeł: * Wiele repozytoriów, po jednym dla każdej wtyczki; lub * Jedno repozytorium, z katalogiem dla każdej wtyczki? Inne sugestie są oczywiście mile widziane. Używam Mercurial i hostingu na Bitbucket.


title: Mój klient chce, żebym nagrał filmik pokazujący, jak rozwijam jego oprogramowanie

text: Pracując jako freelancer, często widzę _dziwne_ prośby od moich klientów, z których niektóre mogą negatywnie wpłynąć na moją codzienną pracę¹, a inne próbują wprowadzić jakąś kontrolę. Zwykle spotykam się z tymi rzeczami podczas wstępnych negocjacji, więc w tym stanie dość łatwo wytłumaczyć klientowi, że zależy mi na mojej pracy i produktywności i oczekuję, że klienci ufają mojej pracy. Sprawy były o wiele trudniejsze² z projektem, który właśnie zaakceptowałem, ponieważ dopiero po zakończeniu negocjacji (umowa jest już podpisana i nie wspomina się o śledzeniu wideo) i po rozpoczęciu pracy nad projektem, który **mój klient o to poprosił Nagrywam wideo ze wszystkiego, co robię na moim komputerze podczas pracy nad jego projektem** , czyli wideo, które pokaże, że poruszam kursorem, wpisuję znak, otwieram plik, przesuwam okno itp. Pracuję w własna firma, korzystająca z własnych komputerów. Odpowiedziałem temu klientowi, że taka prośba nie może zostać zaakceptowana, ponieważ: * Setki godzin pracy na komputerze z dwoma ekranami będzie wymagało dużej ilości miejsca na dysku na nagrane filmy. Jeśli nie zależy mi na przestrzeni, zależy mi na tym, aby klient marnował moją przepustowość, pobierając te filmy. * Nagrywanie wideo może wpłynąć na ogólną wydajność i zmniejszyć moją produktywność (co nie jest prawdą, ponieważ urządzenie jest wystarczająco wydajne, aby nagrać ten film bez utraty wydajności, ale cóż, nadal wygląda to na słuszny argument). * Nie zawsze pamiętam o włączeniu nagrywania wideo przed rozpoczęciem pracy i wyłączeniu na końcu. * Może to dotyczyć prywatności. Co się stanie, jeśli podczas nagrywania wideo przełączę się na pocztę? Co jeśli, aby otworzyć katalog z plikami dotyczącymi tego projektu klientów, najpierw otworzę katalog nadrzędny zawierający listę wszystkich moich klientów? * Taki film nie może być wiarygodnym źródłem do śledzenia kosztów projektu (opłacam się za godzinę), ponieważ część pracy jest wykonywana tylko ołówkiem i papierem (co _jest_ prawdą, ponieważ robię dużo pracy w wersji roboczej bez użycia komputera). Mimo tych punktów **klient uważa, że jeśli nie chcę nagrywać wideo, to dlatego, że mam coś do ukrycia** i chcę kłamać na temat czasu rzeczywistego spędzonego nad jego projektem³. **Jak mu wytłumaczyć, że nie jest zwyczajną praktyką freelancerów nagrywanie filmów z ich codziennej pracy** i że takie ekstrawaganckie prośby muszą być zarezerwowane na wyjątkowe okoliczności⁴? * * * ¹ Najczęstszym przykładem jest prośba o pracę za pośrednictwem Pulpitu zdalnego na ponad wolnym serwerze, który korzysta z ponad wolnego połączenia internetowego, lub zmuszenie do korzystania z przestarzałego oprogramowania, takiego jak Windows Me, bez poważnego powodów jako wsparcie dla dziedzictwa. ² W rzeczywistości wykonałem już wiele prac związanych z zarządzaniem i projektowaniem systemów, co jest niezbędne, ale zwykle jest źle rozumiane przez klientów i postrzegane jako strata czasu i pieniędzy. Obserwując zaniepokojonego klienta, jestem prawie pewien, że odmówi zapłacenia dużej kwoty za to, co już zostało zrobione, ponieważ tak naprawdę nie ma linijek kodu. Nawet jeśli legalnie mogę łatwo udowodnić, że na poziomie projektowym było dużo pracy, nie chcę kończyć relacji z tym klientem w sądzie. ³ Co nie jest tak ryzykowne, jak mogłoby być, skoro dałem temu klientowi oczekiwany i maksymalny koszt projektu, więc klient na pewno nigdy nie zostanie poproszony o zapłacenie więcej niż maksymalna kwota określona w umowie, nawet jeśli prawdziwa praca kosztuje więcej. ⁴ Jednym z przypadków, kiedy skutecznie nagrywam z własnej inicjatywy film akcji, jest sytuacja, w której muszę dokonać pewnych manipulacji bezpośrednio na serwerze produkcyjnym klienta, zwłaszcza jeśli chodzi o kwestie bezpieczeństwa. Zapisanie tych kroków może być dobrym pomysłem, aby dokładnie wiedzieć, co zostało zrobione, a także upewnić się, że w mojej pracy nie ma błędów lub zobaczyć, jakie to były błędy. * * * **Aktualizacja:** Przede wszystkim dziękujemy za wszystkie odpowiedzi i komentarze. Ponieważ pytanie przyciągnęło znacznie więcej uwagi i miało znacznie więcej odpowiedzi, niż się spodziewałem, wyobrażam sobie, że może być istotne dla innych osób, więc dodaję aktualizację. Po pierwsze, aby podsumować odpowiedzi i komentarze, zasugerowano (w kolejności losowej): * Zaproponuj inne sposoby śledzenia, jak pokazano w filmie Twitter Code Swarm, lub dostarczy „krótki kamień milowy z prostym, jasnym wynikiem, a następnie więcej złożone kamienie milowe” itp. * Wyjaśnij, że film nie jest wiarygodnym źródłem i można go sfałszować, a jego wdrożenie byłoby trudne, zwłaszcza w przypadku wsparcia. * Wyjaśnij, że film nie jest wiarygodnym źródłem, ponieważ pokazuje tylko niewielką część pracy: duża część pracy jest wykonywana bez użycia komputera, nie licząc dodatkowych godzin spędzonych na myśleniu o rozwiązaniu problemu. * Trzymaj się umowy; jeśli klient chce to zmienić, musi spodziewać się nowych negocjacji i wyższej ceny. * Czy nagranie wideo, „ale wymagaj, aby klient umieścił całą opłatę na rachunku powierniczym”, wymagaj, aby prawnik nagrał cały płatny czas itp., innymi słowy, „działał w środowisku pozbawionym zaufania”, wymaganie od klienta pokrycia dodatkowych kosztów. * Szukaj praw, które tego zabraniają. Kilka osób zapytało w jakim kraju mieszkam. Jestem we Francji. Takie przepisy istnieją, aby chronić pracowników firmy (istnieją ścisłe przepisy dotyczące kamer bezpieczeństwa itp., ale jestem prawie pewien, że nic nie zabrania freelancerowi świadomego podpisania umowy, która zmusza go do nagrywania ekranu podczas pracy nad projektem * Po prostu zrób i wyślij filmy: klient „obejrzy kilka dziesięciosekundowych fragmentów działań, których nie zrozumie”, a następnie wyrzuci te filmy. * Powiedz nie. W końcu to _moja_ sprawa, a ja jestem tylko jeden decyduje o tym, jak to przeprowadzić. Ponadto umowa jest już podpisana i nie ma nic na temat śledzenia wideo. * Powiedz nie. Procesy i praktyki, które stosuję w mojej firmie, można uznać za tajemnicę handlową i są lub mogą być utajnione. * Przestań. Jeśli relacja zaczyna się w ten sposób, są szanse, że wkrótce lub później źle się skończy. Ponadto, „jeśli traktuje cię jak złodzieja – i to właśnie sugeruje – to po prostu będzie się pogarszać później, gdy funkcja XYZ nie działa „nie działa dokładnie tak, jak sobie wyobrażał”. Podczas gdy wszystkie te sugestie są równie cenne, osobiście postanowiłem powiedzieć klientowi, że zgadzam się na nakręcenie filmów, ale w tym przypadku **musimy renegocjować umowę** , pamiętając, że będzie to **znaczne koszty , w tym dodatkowa opłata za zwolnienie praw autorskich**. Nowy koszt całkowity byłby średnio trzykrotnością rzeczywistego kosztu projektu. Znając tego klienta, jestem całkowicie pewien, że nigdy nie zgodziłby się zapłacić tak dużo, więc problem został rozwiązany. * * * **Druga aktualizacja:** Klient skutecznie odrzucił propozycję renegocjacji pierwotnej umowy, biorąc pod uwagę znaczne dodatkowe koszty.


title: Czy wymienisz C++/CLI w swoim CV?

text: Kontynuacja języków w CV: Czy lepiej umieścić „C/C++” czy „C, C++”? Czy umieściłbyś w swoim CV „C++/CLI”? Jak? Jak początkowo recenzent CV zareagowałby na to, jeśli „C++/CLI” jest dla recenzenta nowością? Czy recenzent uzna, że kandydat nie jest wystarczająco precyzyjny, tak jak w przypadku CV, które zawiera listę `C/C++` zamiast `C, C++`? Czy parser CV podzieli je na dwie części `C++`, `CLI`, używając ukośnika jako separatora? Czy to w ogóle język? (Lub _"język kleju"_ )


title: Dlaczego w zapytaniu SQL opcja Select znajduje się przed znakiem From?

text: To jest coś, co bardzo mi przeszkadzało w szkole. 5 lat temu, kiedy uczyłem się SQL, zawsze zastanawiałem się, dlaczego najpierw określamy pola, które chcemy, a następnie skąd je chcemy. Zgodnie z moim pomysłem powinniśmy napisać: Od pracownika e Wybierz e.Imię Więc dlaczego norma mówi: Wybierz e.Imię -- Eeeeeek, co oznacza e ? Od Employee e -- Ok, teraz wiem, co to jest e Zrozumienie SQL zajęło mi tygodnie i wiem, że dużo tego czasu pochłonęła niewłaściwa kolejność elementów. Przypomina to pisanie w C#: string name = worker.Name; var pracownik = this.GetEmployee(); Czyli zakładam, że ma to jakiś historyczny powód, ktoś wie dlaczego?


title: Jak nauczyć się / stać się zdolnym do zapewniania wysokiej jakości projektowania aplikacji?

text: Interesują mnie rzeczy, które programista powinien nauczyć się / wiedzieć, aby zapewnić bardzo dobry projekt architektury aplikacji. Jak wiadomo, każdy projekt można uznać za dobry w pewnych okolicznościach, ale jeśli chodzi o rozszerzenie zestawu funkcji aplikacji lub zapewnienie optymalizacji itp., okazuje się, że aplikacja została źle zaprojektowana lub brakuje jej abstrakcji. Jak umieć przewidywać i uwzględniać takie rzeczy w projektowaniu aplikacji? Z drugiej strony oprogramowanie ma być solidne, wydajne i szybkie. A jego głównym celem z pewnego punktu widzenia jest przynoszenie pieniędzy (poprzez ich oszczędzanie lub ich pozyskiwanie). Więc jeśli ktoś zagłębi się w abstrakcję i rozważy pewne rzeczy, które będą potrzebne za 2 lub więcej lat, nie otrzyma dobrej architektury aplikacji (będzie miał mnóstwo niepotrzebnych rzeczy). Jak więc zrozumieć, do jakiego stopnia potrzebne są pewne rzeczy w architekturze aplikacji? Mam nadzieję, że wyraziłem się jasno, w przeciwnym razie proszę skomentować niejasne części.


title: kontrolowanie 2 okien jednocześnie do testowania a-b

text: Szukam aplikacji, która klonuje wszystkie moje polecenia (mysz i klawiatura) do drugiego okna. Specjalnie dla przeglądarek. Chciałbym przetestować stronę internetową i bezpośrednio zobaczyć różne zachowanie w dwóch oknach (różne wersje strony). Na przykład w oknie 1 klikam link3 i otwiera się określony adres URL. Powinno to zostać zrobione automatycznie w drugim oknie. Jeśli wprowadzę jakieś dane formuły, to również powinno to zostać sklonowane. Czy jest jakaś aplikacja dla systemu Windows lub Linux, która służy temu pragnieniu? Wiem, że istnieją narzędzia wiersza poleceń, które klonują polecenia z jednego terminala do kilku innych.


title: Używanie razem serwera lucene i sql. Nowicjusz potrzebuje wskazówek

text: Zasadniczo wszystko można wyjaśnić po prostu: muszę zindeksować jedną lub więcej baz danych SQL Server 2005 za pomocą lucene, abym mógł przeszukiwać różne rekordy. Znalazłem wiele przykładów i dokumentacji i zacząłem je czytać. W rezultacie byłem zdezorientowany i sfrustrowany. Więc jako początkujący, jakie są kroki, aby wdrożyć go wraz z serwerem SQL do wyszukiwania w bazach danych? Potrzebuję jakiegoś przepływu pracy do naśladowania, abym mógł uporządkować plan opracowania projektu. Naprawdę nie wiem od czego zacząć. -Dodatkowe pytanie: Czy istnieje sposób na przechowywanie indeksu Lucene bezpośrednio w bazie danych serwera SQL zamiast w FSDirectory lub RAMDirectory? -Ostatni: Czy lucene obsługuje podobne wyszukiwania słów? (np. szukam „lu” i otrzymuję wszystkie podobne słowa, takie jak sugestie google, na przykład „luke”, „lucene”, „lua” itp.) i napisałem już kilka zestawów SQL Server CLR do wykonywania różnych zadań, ale mechanika Lucene jest dla mnie dość niejasna. Dziękuję Ci!


title: Jak tworzyć testy jednostkowe/integracyjne dla mojej aplikacji internetowej?

text: Obecnie pracuję nad aplikacją czatu Ajax, która używa PHP na zapleczu. Niektóre funkcje, jakie ma teraz, to różne typy użytkowników (administrator / mod / zbanowany), pokoje publiczne i prywatne, polecenia i ogłoszenia. Niedawno dowiedziałem się o testowaniu jednostkowym/integracyjnym i brzmi to jak dobra alternatywa dla ręcznego testowania wszystkiego za każdym razem, gdy wypuszczam nową funkcję. Jak rozpocząć dodawanie funkcji testowania do mojej aplikacji PHP? BTW: Aplikacja używa długiego odpytywania (gdzie PHP utrzymuje połączenie przez usleep() i stale odpytuje bazę danych, dopóki nie zostaną zwrócone nowe informacje), więc myślę, że może to być problem podczas testowania.


title: Jak dołączyć jQuery do biblioteki?

text: Piszę bibliotekę graficzną JavaScript przy użyciu canvas, na którą licencjonuję pod MIT, i używam jQuery, a także kilku innych bibliotek open source, wszystkie pod MIT. Używam również Bower do zarządzania moimi zależnościami front-end. Jak najlepiej poradzić sobie z tymi zależnościami bez naruszania licencji? Najlepiej, aby użytkownik nie musiał dołączać wielu skryptów, tylko jeden `<script src = "graph.js></script>` i zawierałby wszystkie wtyczki. Czy powinienem poprosić użytkownika o dołączenie jQuery i inne biblioteki we własnym znaczniku skryptu, czy też powinienem połączyć wszystkie skrypty razem w jeden duży plik, w tym nagłówki?


title: Jak decydujesz, czy powinieneś wziąć projekt?

text: Jestem całkiem nowym programistą. Zawodowo programowałem w C# przez dwa lata jako stażysta i 6 miesięcy jako młodszy programista. Przyjaciel mojej rodziny potrzebuje pomocy przy projekcie napisanym w VB.net. Nigdy nie korzystałem z VB.net, więc trochę się tam martwię. Ale prawdziwe pytanie sprowadza się do tego, że jak już spojrzałem na dokumenty do projektu, to mam wrażenie, że nic naprawdę dobrego z tego nie wyniknie. Mam wrażenie, że spowoduje to więcej stresu niż chciałbym mieć w swoim życiu. W jaki sposób doświadczeni programiści podejmują decyzję, czy wziąć projekt, czy po prostu odpuścić? Jakie są dobre wskaźniki ułatwiające podjęcie decyzji? **Edytuj** To właściwie wygląda na bardzo duży ERP, nad którym chciałby, żebym pracował i nie wierzę, że wie coś o programowaniu, więc nie sądzę, że fakt, że jestem bardzo młodszy, nawet przekroczył jego umysł.


title: Jaki jest dobry projekt metody, która może zwrócić kilka logicznie różnych wyników?

text: Tytuł pytania jest prawdopodobnie zbyt abstrakcyjny, więc podam konkretny przykład tego, co mam na myśli: Istnieje usługa internetowa, która hermetyzuje proces zmiany haseł dla użytkowników systemu rozproszonego. Serwis akceptuje login użytkownika, jego stare hasło oraz nowe hasło. Na podstawie tych danych może zwrócić jeden z następujących trzech wyników: 1. W przypadku, gdy użytkownik nie został znaleziony lub jego stare hasło nie pasuje, po prostu zwróci HTTP 403 Forbidden. 2. W przeciwnym razie pobiera nowe hasło i upewnia się, że jest ono zgodne z polityką haseł (np. jest wystarczająco długie, zawiera odpowiednią mieszankę liter i cyfr itp.). Jeśli tak się nie stanie, zwróci kod XML opisujący, dlaczego hasło nie jest zgodne z polityką. 3. W przeciwnym razie zmieni hasło i zwróci XML zawierający datę wygaśnięcia nowego hasła. Teraz chciałbym zaprojektować klasę, najlepiej za pomocą jednej metody, do enkapsulacji pracy z tą usługą sieciową. Mój pierwszy strzał był następujący: public class PasswordManagementWebService { public ChangePasswordResult ChangePassword(string login, string oldPassword, string newPassword) { ChangePasswordResult wynik; // wyślij dane wejściowe do serwisu WWW, nie jest ważne jak; httpResponse // będzie zawierać odpowiedź z webservice var httpResponse; if (HasAuthenticationFailed(httpResponse) { throw new AuthenticationException(); } else if (WasPasswordSuccessfullyChanged(httpResponse)) { wynik = new ChangePasswordSuccessfulResult(httpResponse); } else { wynik = new ChangePasswordUnsuccessfulResult} public return(httpResponse); class ChangePasswordResult { public abstract bool WasSuccessful { get; } } public abstract class ChangePasswordSuccessfulResult { public ChangePasswordSuccessfulResult(HttpResponse httpResponse) { // inicjalizuj klasę z httpResponse } public override bool WasSuccessful get } public return Date { ; private set; } } public abstract class ChangePasswordUnsuccessful Result { public ChangePasswordUnsuccessfulResult(HttpResponse httpResponse) { // zainicjuj klasę z httpResponse } public override bool WasSuccessful { get { return false; } } public bool WasPasswordLongEnough { get; zestaw prywatny; } public bool DoesPasswordHaveToContainNumbers { get; zestaw prywatny; } // ... itd. } Jak widać, zdecydowałem się na użycie oddzielnych klas dla przypadków zwrotów #2 i #3 - mogłem użyć jednej klasy z wartością logiczną, ale wydaje się to być zapachem, klasa nie miałaby jasnego celu. Dzięki dwóm oddzielnym klasom użytkownik mojej klasy `PasswordManagementWebService` musi teraz wiedzieć, które klasy dziedziczą po `ChangePasswordResult` i rzutować na poprawną na podstawie właściwości `WasSuccessful`. Chociaż mam teraz fajne, laserowe zajęcia, utrudniłem życie moim użytkownikom, niż powinno być. Jeśli chodzi o przypadek #1, właśnie zdecydowałem się zgłosić wyjątek. Mogłem również utworzyć osobny wyjątek dla przypadku nr 2 i zwrócić coś z metody tylko wtedy, gdy hasło _zostało_ pomyślnie zmienione. Nie wydaje mi się to jednak właściwe — nie sądzę, aby nieprawidłowe nowe hasło było stanem na tyle wyjątkowym, aby uzasadniać wyrzucenie wyjątku. Nie jestem pewien, jak zaprojektowałbym rzeczy, gdyby istniały więcej niż dwa wyjątkowe typy wyników z usługi sieciowej. Prawdopodobnie zmieniłbym typ właściwości `WasSuccessful` z boolean na enum i zmieniłbym jej nazwę na `ResultType`, dodając dedykowaną klasę dziedziczoną z `ChangePasswordResult` dla każdego możliwego `ResultType`. Wreszcie, do **rzeczywistego pytania**: Czy to podejście projektowe (tj. posiadanie jednej klasy abstrakcyjnej i zmuszanie klientów do rzutowania na poprawny wynik na podstawie właściwości) jest właściwe, gdy mamy do czynienia z takimi problemami? Jeśli tak, czy istnieje sposób na jego ulepszenie (być może przy użyciu innej strategii zgłaszania wyjątków, a kiedy zwracać wyniki)? Jeśli nie, co byś polecił?


title: Wiele organizacji kodu aplikacji Zend

text: Przez ostatni rok pracowałem nad serią aplikacji opartych na frameworku Zend i skoncentrowanych na złożonej logice biznesowej do której wszystkie aplikacje muszą mieć dostęp nawet jeśli nie używają wszystkich (łatwiej to niż posiadanie wielu folderów bibliotecznych dla każdego aplikacji, ponieważ wszystkie są połączone wspólnym centrum). Nie wchodząc w szczegóły dotyczące tego, o co konkretnie chodzi w projekcie, szukam pewnych danych wejściowych (ponieważ pracuję nad samym projektem) na temat tego, jak „pogrupowałem” mój kod. Próbowałem to wszystko podzielić w taki sposób, aby jak najbardziej usuwać zależności. Staram się, aby wszystko było tak oddzielone, jak logicznie, więc w ciągu 12 miesięcy, kiedy mój czas się skończy, każdy inny, kto przyjdzie, nie będzie miał problemu z rozszerzeniem tego, co wyprodukowałem. Przykładowa struktura: applicationStorage\ (zawiera wszystkie aplikacje i powiązane dane) applicationStorage\Applications\ (zawiera same aplikacje) applicationStorage\Applications\external\ (folder grupowania aplikacji) (zawiera wszystkie zewnętrzne aplikacje dostępu klienta) applicationStorage\Applications\external\site\ (główna zewnętrzna aplikacja dostępu klienta) applicationStorage\Applications\external\site\Modules\ applicationStorage\Applications\external\site\Config\ applicationStorage\Applications\external\site\Layouts\ applicationStorage\Applications\external\site\ZendExtended\ (zawiera rozszerzoną Klasy Zend specyficzne dla tego przykładu aplikacji: ZendExtended_Controller_Action extends zend_controller_Action ) applicationStorage\Applications\external\mobile\ (mobilny dostęp do aplikacji dla klientów zewnętrznych, różne możliwości przepływu pracy w porównaniu do pełnej wersji witryny) applicationStorage\Applications\internal\ (folder grupujący aplikacje) (zawiera wszystkie wewnętrzne aplikacje firmy) applicationStorage\Applications\internal\site\ (główna aplikacja wewnętrzna) applicationStorage\Applications\internal\mobile\ (dostęp mobilny ma inny przepływ i ograniczone możliwości w porównaniu do wersji głównej witryny) applicationStorage\ Tests\ (zawiera testy jednostkowe PHP) applicationStorage\Library\ applicationStorage\Library\Service\ (zawiera całą logikę biznesową, usługi i lokalizator usług; są one całkowicie oddzielone od frameworka Zend i opierają się na interfejsach modeli) applicationStorage\Library\Zend\ (framework Zend) applicationStorage\Library\Models\ (nie zna usług, ale jest połączony z frameworkiem Zend dla operacji DB; zawiera interfejsy modeli i modele mapowania danych dla wszystkich obiektów biznesowych; przykłady obejmują Iorder/IorderMapper, Iworksheet/IWorksheetMapper, Icustomer/IcustomerMapper) (Uwaga: foldery Modules, Config, Layouts i ZendExtended są zduplikowane w każdym folderze aplikacji; pominąłem je, ponieważ nie są wymagane dla moich celów.) Dla biblioteki to zawiera cały "uniwersalny" kod. Framework Zend jest sercem wszystkich aplikacji, ale chciałem, aby moja logika biznesowa była niezależna od frameworka Zend. Wszystkie interfejsy modeli i maperów nie mają publicznych odniesień do Zend_Db, ale faktycznie otaczają je prywatnie. Mam więc nadzieję, że w przyszłości będę mógł przepisać mappery i dbtables (zawierające Models_DbTable_Abstract, który rozszerza Zend_Db_Table_Abstract) w celu oddzielenia mojej logiki biznesowej od frameworka Zend, jeśli chcę przenieść moją logikę biznesową (usługi) do środowisko inne niż Zend (może jakiś inny framework PHP). Korzystając z serviceLocatora i rejestrując wymagane usługi w ramach ładowania początkowego każdej aplikacji, mogę korzystać z różnych wersji tej samej usługi w zależności od żądania i aplikacji, do której mam dostęp. Przykład: wszystkie aplikacje zewnętrzne będą miały zarejestrowany service_auth_External implementujący service_auth_Interface. To samo z aplikacjami wewnętrznymi z Service_Auth_Internal implementującym service_auth_Interface Service_Locator::getService('Auth'). Obawiam się, że mogę przeoczyć kilka możliwych problemów z tym. Jeden, o którym myślę, to plik config.ini dla wszystkich zewnętrznych, a następnie osobna aplikacja config.ini nadpisująca lub dodająca do globalnego zewnętrznego config.ini. Jeśli ktoś ma jakieś sugestie, byłbym bardzo wdzięczny. Użyłem przełączania kontekstu dla funkcji AJAX w ramach poszczególnych aplikacji, ale jest duża szansa, że zarówno zewnętrzne, jak i wewnętrzne, otrzymają stworzone dla nich usługi sieciowe. Ponownie zostaną one rozdzielone ze względu na autoryzację i różne dostępne usługi. \applicationstorage\Applications\internal\webservice\applicationstorage\Applications\external\webservice


title: Praca w sieci Web z uczeniem maszynowym

text: Zawsze widzę stanowiska pracy dla firm internetowych dla uczenia maszynowego. Na przykład Facebook zawsze ma tego typu oferty pracy. W każdym razie byłem ciekaw, do czego dokładnie firmy internetowe wykorzystują uczenie maszynowe. Czy to po to, aby dać ludziom reklamy oparte na historii przeglądania ich witryny, czy coś w tym rodzaju. Chcę wiedzieć, ponieważ mam pewne doświadczenie z uczeniem maszynowym i brzmi to jak fajna rzecz do pracy, o ile uda mi się przekonać ludzi biznesu, aby to zrobili.


title: Warstwa dostępu do danych, klasa biznesowa czy repozytorium?

text: W moim zespole dyskutowałem na temat tego, co stanowi warstwę dostępu do danych, a funkcje danych i warstwy biznesowe. Myślę, że cały dostęp do bazy danych odbywa się w warstwie dostępu do danych z klasami Repozytorium. DAL zawiera klasy narzędziowe i metody, które wypełniają DataSet, List<>, POCO, Execute SQL, ale jako klasy wewnętrzne przy użyciu wybranej przez Ciebie metody Access: ADO, EntityFramework, nHibernate itp. Warstwa Biznesowa następnie wchodzi w interakcję z DAL bez wiedzy dowolna metodologia SQL lub dostępu do danych. Kolega z drużyny ma takie podejście. Nazwy procedur składowanych i SQL znajdują się w klasach biznesowych. Następnie są przekazywane do DAL, który następnie wypełnia i wykonuje kod SQL. Jaka jest najlepsza praktyka?


title: Jak radzisz sobie z błędami w wyliczeniu / przetwarzaniu list (API niskiego poziomu)

text: Wielokrotnie zmagałem się z wariantami tego problemu, eksperymentując z różnymi rozwiązaniami, z żadnego nie zadowolony. **Streszczenie:** Po wyliczeniu listy elementów błąd w jednym elemencie nie wpływa na pozostałe. Potencjalni wywołujący mają różne wymagania dotyczące sposobu traktowania tych błędów, celem API jest uproszczenie użytkowania i zmniejszenie złożoności. Bardziej ogólnym przypadkiem, w którym występuje ten problem, byłoby przetwarzanie listy niezależnych elementów, a częściowy sukces jest akceptowalny/pożądany, tj. _nie_ jest uruchamiany jako transakcja. * * * **Przykładowy scenariusz** : mam do czynienia z niskopoziomowym interfejsem API wyliczania w stylu C: // jest wywoływany dla każdego elementu typu "stuff" typedef bool (*tEnumStuffCallback)(stuff * item, void * callbackArg) ; // wywołuje "callback" dla każdego elementu "rzeczy". // kontekst wyliczenia wywołującego w callbackArgs void EnumStuff(tEnumStuffCallback callback, void * callbackArg) { stuff * item = 0; for(;;) { int err = stuff_get_next_item(&item); if (err == no_more_stuff) return; // === TODO: obsłuż "prawdziwe" błędy === // przekaż element do wywołania zwrotnego, zatrzymaj enumerację na żądanie if (!callback(item, callbackArg)) return; } } Aby zapewnić zgodność z poprzednimi wersjami i "oczekiwania rozmówcy", chcę/potrzebuję zachować czysty styl C bez wyjątków. Zbudowany na górze wrapper wyższego poziomu może wyglądać tak: EnumStuffs(std::vector< boost::shared_ptr<stuff> > & items); Wywołujący może potrzebować jednej z następujących strategii, gdy wystąpią błędy wyliczenia: * Zatrzymaj wyliczenie przy pierwszym błędzie, np. ponieważ dzwoniący zignoruje całą listę, a wyliczenie jest kosztowne. Klient C++ może chcieć zgłosić wyjątek z wywołania zwrotnego (dozwolone). * Zignoruj przedmioty - np. podczas wyliczania podłączonych urządzeń i szukania konkretnego dostępnego, a błędy nie znalezione urządzenia są obsługiwane osobno * Ignoruj, ale rejestruj diagnostykę w sposób specyficzny dla dzwoniącego (tj. dzwoniący musi wiedzieć o błędach) * Dzwoniący potrzebuje szczegółowej listy błędy do dalszej analizy, m.in. elementy mogą być "powtórzone" w przypadku niektórych typów błędów Zauważ, że jest to _wybór wywołujący_ , nie mogę wymusić decyzji. * * * **Uwaga / Kontekst** Przykład wyidealizowany, w praktyce mam wiele enumeratorów obejmujących różne typy; czasami muszę podać enumerator, czasami funkcja enumeratora pochodzi z systemu operacyjnego. Informacje o błędach mogą być bardziej złożone niż pojedyncze „int”. Bazowe API zawiera już dziesiątki dość mylących typów, chcę uniknąć wprowadzania takiej samej liczby dodatkowych/opakowań. Łączenie różnych stylów rozwoju jest w rzeczywistości częścią mojego opisu stanowiska, możliwości kształcenia na obu końcach są trudne (muszę wybierać swoje bitwy). * * * **Moje pomysły/rozwiązania** * udostępniam osobną odpowiedź zwrotną dotyczącą błędów. Włącza wszystkie scenariusze, ale rozszerza interfejs. * Zamień funkcję wyliczającą na obiekt stanowy. Zwiększa liczbę typów, nie zapewnia kompatybilności wstecznej „stylu”. * przekaż błędy do modułu wyliczającego. jest to _czasami_ nieco lepsze niż poprzednie rozwiązanie, ale zwykle wymaga struktury „kontekstu wyliczenia” zamiast oddzielnych argumentów. Jest sprzeczny z planem, aby uniknąć dodatkowych typów dla każdego modułu wyliczającego * wprowadzić „typ błędu”, obiekt wywołujący może w rezultacie zażądać „listy błędów” lub domyślnie uzyskać zachowanie „zatrzymaj/zgłoś przy pierwszym błędzie”. Używałem tego wcześniej, ale w końcu szczegółowe informacje są zwykle używane tylko do budowania diagnostyki i nie są „lubiane”, ponieważ „skomplikuje to radzenie sobie z błędami”. * * * **Pytania** Jakie są Twoje przemyślenia? Masz pomysły lub stosowałeś inne podejścia? W jakich okolicznościach użyłbyś / nie stosowałbyś powyższych podejść? * * *


title: Dostarczasz kod osobom pomagającym w debugowaniu?

text: Zastanawiałem się, czy rozsądne lub wskazane jest przesłanie dużej ilości kodu źródłowego swojej aplikacji w celu debugowania i rozwiązywania błędów, pracuję nad aplikacją na iOS, którą mam nadzieję opublikować w App Store i szukam pomocy Przepełnienie stosu i kusi mnie, aby wysłać dużą ilość kodu, aby ktoś (poprosił) mógł mi pomóc. Czy poleciłbyś wysłać komuś znaczną część swojej aplikacji do celów debugowania?


title: Korzystanie z silnika gry na licencji GPL

text: Jestem zdezorientowany. Pomyślałem, że spróbuję użyć nowego silnika gry, aby poszerzyć swoje umiejętności, i znalazłem fajny silnik o nazwie springrts. Przeglądałem informacje licencyjne i jest on objęty licencją GPL 2. Jeśli dobrze pamiętam, czy to oznacza, że wszystko, co z nim zrobię, muszę dystrybuować kod źródłowy?


title: Czy certyfikaty Java są ważne dla roli architekta?

text: Moje to pytanie jest związane ze ścieżką kariery. Chcę wiedzieć, jak bardzo certyfikaty Java (SCJP, SCWCD i inne) są ważne na stanowisku architekta. Jeśli ktoś ma dobre doświadczenie w programowaniu Java i chce kontynuować karierę na poziomie architekta, czy myślicie, że musi mieć certyfikat w swoim CV? Czy nigdy nie pracował nad rolami głównego programisty? Jeśli prowadzisz moją rozmowę kwalifikacyjną na stanowisko architekta. Pracowałem jako web developer Java w różnych zespołach z 5 letnim doświadczeniem. Nigdy nie prowadź. A w CV mam plakietki certyfikacyjne. Jak deweloper może przejść swoją karierę zawodową w kierunku bycia architektem w zespole?


title: Testowanie serwera MMO

text: Pracuję na **serwerze** dla bardzo dużego (pod względem funkcji) MMO. Po kilku złych doświadczeniach z łamaniem zmian, które powodowały błędy tygodniami, chcielibyśmy dodać testy jednostkowe/automatyczne/regresyjne do naszego projektu, zanim otrzymamy dużo ojca (wdrożyliśmy około 5% naszych wymagań). Tak naprawdę nie używaliśmy wcześniej "poważnych" testów (zrobiliśmy samouczek sprawdzanie testowania dzielenia przez zero), więc pomyślałem, że znajdę kilka przewodników dotyczących tworzenia rozwiązań testowych klient-serwer. Nie udało mi się znaleźć niczego istotnego. Jak mam sobie radzić z testowaniem następujących aspektów typowego serwera? * Testowanie komunikacji klient-serwer (API można podzielić na etapy "parsowania", "obsługi" i "wysyłania") * Testowanie zmian w bazie danych SQL * Testowanie środków bezpieczeństwa * Testowanie **wokół** środków bezpieczeństwa (tj. upewniając się, że nasze testy nie uruchamiają naszego własnego kodu bezpieczeństwa) * Testowanie zdarzeń czasowych W przypadku, gdy ma to znaczenie, naszym językiem jest C#, .Net 4.5


title: Szukasz sugestii, gdzie kupić vs.net 2010? które wydanie?

text: Muszę kupić vs.net 2010, aby móc korzystać ze wszystkich nowych funkcji i struktury encji. JAKIEŚ sugestie, które wydanie powinienem otrzymać? Gdzie można kupić tanio?


title: Otwieranie pliku Excel (tak jak otwiera się w MS Office po dwukrotnym kliknięciu), ale za pomocą java

text: jakiś kumpel powiedział mi, że nie ma rzeczy niemożliwych w programowaniu, ale nie wiem o tym... :) cóż, chcę otworzyć plik .xlsx i sprawić, by wyświetlał się normalnie na ekranie w MS Office, ale problem polega na tym, że chcę napisz do tego program w JAVA, który steruje otwieraniem i zamykaniem tego pliku... ???? nie chcę konwertować go do csv ani tworzyć własnego arkusza kalkulacyjnego do wyświetlenia, a także nie chcę czytać stałych (takich jak używanie bibliotek jxl lub apache poi), chcę, aby ten plik działał tak, jak jest, chcę zrobić program, który spraw, aby mój plik Excela otwierał się automatycznie w MS Excel... czy mógłbyś mi pomóc...!!!!!!


title: Czy w UML poprawne jest posiadanie klasy asocjacyjnej z relacją kompozycji lub agregacji?

text: Przykład klasy asocjacyjnej podano tutaj: http://pic.dhe.ibm.com/infocenter/rsarthlp/v9/index.jsp?topic=%2Fcom.ibm.xtools.modeler.doc%2Ftopics%2Fcassnclss.html Kompozycja i Agregacja są również typami skojarzeń, tylko z bardziej zdefiniowaną semantyką tego, z czego składa się skojarzenie. Czy klasy asocjacyjne mogą być również częścią relacji według kompozycji lub agregacji? To znaczy w przypadku, gdy istnieje relacja wiele-do-wielu między dwiema jednostkami, z dodatkowymi atrybutami relacji. A może bardziej poprawne byłoby modelowanie tego jako dwóch oddzielnych relacji jeden-do-wielu na środkowym elemencie, który posiada dodatkowe atrybuty?


title: Mój ojciec chce nauczyć się PHP-MySQL, aby przenieść swoją aplikację. Co powinienem zrobić, aby pomóc?

text: Mój ojciec jest lekarzem/lekarzem. Około 15 lat temu zaczął pisać aplikację do obsługi dokumentacji medycznej swojego pacjenta w swojej przychodni w domu. Aplikacja ma możliwość wprowadzania dokumentacji medycznej pacjenta (oczywiście), wyszukiwania pacjentów według pewnych kryteriów, zarządzania zapasami leków, wysyłania paragonów do drukarki i kilku innych CRUD. Napisał to w dBase III+. Kilka lat później przeniósł się na FoxPro 2.6 dla DOS i wreszcie za kilka lat przepisał swoją aplikację w Visual FoxPro 9. A teraz (a właściwie dwa lata temu) chce ją przepisać w PHP, ale nie wie jak . Wersja Visual FoxPro tej aplikacji nadal działa i nie ma poważnego problemu, z wyjątkiem tego, że czasami działa powoli. Zwykle jest 1-5 jednoczesnych użytkowników. Pliki binarne i bazy danych są udostępniane za pośrednictwem udziału systemu Windows. Całe kodowanie robił hobbystycznie i za darmo (w końcu to dla własnej kliniki). Używał tej aplikacji również w dwóch innych zarządzanych przez siebie biurach. Oto kilka powodów, dla których chce przepisać w PHP-MySQL: * Chce się uczyć * Łatwiejsze wdrożenie (?) * Łatwiejsza konfiguracja klienta, wystarczy przeglądarka Co powinienem zrobić, aby pomóc ojcu? Jak powinien zacząć? Zbadałem kilka opcji: 1. Pozwoliłem ojcu uczyć się PHP i MySQL (oraz HTML (i JavaScript?)) od podstaw. 2. Tworzę/pakuję framework. Zastanawiam się nad połączeniem CodeIgnitera i frameworka internetowego interfejsu użytkownika (jakaś sugestia?), zwłaszcza w celu zmniejszenia wysiłku związanego z pisaniem kodów prezentacji. Co myślisz? * * * ## tl;dr Mój ojciec (lekarz) chce przepisać swoją aplikację Visual FoxPro w PHP-MySQL. Niewiele wie o PHP i MySQL, ale chce się uczyć. Co powinienem zrobić, aby pomóc? Jak powinien zacząć? * * * Kilka faktów: * Mój ojciec ma 50 lat. * Jego pierwsze spotkanie z komputerem ma miejsce na początku lat 80-tych. Był to IBM PC z procesorem Intel 8088. * Zna BASIC. * Nauczył mnie obsługi DOS-a i programowania w BASIC'u. * Innym językiem, który zna dość dobrze, jest dBase/FoxPro. * W zeszłym roku uzyskałem tytuł licencjata CS. * Znam wnętrze aplikacji mojego ojca, ponieważ czasami chce, żebym pomogła mu w pisaniu jego aplikacji. * * * Aktualizacja Po przeczytaniu wczesnych odpowiedzi, wydaje się, że istnieją lepsze alternatywy dla PHP w tym przypadku. Jestem otwarty na inne sugestie dotyczące języka/technologii.


title: Ucząc się informatyki, czego powinienem się nauczyć?

text: Programuję już od dłuższego czasu i mam mocne pojęcie o samym programowaniu, OOP i kilku innych rzeczach związanych z programowaniem. Jednak **Chcę nauczyć się tych samych rzeczy, których uczonoby absolwenta informatyki, i zastanawiałem się, co muszę omówić?** Jeśli to istotne, programowałem w PHP, Javie, Pythonie, C & C++ i szukam Lisp/Scheme.


title: VS2010 winform projektanta do nauki, czy podejście „oddolne”?

text: Krótko mówiąc, jestem prezesem klubu programistycznego na mojej uczelni. Wszyscy jesteśmy studentami pierwszego i drugiego roku programowania. Mamy projekt, nad którym zaczynamy pracę (konwersja programu konsoli do programu gui, w c#). Tylko dwoje z nas ma jakiekolwiek doświadczenie w pracy z winformami i programowaniem opartym na zdarzeniach. Chcemy zrównoważyć naukę z produkcją (zakończenie projektu), ponieważ większość z nas nie ma czasu, aby zaangażować się w pełny 40 godzinny projekt tygodniowo. Nasz doradca stara się poprowadzić nas w kierunku niekorzystania z projektanta winform VS2010, starając się, aby było to wymaganie kodowania wszystkiego w środowisku typu "notepad++". Więc w zasadzie muszę uzyskać odpowiedzi na kilka pytań, które mam problemy z badaniem, więc kiedy dyskutujemy o tym, jak postępować dziś i jutro, jestem uzbrojony w rzeczywistą wiedzę. (Wszyscy, łącznie z doradcą, jesteśmy generalnie „nowi” w winformach, c# i .net) W sytuacjach „rzeczywistych” z winformami, jak często zdarza się, że projektant w ogóle nie jest używany? Czy my (funkcjonariusze klubu) mamy rację w naszych szacunkach, że to, co wyliczyliśmy w 4-6 miesięcznym projekcie (przy użyciu projektanta) podwoiłoby się, jeśli nie potroiłoby kodując wszystko bez tego? Jakie są zalety nieużywania projektanta jako narzędzia do nauki, aby „zobaczyć, jak to się robi”? Czy jest to dobra okazja do nauki, jeśli użyjemy projektanta, a następnie spójrz na wygenerowany kod, aby lepiej zapoznać się z tym, jak powinny być wykonane nasze niestandardowe kontrolki/obsługi zdarzeń? Obecnie jestem trochę zagubiony i dziękuję wszystkim za odpowiedzi. (Ponadto, jeśli to możliwe, mógłbyś wymienić swoje lata w dziedzinie i stopnie naukowe, jeśli odpowiesz, nasz doradca jest ogromny w zbieraniu opinii tylko od tych, których uważa za „kwalifikujących się”, dzięki). Edytuj -- weź również pod uwagę, że uczenie się jest również jednym z naszych priorytetów, a nie tylko ograniczenia czasowe (Staramy się zachować równowagę między uczeniem się wszystkiego, co możemy, a posiadaniem projektu, który wymaga zainwestowania w niego tak wiele czasu że staje się to dla nas niewykonalne).


title: Jak mogę sformatować mój stan, aby był lepszy?

text: Mam warunek if(exists && !isDirectory || !exists) {} jak mogę go zmodyfikować, aby był bardziej zrozumiały.


title: Czy UML to dobry sposób na krótkie i proste wyjaśnienie koncepcji?

text: Niedawno brałem udział w rozmowie o pracę, która była głównie techniczna. Jedną z rzeczy, które się wyróżniały, była moja trudność w wyjaśnianiu pomysłów i koncepcji. Podczas wywiadu postanowiłem nie używać UML do wyjaśniania tych pojęć, ponieważ uznałem, że może to być zbyt czasochłonne i na papierze zrobię bałagan. Jak więc można wykorzystać UML do wyjaśniania pomysłów w sytuacji takiej jak rozmowa kwalifikacyjna, w której musisz być tak zwięzły, jak to możliwe, wyjaśniając pojęcia i pomysły techniczne? Jeśli uważasz, że UML nie jest dobrym rozwiązaniem w takich sytuacjach, docenimy alternatywę.


title: Dyrektywa niestandardowa lub ng-show/hide

text: Na moim formularzu mam ikonę, która pokazuje, czy moja jednostka jest zablokowana (pokazana zablokowaną kłódką) czy odblokowana (otwarta kłódka). Na poziomie modelu jest to reprezentowane przez właściwość logiczną (isLocked). Użytkownik może przełączać jednostkę między zablokowanym a odblokowanym, klikając ikonę. Spowoduje to również zaktualizowanie tekstu podpowiedzi ikony. Wywołuje to metodę kontrolera, która przełącza właściwość entity.isLocked. To jest jak fantazyjny rodzaj pola wyboru. Mogę to zaimplementować na jeden z (co najmniej) dwóch sposobów: 1) Utwórz niestandardową dyrektywę kątową, która zmienia klasę elementu ikony, aby pokazać poprawną ikonę, a także ustawia tekst podpowiedzi. Ikona będzie wtedy moim zdaniem pojedynczym elementem DOM, ozdobionym dyrektywą niestandardową. 2) Umieść zarówno zablokowane, jak i odblokowane elementy ikon w DOM i pokaż/ukryj każdy z nich za pomocą niestandardowej dyrektywy ng-show. Opcja 1 polega na pisaniu niestandardowego kodu, który wydaje się niewłaściwy, podczas gdy opcja 2 maksymalnie wykorzystuje wbudowane funkcje Angulara, ale pozostawia bardziej zagracony kod HTML. Ogólnie, czy powinienem preferować metodę dyrektywy niestandardowej (opcja 1) czy metodę HTML (opcja 2), czy też inną metodę? Jak myślisz, co byłoby uważane za bardziej idiomatyczne dla Angulara? A co ważniejsze, dlaczego? Rozważałem umieszczenie tego na StackOverflow, ale wydaje mi się, że byłoby to uznane za nie na temat, ponieważ ostatecznie jest to kwestia opinii ...


title: Czy limit czasu powinien być publiczną właściwością statyczną, czy parametrem każdej funkcji?

text: **TLDR:** Czy TIMEOUT powinien być własnością publiczną mojej klasy statycznej, czy parametrem każdej funkcji? * * * **Tło:** Udostępniam bibliotekę c# client-api, która ułatwia komunikację z naszym REST api. Interfejs API klienta składa się z modelu obiektowego i jednej dużej klasy statycznej z kilkoma metodami rozszerzania żądań dla różnych typów. 10 lub więcej odmian `.Get()`, kilka `.Post()`, `.Put()` itd. Ta statyczna klasa pełna metod rozszerzających jest wstępnie skonfigurowana za pomocą naszego adresu URL serwera i kilku innych statycznych stałych konfiguracji związanych do połączenia. Ponieważ cała funkcjonalność jest udostępniana za pośrednictwem metod rozszerzających, nie ma potrzeby tworzenia wystąpienia tej klasy. Każda konfiguracja odbywa się za pośrednictwem właściwości statycznych i wpływa na wszystkie żądania wysyłane przez aplikację. **Problem:** W tej chwili wszystkie żądania używają domyślnego limitu czasu wynoszącego 3 sekundy (co wydaje nam się hojne, ponieważ nasz interfejs API ma być bardzo responsywny). Niektórzy użytkownicy ze złym połączeniem mogą jednak chcieć poczekać dłużej na odpowiedź. Nasze szybkie rozwiązanie polega na uwidocznieniu parametru DEFAULT_TIMEOUT w publicznej właściwości statycznej w klasie, którą można ustawić raz podczas inicjalizacji, ale czy właściwą rzeczą jest dodanie nowego opcjonalnego parametru do każdej z dziesiątek naszych metod? .Get(int timeout = DEFAULT_TIMEOUT) { ... } .Get(..., int timeout = DEFAULT_TIMEOUT) { ... } .Get(..., ..., int timeout = DEFAULT_TIMEOUT) { ... } .Get(..., ..., ..., int timeout = DEFAULT_TIMEOUT) { ... } ... .Post(..., int timeout = DEFAULT_TIMEOUT) { ... } .Put(. .., int timeout = DEFAULT_TIMEOUT) { ... } .Save(..., int timeout = DEFAULT_TIMEOUT) { ... } ... Z jednej strony chcemy być elastyczni do wszystkiego, co klient naszego klienta -api biblioteka może potrzebować, ale z drugiej strony nie będę miał nawyku zanieczyszczania każdej metody każdym opcjonalnym parametrem, który może mieć wpływ na żądanie (url serwera, tokeny autoryzacyjne itp.) Czego nie robię chcesz, aby użytkownik poczuł taką potrzebę: ClientAPI.DEFAULT_TIMEOUT = 5000; Znaleziona rzecz = new Thing(){ id = "19473" }.Get(); znalezione.liczba += 1; ClientAPI.DEFAULT_TIMEOUT = 20000; znaleziono.Puść(); ClientAPI.DEFAULT_TIMEOUT = 8000; List<Widgets> widgets = found.GetSubresource("widgety"); ...itd Czy rozsądne jest założenie, że użytkownicy nie będą mikrozarządzać limitami czasu dla takich indywidualnych żądań?


title: Tworzenie stron internetowych w małym zespole – najlepsze praktyki

text: Obecnie rozwijam aplikację internetową w zespole składającym się z dwóch, może trzech osób w najbliższej przyszłości. Stos technologiczny to w tej chwili: flask, mongodb i extjs dla fontendu. Obecnie mam projekt pod kontrolą wersji za pomocą mercurial i bitbucket. Pytanie Jaki jest dokładnie najlepszy sposób pracy zespołowej nad projektem we app? Zwykle pracuję na zapleczu, podczas gdy mój kolega pracuje na froncie. Czasami pomagam też na froncie. Jak powinniśmy to zrobić? Każdy ma repozytorium w swoim systemie, ale cóż, serwer WWW jest uruchomiony? Obecnie mam go na swoim komputerze, ale oznacza to, że mój partner musi zatwierdzać i naciskać na każdą modyfikację, a ja muszę pobierać zmiany i scalać dla każdej zmiany. A jeśli chodzi o frontend, to musi być dużo zmian. Próbowaliśmy uruchomić serwer na każdym z naszych komputerów, ale jest to problem z wieloma serwerami mongodb. W każdym razie wszelkie wskazówki, wskazówki i porady są bardzo cenione i mile widziane.


title: Gra karciana HTML5

text: Rok temu stworzyłem grę karcianą w Silverlight, aby dowiedzieć się trochę o Silverlight. Teraz chcę stworzyć wersję gry w HTML5, aby dowiedzieć się trochę więcej na ten temat. Myślę, że chciałbym skorzystać z takich rzeczy jak Knockout.js i WebSockets oraz element canvas. Teraz jestem zdezorientowany, jak układać karty na ekranie. Dzięki Silverlight udało mi się stworzyć kontrolkę „Ręka”, która składała się z dwóch podrzędnych kontrolek: kart, które gracz ma w ręku i tych, które ma na stole. Składały się z kontroli kart. Nie wierzę, że istnieje koncepcja kontroli użytkownika w JavaScript; więc prawdopodobnie myślę o tym w całkowicie zły sposób. Mam obiekt JSON po stronie klienta o nazwie game, który zawiera tablicę graczy; każdy gracz ma rękę, która składa się z szeregu kart w ręku i kart na stole. Idealnie chciałbym powiązać je z czymś za pomocą Knockout.js, ale nie wiem, z czym mógłbym się powiązać. Jak mógłbym ułożyć kilka kart na stole i być może ponownie wykorzystać coś dla każdego gracza? Czy po prostu umieściłbym obrazy (kart) na płótnie? Czy istnieje sposób na stworzenie jakiegoś przedmiotu do ręki, który każdy gracz mógłby mieć i do którego mógłbym się przywiązać?


title: Czy mogę oznaczyć swoją aplikację open source?

text: Czy autor może zarejestrować logo lub nazwę swojej aplikacji, gdy jest ona otwarta, ponieważ korzysta z biblioteki gpl (na przykład)? Aplikacja korzysta z biblioteki, ale ma swoje własne cechy, tzn. nie jest modyfikacją biblioteki. Więc każdy może zobaczyć kod źródłowy, pobierając „anonimową” niemarkową wersję z Sourceforge, ale nikt nie może używać logo lub nazwy, więc autor może sprzedać ją ze swojej strony internetowej (na przykład) nie- doświadczonych użytkowników, tylko po dokonaniu płatności. Czy jest zobowiązany do bezpośredniego podania kodu źródłowego, czy wystarczy, że na Sourceforge lub innym oficjalnym repozytorium jest dostępna wersja niemarkowa?


title: Czy przechowujesz pliki pośrednie pod kontrolą wersji?

text: Oto przykład z projektem Flash, ale jestem pewien, że wiele projektów jest takich. Załóżmy, że tworzę obraz w Photoshopie. Następnie eksportuję ten obraz jako jpeg do integracji we Flashu. Skompilowałem fla jako bibliotekę zasobów, która jest następnie używana w moim projekcie Flash Builder do tworzenia ostatecznego pliku swf. To wygląda tak: psd => jpg -> fla => swc -> Projekt Flash Builder => swf. => : produce -> : jest używany w Projektach psd, fla i Flash Builder są plikami źródłowymi : **nie** są wynikiem jakiegoś procesu. Pliki jpg i swc to pliki „pośrednie”. Są one produktem jednego (lub więcej) plików źródłowych, które są używane jako dane wejściowe w innym narzędziu lub procesie. Wynikiem końcowym jest swf. Czy zatem zachowałbyś te pliki pośrednie pod kontrolą wersji? Jak sobie z nimi radzisz?


title: Optymalna liczba równoległych procesów

text: Właśnie skończyłem kodować (podstawowy) ray tracer w C# dla zabawy i nauki. Teraz chcę kontynuować to doświadczenie edukacyjne. Wydaje mi się, że ray tracing jest głównym kandydatem do przetwarzania równoległego, w czym mam bardzo małe doświadczenie. Moje pytanie brzmi: jak poznać optymalną liczbę jednoczesnych procesów do uruchomienia? Mój pierwszy instynkt podpowiada mi: zależy to od tego, ile rdzeni ma mój procesor, ale tak jak powiedziałem, jestem w tym nowy i mogę coś zaniedbywać.


title: Przed nami duża refaktoryzacja drzewa źródłowego – jakiego narzędzia użyć?

text: Przeprowadzamy główną refaktoryzację układu naszego drzewa źródłowego. Masy plików są przenoszone, zmieniane są nazwy folderów itp. itd. Obecnie mamy wszystko w SVN. W przyszłości zamierzamy przejść do GIT lub HG. Jednak teraz myślimy, że może powinniśmy najpierw przejść do GIT lub HG, a następnie wykonać refaktoryzację. Martwimy się, że prace w toku nad gałęziami svn nie będą w stanie scalić zmian refaktoryzacji z ich gałęziami, ANI czy będą w stanie scalić wszelkie zmiany w plikach, które zostały przeniesione i/lub przemianowane z powrotem do pień. 1. Który z GIT i HG lepiej poradzi sobie z tego typu refaktoryzacji? 2. Jeśli przejdziemy do GIT/HG, a następnie wykonamy refaktoryzację, jak będzie wyglądało scalanie gałęzi pracy w toku po przejściu do GIT/HG?


title: Implementacja OpenID - PHP, Javascript, MySQL

text: Zacząłem robić badania na temat technologii, których będę potrzebować na mojej stronie internetowej. Staram się zaimplementować naprawdę prostą stronę internetową z rejestracją użytkownika OpenID. Witryna będzie przechowywać blok tekstu dla każdego użytkownika. Wyobrażam sobie, że to oznacza, że będę potrzebować bazy danych zawierającej: * ID użytkownika * URL otwartego identyfikatora * Dane Mimo to nadal mam problem z podjęciem decyzji, co naprawdę muszę zrobić. Wiem, że będę potrzebować następujących elementów dla aktualnej strony: * Javascript * JQuery * CSS Ale na końcu jestem trochę zagubiony w tej chwili. Patrzyłem na OpenID-Selector, który jest zakodowany w JavaScript. Wygląda na to, że jest to dokładnie to, co jest używane na tej stronie. Czy faktycznie będę potrzebować PHP? MySQL do danych i rejestracji użytkownika?


title: Jak sprawdzić, czy licencja jest zgodna z Twoim programem?

text: W moim projekcie używam próbki kodu z MSDN. Do przykładu dołączona jest licencja: http://pastebin.com/K46NYf69 Zmodyfikowałem nieco przykładowy kod, aby lepiej odpowiadał moim potrzebom i teraz chcę wydać swój program jako open source. Nie jestem jednak pewien, które licencje są zgodne z tą licencją, ponieważ nie mogę jej znaleźć w Google. Licencja twierdzi, że jest to licencja Microsoft _Permissive_, ale mogę znaleźć tylko licencję Microsoft _Public_. Nie jestem też do końca pewien, na co pozwala ta licencja. Czy mogę zmodyfikować próbkę? Czy mogę spakować go w swoim projekcie na innej licencji, takiej jak GPL lub licencja Apache/BSD? Dziękuje za przeczytanie.


title: Forma podąża za funkcją w programowaniu?

text: Czy powiedzenie „ **forma podąża za funkcją**” sprawdza się w programowaniu lub projektowaniu języków? Dlaczego lub dlaczego nie?


title: Dlaczego języki takie jak C i C++ nie mają wyrzucania śmieci, podczas gdy Java ma?

text: Cóż, wiem, że są takie rzeczy jak malloc/free dla C i new/using-a-destructor do zarządzania pamięcią w C++, ale zastanawiałem się, dlaczego nie ma „nowych aktualizacji” w tych językach, które pozwalają użytkownikowi na masz możliwość ręcznego zarządzania pamięcią, czy system robi to automatycznie (odśmiecanie)? Trochę nowe pytanie, ale jestem w CS dopiero od około roku.


title: Jak nazywa się ta odmiana wzorca adaptera?

text: ### Wprowadzenie Adapter normalnie opakowuje inny obiekt, dzięki czemu może być używany w interfejsie, dla którego nie został zaprojektowany, np. gdy chcesz użyć interfejsu Węzeł { Node parent(); Iterable<węzeł> children(); } wraz z klasą TreeModel { private Node root; // przykładowa metoda (głupia) Node grandparent(Node node) { return node.parent().parent(); } } i otrzymujesz klasę taką jak class File { File getParent() {...} File[] listFiles() {...} } musisz napisać `FileToNodeAdapter`. Niestety oznacza to, że musisz owinąć każdy pojedynczy obiekt i potrzebujesz zarówno sposobu na przejście z `FileToNodeAdapter` do `File` (co jest trywialne, ponieważ jest on osadzony), ale także z `File` do `FileToNodeAdapter`, co prowadzi albo do tworzenia nowego obiektu za każdym razem, albo do użycia jakiejś mapy `Map`, która musi być albo dostępna globalnie, albo przywoływana w każdym `FileToNodeAdapter`. ### Wzorzec Zastąp interfejs `Node` interfejsem NodeWorker<T> { T parentOf(T node); Iterable<T> childrenOf(węzeł T); } i zmodyfikuj `TreeModel` jak class TreeModel<T> { private NodeWorker<T> nodeWorker; prywatny korzeń T; // przykładowa metoda (głupi) T grandparent(T node) { return nodeWorker.parentOf(nodeWorker.parentOf(node)); } ... } Czy ten wzorzec ma nazwę? Czy są jakieś wady poza tym, że jest trochę bardziej gadatliwy i ma zastosowanie tylko wtedy, gdy zarządzasz kodem `TreeModel`?


title: Programista hobbysta wypuszczający oprogramowanie z przyciskiem darowizny

text: Chciałbym zacząć od zastrzeżenia, że zdaję sobie sprawę, że pełnej, jednoznacznej odpowiedzi powinien szukać prawnik. Jestem bardziej ciekaw, co zrobili inni użytkownicy tej społeczności * * * Powiedzmy, że miałem mały program, który stworzyłem dla zabawy i który chciałem udostępnić publicznie. Wyrzucę go tam z jedną z różnych licencji open-source i prawdopodobnie umieszczę na SourceForge lub Git na wypadek, gdyby ktoś kiedykolwiek chciał rozwidlić/utrzymać/sprawdzić kod. Powiem też, że chciałem przyjąć darowizny na projekt, z absolutnie zerowym oczekiwaniem, że ludzie prześlą jakiekolwiek pieniądze. Gdyby jednak ktoś dał mi darowiznę, żeby kupić mi piwo lub pizzę do pracy, która mu się podobała, chętnie przyjmę. Powstaje zatem pytanie, jakie są ogólne wymogi przyjmowania darowizn? Czy może trafić na konto osobiste bez pytań jako „prezent”, czy też muszę skonfigurować LLC, aby uniknąć problemów podatkowych? (tu obywatel USA). Znowu tak, powinno to zostać omówione przez prawnika, ale wiem też, że wiele projektów, które widzę, ma możliwość przekazania darowizn i zakładam, że społeczność prawdopodobnie ma przyzwoite doświadczenie w tym zakresie.


title: Jak nie cierpieć z powodu ideologów, będąc osobą pragmatyczną?

text: Jestem osobą pragmatyczną (myślę, że jestem. Ale z drugiej strony, Jon ma ciekawą rację). Czasami najprostszym rozwiązaniem problemu, aby wykonać zadanie, jest to, które najlepiej pasuje do mnie, jeśli nie jest to zupełne bluźnierstwo i wyrzucenie jakichkolwiek zasad projektowania. Sprawdź moją odpowiedź na to pytanie na Stack Overflow. Prosty. Pracuje. Zostało zaakceptowane. Może zostać ulepszony. Jest wyraźnie niedoskonały i niezbyt rozbudowany. I nadchodzi ten facet. Potępia mnie, komentuje pytanie, jak jego odpowiedź jest lepsza, dokładniejsza itp., a kiedy pytam go, dlaczego mnie potępił, nazywa mnie _po prostu źle_ w swoich komentarzach. Przypomina mi ten komiks. Żeby to wyjaśnić: Jego odpowiedź jest wyraźnie lepsza. Ale nie o to chodzi! Podczas gdy na Stack Overflow mogę się śmiać i nie przejmować się tymi rzeczami, ponieważ ci ludzie są daleko, w prawdziwym świecie od czasu do czasu cierpię z powodu ideologii. Heck, nie tworzę cudownego oprogramowania, muszę utrzymać tę ogromną spuściznę działającą, a to jest dla mnie przygoda każdego dnia. Jestem dobry w niektórych rzeczach, a zły w innych. Chętnie się uczę. Ale mogę przyjąć jedną lub dwie wady systemu jako to, czym są: wady. Jutro zamierzamy je wszystkie zrefaktoryzować, ale najpierw zróbmy to, czego chce klient, a potem napijmy się piwa. Moje pytania to: * Jak radzisz sobie z ideologiami/ideologami, gdy jesteś osobą pragmatyczną? * Jak radzisz sobie z pragmatyzmem / pragmatykami, gdy jesteś osobą ideologiczną? Interesują mnie oba punkty widzenia.


title: Czy można być dobrym zarówno w programowaniu, jak i projektowaniu graficznym?

text: Stereotypowy pogląd programisty nie radzi sobie zbyt dobrze z grafiką, z tego co czytałem i widziałem. Jednak uwielbiam programować (najlepiej OOP, PHP, C++, Objective-C) i nie mogę zaprzeczyć, że mam wyjątkowy gust w projektowaniu stron internetowych, a inni powiedzieli, że dobrze sobie w tym radzę (CSS). Pomyślałem sobie "Hej, czekaj, jestem programistą - jak mogę dobrze projektować?". Pytanie brzmi: czy można być dobrym w programowaniu i projektowaniu? Czy ktoś tutaj czuje to samo? Dla przypomnienia: rzeczywiste obrazy, które stworzyłem, były już kilkakrotnie nazywane przez znajomych grafiką programisty


title: Algorytm wyszukiwania

text: Chciałbym stworzyć stronę, na której użytkownicy będą mogli publikować artykuły z następującymi opcjonalnymi częściami: * Tytuł * Treść (tekst) * Kategorie * Słowa kluczowe Artykuły będą przechowywane w mongodb, a strona będzie zbudowana w node.js. Użytkownicy mogą przeszukiwać witrynę za pomocą zwykłego pola tekstowego wyszukiwania. Zastanawiam się nad stworzeniem następujących kolekcji: * Użytkownicy * Artykuły * Słowa kluczowe Następnie dla każdego słowa kluczowego użytego w kolekcji Keywords stworzę wpis z tablicą zawierającą wszystkie artykuły, które go używają. Jeśli użytkownik przeprowadza wyszukiwanie, wyszukiwanie jest dzielone na słowa kluczowe, a każde słowo kluczowe jest wyszukiwane w kolekcji Słowa kluczowe. Każdy artykuł jest następnie pobierany z bazy danych i klasyfikowany na podstawie trafności. Moje pytania są następujące: 1. Czy efektywne byłoby użycie takiej kolekcji słów kluczowych, czy powinienem po prostu użyć kolekcji artykułów (używając wyszukiwania pełnotekstowego lub czegoś podobnego), czy też powinienem ustrukturyzować go w inny sposób? 2. Jak włączyć możliwość wyszukiwania artykułów w tytule, treści lub kategoriach zamiast tylko słów kluczowych? 3. Czy lepiej byłoby użyć czegoś takiego jak Apache Lucene, niż samemu budować tę funkcjonalność?


title: Jak przetestować swoją walidację, nie będąc zbyt perfekcjonistą, ale pozostawić większość logiki przetestowanej?

text: Na przykład chciałbym potwierdzić, że nazwa składa się tylko z liter i ma długość od 4 do 14 liter. W modelu mam następujący kod: validates: name, :format => { :with => /^[a-zA-Z]+$/, :message => 'Nazwa powinna składać się tylko z liter. }, :length => { :minimum => 4, :maximum => 14 } Więc wyraźnie pozwala mi robić to, co chcę. Ale jeśli chodzi o testy jednostkowe, mam trochę za dużo perfekcjonizmu, więc ustawiłem coś takiego jak invalid_names = ['1234', 'qwe', '1%#$#$', 'Sam1', '%', random_string(15) ] #Mam również metodę testową do tworzenia losowych ciągów o sparametryzowanej długości valid_names = %w['test', 'Travis', 'John', random_string(5), random_string(14), random_string(4)] i testowania każdego z nich w pętli z asercjami, np. nieważne_nazwy.each do |nazwa| user = User.new(:name => name) user.save attach user.errors[:name].any?, "#{name} jest poprawny." koniec Więc zdecydowanie działa świetnie. Ale jest zbyt gadatliwy (z powodu tablic prawidłowych/nieprawidłowych nazw i dodanej metody `losowy_łańcuch`), także nie mogę być pewien, że mój test faktycznie testuje wszystkie możliwe symbole i ich kombinacje, wszystkie długości i inne rzeczy, mimo że zdecydowanie jestem na pewno działa zgodnie z oczekiwaniami. Więc jaki jest akceptowalny sposób przetestowania mojej walidacji bez zbytniego perfekcjonizmu, ale pozostawienia większości logiki przetestowanej? Czy po prostu mam zamiar napisać doskonały kod tylko po to, aby napisać idealny kod i zapomnieć o głównym celu końcowym: działającym produkcie?


title: Proponowany przeze mnie projekt jest zwykle gorszy od kolegi - jak mogę być lepszy?

text: Programuję od kilku lat i generalnie jestem dobry jeśli chodzi o rozwiązywanie problemów i tworzenie małych i średnich skryptów, jednak generalnie nie jestem dobry w projektowaniu programów na dużą skalę w sposób obiektowy. Kilka pytań 1. Ostatnio kolega _mający tyle samo lat doświadczenia co ja_ i ja pracowaliśmy nad problemem. Pracowałem nad problemem dłużej niż on, jednak znalazł lepsze rozwiązanie iw końcu wykorzystamy jego projekt. To naprawdę na mnie wpłynęło. Przyznaję, że jego projekt jest lepszy, ale chciałem wymyślić projekt równie dobry jak jego. Rozważam nawet rzucenie pracy. Nie wiem dlaczego, ale nagle czuję się pod presją, m.in. co by o mnie pomyśleli juniorzy itd.? Jest to normalne? Albo trochę za dużo się nad tym zastanawiam? 2. Moja praca polega na programowaniu w Pythonie. Staram się czytać kod źródłowy, ale jak myślisz, jak mogę poprawić swoje umiejętności projektowe? Czy są jakieś dobre książki lub oprogramowanie, które powinienem przestudiować? Proszę, oświeć mnie. Naprawdę docenię twoją pomoc.


title: Zasięgnięcie porady w zakresie projektowania protokołu aplikacji

text: **AKTUALIZACJA 1** na prośbę Brendana. Opracowujemy aplikację wsadową Unix do przechowywania milionów rekordów klientów w relacyjnej bazie danych. Aby umożliwić równoległe działanie wielu zadań wsadowych i osiągnąć pewną współbieżność podczas przetwarzania rekordu wejściowego, rozdzieliliśmy pracę na dziewięć demonów serwera, wszystkie w tej samej sieci LAN co klient, z których każdy jest odpowiedzialny za pojedyncze zadanie (np. zapisz nazwę w tabeli nazw, adres w tabeli adresów itp.). Każdy demon będzie mógł akceptować połączenia i żądania (równocześnie) od wielu klientów. Wreszcie, dowolny protokół komunikacyjny, który projektujemy (lub przyjmujemy), musi być rozszerzalny, aby obsłużyć różne _rodzaje_ połączeń — na przykład chcielibyśmy, aby narzędzie monitorujące mogło łączyć się z demonem przez ten sam port, co klienci, i żądać statystyk lub wysyłać polecenia. W końcu pojawią się również różne rodzaje klientów, które będą wymagały różnych funkcji wykonywanych przez demony. Innymi słowy, klient łączący się z demonem będzie musiał zadeklarować „Chcę opublikować rekordy klientów” lub „Chcę zastosować partię zmian adresu do bazy danych” lub „Chcę wysłać kilka poleceń." Myślę, że to przesądzony wniosek, że podstawowym transportem tych połączeń jest TCP. Wreszcie, oprócz „sesji poleceń”, będą to wielomilionowe rekordowe zadania wsadowe, a wydajność ma kluczowe znaczenie. Przetwarzanie jest iteracyjne, a każdy rekord ma ten sam układ (więc zawijanie każdego w XML byłoby, powiedzmy, niepotrzebne i bardzo marnotrawne). Nie mam pojęcia, czy to wystarczająca informacja, aby ktoś mógł zasugerować niektóre formaty i protokoły, ale chętnie postaram się wyjaśnić lub podać dodatkowe szczegóły, jeśli zostaniesz o to poproszony. **END OF UPDATE 1** * * * (poniżej oryginalny post, który może mieć lub nie mieć żadnej wartości.) * * * Zajmuję się zaprojektowaniem protokołu aplikacji dla zestawu własnego, zorientowane wsadowo aplikacje klient-serwer. Jestem zaznajomiony z IBM LU 6.2 (aka "Zaawansowana komunikacja program-program") i od 15 lat pracuję w środowiskach uniksowych. Klient to zadanie wsadowe, które łączy się z procesem serwera — który z kolei łączy się z dziewięcioma innymi procesami „podserwera”. Klient przekazuje rekord transakcji klienta do serwera, który dystrybuuje różne części rekordu do podserwerów. Każdy podserwer przetwarza swoją część niezależnie i współbieżnie oraz przekazuje niektóre wyniki z powrotem do serwera, który następnie przekazuje je z powrotem do klienta. Są to połączenia TCP i zdecydowaliśmy, że przede wszystkim użyjemy zakończonych nową linią ciągów ASCII (nazywamy je **liniami** ) jako naszą jednostkę danych protokołu. **Record** to wiersz podzielony na **pola** oddzielone tabulatorami , a ponieważ każdy proces ma własne wymagania dotyczące danych, pole nr 1 każdego rekordu będzie zawierać **typ rekordu**. Jest on używany jako klucz do magazynu metadanych, aby znaleźć **nazwy pól** , w kolejności, w jakiej mają się pojawiać w rekordzie, aby wiedzieć, jak zinterpretować rekord. Na przykład: Metadane: NAME=(prefiks, imię, drugie imię, nazwisko, sufiks_osobisty, sufiks_zawodowy) Rekord:   NAME||CHAP||HARRISON|JR|CTO# (tutaj używam „|” do reprezentowania znaku tabulacji, a „# ' reprezentujący znak nowej linii) Jak na razie bardzo proste, jak sądzę. Ale potem pojawiły się nowe zwroty akcji. Po pierwsze, zamiast wysyłać wszystkie dane dotyczące jednej transakcji w jednym [dużym] rekordzie, chcielibyśmy ewentualnie użyć kilku rekordów: rekordu NAME, rekordu ADDRESS, rekordu EMAIL itp. Wymyśliliśmy więc **blok** \- seria rekordów poprzedzonych „specjalnym” rekordem **BB**, po których następuje rekord **EB**. Pierwsze pole rekordu BB to oczywiście „BB”, a drugie zawiera **typ bloku**. Typ bloku, podobnie jak typ rekordu, jest kluczem do metadanych wymieniających typy rekordów (wymagane lub opcjonalne) w tym typie bloku. Zrozumiałe jest, że każdy z tych mniej więcej dziesięciu procesów, mający własne unikalne wymagania dotyczące danych, doprowadził do własnego zestawu typów rekordów, zawartych we własnym zestawie typów bloków. To dużo metadanych, ale tak naprawdę nie jest to popisowe. Następnym wymogiem, jaki się pojawił, był specjalny komunikat „kontekstowy”, który miał przekazywać pewne zmienne konfiguracyjne, które pozostawały stałe od transakcji do transakcji. Dało to początek nowemu rekordowi i typowi bloku, a także nowej kolumnie w metadanych bloku, która wskazywała, że ten rodzaj bloku był w jakiś sposób „specjalny”. Następnie, przewidując okoliczności, w których „kontekst” mógłby _zmieniać się_ w czasie działania klienta, znieśliśmy zasadę, że na początku połączenia może być tylko jeden komunikat „kontekstowy”. Jednocześnie zdaliśmy sobie sprawę, że nadal istnieje potrzeba prawdziwego komunikatu „inicjalizacji”, który może nadejść tylko raz, na początku, przekazując parametry „sesyjne globalne”. W ten sposób narodził się blok INIT, a teraz były trzy rodzaje bloku: inicjalizacja sesji, przełączanie kontekstu i normalne dane aplikacji. A co z połączeniem, które w ogóle nie służy do publikowania transakcji, ale raczej do sesji kontrolnej do sprawdzania stanu serwera, pobierania statystyk, zmiany ustawień operacyjnych? Rola bloku INIT stała się bardziej ogólna, deklarując „tryb” sesji, którym teraz może być „ogłaszanie” lub „kontrola”. Próbowaliśmy połączyć to wszystko w jednowarstwowy protokół aplikacji i wymyka się to spod kontroli. Samo zdefiniowanie „specjalnego” rekordu BB powinno wywołać czerwoną flagę — jest on skonstruowany z obiektów i metadanych poziomu aplikacji, ale nie są to dane aplikacji — raczej _ramuje_ dane aplikacji. * * * Myślę, że rozwinęła się architektura dwuwarstwowa na szczycie TCP: jedna warstwa, która po prostu zapewnia typowane kontenery (bloki i rekordy) i wyższa warstwa, która używa tych kontenerów do określonego celu, czy to publikowania, czy kontroli, lub coś innego - prawdziwe protokoły aplikacji. Jednak nie jestem wystarczająco obeznany z projektowaniem protokołów, aby rozpoznać „wzorce”, które mogą być oczywiste dla profesjonalistów. Będę wdzięczny za wszelkie uwagi dotyczące tego, jak do tego podejść. Wydaje się również możliwe, że ktoś mógł napisać przewodnik po projektowaniu protokołów, który odnosi się do tych właśnie problemów. Po prostu tego nie znalazłem. I przepraszam za długość tego posta. Mam nadzieję, że nic z tego nie było nieistotne. Moje głębokie dzięki za cierpliwość! Facet


title: Styl kodowania dla programisty niedowidzącego

text: Jestem niedowidzący. W okularach widzę wystarczająco dobrze, aby prowadzić, ale przy rozmiarze czcionki, w którym czuję się komfortowo, widzę tylko około 15 linijek po 100 znaków na raz. To wpłynęło na mój styl kodowania. Jedną z rzeczy, które robię, jest pisanie krótszych funkcji. Mój kod ma tendencję do uzyskiwania dobrych recenzji, ponieważ te krótkie funkcje o dobrych nazwach sprawiają, że funkcje wyższego poziomu są bardzo czytelne, ale w sytuacjach o wysokiej wydajności niektórzy ludzie komentują, ile miejsca zajmuję na stosie, przekazując zmienne w dół kilku warstw dla przetwarzanie. Drugą rzeczą, którą robię, jest dzielenie klas między pliki, aby stworzyć krótsze pliki. Zmniejsza to odległość przewijania, aby dostać się do odpowiednich funkcji i w zależności od organizacji może pozwolić mi umieścić pliki na różnych monitorach, aby przeglądać je razem. Obie te praktyki zapewniają bardziej udokumentowane jednostki, których większość stylów kodowania wymaga, abym udokumentował, co dodatkowo pogarsza problem, zwiększając długość mojego pliku i odległość między powiązanymi funkcjami. Obecnie używam programu Visual Studio, który umożliwia składanie kodu na poziomie funkcji i bloku komentarzy (którego często używam), ale nie składa się na poziomie wspornika, jak robi to Notepad ++. Edytor, który oferuje lepsze składanie kodu, nie ma wszystkich funkcji intellisense VS. Mógłbym używać regionów w VS, ale wygląda to na bardzo zagracone, jeśli jest używane co 10 linii. Zwijanie jest czasami pomocne, aby uzyskać gotowy kod z widoku, gdy pracuję nad inną funkcją kodu. Czy ktoś może polecić lepsze praktyki kodowania, aby pomóc w ograniczonej widoczności kodu?


title: Czy do każdego pliku źródłowego należy dołączyć informację o licencji?

text: Szukałem różnych licencji, których mogę użyć w moim projekcie open-source, ale wszystkie projekty, które widziałem, z różnymi rodzajami licencji, wydają się mieć gigantyczne, nieprzyjemne (moim zdaniem) w każdym pliku źródłowym znajduje się informacja, że plik jest objęty określoną licencją. Nie sądzę, że znalazłem projekt z jednego źródła, który nie jest domeną publiczną, który _nie_ ma takiego powiadomienia. To po prostu wydaje się stratą czasu i miejsca na pliki. Planuję umieścić w swoich projektach znaczniki `@license` i `@author`, ale nie widzę powodu, dla którego muszę umieszczać tak gigantyczną notatkę w każdym pojedynczym pliku, jeśli nie chcę, aby mój kod był publicznie dostępny. Czy jest jakiś powód, dla którego chciałbym umieścić taką informację w swoich projektach, czy wystarczy umieścić informację w `README` i tag `@license`? Czy ma to wpływ na „jasno określoną” zasadę większości licencji, czy jest to po prostu przesada, aby ludzie się nie sprzeczali?


title: Prawa autorskie do wszystkich plików czy tylko plik licencji?

text: Czy umieszczenie komentarza dotyczącego praw autorskich do każdej klasy ma jakąś wartość prawną. Przykład: // // MojaKlasa.h // Nazwa Firmy // Utworzona przez DeveloperName dnia MM/DD/RR // Prawa autorskie RRRR Nazwa firmy. Wszelkie prawa zastrzeżone. // public class MojaKlasa { ... } A może ma to taki sam efekt, jak umieszczenie pliku licencji w katalogu głównym kodu źródłowego, tak jak wielu robi to na githubie.


title: Ile projektowania dzieje się w fazie wdrożenia?

text: Dla tych z Was, którzy pracują w dużych grupach projektowych / kaskadowych: ile krytycznego myślenia i projektowania jest pomijanych w fazie projektowania i pozostawianych do fazy wdrażania? Jak kompletne i szczegółowe są Twoje specyfikacje funkcjonalne i techniczne dostarczone pod koniec fazy projektowania? Wydaje mi się, że jest dużo miejsca na interpretację na poziomie szczegółowości, który należy zapewnić pod koniec fazy projektowania, i irytuje mnie, gdy faza projektowania jest pospieszona, a menedżerowie wpadają w złość, że faza budowy nie Nie postępujemy tak, jakbyśmy produkowali widżety na linii montażowej. Z drugiej strony, faza projektowania, która jest wystarczająco kompletna, aby faza budowania działała jak linia montażowa, praktycznie zawiera w sobie fazę implementacji - wszystko, co pozostało w "budowie", to wpisanie rzeczy do edytora. Oczywiście oznacza to również, że faza projektowania jest gigantyczna. **Zdaję sobie sprawę, że jest to wada modelu wodospadu** , ale jeśli jest ktoś, kto może udzielić konstruktywnej rady: Gdzie narysować granicę? Jakie powinny być oczekiwania na etapie projektowania i budowy oraz jakiego rodzaju niedociągnięcia lub błędy projektowe powinny/nie powinny być tolerowane w fazie budowy?


title: Potrzebuję porady na temat projektowania interakcji między różnymi częściami mojej aplikacji

text: Próbuję zaprojektować "główne" klasy aplikacji Rich Desktop opartej na NetBeans Platform 7. Ta aplikacja będzie korzystać z usług HTTP i poprzez system "push" przez TCP będzie odbierać wiadomości. * Jesteśmy 3 programistami i chcemy rozwijać moduły równolegle * Aplikacja będzie warstwowa (Dane, Biznes, Prezentacja) * Użyjemy Modelu Prezentacji w celu oddzielenia odpowiedzialności * Niektóre dane granularne (na przykład Bean Person) będą współdzielone przez kilka ekranów (i ewentualnie wyświetlane na kilku ekranach jednocześnie) *... Jesteśmy w stanie opracować poszczególne ekrany, ale nie wiemy dokładnie, jak zorganizować całą aplikację i zdefiniować zawartość każdego modułu. 1. Czy masz jakąś radę (wzorzec / najlepsze praktyki / książkę / przykładową aplikację), aby koordynować/zarządzać interakcjami wewnątrz całej aplikacji? 2. Jakieś porady dotyczące definiowania zawartości modułów? Dziękuję! * * * Mały przykład ilustrujący co chcę zbudować: **Aplikacja Foo User Management** 1. Uruchom aplikację 2. Po lewej [explorer] mamy listę platform (lista jest przechowywana w lokalnym pliku) 3. U góry mamy przycisk dodawania nowej platformy (dostępny również po kliknięciu prawym przyciskiem myszy) 4. Dwukrotne kliknięcie platformy powoduje, że aplikacja wywołuje usługę HTTP i pobiera pełną listę użytkowników. Ta lista jest wyświetlana w [edytorze] (w JTable) 5. Proces w tle jest uruchamiany: poprzez połączenie TCP otrzymujemy komunikaty 6. Istnieje możliwość dodania nowego użytkownika za pomocą przycisku w pasku narzędzi Jeśli aplikacja jest uruchomiona na innym komputerze, a jeśli użytkownik jest podłączony do tej samej platformy, jego lista użytkowników będzie aktualizowana dynamicznie (dodaj/usuń/status:{offline/online}) (dzięki wiadomościom) W przyszłości zostanie udostępniony moduł czatu . Moje pytanie brzmi (innymi słowy): jakaś rada/najlepsza praktyka, aby decydować o treści każdego modułu? Jeśli PM (Model prezentacji) to dobry sposób na oddzielenie widoku/biznesu i danych oraz tworzenie ekranów, jaki jest najlepszy sposób na połączenie kilku ekranów na podstawie PM? Wyobraź sobie, że rozwijamy Moduł Czatu, jak dodać wpis "Porozmawiaj z..." do menu kontekstowego dostępnego po kliknięciu prawym przyciskiem myszy na liście użytkowników?


title: Jak prawidłowo zarządzać zatwierdzeniami, zapobiegać konfliktom funkcji i zarządzać zależnościami za pomocą systemu VCS?

text: Stało się to irytującym czynnikiem w pracy z dużymi zespołami: jak zarządzać checkinami i zapobiegać konfliktom funkcji oraz właściwie zarządzać zależnościami z kontrolą źródła? Obecnie w moim miejscu pracy używamy TFS 2008 i migrujemy do TFS 2010 na początku grudnia. Po pierwsze, jakakolwiek kontrola źródła jest lepsza niż żadna, ale jakie podejście ktoś uznał za przydatne, aby zapobiec wielokrotnemu sprawdzaniu i wycofywaniu całej historii kontroli źródła? Czy niestabilny pień to najlepszy sposób na przejście lub rozgałęzienie, gdy wdrażasz nową funkcję, a kiedy jesteś zadowolony, łączysz się z powrotem do bagażnika? Naprawdę chciałbym usłyszeć doświadczenia innych ludzi i być może kilka najlepszych praktyk zarządzania kontrolą źródła.


title: Tdd w aplikacji internetowej opartej na danych

text: Jak można by użyć tdd/bdd w aplikacji internetowej opartej głównie na danych? Na przykład blog lub forum?


title: Czy w dzisiejszych czasach rozsądne jest zakładanie/wymaganie platformy .NET?

text: **Tło:** Mam projekt, w którym muszę dostarczyć użytkownikowi pakiet do pobrania zawierający kilka poufnych danych. Dane muszą być zaszyfrowane. Po pobraniu muszą być w stanie go wyświetlić (nie jest wymagana edycja). W przypadku tego pytania przybliżmy dane jako serię statycznych plików HTML. Ponieważ dane są wrażliwe, muszą być szyfrowane za każdym razem, gdy znajdują się na dysku. Myślimy o udostępnieniu użytkownikowi opcji pobierania, która dałaby mu plik zip zawierający dwa pliki: * Plik danych (prawdopodobnie użyjemy zaszyfrowanego pliku zip) z danymi, o które poprosili * Aplikację do przeglądać dane, które odpowiednio monitowałyby o hasło i obsługiwać odszyfrowywanie danych i wyświetlanie ich za pomocą wbudowanej przeglądarki internetowej. Dodatkowe szczegóły: * Użytkownicy nie są pod naszą kontrolą. Są konsumentami. * W tym pytaniu nie martwimy się o cross-platform. Tu chodzi tylko o Windows. Będziemy mieli osobne pobieranie dla użytkowników komputerów Mac. **Już do pytania:** W przypadku tej aplikacji, którą musimy utworzyć, wewnętrznie dyskutujemy, czy rozsądne jest, aby ta aplikacja była aplikacją .NET winforms. Chcemy jednego pliku .exe, a pobieranie ma być dość małe (np. 100k). * Czy odważymy się użyć frameworka .NET (nie musimy używać szczególnie najnowszej wersji .NET--2.0 byłoby dobrze)? * Czy rozsądne jest założenie, że większość konsumentów ma teraz .NET na swoich komputerach z powodu Windows Update? * Czy rozsądne jest proszenie o zainstalowanie tych, którzy go nie mają? Wiemy, że 100% użytkowników nie będzie miało .NET. Prawdziwe pytanie brzmi, czy rozsądnie jest prosić ich o to w dzisiejszych czasach. PS Czy ktoś zna jakieś wiarygodne statystyki dotyczące tego, jaki procent ludzi ma już zainstalowaną platformę .NET?


title: Jaka jest praca w programowaniu?

text: Dokładniej: **Czy praca w programowaniu jest naprawdę tak kiepska, jak się wydaje?** Nadal chodzę do liceum, ale uwielbiam programować. Biorę wszystkie zajęcia z programowania, które oferuje moja szkoła (a jest ich naprawdę dużo) i programuję w wolnym czasie. Na studiach zamierzam robić coś związanego z programowaniem, a potem mam nadzieję, że dostanę pracę w programowaniu. Jednak z tego, co wyczytałem w internecie, praca w programowaniu brzmi naprawdę przerażająco i onieśmielająco, i zastanawiam się, jak to jest i czy rzeczywiście jest tak źle, jak się wydaje.


title: Warstwa kontrolera i architektura trójwarstwowa

text: Czym jest warstwa kontrolera i gdzie umieszczamy to w naszej architekturze trójwarstwowej? 1) UI 2) Warstwa logiki biznesowej 3) Warstwa dostępu do danych I wyszukiwania w sieci, ale nie można uzyskać dokładnych linków ans.Any lub przykładowy przykład pomaga zrozumieć better.Thanks.


title: Gdybyś musiał wrócić i ponownie nauczyć się swojego zestawu umiejętności, jak byś to zrobił?

text: Mój młodszy brat chce zacząć programować. Ma 14 lat i jest uzdolniony technicznie, ale nie ma prawdziwego doświadczenia w programowaniu. Szuka ode mnie wskazówek, a ja nie czuję, że moje doświadczenie wystarczy, więc pomyślałem, że zapytam tutaj. Bardziej interesuje go programowanie internetowe, ale interesują go również aplikacje desktopowe/mobilne/serwerowe. Jaka byłaby dla niego dobra ścieżka uczenia się? Kupię mu na Boże Narodzenie kilka książek, żeby mógł zacząć; pytanie brzmi, czego powinien się nauczyć iw jakiej kolejności? Tak jak ja to widzę, musi nauczyć się teorii i kodowania. Chciałbym zacząć od Pythona, Rubiego lub PHP. Jeśli chce wejść do sieci, będzie musiał także nauczyć się HTML, CSS, Javascript, itp. Z tych trzech domen (języki, teoria, znaczniki/itp.), jaka jest najlepsza kolejność do nauczenia się w? Czy coś mi brakuje? Dziękuję!


title: „import modułu” a „z funkcji importu modułu”

text: Zawsze używałem tej metody: z sys import argv i użyj `argv` tylko z **argv**. Ale istnieje konwencja używania tego: import sys i użycie argv przez `sys.argv` Druga metoda sprawia, że kod jest samodokumentowany i ja _(naprawdę)_ go przestrzegam. Ale powodem, dla którego wolę pierwszą metodę, jest to, że jest szybka, ponieważ importujemy tylko potrzebną funkcję, a nie cały moduł (który zawiera więcej bezużytecznych funkcji, które python zmarnuje czas na ich importowanie). Zauważ, że potrzebuję tylko argv, a wszystkie inne funkcje z sys są dla mnie bezużyteczne. Więc moje pytania są. Czy pierwsza metoda naprawdę przyspiesza działanie skryptu? Która metoda jest preferowana? Czemu?


title: Projekt bazy danych dla internetowego agregatora kanałów RSS

text: Pracuję nad aplikacją o otwartym kodzie źródłowym, która umożliwia użytkownikom dodawanie kanałów RSS. Wszyscy użytkownicy witryny mogą czytać zawartość tych kanałów RSS. To nie tylko dla własnych kanałów użytkownika. Korzystając z PHP i biblioteki SimplePie stworzyłem prostą aplikację. Próbuję zaimplementować listę na podstawie kategorii. Mam w bazie danych listę kanałów RSS/Atom. Każdy post w kanale może mieć powiązaną kategorię/etykietę, a jeden kanał może zawierać wiele postów należących do wielu kategorii. **Pytanie:** Chcę otrzymywać tylko posty z kategorii „Nauka”. W najgorszym przypadku, jeśli mam 1000 kanałów RSS, czy powinienem czytać posty z każdego kanału i sprawdzać kategorię każdego posta? Przechowywanie wszystkich postów z każdego kanału i jego kategorii nie jest dobrym rozwiązaniem. Jak najlepiej możemy mieć projekt bazy danych do tego? Schemat bazy danych znajduje się poniżej. Nic nie jest ustalone i mogę zmienić dowolny schemat lub projekt. http://sqlfiddle.com/#!2/2b519/1 UWAGA: Skrzypce są tylko w celach informacyjnych i nie trzeba się martwić. Jest to opcjonalne, jak myślałem, że może pomóc innym zrozumieć.