title: Długie czy krótkie skrypty? Duże kontra małe skrypty?

text: Jako programista zawsze zastanawiałem się, czy lepiej pisać **(a)** krótkie modułowe funkcje, z których każda jest przechowywana w osobnym skrypcie (tj. plik) czy **(b)** długie obszerne skrypty, które zawierają wszystkie ich istotne funkcje. Na przykład, jeśli koduję strumień analizy danych, który zawiera różne operacje wykonywane na tych samych danych (np. czyszczenie danych, wybór funkcji, klastrowanie, uczenie nadzorowane itp.), czy powinienem napisać pojedynczy plik, nawet jeśli działa setki linii? Słyszałem wiele opinii na ten temat i zastanawiam się, co myśli ta społeczność. Rozumiem, że odpowiedź może zależeć od rodzaju projektu, ale jeśli tak jest, to fajnie byłoby usłyszeć, jakie czynniki należy wziąć pod uwagę przy wyborze opcji **(a)** i ** (b)**. Obecnie koduję w Pythonie i zastanawiałem się, czy programiści Pythona preferują wiele funkcji w tym samym pliku, czy jeden plik na funkcję, ale wyobrażam sobie, że to pytanie jest szersze i dotyczy wszystkich języków programowania.


title: Czy istnieje kanoniczna księga na temat Agile?

text: Jako samotny programista, myślę, że używam procesu podobnego do Agile, ale chciałbym porównać to, co robię, z prawdziwym Agile i zobaczyć, czy mogę ulepszyć swój własny proces. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie i inne przydatne informacje na temat Agile? Co w tej książce czyni ją wyjątkową?


title: Nauka Agile i Scrum

text: > **Możliwy duplikat:** > Czy istnieje księga kanoniczna na temat Agile? Szukam dobrej książki o nauce Agile i Scrum do tworzenia aplikacji internetowych. Czy ktoś może zaproponować dobre źródło, które poprowadzi jednego z grupy w górę? Chcemy zacząć wdrażać to do naszych cykli biznesowych i tworzenia aplikacji internetowych.


title: Czy jest książka, którą mogę przeczytać, aby przyspieszyć rozwój Agile?

text: > **Możliwy duplikat:** > Czy istnieje księga kanoniczna na temat Agile? Przeczytałem Manifest Agile Software Development i dwanaście zasad, które za nim stoją. Co jeszcze mogę przeczytać, aby uzyskać dość obszerny przegląd tego, co ludzie (a przez ludzi mam na myśli ludzi piszących ogłoszenia o pracę) konkretnie mają na myśli, gdy mówią o zwinnym tworzeniu oprogramowania? Odnoszę wrażenie, że kilka osób używa tego terminu dość luźno, więc chciałbym mieć w głowie kilka bardziej konkretnych pomysłów, aby wspomóc dyskusję (i ostatecznie pomóc w tworzeniu oprogramowania).


title: Jaki jest zalecany sposób oddzielenia bieżącego rozwoju od rozwoju utrzymania w oprogramowaniu do kontroli wersji?

text: Mam jakąś aplikację zarządzaną przez Git. Właśnie wydałem nową wersję 2.x, którą planuję utrzymać na dłuższą metę (głównie poprawki błędów). W międzyczasie chciałbym rozpocząć pracę nad wersją 3.x. Jaki jest zalecany sposób zarządzania tym? Czy powinienem utworzyć gałąź dla wersji 2.x i mieć programowanie 3.x na masterze? czy w drugą stronę?


title: Korzystanie z vima: Czy istnieje sposób na automatyczne usunięcie wszystkich zakładek w pliku źródłowym za pomocą polecenia?

text: A potem automatycznie ponownie wciąć? (Próbowałem skopiować kod z jednego ekranu terminala na drugi, ale tabulacja się popsuła) Nie wiedziałem, jak nazwać tę funkcjonalność, więc ciężko było mi ją znaleźć w google (co generalnie zwracało rzeczy związane z jak ustawić rozmiar zakładki, czego niestety nie szukałem.) Dzięki


title: Czy istnieje ogólna zasada, kiedy należy używać „oczyścić” zamiast po prostu „oczyścić”?

text: Piszę teraz program z wieloma plikami i najwyraźniej uruchamiam tylko „make” (jak intuicyjnie można by sądzić, że należy to zrobić w większości sytuacji) z jakiegoś powodu powoduje, że mój program się nie powiedzie. Myślę, że mogę podać więcej szczegółów na temat problemu, ale ważne jest to, że działa on podczas korzystania z funkcji „make clean”. Zastanawiałem się więc, czy ktoś zna ogólną zasadę działania „make clean” zamiast po prostu „make”


title: Policz wiersz VS Zapisz liczbę wierszy po każdej aktualizacji

text: Chcę wiedzieć, czy zapisywanie liczby wierszy w tabeli jest lepsze niż liczenie jej za każdym razem. Szybki przykład: gość przechodzi do klanu grupowego, strona wyświetla informacje o klanie i członkach, którzy dołączyli do grupy, czy strona powinna szukać wszystkich użytkowników, którzy dołączyli do klanu i policzyć ich, czy po prostu wyświetlać liczbę członków już zapisanych w tabeli ? Myślę, że tym pierwszym nie da się zmanipulować, ale MOŻE BYĆ KOSZTEM. Twoje pomysły?


title: Biblioteka grafiki

text: Chciałbym wiedzieć o wysokiej jakości bibliotekach graficznych w C i Fortranie. Słyszałem o OpenGl i Direct X. Ale uważam, że OpenGL jest praktycznie low-endową biblioteką. Czy Direct X też jest w C? Naprawdę muszę mieć bardzo wysokiej klasy bibliotekę graficzną w C. Z góry dziękuję. Pozdrawiam hena


title: Jak długo zajęłoby komuś zupełnie nowemu w programowaniu zdobycie wystarczającej wiedzy, aby dostać się na rynek pracy jako młodszy programista? (C#)

text: Chcę tylko wiedzieć, ile czasu zajęłoby mi osiągnięcie wystarczającej biegłości (powiedzmy C#), aby móc wejść na rynek pracy jako programista na poziomie młodszym/podstawowym. Przeczytałem wszystkie te artykuły i dyskusje na temat „ile czasu to zajmie”, ale odpowiedzi zawsze wydają się brzmieć „… poznanie składni zajmie ci dwa tygodnie, ale 10 lat zajmie ci stanie się dobrym programista..." lub "...w tym samym czasie, w którym zajęłoby ci naukę niemieckiego...". Niemniej jednak istnieje kontinuum między tymi dwoma skrajnościami. Wiem, że za kilka miesięcy nie zamierzam tworzyć świetnego kodu, chcę tylko wiedzieć, ile czasu zajmie mi napisanie kodu „wystarczająco dobrego”, aby można go było uznać za „nadający się do pracy”. Wiem, że odpowiedź zależy od wielu czynników, dlatego opiszę jak najdokładniej moją sytuację: -Jestem pod koniec lat 20-tych. -Nie zrobiłem tego w programowaniu poza tworzeniem obiektów w C#. - Miej przyjaciół (5), którzy studiowali CS i pracują jako programiści. Kilku z nich jest w stanie pomóc mi w nauce, choć nie w pełnym wymiarze godzin. -Bardzo słabo rozwinięte umiejętności matematyczne. Nigdy nie wyszedłem poza bardzo podstawową algebrę, nie dlatego, że jej nie rozumiałem, ale raczej dlatego, że studiowałem coś niezwiązanego z matematyką. -Szybko uczący się. Udało mi się przejść przez książkę Basic Algebra w mniej niż dwa tygodnie i uzyskałem ocenę A w teście po ponad 7 latach, nie otwierając nawet książki do arytmetyki. Nie znam tabliczki mnożenia, ale radzę sobie, bo w zasadzie wiem, czym jest mnożenie. Jeśli zapytasz mnie, ile wynosi 8*8, mój mózg wygląda następująco: 80-(2*8)... tak, jestem na tym poziomie... -Moje IQ stale przekracza 135 w standardowych testach.( do maple_shaft: tak, standaryzowane testy, takie jak te do wykonania dla MENSA;zresztą wcale nie jestem z tego dumny, bo to właśnie EQ to podstawa.Wspomniałem o tym, bo wiem, że w dziedzinie programowania jest to dobra cecha.) -Bardzo duża zdolność abstrahowania i uogólniania. - Nie będę mogła uczyć się w pełnym wymiarze godzin. Mogłem uczyć się średnio 1,5 godziny w dni robocze i 6 godzin w dni wolne. Jeśli doczytasz tak daleko, być może byłbyś tak miły, aby odpowiedzieć tak zwięźle, jak to możliwe na te dwa pytania: A. Czy realistyczne jest, aby ktoś bez wyższego wykształcenia osiągnął wysoki poziom w branży? B. Jak opisałbyś zależność między codzienną pracą **_programisty aplikacji w przeciętnym projekcie przeciętnej firmy_** a **_matematyką_** (głównie: rachunek różniczkowy, trygonometria, itp.)? Fizyka <\---> Matematyka (silna korelacja. Wszyscy wielcy fizycy to wspaniali matematycy... nie ma sposobu na obejście tego). Architektura <\---> Inżynieria lądowa (Jakoś skorelowana, ale możesz zarobić na chleb tylko z kilkoma ogólnymi koncepcjami). General Mechanic <\---> Inżynieria (Mam zamiar użyć narzędzi, które stworzyłeś, aby naprawić to, co stworzyłeś, ale jak to robię, to inna sprawa). Z góry bardzo dziękuję za odpowiedzi. Proszę, proszę, żadnych obraźliwych lub powtarzających się odpowiedzi; Byłbym wdzięczny za poważne odpowiedzi. Dziękuję za Twój czas.


title: Jakie są aktualne opinie na temat WPF?

text: Próbujemy podjąć decyzję, czy stworzyć program w WPF z serwerem WCF i zastanawiałem się, jakie są obecne opinie o WPF. Rozglądałem się po Internecie, ale większość argumentów, które widziałem za/przeciw WPF, pochodziło rok lub dwa lata temu i dotyczyło WPF3.5. Zastanawiałem się, czy te opinie zmieniły się w ciągu ostatniego roku lub dwóch wraz z wydaniem WPF4.0. Kilka uwag... Program, który tworzymy, jest przeznaczony do użytku przez jedną firmę w kontrolowanym środowisku. Z wyjątkiem jednego lub dwóch laptopów z systemem Vista, większość użytkowników korzysta z serwerów terminalowych lub systemu WindowsXP. Nie jest obciążony multimediami i nie wymaga ładnego interfejsu użytkownika (chociaż nie zaszkodzi). Musi być rozszerzalny i umożliwiać późniejsze łatwe dodawanie. Bezpieczeństwo i wydajność to nasze kluczowe kwestie. **EDYTUJ** Podstawowym problemem związanym z WPF jest wsparcie (MS i społeczność), użycie pamięci/procesora na serwerach terminalowych oraz znalezienie osób do pracy nad projektem teraz i utrzymania go w przyszłości. Niektóre drobniejsze rzeczy to brak kontroli biblioteki, czas tworzenia i krzywa uczenia się. Główną alternatywą, którą rozważaliśmy, jest ASP.Net/jQuery.


title: Czy możliwe jest zaadaptowanie zwinnych metodyk do projektów zlecanych na zewnątrz?

text: Miałem doświadczenie jako programista lub kierownik zespołu w kilku projektach, które zostały zlecone na zewnątrz i we wszystkich przypadkach przyniosły mniej niż znakomite wyniki. Większość z tych projektów opierała się na filozofii wodospadu, z dużymi spotkaniami inauguracyjnymi, wielomiesięcznymi fazami zbierania wymagań, mnóstwem połączeń konferencyjnych i niezliczonymi e-mailami. Jedną rzeczą, która zawsze mnie frustruje, jest brak wczesnego dostępu do kodu. Kontrakty są ustalane w taki sposób, że zespół offshore jest odpowiedzialny za spełnienie wymagań funkcjonalnych, o co dba kadra kierownicza. Oznacza to jednak, że decyzje dotyczące architektury, szczegóły implementacji, wykorzystanie wzorców i rzeczy, które dotyczą innych programistów, są tak głęboko ustalone przed dostarczeniem produktu, że nie jesteśmy w stanie zaoferować opinii ani zażądać żadnych rzeczywistych zmian. Czy ktoś tutaj zarządzał projektem offshore, który nie doświadczył tych problemów? W szczególności zastanawiam się, czy istnieje sposób na ustrukturyzowanie umów, aby zmusić zespoły offshore do pracy w krótszych cyklach i ponownego uwzględnienia lub ponownego projektowania w oparciu o informacje zwrotne od deweloperów na lądzie. Nie mam zbyt dużego doświadczenia ze zwinnymi metodologiami (zgadzam się z ogólnymi zasadami, ale pracuję w konserwatywnym sklepie, który ma swoje ugruntowane metodologie), ale zastanawiam się, czy można je jakoś dostosować, aby pomóc w zarządzaniu rozwojem offshore. Ogólnie rzecz biorąc, staram się zminimalizować niespodzianki i koszmary związane z konserwacją, które nieuchronnie pojawiają się, gdy zespół programistów pracuje w izolacji przez wiele miesięcy.


title: Projekt Open Source: Firma rejestrująca prawa autorskie

text: Wydaję projekt open source. Chcę, aby była jak najbardziej inkluzywna dla każdej społeczności, która mogłaby to przyjąć. W szczególności nie chcę, aby kod był chroniony prawami autorskimi w moim imieniu, gdy może nad nim pracować cała społeczność; takie podejście wydaje się egocentryczne i wyobcowane. Moją pierwszą myślą, aby uniknąć tego problemu, jest przeniesienie praw autorskich na firmę, a nie na mnie. Jak mam to zrobic? Czy muszę zarejestrować korporację? Czy mogę po prostu podać nazwę grupy i nazwać ją firmą? Jakie są przeszkody prawne? Szczerze mówiąc nie mam pojęcia, jeśli chodzi o tego typu rzeczy. (Jestem w Kanadzie i chcę korzystać z GPL, jeśli to pomoże.)


title: Ścieżka C++ czy ścieżka Java na studiach?

text: Zaczynam zajęcia z CS na lokalnym college'u i mają dwa tory. Albo uczęszczasz na trzy kursy w C++, albo trzy kursy w Javie. Oba obejmują ten sam podstawowy materiał, m.in. struktury danych, algorytmy itp. Co poleciłbyś, biorąc pod uwagę, że znam Pythona i być może rozważę zrobienie magisterium z CS za jakiś czas… mój stopień licencjata jest w czymś innym. I rada byłaby mile widziana.


title: Gdzie znajdę inspirację do dobrego interfejsu użytkownika?

text: Mam mentalną blokadę, jeśli chodzi o zaprojektowanie interfejsu głównego ekranu dla aplikacji komputerowej, którą aktualnie aktualizuję. Kiedy po raz pierwszy opracowałem ten program, rozdzielczość ekranu wynosiła 640 X 480. Obecnie istnieje wiele rozdzielczości ekranu. Gdzie mogę znaleźć pomysły na dobry układ ekranu głównego dla aplikacji desktopowej?


title: Jakie są sposoby programowania funkcjonalno-programowego na wdrożenie Gry w życie Conwaya?

text: Niedawno zaimplementowałem dla zabawy grę Conway's Game of Life w Javascript (właściwie to coffeescript, ale to samo). Ponieważ javascript może być używany jako język funkcjonalny, starałem się pozostać na tym końcu spektrum. Nie byłem zadowolony z moich wyników. Jestem całkiem dobrym programistą OO, a moje rozwiązanie pachniało tym samym-starym-tym samym-starym. Tak długie pytanie: jaki jest (pseudokodowy) funkcjonalny styl robienia tego? Oto Pseudokod dla mojej próby: class Node update: (tablica) -> pobierz liczbę_żywych_sąsiadów z tablicy pobierz to_żyje z tablicy jeśli to_żyje i liczba_żywych_sąsiadów < 2 następnie zgiń jeśli to_żyje i liczba_żywych_sąsiadów > 3 to zgiń jeśli nie = 3_żyje class NodeLocations w: (x, y) -> zwróć wartość węzła w x,y z: (node) -> zwróć x,y węzła class Board getNeighbors: (node) -> użyj node_locations do sprawdzenia 8 sąsiadów wokół węzła i zwróć liczba węzłów = dla 1..100 nowego stanu węzła = nowe lokalizacje stanu węzła (węzły) = nowa tablica lokalizacji węzłów (węzły) = nowa tablica (lokalizacje, stan) executeRound: stan = stan klonu skumulowane_zmiany = dla n w węzłach n.update(tablica ) zastosuj skumulowane_zmiany do tablicy stanu = nowa tablica (lokalizacje, stan)


title: Pokazywanie danych w czasie rzeczywistym za pomocą wywołania WCF (silverlight)

text: Obecnie mam metodę WCF, która przywraca wszystkie dane z bazy i wiąże je z siatką, ale chciałbym regularnie wywoływać tę metodę, aby za każdym razem odzyskać zaktualizowane dane, aby pokazać użytkownikowi dane w czasie rzeczywistym, co jest najlepszy sposób na to? Z góry dziękuję.


title: Jakie są dobre, proste przykłady kolejek?

text: Uczę **CS2** (`Java i struktury danych`) i mam pewne trudności z wymyśleniem dobrych przykładów do wykorzystania podczas nauczania kolejek. Dwie główne aplikacje, do których ich używam, to "wielowątkowe" przekazywanie komunikatów (ale programowanie MT jest poza zakresem kursu) i "algorytmy w stylu BFS" (i wykresy będę omawiać dopiero w dalszej części tego semestru). Chcę też uniknąć wymyślonych przykładów. Większość rzeczy, o których myślę, gdybym faktycznie miał je rozwiązać w sposób jednowątkowy, użyłbym po prostu listy, a nie kolejki. Zwykle używam kolejek tylko wtedy, gdy przetwarzanie i wykrywanie są przeplatane (np. wyszukiwanie) lub w innych specjalnych przypadkach, takich jak bufory o ograniczonej długości (np. utrzymywanie ostatnich _N_ elementów). W stopniu praktycznym staram się nauczyć moich uczniów dobrych sposobów robienia rzeczy w prawdziwych programach, a nie tylko zabawek do popisywania się funkcją. Jakieś sugestie dobrych, prostych algorytmów lub zastosowań kolejek, których mogę użyć jako przykładów, ale które wymagają minimum innej wcześniejszej wiedzy?


title: czy jest w porządku mieć czas na zapoznanie się z technologią i narzędziami po rozpoczęciu projektu?

text: Brałem udział w kilku projektach oprogramowania, ale nie jako lider. We wszystkich projektach wszyscy znaliśmy narzędzia, języki itp. przed rozpoczęciem projektu. Zastanawiam się, czy jest ok, czy dobrą praktyką jest posiadanie czasu dla programistów na zapoznanie się z narzędziami i technologiami po rozpoczęciu projektu (np. po specyfikacji wymagań)?


title: Czy istnieje sposób na „spakowanie” mojej instalacji programu Visual Studio, aby móc ją łatwo wdrożyć na innych komputerach?

text: Mam wiele maszyn z systemem VS, a każdy ma nieco inną konfigurację - style wyświetlania, zainstalowane wtyczki, rozszerzenia kontroli źródła, szablony projektów, dodatki Service Pack i tak dalej. Jest to nie tylko denerwujące podczas przechodzenia z maszyny na maszynę, ale także nie mam realnego sposobu na wyczyszczenie instalacji i ponowne uruchomienie. Wiem, że _mógłbym_ używać maszyny wirtualnej, ale naprawdę nie lubię dodatkowego obciążenia maszyn wirtualnych. To, czego szukam, to sposób na zwinięcie instalacji programu Visual Studio, ze wszystkimi dodatkowymi wtyczkami do pakietu instalacyjnego, dzięki czemu mogę go zdefiniować tylko raz i wdrożyć wszędzie. czy to możliwe?


title: Czy dostawca interfejsu powinien również dostarczać mock implementację do testowania?

text: Zmarnowaliśmy dużo czasu na nasz ostatni test integracyjny na błąd, który moim zdaniem powinien zostać znaleziony w testach jednostkowych. Problem polegał na tym, że interfejs / usługa, którą wywołaliśmy, zachowywał się inaczej niż oczekiwaliśmy, a test jednostkowy nie wykrył tego problemu, ponieważ wykpiliśmy ten interfejs do testu jednostkowego, a nasz makieta była oczywiście oparta na naszej błędnej interpretacji tego, co interfejs będzie robić. Teraz mogłem się trochę zdenerwować na naszego drogiego współpracownika, który dostarczył interfejs, ponieważ ich opis / specyfikacja (zwięzły komentarz JavaDoc) był niejednoznaczny i przyczynił się do naszego nieporozumienia. Z drugiej strony pomyślałem, że problemu można by uniknąć, gdyby ci sami współpracownicy dostarczyli symulacyjną implementację ich interfejsu, którą moglibyśmy wywołać w naszych testach jednostkowych. Wtedy błąd pojawiłby się dużo wcześniej i można by uniknąć wielu przekleństw. Teraz, jaka jest najlepsza praktyka w organizowaniu tworzenia pozorowanych obiektów wśród zespołów, które dostarczają i używają współdzielonych interfejsów? Jakie są twoje doświadczenia?


title: Przejdź z JSON do Protobuf. Czy warto?

text: Mamy usługi sieciowe REST, które mogą obsługiwać XML lub JSON (WCF). Bawię się pomysłem wdrożenia Protobufów. Czemu? ZALETY 1. Mniejsze obciążenie serwerów. 2. Mniejszy rozmiar wiadomości - mniejszy ruch. 3. Łatwiej jest zmienić teraz niż później. MINUSY 1. Konieczność wdrożenia 2. Trudniejsze będzie rozwiązywanie problemów/podsłuchiwanie komunikatów do debugowania. 3. Mogę włączyć GZip na serwerze, a JSON będzie zużywał tyle ruchu. Jaka jest twoja sugestia i/lub doświadczenie w tej sprawie?


title: Efektywny proces przeglądu kodu w celu utrzymania oprogramowania

text: Od lat pracuję z utrzymywanym kodem. Używamy czystych liter jako kontroli wersji. Przesłanie kodu do przeglądu i uzyskanie liczby kodów (w przypadku metryk projektu) jest zwykle bolesne. Jaki jest najlepszy sposób przeprowadzenia przeglądu kodu oprogramowania do konserwacji? Jak skutecznie możemy udostępnić kod do recenzji (rozumiem, że jest to ściśle powiązane z używanymi przez nas kontrolami wersji). Jakieś znane standardy lub najlepsze praktyki? Jak mogę uzyskać metryki, takie jak liczba kodów itp.?


title: Jak ograniczyć wirusowe udostępnianie plików

text: Więc mam stronę internetową, którą chciałbym stworzyć, która zasadniczo będzie sprzedawać pliki. Dla potrzeb dyskusji powiedzmy, że te pliki są jak surowy tekst książki. Jeśli ktoś kupuje plik z mojej strony, to naprawdę nic nie stoi na przeszkodzie, by udostępniał tę nieograniczoną ilość razy sąsiadowi lub cokolwiek innego. Wiem, że przemysł muzyczny cierpi z powodu tego typu rzeczy od lat, więc może nie być łatwego rozwiązania, ale co mogę zrobić, aby ograniczyć użycie tego pliku tekstowego tylko do jednej osoby? Czy istnieje jakiś rodzaj szyfrowania lub weryfikacji hasła, który pomógłby mi rozwiązać ten problem? A może po prostu muszę pogodzić się z faktem, że jest rok 2010 i nikt nie zapłaci za nic, co znajdzie za darmo w sieci?


title: Potrzebuję podejścia do problemu zapobiegania wstawianiu zduplikowanych rekordów do bazy danych

text: Usługa internetowa, którą wywołuję, zwraca listę danych. Dane z serwisu są okresowo aktualizowane, więc połączenie do serwisu wykonane w ciągu godziny może zwrócić te same dane, co połączenie wykonane w ciągu godziny. Ponadto dane są zwracane na podstawie daty rozpoczęcia i zakończenia. Mamy wielu użytkowników, którzy mogą uruchamiać wyszukiwanie usług internetowych, a zduplikowane dane najprawdopodobniej zostaną zwrócone (szczególnie w przypadku danych historycznych). Nie chcę jednak wstawiać tych zduplikowanych danych do bazy danych. Utworzyłem tabelę db, w której przechowywane są dane (najważniejsze kolumny to) Id int autoincrement PK Date date not null --Data, do której należy zestaw danych. Data LastUpdate nie ma wartości null — data ostatniej aktualizacji zestawu danych. UserName varchar(50) — nazwa użytkownika przeprowadzającego wyszukiwanie. Używam serwera sql 2008 express z c# 4.0 i visual studio 2010. Jako ORM używany jest Entity Framework. Jeśli w proponowanym rozwiązaniu można uniknąć procedur składowanych, będzie to plus. Inny sposób interpretacji tego, o co proszę o rozwiązanie, jest następujący: mam milion unikalnych rekordów w mojej tabeli. Użytkownik przeprowadza nowe wyszukiwanie. Wyniki wyszukiwania od użytkownika zawierają około 300 tysięcy rekordów danych, które znajdują się już w bazie danych. Potrzebne jest skuteczne rozwiązanie do wyszukiwania i wstawiania tylko unikalnych rekordów. Kombinacja `Date`, `LastUpdate` i `UserName` sprawia, że rekord jest unikalny.


title: Programiści Java Kodują CSS/HTML/JQuery?

text: Czy programiści Java są lepiej przygotowani do pisania elementów frontendowych? Czy programiści Java powinni kodować HTML, CSS i JavaScript? Co śledzą ludzie w waszych firmach? Jakie są sugestie, jeśli mają też?


title: Recenzja wzajemna dotycząca rozwoju interfejsu użytkownika

text: Jestem jedynym front-end developerem w zespole skomponowanym dla 3 deweloperów .Net, 1 QA i 1 PM. Chociaż mamy inny zespół z innego biura w połowie świata, z kim miałbym zrobić przegląd kodu? * ja + front end developer z innego biura. * ja + jeden z programistów .net w lokalnym biurze. * inne wybory/kierunek działania do podjęcia? to przy założeniu, że: * programiści .net mają minimalne doświadczenie w układach css i opartych na tabelach, a także javascript; * Różnica czasu między mną a deweloperem interfejsu polega na tym, że jestem 8 godzin przed nim. * czasami większość front-endowych i backendowych umysłów nie jive.


title: Oddział Mercurial czy zmiana bazy?

text: Po codziennym używaniu rtęci przez ponad rok, wkrótce znajdziemy lepszy przepływ pracy dla naszego DVCS. Zainspirowani udanym modelem rozgałęziania Git, zamierzamy odejść od naszego przepływu pracy „przepychanie codziennej pracy do głównego repozytorium i rozwijanie gałęzi wydań w regularnych odstępach czasu” na „pracę nad osobnymi gałęziami funkcji i łączenie gotowych funkcji z powrotem do głównego”. W każdym razie problem, który miałem z rozgałęzieniami i łączeniem w mercurial (oddział używający klonu) jest faktycznym procesem łączenia. Nie mam problemu z łączeniem generującym dodatkowe zestawy zmian, problemem jest to, że zwykle generuje ogromne zestawy zmian, które zawierają więcej zmian niż oryginalny zestaw zmian+scalanie. Zestaw zmian scalania zawiera również zestawy zmian z innych głowic. Tak więc niedawno zdałem sobie sprawę, że kiedy wyciągamy z głównego repo, następnie aktualizujemy/scalamy i wreszcie wciskamy, tworzymy te niepotrzebne duże zestawy zmian. Co powinniśmy zrobić, to zmienić bazę zamiast ściągać, aktualizować/scalać. Obecnie rebase był pierwotnie rozszerzeniem mercurial, nadal jest rozszerzeniem, ale obecnie jest dostarczany wraz z dystrybucją mercurial. Podczas śledzenia innych wątków, zwłaszcza tych porównujących git z mercurialem, wydaje się, że jedną z największych różnic między nimi jest fakt, że git nie obsługuje gałęzi, ale ma natywną obsługę rebase. Mercurial nie ma natywnego wsparcia dla rebase, ale obsługuje gałęzie. Więc moje pytanie, jeśli powinniśmy przyjąć bardziej elastyczny przepływ pracy przy użyciu gałęzi funkcji, musimy mieć solidny przepływ pracy gałęzi/scalania, który nie powoduje spustoszenia w gałęzi głównej. Gałąź główna powinna być **brzoskwinia** zawierająca tylko zestawy zmian zawierające pojedynczą funkcję bez żadnych dodatkowych zestawów zmian dla jakichkolwiek przeprowadzonych operacji scalania. Czy można to zrobić w mercurial bez wsparcia rebase? Jako osobny problem chciałbym trochę danych wejściowych dotyczących agregowania wielu zestawów zmian w gałęzi funkcji w jeden pojedynczy zestaw zmian podczas pchania do gałęzi głównej. Przeczytałem Przewodnik po rozgałęzianiu w Mercurial, ale nigdy nie wspomina on o zaletach ani wadach dotyczących łatwości łączenia, a dokładniej o tym, jak wyniki scalenia są umieszczane w gałęzi master.


title: Po co rozdzielać widok i kontroler (sieć)?

text: Dlaczego nie możemy umieścić ich na tej samej stronie, jak każde działanie połączone z jego widokiem? Nie używasz wyspy kodu, ale kod kontrolera na górze, a następnie kod na dole? Jakie są problemy z tym podejściem? Mówiąc MVC mam na myśli takie frameworki jak ASP.NET MVC i Ruby on Rails i mam wrażenie, że V i C to tak naprawdę warstwa UI.


title: Jak mogę poprawić sprawdzanie i obsługę błędów?

text: Ostatnio mam trudności ze zrozumieniem, jaka jest właściwa ilość sprawdzania i jakie są właściwe metody. Mam kilka pytań na ten temat: Jaki jest właściwy sposób sprawdzania błędów (złe dane wejściowe, złe stany itp.)? Czy lepiej jest jawnie sprawdzać błędy, czy używać funkcji, takich jak potwierdzenia, które można zoptymalizować z końcowego kodu? Mam ochotę wyraźnie sprawdzić zaśmiecanie programu z dużą ilością dodatkowego kodu, który i tak nie powinien być wykonywany w większości sytuacji - nie wspominając o większości błędów, które kończy się niepowodzeniem przerwania/zakończenia. Po co zaśmiecać funkcję jawnymi kontrolami tylko po to, by przerwać? Szukałem asercji w przeciwieństwie do jawnego sprawdzania błędów i niewiele znalazłem, aby naprawdę wyjaśnić, kiedy należy to zrobić. Większość mówi: „użyj potwierdzeń do sprawdzania błędów logicznych i używaj jawnych sprawdzeń do sprawdzania innych błędów”. Jednak wydaje się, że nie zaprowadzi nas to zbyt daleko. Czy powiedzielibyśmy, że jest to wykonalne: Malloc zwraca null, wyraźnie sprawdza, czy użytkownik API wstawia nieparzyste dane wejściowe dla funkcji, używa asercji. Czy dzięki temu będę lepszy w sprawdzaniu błędów? Co jeszcze mogę zrobić? Naprawdę chcę ulepszać i pisać lepszy, „profesjonalny” kod.


title: Zasoby/oprawy na iOS?

text: W świecie .NET udało mi się znaleźć kilka postaci z branży lub blogi luminarzy, które można przeczytać lub śledzić na Twitterze, aby dowiedzieć się o funkcjach i trendach. Przechodząc do królestwa iOS, jestem trochę zaskoczony, jak trudno było znaleźć analogiczne zasoby. Jakie zasoby powinienem czytać/śledzić/osmosować, aby lepiej zintegrować się ze społecznością iOS?


title: Implementacja asynchronicznego wstawiania/aktualizacji aplikacji internetowej

text: Jestem w trakcie wdrażania małej aplikacji internetowej wykorzystującej memcached do buforowania obiektów i serwer sql do utrwalania bazy danych. We wszystkich projektach, które wykonałem przed wykonaniem wstawek/aktualizacji w samym wątku internetowym. W tym projekcie chcę zaimplementować asynchroniczne inserty i aktualizacje. Użyję memcached http://en.wikipedia.org/wiki/Memcached do przechwytywania zmian i usługi zewnętrznej (usługi Windows) do utrwalania zmian w db. Rozumiem, że przedwczesne dostrajanie wydajności jest złe, ale to tylko projekt testowy do nauki memcached. Czy ktoś to robił wcześniej. Jakie są wady korzystania z tego?


title: Czy zaczynasz pisać klasę GUI najpierw czy odwrotnie?

text: Chcę napisać swój pierwszy program w Javie, na przykład Książka telefoniczna, i zastanawiam się, co najpierw zrobić. Moje pytanie brzmi, czy powinienem najpierw napisać klasy GUI, czy najpierw używać klas? Jestem programistą baz danych i chcę poznać najlepsze praktyki w budowaniu programów.


title: Czy Java ma automatyczne zarządzanie pamięcią?

text: Zacząłem uczyć się C# i doszedłem do tego, co nazywa się 'automatycznym zarządzaniem pamięcią' lub 'zbieraczami śmieci' i zastanawiam się, czy Java też zawiera coś takiego? a jeśli tak, to czy robi to tak samo skutecznie jak C#, jeśli chodzi o aplikacje desktopowe Windows i aplikacje internetowe?


title: Znak i znak bez znaku

text: Gdzie jest używany unsigned char w C (proszę opowiedzieć o kilku przykładach ze świata rzeczywistego)? Dlaczego mielibyśmy potrzebować zarówno char, jak i unsigned char? Char wynosi od -127 do 128 (8-bitowa liczba całkowita) Unsigned Char ma zakres od 0 do 255 (8-bitowa liczba całkowita) Jeśli celem jest przechowywanie ASCII, po co nam jedno i drugie? Inne pytanie. Rozważ to: char a = 127; znak bez znaku b = 255; Kiedy drukuję go za pomocą std::cout. Daje mi różne charaktery. Czy możesz mi wytłumaczyć dlaczego? ( używam kompilatora Microsoft vs11 )


title: W przypadku aplikacji internetowej, czy należy programowo utworzyć tabele bazy danych, czy udostępnić plik schematu i instrukcje?

text: Kilka aplikacji internetowych LAMP, które zainstalowałem, wymaga ode mnie samodzielnego utworzenia niezbędnych tabel bazy danych za pomocą pliku schematu, zamiast robienia tego automatycznie za pomocą skryptu lub strony konfiguracji. Czy to normalna i akceptowana praktyka? W moich własnych projektach hobbystycznych uważam, że znacznie łatwiej i bezproblemowo jest po prostu tworzyć tabele w kodzie. Jako programista mogę upewnić się, że wszystko zostało zrobione poprawnie, a jako użytkownika nie obchodzi mnie to - po prostu spraw, aby to działało! Mam jednak bardzo ograniczoną wiedzę i doświadczenie w świecie aplikacji internetowych i zarządzania bazami danych, więc nie znam wad i zalet obu tych podejść. Jeśli miałbym udostępnić moje aplikacje internetowe LAMP do pobrania i zainstalowania przez inne osoby, czy powinienem nadal tworzyć tabele w kodzie, czy postępować zgodnie z przykładem innych zainstalowanych aplikacji i po prostu dostarczyć plik schematu z instrukcjami instalacji?


title: Porównanie wykresów niestandardowych?

text: Próbuję porównać dwa wykresy przy użyciu wartości skrótu (tj. w czasie porównania staraj się unikać przechodzenia przez wykres) Czy istnieje sposób na utworzenie funkcji, w której porównywane wartości skrótu mogą również prowadzić do określenia, na jakiej wysokości wykresy różnią się? Porównania między dwoma wykresami należy dokonać, porównując dzieci na pewnym poziomie. Jednym ze sposobów porównywania wykresów jest ostateczna wartość skrótu dla węzła głównego i porównanie ich, ale nie odzwierciedlałoby to bezpośrednio, na jakim poziomie wykresy się różnią, ponieważ ich bezpośrednie dzieci mogą być takie same (lub w jakimkolwiek innym przypadku).


title: Jak zostać prawdziwym ekspertem?

text: Jako freelancer nie mam luksusu szkolenia firmowego i kręgu profesjonalnych pracowników. Mimo, że programowałem od kilku lat i rozwijałem profesjonalne projekty, to czasami znajduję się w miejscu, w którym nie ma pomocy. Nawet StackOverflow i inne powiązane witryny nie mogą pomóc. Weźmy na przykład Crystal Reports. Używam go od kilku lat w swoich projektach. Nauczyłem się tego sam, ale wciąż borykam się z wieloma problemami. Nadal nie jestem w stanie poprawić wydajności raportów, nie jestem w stanie szybko projektować i nadal jestem w stanie wykorzystać tylko 30% mocy Crystal Report. Mieszkam w mieście, w którym nie mogę znaleźć freelancerów, takich jak Nowy Jork czy San Francisco, aby zatrudnić ich do nauki. Garstka ekspertów dostępnych online nie mieści się w moim budżecie. Ten sam problem mam z C# i innymi technologiami. W StackOverflow nie możesz zaangażować eksperta. Po dwóch lub trzech komentarzach straci koncentrację na twoim pytaniu i przejdzie do nowego pytania. Niewiele osób zasugerowało mi, abym zajrzał do kodu napisanego przez innych, aby szybko się uczyć. Ale znowu, jak uzyskać odpowiedzi na moje pytania. Są pewne aspekty, w których po prostu nie da się tego zapisać. Potrzebujesz osobistej pomocy. Myślę, że freelancerzy w USA mają lepszy wybór i elastyczność w porównaniu do innych krajów.


title: Czy strategia łączenia, taka jak Git Flow, naprawdę jest antywzorcem?

text: Moja firma używa Gita i używa specyficznego schematu rozgałęzień - praca jest wykonywana w master, a gałęzie są zarezerwowane dla wydań. Działa to dobrze, o ile cała praca wykonana w iteracji trafia do gałęzi, ale jeśli pojawi się krytyczny problem produkcyjny, musimy upewnić się, że praca w jakiś sposób trafi do obu gałęzi. Ostatnio mieliśmy trochę „zabawy” z tymi gałęziami. To był administracyjny ból głowy, upewnienie się, że cała praca trafia do każdej gałęzi, a niektóre błędy, które zostały naprawione w jednej gałęzi, nie przechodzą do głównego, dopóki ktoś tego nie wskaże, co jest niepokojące. Jakiś czas temu natknąłem się na Git Flow i czuję, że byłoby to rozwiązanie naszego problemu – kod nie przenika aż do wydania lub z powrotem. Jedynym haczykiem jest to, że mój lider stwierdził, że tego rodzaju rozwój był anty-wzorcem – rozwijał się wściekle przez dwa tygodnie, a potem przeznaczał trzy na rozwiązanie konfliktów scalających. Nie jestem do końca pewien, czy się z tym zgadzam, a odkąd o tym wspomniałem, praca wróciła do normy. Dopiero niedawno mieliśmy z tym kilka poważnych problemów. Chciałbym wiedzieć - dlaczego tego rodzaju schemat rozwoju miałby być postrzegany jako antywzorzec? _Czy_ to naprawdę antywzór?


title: Opinie TekPub

text: Kontynuując poprzedni wątek, który miał link do TekPub, właśnie rzuciłem okiem i myślę, że wygląda całkiem imponująco. Czy ktoś z Was jest subskrybentem, a jeśli tak, poleciłbyś go? Interesuję się głównie ogólnym projektowaniem oprogramowania oraz, jako język, C# i jego funkcjami. Czy jest dużo treści publikowanych regularnie zgodnie z tymi zasadami, aby uzasadnić nakłady? Dziękuję.


title: Czy „nie wymyślaj koła na nowo” ignoruje granice ludzkiej pamięci?

text: Praca w Haskell i F# nauczyła mnie, że ktoś na uniwersytecie mądrzejszy ode mnie prawdopodobnie już znalazł abstrakcję dla tego, co robię. Podobnie w C# i programowaniu obiektowym, prawdopodobnie istnieje biblioteka dla "to", cokolwiek robię. Jest tak duży nacisk na ponowne wykorzystywanie abstrakcji w programowaniu, że często czuję dylemat pomiędzy: 1) po prostu napisaniem czegoś krótkiego i brudnego, a 2) spędzeniem tego samego czasu, aby znaleźć czyjś bardziej solidną bibliotekę/rozwiązanie i po prostu z niej skorzystać. Jak ostatnio jeden z programistów napisał tutaj (de)serializator dla plików CSV i nie mogłem się powstrzymać od myśli, że coś takiego jest prawdopodobnie bardzo łatwe do znalezienia w Internecie, jeśli nie jest już dostarczane ze standardem .NET Pszczoła. Nie winię go jednak, kilka razy pracując w .NET łatałem razem rozwiązanie oparte na tym, co wiem, tylko po to, by zdać sobie sprawę, że było jakieś wywołanie metody lub obiekt lub coś _,często w tej samej bibliotece,_ że zrobiłem co chciałem i po prostu o tym nie wiedziałem. Czy to tylko oznaka braku doświadczenia, czy też zawsze istnieje element kompromisu między pisaniem nowego a ponownym wykorzystaniem starego? Najbardziej nienawidzę sytuacji, gdy natrafiam na rozwiązanie, o którym już wiedziałem io którym zapomniałem. Czuję, że jedna osoba po prostu nie jest w stanie przetrawić ogromu kodu, który jest obecnie dostarczany z większością języków.


title: Co powinienem zrobić ze zbyt dużą ilością interfejsów potrzebnych do dialogu?

text: Zacznę od krótkiego podsumowania zmian, które wprowadziliśmy w naszym kodzie w ciągu ostatniego roku. Posiadamy oprogramowanie (BARDZO duże), które służy do wizualizacji wielokrotności sieci podziemnych, wprowadzania danych w podmiotach w sieci oraz tworzenia symulacji w tej sieci. W ciągu 20 lat rozwoju tej aplikacji (w MFC C++) pracowało nad nią wiele osób, wykonano wiele poprawek i jest ona w ciągłym rozwoju. W ciągu roku powstała klasa potworów. Klasa nosi nazwę „CNetwork”, a każda sieć jest jej podklasą. Aby zilustrować ten moment w historii kodu, prototyp typowego okna dialogowego był następujący: public SuperNiceDialog(int nID, CNetwork* pNetwork); Po kursie z testów jednostkowych stało się dla mnie oczywiste, że musimy stworzyć interfejs, aby wszystko było bardziej testowalne. Ponieważ większość naszych "funkcjonalności" znajdowała się w sieci, CNetwork implementował ich wiele i teraz, gdy musimy wywołać to samo okno dialogowe, wygląda to tak: public SuperNiceDialog(int nID, ITranslateNetwork* pTranslate, IUnitManager* pUnitManager, ICommonVectorProviderAQ * pCommonVectorProviderAQ, INetworkInfo* pNetworkInfo, IDatabaseManager* pDatabaseManager, ISimulation* pSimulation, INetworkAutonumerotation* pNetworkAutonumerotation, ISpreadsheetInfoProvider* pChiffrierInfoProvider, IPolygonManager* pPolygonManager, ISetter (może być to testowane w oknie dialogowym klasyfikacji) ale dla większości z nich muszę przejść przez wiele interfejsów, aby wykonać pracę ne. I nie mogę po prostu przekazać sieci, ponieważ niektóre interfejsy są usuwane z CNetwork, aby powoli usuwać funkcjonalność z pojedynczej klasy. Zastanawiamy się więc nad tym i jednym z pomysłów, jaki mieliśmy, było stworzenie obiektu "pakietu", który mógłby być prostą strukturą zawierającą wskaźniki do interfejsów i getter, aby uzyskać dostęp do tych wskaźników (jak obiekt Facade). Na przykład moje okno dialogowe byłoby nazwane tak jak to publiczne SuperNiceDialog(int nID, CDialogInterfacePackage* pPackage) A w kodzie użyłbym tego w ten sposób m_pPackage->GetITranslation()->Translate(123456); Ponieważ większość okna dialogowego potrzebuje tego samego interfejsu, możemy umieścić w nim 10 interfejsów i po prostu przekazać je do okna dialogowego. Moglibyśmy stworzyć "pakiet interfejsu" dla różnych modułów, na przykład do symulacji, arkusza kalkulacyjnego itp. Jedna część mnie uważa, że to dobry pomysł, ale inna część mówi mi, że będę powoli tworzyć nowy "CNetwork" w jakimś sposób... Masz jakieś pojęcie o problemie zbyt dużej liczby interfejsów? Czy to dobre podejście? Dziękuję


title: Czy istnieje ustawienie umożliwiające globalne włączenie ochrony przed fałszerstwem w ASP.NET MVC, a jeśli nie, dlaczego?

text: Samouczki, które przeczytałem, mówią o używaniu atrybutów [ValidateAntiForgeryToken] i `<%= Html.AntiForgeryToken() %>` w swoim kodzie. Zastanawiałem się, dlaczego nie jest to wbudowane automatyczne ustawienie lub przynajmniej globalny przełącznik w web.config. Być może tak jest, a nie zdawałem sobie sprawy, ale robię to ręcznie i nie mogę powstrzymać się od zastanawiania się, czy istnieje dobry powód, aby nie obsługiwać tego automatycznie za kulisami. Jakieś pomysły?


title: Równość reprezentacyjna a równość wartości

text: Koduję system, w którym mam obiekty, które reprezentują zbiór zasobów. Te zasoby są identyfikowalne (mają identyfikator). Może istnieć tylko jeden zasób o tym samym identyfikatorze, a więc wiele obiektów o tym samym identyfikatorze naprawdę powinno mieć te same wartości. Mój problem dotyczy w tym przypadku koncepcji **równości**. Czy powinna opierać się na identyfikatorze, czy na samych wartościach? Czy obiekt A = obiekt B, ponieważ mają ten sam identyfikator **LUB** powinien obiekt A == obiekt B, ponieważ ich pola są takie same. Jedną z możliwości, o której myślałem, było to, aby porównanie oparte na identyfikatorze było „równe”, a porównanie oparte na polach było „równoważne”. Alternatywnie mógłbym to zrobić, aby porównanie oparte na polach było „równa się”, a porównanie oparte na identyfikatorze było „representSameObject” (lub coś takiego). Tylko przykład pseudokodu: class A { String uuid; int pole1; podwójne pole2; List<String> listField; @Override public boolean equals(Obiekt inny) { return uuid.equals(other.uuid); } public boolean równoważnik ( inne ) { if (this == inny) { return true; } if (null == inny) { return false; } if (other.getClass() != this.getClass()) { return false; } A rhs = (A) inne; zwróć nowe EqualsBuilder().append(field1, rhs.field1).append(field2, rhs.field2).append(listField, other.listField).isEquals(); } } Ostatecznie może to sprowadzać się do osobistych preferencji połączonych z wymaganiami systemowymi, ale jestem bardzo zainteresowany, aby dowiedzieć się, jak inni podeszli do tej koncepcji. To mnie denerwuje, odkąd zacząłem pracować nad tym projektem! Jeśli to robi różnicę, to w tej chwili programuję w Javie. Nie obchodzi mnie, skąd pochodzi odpowiedź, ponieważ jest to oczywiście kwestia koncepcyjna.


title: Konstruktor PHP4 nie działa z przestrzeniami nazw

text: Oto scenariusz: za każdym razem, gdy uzyskuje się dostęp do klasy za pomocą przestrzeni nazw w php, nie uruchamia standardowego konstruktora, a jedynie metodę „magiczną”. Co tu jest nie tak i co można naprawić? **hierarchia** test.php a +-foo.php **test.php** <?php spl_autoload_register(); spl_autoload_extensions(.php"); nowy a\Foo(); Przestrzeń nazw **foo.php** a; class Foo{ /* //jeśli ten ges dodał, __construct() nazywa się funkcją publiczną __construct(){ echo "o nazwie magiczny konstruktor"; } */ public function Foo(){ echo "nazywany standardowym konstruktorem"; } } Uruchomienie test.php nie uruchamia metody konstruktora Foo, a jedynie metodę __construct, jeśli jest obecna.


title: Struktura danych dla małej liczby agentów w stosunkowo dużym świecie 2D

text: Pracuję nad projektem, w którym zrealizujemy swoistą symulację świata, w którym jest kwadratowy świat 2D. Agenci żyją na tym świecie i podejmują decyzje, takie jak poruszanie się lub replikowanie, w oparciu o sąsiednie komórki (świat=siatka) i pewne dodatkowe parametry (które nie są oparte na stanie świata). Poszukuję struktury danych do realizacji takiego projektu. Moje obawy są następujące: zaimplementuję to 3 razy: sekwencyjnie, używając OpenMP, używając MPI. Więc jeśli mogę użyć tej samej struktury, to będzie całkiem nieźle. Pierwszą rzeczą, która się pojawia, jest utrzymywanie tablicy 2D dla świata i przechowywanie w niej referencji agentów. I symuluj świat dla każdego wycinka czasu, sprawdzając każdą komórkę w każdej iteracji i dalsze przetwarzanie, jeśli w komórce zostanie znaleziony agent. Minusem jest to, że mam świat 1000x1000 i tylko 5 agentów. Sprawdzenie każdej komórki i szukanie w niej potencjalnych agentów będzie przesadą zarówno w przypadku wersji sekwencyjnej, jak i równoległej. Mogę używać quadtree i przechowywać w nim agentów, ale jak mogę wtedy uzyskać informacje o sąsiednich komórkach? Proszę daj mi znać, jeśli powinienem rozwinąć więcej.


title: Wykorzystanie magistrali usług w silniku Pub-Sub

text: W jednym z naszych projektów zbudowaliśmy Wydawca - Silnik Abonenta w Oracle Service Bus. Funkcjonalność będąca serią zdarzeń jest publikowana, a subskrybenci (kolejki JMS) otrzymują je za każdym razem, gdy publikowane jest nowe zdarzenie. Mamy teraz do czynienia z pewnymi problemami technicznymi, wykonawczymi i dlatego trwa przegląd architektoniczny. Teraz moje pytania: Architektonicznie ESB musi publikować zdarzenia w bazie danych i odczytywać z niej, o których użytkownicy chcą być powiadamiani, a następnie przesyłać zdarzenia do odpowiednich kolejek. Istnieje duża ilość interakcji z DB i pytanie brzmi **czy ESB powinna mieć tak dużą ilość interakcji z DB w pierwszej kolejności**? A może powinien istnieć jakiś alternatywny składnik odpowiedzialny za to. Alternatywnie ** czy jest jakieś podejście inne niż DB, w którym możemy przechowywać zdarzenia i subskrybentów**? Gdzie jeszcze mogą być przechowywane te dane aplikacji w kontekście ESB?


title: Czy dyslektycy mogą być dobrzy w programowaniu?

text: Jestem myślicielem o dużym obrazie (wizualno-przestrzennym) i lubię abstrakcyjną matematykę. Jednak zmagam się z zadaniami sekwencyjnymi i z programowaniem. Moja słaba pamięć robocza też nie pomaga. Słyszałem, że dobrzy myśliciele obrazowi są ogólnie dobrzy w programowaniu. Po prostu nie mogę wymyślić, jak zacząć pisać kod itp. Jestem bardzo sfrustrowany. Czy widziałeś jakąś wizualno-przestrzenną osobę, która jest kiepska w programowaniu? Czy to tylko ja? Czuję się bardzo zdruzgotany i czuję się, jakbym nigdzie nie pasował. Jakieś wskazówki, jak mogę się poprawić? A może mój mózg po prostu nie działa w logiczny sposób? Mój mózg jest zawsze pomieszany. Jeśli jesteś programistą i masz dysleksję: Jakie są twoje słabości spowodowane dysleksją? Czy jesteś dobry w zadaniach sekwencyjnych?


title: Jaki jest właściwy termin na opisanie serwera z kontrolą źródła, śledzeniem błędów i narzędziami CI?

text: Szukam „terminu”, który opisuje całościowo zestaw różnych narzędzi/usług programistycznych, z których większość programistów korzysta na co dzień. Chociaż każde narzędzie samo w sobie ma określony cel i można je opisać, czy istnieje termin w liczbie mnogiej, gdy są one zgrupowane i działają jako usługa holistyczna. Jeśli ktoś powiedziałby, że serwer to produkcyjny tester, spodziewałbym się, że uruchomi on aplikację, którą pisze firma. Jeśli ktoś powiedziałby, że pudełko A jest serwerem biurowym, wiedziałbym, że powinienem oczekiwać usług związanych z e-mailem/komunikacją.


title: C++11 zawiera std::stoi, dlaczego nie std::itos?

text: Zauważyłem z radością, że C++11 ma rodzinę funkcji std stoX do łatwego rozpakowywania ints/floats/longs cokolwiek z łańcuchów. Dziwię się jednak, że nie zaimplementowano czegoś przeciwnego. Dlaczego komisja normalizacyjna nie uwzględniła rodziny funkcji std::itos do przechodzenia z ints/floats/cokolwiek do stringów?


title: Bogaty model domeny i usługi kontenerowe

text: Mam wieloletnie doświadczenie w programowaniu projektów Java EE, ale jak zauważyłem większość mojej pracy dotyczyła (anty)wzorca `Transaction Script`. Więc chcę się uczyć korzystając z bogatego modelu domeny, ale wtedy pojawia się pytanie, czy Domain Object będzie zależny od usług kontenerowych/systemowych (takie trwałość, poczta, ...)? Przeczytałem ten artykuł i wcale się z nim nie zgadzam! * Jak usługi są inicjowane i wstrzykiwane do jednostek domeny? * A co z paradygmatem pojedynczej odpowiedzialności? * A czy nie jest to sprzeczne z ponownym użyciem? Przeczytałem też fantastyczną książkę Applying UML and Patterns, ale nie wiem, dlaczego autor nie opisał, w jaki sposób należy przypisać obowiązki encji po zdefiniowaniu warstwy dostępu do danych (w rozdziale 38). Więc jaka jest najlepsza praktyka dotycząca posiadania bogatego modelu domeny i braku zależności od usług kontenerowych/systemowych! * * * Przykład, rozważmy następujący scenariusz w oprogramowaniu: * Istnieją agenci (którzy pracują z systemem) * Działalność naszych agentów polega na sprzedaży polis ubezpieczeniowych. * Każdy rodzaj polisy ubezpieczeniowej posiada specjalny rodzaj wstępnie wydrukowanej karty, która jest przekazywana agentom, a agenci przekazują je ubezpieczonym. * Musimy śledzić liczbę dostępnych kart każdego agenta. * Istnieje więc przypadek użycia, w którym rejestruje się, ile kart każdego typu jest przydzielonych każdemu agentowi. * Istnieje przypadek użycia, dla liczby uszkodzonych nieużywanych kart każdego typu agenta rejestrującego. * A karty są używane, ponieważ agent sprzedaje polisy ubezpieczeniowe. Uważam, że Rich Domain Model sugeruje, że będę miał następującą metodę w klasie agenta: class Agent { int computeRemainigCards(CardType cardType) {} } Ale wtedy Agent będzie polegał na 3 klasach DAO tylko do jednej odpowiedzialności: * Jedna do obliczania SUMA liczba każdego rodzaju karty przekazanej agentowi. * Jeden do obliczania liczby wykorzystanych kart (przy sprzedaży polis ubezpieczeniowych). * Jeden do obliczania SUMY uszkodzonych niesprzedanych kart. Wierzę, że spowoduje to bałagan w domenach. Więc jaka jest dobra praktyka?


title: Czy istnieje czysto SQL alternatywa dla pętli?

text: Historycznie prawdopodobnie napisałbym skrypt (php lub coś takiego), aby zapętlić wszystkie wiersze arkusza kalkulacyjnego i wykonać pewne obliczenia. Szukam czystego rozwiązania SQL przy założeniu, że SQL ma lepsze opcje niż pętle. Jak mam podejść do tego problemu, korzystając z czystego podejścia SQL? * * * **PRZEGLĄD DANYCH:** Mamy listę (obecnie w arkuszu kalkulacyjnym) pozycji, dla których chcemy sprawdzić trendy. Załóżmy, że arkusz kalkulacyjny zawiera te trzy elementy; 111111, 222222 i 888888. W bazie danych mamy tabelę migawek zapasów dostawców. Oto uproszczony przykład: (zobacz skrzypce tutaj). CREATE TABLE Inventory_snapshots ([id] int, [vendor_id] int, [item] int, [brand] varchar(1), [inventory_version] int, [ilość] int); INSERT INTO inwentarz_migawki ([id], [id_dostawcy], [item], [marka], [wersja_inwentarza], [ilość]) WARTOŚCI (1, 111, 111111, 'A', 5, 45), (2, 111, 111111, „B”, 5, 43), (3, 111, 222222, „X”, 5, 12), (4, 222, 111111, „B”, 4, 5), (5, 222, 888888, „C”, 4, 50), (6, 222, 111111, „D”, 5, 10), (7, 222, 888888, „C”, 5, 100), (8, 111, 111111, „A ', 6, 40), (9, 111, 222222, 'X', 6, 10); Zwróć uwagę, że dostawca może mieć wiele wierszy towaru w danej wersji zapasów ze względu na różnice między markami. **CEL:** Naszym celem jest zobaczenie trendów wśród wszystkich dostawców. Oznacza to porównanie listy (obecnie w formie arkusza kalkulacyjnego) pozycji z bazą danych w celu uzyskania: * numeru pozycji * początkowej ilości (suma ilości z numeru wersji MIN dla każdego * dostawcy, pozycje pogrupowane według identyfikatora_dostawcy,wersji_zapasu) całkowity wzrost (suma każdego dostawcy przyrost wersji nad wersją w ilości) ogółem * przyrosty (suma każdego dostawcy przyrost wersji nad wersją w ilości) * końcowa ilość (suma ilości z numeru wersji MAX dla każdego dostawcy, pozycje pogrupowane według identyfikatora dostawcy, Inventor_version) Inny przykład można znaleźć w komentarzu na skrzypcach. **PODSUMOWANIE:** Wygląda na to, że SQL Server _może_ wykonywać pewne pętle, ale jest to niepraktyczne. Jaki jest lepszy sposób na podejście do tego?


title: Notacje diagramu klas UML: różnice między asocjacją, agregacją i kompozycją

text: Nie rozumiem niektórych notacji diagramów klas UML. ![tutaj podaj opis obrazu](http://i.stack.imgur.com/bfBSY.png) Jestem pewien, że wiem, co oznacza **Stowarzyszenie**. Każda relacja między instancjami dwóch klas, gdzie instancja jednej klasy musi wiedzieć o instancji drugiej klasy, aby wykonać swoją pracę - jest relacją Asocjacji. Stowarzyszenie często oznacza, że klasa A ma odwołanie (pole) do wystąpienia klasy B. Jednak mam problem ze zrozumieniem, co oznaczają strzałki **Agregacja** i **Kompozycja**. Część mojego zamieszania była spowodowana zetknięciem się z różnymi definicjami tych zapisów. Dwie definicje notacji **Agregacja**: **Definicja 1:** Notacja agregacji między dwiema klasami jest odpowiednia, gdy instancja klasy A **posiada kolekcję** instancji klasy B (np. List, Array , cokolwiek). **Definicja 2:** Połączenie agregacji między dwiema klasami jest odpowiednie, jeśli instancja klasy A posiada odniesienie do instancji klasy B, **a instancja B jest zależna od cyklu życia instancji A.** Znaczenie : Kiedy instancja klasy A zostanie usunięta, to samo zostanie usunięta instancja klasy B. Instancja klasy B jest **całkowicie zawarta** w instancji klasy A, w przeciwieństwie do instancji klasy A, która po prostu posiada referencję do instancja klasy B (czyli zwykłe stowarzyszenie). Nie jestem pewien, co oznacza notacja Kompozycja i czym różni się od notacji Agregacja. Proszę o wyjaśnienie definicji i pomoc w zrozumieniu. Konkretne przykłady byłyby mile widziane.


title: Czy powinienem używać nowej funkcji „auto” C++11, zwłaszcza w pętlach?

text: Jakie są zalety/wady używania słowa kluczowego auto, zwłaszcza w pętlach for? for(std::vector<T>::iterator it = x.begin(); it != x.end();i++) { it->coś(); } for(std::map<T>::iterator it = x.begin(); it != x.end(); i++) { it->drugi->coś(); } for(auto it = x.begin(); it != x.end(); i++) { it->?? } Wygląda na to, że jeśli nie wiesz, czy masz iterator dla mapy czy wektora, nie wiesz, czy użyć `pierwszego` czy `drugiego`, czy po prostu uzyskać bezpośredni dostęp do właściwości obiektu, nie? Przypomina mi to debatę C# dotyczącą używania słowa kluczowego `var`. Odnoszę wrażenie, że w świecie C++ ludzie są gotowi na przyjęcie słowa kluczowego `auto` z mniejszą walką niż `var` w świecie C#. Dla mnie moim pierwszym odruchem jest to, że lubię znać typ zmiennej, aby wiedzieć, jakich operacji mogę się spodziewać na niej.


title: jak zaprojektować stos bez używania biblioteki java lub używania listy

text: Mam pytanie jak zaprojektować stos bez użycia listy lub tablicy? To jest jedno pytanie, nad którym chcę się zastanowić, aby lepiej zrozumieć stos.


title: Dlaczego używane są generatory parserów?

text: Widziałem, że niektóre projekty wymagają BISON do wygenerowania kodu C++. Jaka jest korzyść z posiadania BISON/Yacc itp. generującego kod C/C++ zamiast pisania go samodzielnie?


title: Unikanie sprzężenia

text: > Prawdą jest również, że system może być tak sprzężony, gdzie każda klasa jest > zależna od innych klas zależnych od innych klas, że nie jest już > możliwe dokonanie zmiany w jednym miejscu bez efektu domina > i dokonywać kolejnych zmian w wielu miejscach.[1] Dlatego używanie > interfejsu lub klasy abstrakcyjnej może być cenne w każdym zorientowanym obiektowo > projekcie oprogramowania. _Cytat z Wikipedii_ ### Zaczynam od zera Zaczynam od zera z projektem, który niedawno ukończyłem, ponieważ stwierdziłem, że kod jest zbyt mocno powiązany i trudny do refaktoryzacji, nawet przy użyciu MVC. Będę używał MVC również w moim nowym projekcie, ale tym razem chcę spróbować uniknąć pułapek, miejmy nadzieję, że z twoją pomocą. ### Podsumowanie projektu Mój problem polega na tym, że naprawdę chcę, aby kontroler był tak czysty, jak to tylko możliwe, ale wygląda na to, że nie mogę tego zrobić. Podstawową ideą programu jest to, że użytkownik wybiera listy słów, które są wysyłane do silnika gry. Będzie wybierał losowe słowa z list, dopóki nie zostanie ich żaden. ### Problem pod ręką Moim głównym problemem jest to, że gra będzie miała 'tryby' i będzie musiała sprawdzać dane wejściowe na różne sposoby za pomocą metody zwanej `checkWord()`, ale dokładnie gdzie to umieścić i jak właściwie to abstrahować jest dla mnie wyzwaniem. Jestem nowy w projektowaniu wzorów, więc nie jestem pewien, czy jakieś istnieją, mogą pasować do mojego problemu. ### Moja własna próba abstrakcji Oto, co uzyskałem do tej pory po godzinach „refaktoryzacji” planów projektowych i wiem, że to dużo, ale to najlepsze, co mogłem zrobić, aby spróbować dać ci przegląd (Uwaga: Ponieważ to jest szkic, _wszystko_ może ulec zmianie, wszelka pomoc i porady są mile widziane. Zwróć także uwagę na zaznaczone punkty sprzęgania: ### Lista słów class Lista słów { // Basic CRUD itd. tutaj! // Inne przykładowe metody: public function wordlistCount($user_id) {} // Zwraca liczbę list słów użytkownika public function getAll($user_id) {} // Zwraca wszystkie listy słownictwa użytkownika } ### Klasa słowa Słowo { // Podstawowe CRUD itp. tutaj! // Inne przykładowe metody: funkcja public wordCount($wordlist_id) {} // Zwraca liczbę słów w funkcji publicznej listy słów getAll($wordlist_id) {} // Zwraca wszystkie słowa z funkcji publicznej listy słów getWordInfo($word_id) {} // Zwraca informacje o słowie } # Wordpicker class Wordpicker { // Klasa musi wiedzieć, które słowa i listy słów wyłączyć protected $_used_words = array(); chronione $_used_wordlists = array(); // Listy słów do wybierania słów z chronionych $_wordlists = array(); /* Metody publiczne */ public function setWordlists($wordlists = array()) {} funkcja public setUsedWords($used_words = array()) {} funkcja public setUsedWordlists($used_wordlists = array()) {} funkcja public getRandomWord() {} // PUNKT ŁĄCZENIA! Najprawdopodobniej będzie musiał komunikować się z klasami Wordlist i Word /* Metody chronione */ protected function _checkAvailableWordlists() {} // PUNKT ŁĄCZENIA! Może trzeba sprawdzić, czy listy słów nie zostały usunięte itp. protected function _checkAvailableWords() {} // PUNKT ŁĄCZENIA! Metoda musi pobrać wszystkie słowa z listy słów z klasy Word } ### Game class Game { protected $_session_id; // Identyfikator sesji gry, który jest przechowywany w bazie danych wraz ze szczegółami gry protected $_game_info = array(); // Publiczna funkcja tworzenia instancji gry __construct($user_id) { if (! $this->_session_id = $this->_gameExists($user_id)) { // Nowa gra } else { // Wznów grę } } // To jest metoda, którą starałem się uelastycznić, używając klas abstrakcyjnych itp. // Czy to w ogóle należy do tej klasy? public function checkWord($answer, $native_word, $translation) {} // Ta metoda porównuje odpowiedź ze słowem natywnym / słowem tłumaczenia, w zależności od trybu gry funkcja publiczna getGameInfo() {} // Zwraca informacje o sesji gry, lub tworzy ją, jeśli nie istnieje public function deleteSession($session_id) {} // Usuwa sesję gry z bazy danych // Metody obsługujące informacje o sesji gry protected function _gameExists($user_id) {} protected function _getProgress($session_id) {} protected function _updateProgress($game_info = array()) {} } ### The Game /* CONTROLLER */ /* Strona "Zgadnij słowo" */ // Wprowadzane przez użytkownika $game_type = $_POST['game_type'] ; // Wybrany za pomocą przycisków radiowych itp. $wordlists = $_POST['wordlists']; // Wybrany za pomocą pól wyboru itp. // Rozpoczyna nową grę lub wznawia ją z bazy danych $game = new Game($_SESSION['user_id']); $game_info = $gra->getGameInfo(); // Tworzy nowy Wordpicker $wordpicker = new Wordpicker(); $wordpicker->setWordlists((isset($game_info['wordlists'])) ? $game_info['wordlists'] : $wordlists); $wordpicker->setUsedWordlists((isset($game_info['used_wordlists'])) ? $game_info['used_wordlists'] : NULL); $wordpicker->setUsedWords((isset($game_info['used_words'])) ? $game_info['used_words'] : NULL); // Pobiera dostępne słowo if (! $word_id = $wordpicker->getRandomWord()) { // Nie ma więcej słów - gra skończona! $game->deleteSession($game_info['id']); przeadresować(); } else { // Przedstawia użytkownikowi szczegóły słowa $word = new Word(); $word_info = $word->getWordInfo($word_id); } ### Bit do zakończenia /* KONTROLER */ /* Strona "Sprawdź odpowiedź" */ // ?????????????????? ( http://pastebin.com/cc6MtLTR ) Pamiętaj, aby przełączyć _„Szerokość układu”_ w prawo, aby uzyskać lepszy widok. Z góry dziękuję. ### Pytania 1. W jakim stopniu przedmioty powinny być luźno połączone? Jeśli obiekt A potrzebuje informacji od obiektu B, w jaki sposób ma to uzyskać bez utraty zbyt dużej spójności? 2. Jak zasugerowano w komentarzach, modele powinny zawierać całą logikę biznesową. Ponieważ jednak przedmioty powinny być niezależne, gdzie je skleić? Czy model powinien zawierać jakiś obszar „indeks” lub „klient”, który łączy kropki? _Edytuj:_ Więc zasadniczo to, co powinienem zrobić na początek, to stworzyć nowy model, który mogę łatwiej wywołać za pomocą jednowierszowych, takich jak `$model->doAction(); // Dużo kodu, który używa klas!` A co z metodą sprawdzania słów? Czy powinien to być własny przedmiot? Nie jestem pewien, gdzie powinienem to umieścić, ponieważ jest to prawie część „gry”. Ale z drugiej strony mógłbym po prostu pominąć „abstrakcję i OOPness” i uczynić z tego metodę „modelu klienta”, który i tak zostanie enkapsulowany z kontrolera. Bardzo niepewny tego.


title: Mobilny (klient) do Amazon S3 (serwer) — architektura

text: zacznijmy od stwierdzenia problemu: Moja aplikacja na iOS ma formularz logowania. Gdy użytkownik się loguje, następuje wywołanie mojego interfejsu API i przyznanie lub odmowa dostępu. Jeśli dostęp został przyznany, chcę, aby użytkownik mógł przesyłać zdjęcia na swoje konto i/lub nimi zarządzać. Jako miejsce do przechowywania wybrałem Amazon S3 i pomyślałem, że dobrym pomysłem będzie na przykład posiadanie jednego pojemnika o nazwie „myappphotos”, który zawiera wiele folderów. Nazwy folderów to skróty wiadomości e-mail użytkownika i tajnego klucza. Tak więc każdy użytkownik ma swój własny, unikalny folder w moim wiaderku Amazon S3. Ponieważ dopiero niedawno zacząłem pracować z AWS, oto moje pytanie: Jakie są najlepsze praktyki dotyczące konfiguracji takiego systemu? Chcę, aby użytkownik mógł przesyłać zdjęcia bezpośrednio do Amazon S3, ale oczywiście nie mogę na stałe zakodować klucza dostępu. Potrzebuję więc mojego API, aby w jakiś sposób porozmawiać z Amazonem i zażądać pewnego rodzaju tokena dostępu - tylko dla konkretnego folderu, który należy do użytkownika, którego żądam. Czy ktoś może mi pomóc i/lub poprowadzić mnie do źródeł, w których rozwiązano podobny problem? Nie myśl, że jestem pierwszy, a dokumentacja amazon jest tak obszerna, że tak naprawdę nie wiem, od czego zacząć.


title: Rola „Refaktoryzacji” w dobrych praktykach programistycznych?

text: Nauczyłem się w Agile Development, że: > Refaktoryzacja to proces wyjaśniania i upraszczania > projektu istniejącego kodu, bez zmiany jego zachowania. Słyszałem o niektórych narzędziach do refaktoryzacji GUI, takich jak ReSharper i DevExpress Refactor Pro! Oto moje pytania: 1. Jak to się odbywa w procesie tworzenia oprogramowania iw jakim stopniu wpływa na system? 2. Czy Refaktoryzacja z wykorzystaniem tych narzędzi rzeczywiście przyspiesza proces rozwoju/utrzymania?


title: Jak wybrać dobrą nazwę przestrzeni nazw? (językowo)

text: Angielski w nie moim ojczystym języku, dlatego trochę trudniej jest wybrać dobrą nazwę dla przestrzeni nazw. Jeden przykład, który sprawi, że zobaczysz mój problem nieco lepiej: Mamy zestaw zajęć, które dotyczą sposobu organizacji firmy (możemy za jego pomocą stworzyć schematy organizacyjne). Obecnie przestrzeń nazw to `CFW.CoreSystem.Organizational`. Czy to dobre imię? Jaki jest **lingwistycznie** najlepszy sposób na nazwanie przestrzeni nazw? („CFW.CoreSystem.Configuration” jest lepszy niż „CFW.CoreSystem.Configurables”). [Przeniesiono go z StackOverflow]


title: Czy klasa abstrakcyjna powinna zawsze abstrahować swoje metody do interfejsu?

text: Jakiś czas temu nauczyłem się, że klasy abstrakcyjne powinny zawsze abstrahować swoje funkcje do interfejsu. Więc zamiast mieć coś takiego - klasa abstrakcyjna a{ public int i; public int foo(); } class b : a{ public int foo(){return 42;} } mamy coś takiego - interfejs Ia{ public int foo(); } klasa abstrakcyjna a : Ia{ public int i; } class b : a{ public int foo(){return 42;} } Z mojego punktu widzenia jest to lepsze ze względu na pojedynczą odpowiedzialność, modułowość i łatwość utrzymania. Mój kolega jednak się z tym nie zgadza i stwierdza, że nie ma z tego żadnych dostrzegalnych korzyści i że tylko zwiększa złożoność. Próbowałem znaleźć jakiś tekst na ten temat, ale nie pamiętam nazwy wzoru, a moje googlowanie niczego nie znalazło. Czy ten wzór jest rzeczywistością? Czy miałem rację, abstrahując wszystko tak bardzo, jak tylko mogę, czy mój kolega ma rację?


title: Próbuję zrozumieć, w jaki sposób licencja MySQL odnosi się do kodu, który napisałem

text: Posiadam ERP, kodowany w Javie oraz bazę danych w edycji MYSQL Community. Gdy miałem go sprzedać klientowi, poprosił mnie o źródła do mojej aplikacji (z przekonaniem, że jest na GPL). Dostałem już od niego zapłatę z góry. Ale teraz prosi mnie o dostarczenie kodu źródłowego dla mojego ERP wraz z plikiem wykonywalnym. Kiedy powiedziałem mu, że nie, odpowiada, że ponieważ używam wersji społecznościowej MySQL, projekt musi być open source i muszę podać mu źródła. Nie chce dopłacać do źródła za to, co napisałem. Wygląda na to, że licencja MySQL nie powinna wpływać na licencję kodu, który napisałem. Ale czy to prawda?


title: Kod strony trzeciej na licencji GPL?

text: Stoję w tej chwili przed następującym dylematem. Używam kodu z artykułu naukowego w projekcie komercyjnym. Więc w zasadzie skopiowałem i wkleiłem kod z pliku pdf papieru do mojego edytora kodu i użyłem go we własnym kodzie. Kod w gazecie ** nie ma ** żadnych ograniczeń dotyczących kopiowania ani licencji (takich jak GPL), więc pomyślałem, że będę w porządku, używając go w projekcie komercyjnym. Jednak widziałem kilka projektów open source na licencji gpl, które używają **dokładnie** tego samego kodu z artykułu do tego stopnia, że mają takie same nazwy zmiennych, jak w artykule. Więc to, co się tutaj wydarzyło, to fakt, że licencja gpl została umieszczona na kodzie stron trzecich nie korzystającym z GPL. Czy te projekty open source naruszają gpl, czy też naruszam gpl, ponieważ używam kodu, który został objęty gpl? Mój zdrowy rozsądek podpowiada mi, że nie wolno gplować kodu kogoś innego, kto nie jest gpl (jak w tym przypadku z gazety), ale mimo to pomyślałem, że zapytam.


title: Python - Service, jak uzyskać recenzję kodu

text: Zwykle jestem programistą PHP i Delphi, a ostatnio zajmuję się Pythonem. Tworzę aplikację i chciałbym uzyskać informacje zwrotne na temat kodu, jest kilka rzeczy, które chciałbym sam posprzątać, ale jestem pewien, że są inne. Gdzie/jak jest dobry sposób na skontaktowanie się z doświadczonym programistą Pythona? Płacenie nie stanowi problemu.


title: Wiele relacji wiele do wielu czy jedna tabela opcji?

text: Załóżmy, że mam bazę danych osób, które posiadają jakieś nieruchomości. Ze względu na ten problem przyjmijmy, że wszystkie te własności odnoszą się do N-N. Mogę albo utworzyć dwie tabele dla każdej właściwości (jedną dla różnych wartości, a drugą dla odniesień do głównego obiektu). Lub mogę stworzyć następującą strukturę: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/S93FG.png) Zasadniczo mając tylko jedną ogromną tabelę wartości. Czy są jakieś zalety takiego podejścia? Ponadto, czy to podejście lub wzorzec ma nazwę, którą mogę wyszukać? AKTUALIZACJA: Na przykład tworzymy klasyfikator „zwierzęta domowe” z właściwościami „kot”, „pies” i „ryba”. Tak więc jedna osoba może mieć kota i psa (lub jednego zwierzaka lub żadnego). Tworzymy klasyfikator „hobby” o wartościach „narciarstwo”, „jazda na łyżwach”, „piłka nożna” i „TV”. Tak więc Joe ma właściwości „kot”, „pies” i „TV”. Wtedy „kot” i „pies” to „zwierzęta domowe”, a „TV” to „hobby”. Pytanie brzmi, czy warto umieścić te dane za pomocą tego diagramu, czy lepiej po prostu utworzyć tabele `zwierzęta`, `zwierzęta_xref`, `hobby`, `hobby_xref`?


title: Recenzje firmowych baz kodów

text: Czy ktoś zna solidne źródło informacji na temat jakości/szczegółów kodu firmy? Pytam jako potencjalny pracownik niektórych firm, będąc bardzo niezadowolony ze stosu technologicznego niektórych firm, z którymi pracowałem w przeszłości. Jakiś czas temu zastanawiałem się nad stworzeniem takiej strony internetowej, ale ostatecznie zdecydowałem, że jest to tylko podzbiór tego, co może zaoferować strona taka jak Glassdoor. Glassdoor ma świetną stronę do recenzji firm, ale wydaje się, że jest głównie nastawiona na informacje o wynagrodzeniach i jest znacznie bardziej ogólna niż ta.


title: Czy symbole przedrostków są również uważane za przestrzenie nazw?

text: Na przykład konwencja Objective-C polega na poprzedzaniu symboli dwoma lub trzema dużymi literami, które są skrótami projektu: NSString, CABasicAnimation, MGTwitterEngine… W C wiele projektów również to robi (na przykład OpenGL i nginx). Czy jest to również uważane za przestrzeń nazw, czy czegoś mi brakuje?


title: Czy w zespole o wysokiej wydajności potrzebny jest Scrum Master?

text: Moje rozumienie obowiązków scrum mastera jest następujące: * Egzekwowanie procesu * Usuwanie przeszkód (których programiści nie mogą sami usunąć) * Zapobieganie przerwom z zewnątrz * Ułatwianie spotkań scrumowych (wstań, retrospektywa itp.) Jeśli programiści zespół jest zdyscyplinowany, będzie podążał za procesem bez pomocy trenera. Nie będą też mieli problemu z przeprowadzeniem spotkań retrospektywnych i innych spotkań scrumowych. Jeśli reszta organizacji rozumie granice sprintu, zewnętrzne zakłócenia i utrudnienia, które wymagałyby scrum mastera, są już zminimalizowane. Gdy zespół osiąga wysokie wyniki, a organizacja rozumie granice sprintu, wydaje się, że zapotrzebowanie na mistrza scrum maleje. Czy zespół może w końcu dojść do punktu, w którym mistrz scrum nie jest już potrzebny?


title: Dlaczego C# nie jest wpisany statycznie, ale F# i Haskell są?

text: Była mowa wygłoszona przez Briana Hurta na temat zalet i wad typowania statycznego. Brian powiedział, że przez statyczne wpisywanie nie ma na myśli **C#** , ale **F#** i **Haskell**. Czy to z powodu słowa kluczowego `dynamic` dodanego do C#-4.0? Ale ta funkcja jest stosunkowo rzadko przydatna. Nawiasem mówiąc, w Haskell są `⊥` i `unsafeCoerse`, które oczywiście nie są tym samym, ale czymś, co może wysadzić głowę w czasie wykonywania, podobnie jak wyjątek rzucony w wyniku `dynamic`. Wreszcie, dlaczego F# i Haskell można nazwać statycznie typowanymi językami, a C# nie?


title: Lepsze dołączanie zdarzeń do dokumentu niż dołączanie ich do elementów?

text: Podczas skakania po StackOverflow zauważyłem, że wiele osób dołącza zdarzenia (zwłaszcza zdarzenia „click”) do „dokumentu”, a nie do samych „elementów”. **Przykład:** Biorąc to pod uwagę: <button id="myButton">KLIKNIJ MNIE</button> Zamiast pisać to (używając jQuery tylko dla zwięzłości): $('#myButton').on('click', function () {... }); Robią to: $(document).on('klik', function() { ... }); A następnie prawdopodobnie użyj `event.target`, aby przejść do elementu, który faktycznie został kliknięty. Czy są jakieś korzyści/korzyści z przechwytywania zdarzeń na poziomie „dokumentu” zamiast na poziomie „elementu”?


title: Czy „śmieszne komentowanie” to zła praktyka, czy nie?

text: Chcę Cię zapytać, czy dodawanie "easter eggów" w dokumentacji źródłowej jest nieprofesjonalne, czy nie. Zapewne czytałeś ankietę StackOverflow w poszukiwaniu śmiesznych komentarzy w dokumentacji źródłowej, a ja osobiście natknąłem się na wiele takich rzeczy podczas mojej pracy, w tym zabawne (lub nie) rzeczy w dokumentacji publicznego API (na przykład ten słaby BZZZTT! 1! w dokumentacji publicznej Androida mogę podać jeszcze co najmniej kilkanaście przykładów). Nie mogę dojść do ostatecznej opinii dla siebie, bo sam mam sprzeczne argumenty. Za argumentem: * Może kogoś pocieszyć i sprawić, że jego dzień będzie śmieszniejszy/bardziej produktywny. Większa część kodu źródłowego i tak nie musi być komentowana (jeśli projekt jest wykonany poprawnie), ponieważ konkretna metoda (na przykład) jest oczywista, lub jeśli jest to stos dziwnego, gównianego kodu, nie może być wyjaśnione w sensowny sposób, aby zabawny żart nie zaszkodził możliwym informacjom, które można uzyskać z dokumentu. Wady argumentu: * Jeśli jesteś bardzo skoncentrowany/sfrustrowany, ostatnią rzeczą, której potrzebujesz, jest czyjś głupi żart, zamiast podawać informacje, których potrzebujesz na temat udokumentowanej części kodu, może to po prostu sprawić, że będziesz jeszcze bardziej sfrustrowany. A pomysł, jak wyglądałaby dokumentacja, gdyby wszyscy zaczęli to robić, jest okropny. Poza tym facet, który pisze dowcip, może być jedynym, który uważa, że jest to zabawne/interesujące/warte marnowania czasu na jego przeczytanie. Co myślisz?


title: Jaka jest korelacja między jakością procesu wytwarzania oprogramowania a jakością produktu?

text: Kiedyś wierzyłem, że praktykowanie „dobrych” metod tworzenia oprogramowania zwykle daje lepszy produkt na dłuższą metę. Jednak widziałem sporo przypadków, w których programowanie „szybkie i brudne” \ „brutalne” \ „kopiuj-wklej” wydawało się dawać przyzwoite wyniki szybciej i taniej. Dzieje się tak zwłaszcza w przypadkach, gdy czas na wprowadzenie produktu na rynek jest bardziej krytyczny niż koszty utrzymania. Czy istnieje korelacja między jakością procesu i technik rozwoju a jakością produktu?


title: Jak mogę rozpocząć pracę jako niezależny programista?

text: Załóżmy, że nie znam się na freelancingu, ale jestem dobrym programistą .NET. Chcę zostać freelancerem. Jak mam zacząć?


title: Czym są badania porównujące produktywność programistów w określonych językach/środowiskach?

text: Nie jestem pewien, czy używam właściwych terminów, ale przez produktywność mam na myśli koncepcję przekształcenia pomysłu/projektu w rzeczywiste oprogramowanie.


title: OOD: hierarchia klas z argumentami metody tworzącymi kolejną hierarchię

text: Chciałbym się dowiedzieć, jak radzicie sobie z następującą sytuacją: masz hierarchię klas, nazwij ją H1, z jakąś metodą polimorficzną, która ma przyjąć argument, którego typ tworzy hierarchię H2 w następujący sposób: im wyższy klasa jest w H1, im wyższy argument H2 akceptuje. +-----------+ +-----------+ | | | A' | |-----------+ +-----------+ |metoda(A') | ^ +-----------+ | ^ +-----------+ | | B' | +-----------+ +-----------+ | B | ^ |-----------+ | |metoda(B') | +-----------+ +-----------+ | C' | ^ +-----------+ | +-----------+ | C | |-----------+ |metoda(C') | +-----------+ Przed napisaniem jakiegokolwiek kodu wspominam, że mam dwie klasy protokołów z metodami `check`, które mają ze sobą wiele wspólnego, ale parametry żądania są specyficzne dla konkretnych argumentów -- transakcji. Język to scala, ale problem jest niezależny od języka. Na pierwszy rzut oka powinno to wyglądać tak: feature BaseMerchantProtocol { def check(transaction: BaseTransaction) = { // jakiś wspólny kod... println(requestParams(transaction)) // ...i tu też } protected def requestParams (transakcja: BaseTransaction) } class SmsCommerceMerchantProtocol extends BaseMerchantProtocol { override protected def requestParams(transaction: SmsCommerceTransaction) = { List("specyficzny wynik dla klasy SmsCommerceTransaction") } } class TelepayMerchantProtocol extends BaseMerchantParamsTransaction(transaction) protected = List("wynik specyficzny dla klasy TelepayTransaction") } } Ale oczywiście nie kompiluje się, ponieważ naruszona jest zasada podstawienia Liskov. Wypróbujmy to: cecha IMerchantProtocol { def check(transakcja: SmsCommerceTransaction) def check(transakcja: TelepayTransaction) } class MerchantProtocol rozszerza IMerchantProtocol { def check(transakcja: SmsCommerceTransaction) = { doCheck(transakcja) } def check(transakcja = TelepayTransaction) { doCheck(transakcja) } private def requestParams(transaction: SmsCommerceTransaction) = { List("specyficzny wynik dla klasy SmsCommerceTransaction") } private def requestParams(transaction: TelepayTransaction) = { List("specyficzny wynik dla klasy TelepayTransaction") } private def doCheck(transaction: BaseTransaction) = { // jakiś wspólny kod... println(requestParams(transaction)) // ...i tutaj } } Ale to się nie skompiluje - i to z tego samego powodu: `doCheck` akceptuje `BaseTransaction` , ale parametry `requestParams` mają bardziej rygorystyczne warunki wstępne. Jedyne co wymyśliłem i które działa to: class MerchantProtocol extends IMerchantProtocol { def check(transaction: SmsCommerceTransaction) = { doCheck(transaction, requestParams(transaction)) } def check(transaction: TelepayTransaction) = { doCheck( transaction, requestParams(transaction)) } private def requestParams(transaction: SmsCommerceTransaction) = { List("specyficzny wynik dla klasy SmsCommerceTransaction") } private def requestParams(transaction: TelepayTransaction) = { List("specyficzny wynik dla klasy TelepayTransaction") } private def doCheck(transaction: BaseTransaction, requestParams: List[String]) = { // jakiś wspólny kod... println(requestParams) // ...i tu też } } Ale nie podoba mi się, że wszystkie `check ` metody należą do tej samej klasy. Jak mogę podzielić je na klasy?


title: Jak REST API powinien obsługiwać PUT, gdy brakuje parametrów?

text: Mam listę użytkowników, którzy są przypisywani do konkretnego biura. Używam pól wyboru, aby wybrać każdego użytkownika, a po zakończeniu klienta wykonywany jest PUT: PUT office/:id users[0] : 14 users[1] : 12 users [2] : 25 Problem występuje, gdy serwer ma użytkowników zapisane, ale klient decyduje się wyczyścić planszę. Odznacza więc użytkowników i uderza w Zapisz. Problem w tym przypadku polega na tym, że żądanie Ajax nie wysyła pustego parametru `users[0] :`, ponieważ każde pole wyboru jest odznaczone. W przypadku, gdy parametr nie jest w ogóle uwzględniony, czy PUT powinien go nadpisać i ustawić na null, czy też żądanie powinno jakoś zawierać pusty parametr?


title: C# dziedziczy z klasy w innej bibliotece DLL

text: Muszę stworzyć aplikację, która musi być wysoce modułowa i którą można łatwo rozbudować o nowe funkcje. Wymyśliłem projekt, w którym mam główne okno i listę akcji, które są realizowane przy użyciu wzorca strategii. Chciałbym zaimplementować klasy bazowe/interfejsy w bibliotece DLL i mieć możliwość ładowania akcji z bibliotek DLL, które są ładowane dynamicznie podczas uruchamiania aplikacji. W ten sposób główne okno może inicjować akcje bez konieczności ponownej kompilacji lub redystrybucji nowej wersji. Muszę tylko (re)dystrybuować nowe biblioteki DLL, które mogę aktualizować dynamicznie w czasie wykonywania. Powinno to umożliwić bardzo łatwą aktualizację modułową z centralnego źródła online. Wszystkie biblioteki DLL „działania” dziedziczą swoją strukturę z kodu zdefiniowanego w bibliotece DLL, która definiuje główną strukturę wzorca strategii i jej abstrakcyjną fabrykę. Chciałbym wiedzieć, czy C# /.Net pozwoli na taką konstrukcję. Chciałbym też wiedzieć, czy ta konstrukcja ma jakieś większe problemy projektowe.


title: Jakie dalsze kroki, aby zdobyć współtwórców mojego języka programowania Wake?

text: Spędziłem kilka miesięcy tworząc język Wake. Jest teraz w stanie alfa, co oznacza, że jest wysoce użyteczny, ale wciąż ma wiele zaplanowanych funkcji - funkcji, które będą powoli tworzone przez tylko jednego programistę. Będąc w wersji alfa, nie chcę zbyt szybko się rozgłaszać. Nie chcę nikogo zmuszać do używania go w produkcji, ani żeby Wake był zapamiętany jako „ten język, który jest w pracach”. Najważniejszą rzeczą w tym momencie jest zdobywanie współpracowników. Zrobiłem prezentację (jest film na youtube) dla przyjaciół i rodziny, która mogła mi dać jedną lub dwie, prawdopodobnie więcej pomocy w stylizacji i dokumentacji niż w tworzeniu funkcji. Czy uważasz, że język jest gotowy na * udostępnianie na reddicie * prezentację na konferencjach * prezentację firmom w celu uzyskania dodatkowej pomocy * dodawanie do baz danych pakietów, takich jak ubuntu, brew, chocolatey, itp. * udostępnianie na lambdzie ostateczne? ? Czy uważasz, że muszę pisać artykuły typu „jak współtworzyć”? Planuję napisać post na blogu _Z popiołów Google's Noop pojawia się nowy język: Wake_, aby zastosować podejście do marketingu. Czy tego rodzaju wprowadzenie jest dobre do szerokiego nagłośnienia w tej chwili?


title: Program Perla w kształcie litery S?

text: W swojej prezentacji Dlaczego nienawidzę Django Cal Henderson przedstawia ten niesamowity program w Perlu, który jest gigantycznym „S”, który rozwiązuje problem Sudoku. Czy ktoś wie, gdzie mogę uzyskać dostęp do tego kodu? Szukam tego i umieram z niecierpliwości, żeby móc to przeczytać.


title: Jak zaimplementować leniwą ocenę if()

text: Obecnie implementuję ewaluator wyrażeń (wyrażenia jednowierszowe, takie jak formuły) w oparciu o: * wprowadzone wyrażenie jest tokenizowane na oddzielne dosłowne wartości logiczne, liczby całkowite, ułamki dziesiętne, łańcuchy, funkcje, identyfikatory (zmienne) * Zaimplementowałem plac rozrządowy algorytm (lekko zmodyfikowany do obsługi funkcji ze zmienną liczbą argumentów), aby pozbyć się nawiasów i uporządkować operatory z przyzwoitym priorytetem w kolejności postfixed * mój plac rozrządowy po prostu wytwarza (symulowaną) kolejkę tokenów (za pomocą tablicy , mój język Powerbuilder Classic może definiować obiekty, ale jako natywny magazyn ma tylko tablice dynamiczne - nie prawdziwa lista, bez słownika), które oceniam sekwencyjnie za pomocą prostej maszyny stosu Mój ewaluator działa dobrze, ale wciąż brakuje mi `if() ` i zastanawiam się, jak postępować. Z moim postfixem i oceną opartą na stosie, jeśli dodam `if()` jako inną funkcję z częściami prawda i fałsz, pojedynczy `if(true, msgbox("ok"), msgbox("not ok") )` pokaże oba komunikaty, podczas gdy ja chciałbym pokazać tylko jeden. Dzieje się tak, ponieważ kiedy potrzebuję ocenić funkcję, wszystkie jej argumenty zostały już ocenione i umieszczone na stosie. Czy możesz dać mi jakiś sposób na zaimplementowanie `if()` w leniwy sposób? Myślałem o przetwarzaniu ich jako swego rodzaju makr, ale na początku nie mam jeszcze oceny stanu. Być może, że muszę użyć innego rodzaju struktury niż kolejka, aby oddzielnie przechowywać warunek i wyrażenia prawda/fałsz? Na razie wyrażenie jest analizowane przed oceną, ale planuję również przechowywać reprezentację pośrednią jako rodzaj wstępnie skompilowanego wyrażenia do przyszłej oceny. **Edytuj** : po pewnym namyśle, myślę, że mógłbym zbudować reprezentację drzewa mojego wyrażenia (AST zamiast liniowego strumienia tokenów), z którego mógłbym łatwo zignorować jedną lub drugą gałąź mojego `if( )”.


title: Audio Sync: Wykrywanie aktualnego czasu programu

text: Próbuję wykonać kilka rzeczy związanych z synchronizacją dźwięku (zobacz Wikipedia na temat akustycznych odcisków palców). Wiem, że można umieścić znaki wodne w sygnale audio, aby później go przeanalizować, ale jak mam to zrobić, aby uzyskać aktualny czas wideo? Czy byłoby to coś w rodzaju umieszczania znaku wodnego co sekundę? Czy umieszczenie tak wielu znaków wodnych nie stwarzałoby ryzyka fałszywego wyniku? Próbowałem też odczytać częstotliwości dźwięku na moim telefonie z Androidem (z przejściem przez zero), ale nie jest to zbyt precyzyjne. A więc w mniej koncepcyjnym temacie: czy ktoś mógłby mi doradzić dobry sposób wykrywania znaku wodnego audio dla smartfonów/tabletów?


title: Jaka jest twoja sugestia, jeśli firma nie doceniła mojego wkładu w duży projekt?

text: Jestem programistą na poziomie podstawowym z rocznym doświadczeniem. Pracowałem nad projektem na dużą skalę, w którym rozegrałem około 80% pracy projektowej, te 5 miesięcy były dla mnie straszne - wieczory spędzane w pracy do późna, nawet niedziele. Pracowałem nad całym modelem procesu, wykonując pracę niektórych moich kolegów, projektowanie DB, opinie klientów, ale chodzi o to, że część mojej pracy była własnością mojego kierownika zespołu i mam nadzieję, że teraz zdamy sobie sprawę, dlaczego wspominam, że 80% pracy jest wykonywane przez ja! Teraz projekt jest zakończony, a klient wydaje się w pełni zadowolony z pracy. Ale nie znalazłem firmy, która dawałaby jakąkolwiek zachętę / uznanie. Moi seniorzy, którzy nie byli zaangażowani w projekt, otrzymywali pochwały, urlopy, premie itp. Odmówiono mi też zgody na udział w ważnej funkcji rodzinnej - to sprawia, że pytam "jaki mam teraz kredyt"? Zastanawiam się, czy uczciwość/oddanie pracy spowodowało tę sytuację? Obecnie otrzymałem 3 oferty z dobrym pakietem - zastanawiałem się teraz nad przejściem do którejkolwiek z firm. Jaka jest twoja sugestia w tym momencie?


title: Pułapki UTF-16, chiński

text: Zamierzam pisać aplikację, która jest czystym back-endem HTML5 i JS oraz MVC.net. Mamy pliki .resx, które są kompilowane do plików .js dla zasobów w aplikacji html5. Aplikacja musi działać w języku angielskim i chińskim, co jak rozumiem oznacza, że musimy wszędzie używać UTF-16. Czy ktoś ma jakieś doświadczenie w używaniu UTF-16 do takiego zadania lub jakichś dobrych praktyk?


title: Certyfikacja Zend PHP 5.3

text: Planuję dać certyfikat Zend PHP 5.3. Jakieś sugestie, jak się do tego przygotować? Ponadto, jakich pytań mogę się spodziewać? Czy ktoś pamięta, o co ich pytano?


title: Czy należy zastosować filtr języka do losowo wygenerowanego ciągu?

text: Jakiś czas temu stworzyłem system licencjonowania dla nowego produktu mojej firmy, a także wszystkich produktów po tym. Jak w przypadku wielu systemów licencyjnych, kopalnia generuje kody: 25-znakowe kody produktowe i rejestracyjne, a także 16-znakowe kody odblokowujące moduły. Moje pytanie brzmi, czy skoro niektóre części tych wygenerowanych kodów są losowe, czy powinienem zastosować do nich filtr językowy, aby uniknąć zawstydzającego języka użytkownikom końcowym? Zdecydowałem się, bo to wcale nie było trudne. Ale czy ktoś inny kiedykolwiek natknął się na coś takiego? Jakieś poglądy na to, czy warto się starać?


title: Czym jest dobry projekt API C++ dla rejestrów sprzętowych?

text: Projektuję API dla sterownika, który manipuluje HW. Zrobiłem co następuje: namespace HWRegister { //private: namespace Data { //dostępne tylko w tej przestrzeni nazw //Reprezentuje jeden z czterech bloków HW. wyliczenie EHWUnit { Blok0, Blok1, Blok2, Blok3 }; wyliczenie EHWSet { Rx0, Rx1, Rx2, Rx3, Tx0, Tx1, Tx2, Tx3 }; } przy użyciu przestrzeni nazw Data; //Zwraca kod błędu int32_t enableHWUnit( const EHWUnit aHWNumber, const EHWSet aHWSet ); //Zwraca kod błędu. int32_t disableHWUnit( const EHWUnit aHWNumber ); Chciałbym zasięgnąć opinii ludzi na ten temat. Zastanawiam się, czy te wyliczenia są dobrym pomysłem, deklaruję je tutaj i dlatego osoby korzystające z mojego API są zmuszone do ich używania, czy spowoduje to więcej problemów dla wywołujących moje API? Czy mogę jakoś ulepszyć to API? Dodam więcej dokumentacji do API, gdy będę pewien, że wygląda dobrze.


title: Jak programowo zweryfikować karty podarunkowe w witrynie?

text: Próbuję umieścić w swojej witrynie funkcję, która weryfikuje salda kart upominkowych w handlu detalicznym na kartach wcześniej zarejestrowanych w witrynie sprzedawcy przez posiadacza karty. Czy można to po prostu zrobić, pisząc algorytm, który pobiera i agreguje te dane w mojej witrynie?


title: Mniej kodu lub mniej operacji

text: Czasami waham się między „Więcej kodu, aby uniknąć niepotrzebnych operacji” a „mniej kodu, ale z nadmiarowymi operacjami”. Pozwolę sobie wziąć przykład (Win32 API): próbuję ręcznie malować niektóre kontrolki, gdy kursor jest nad nimi. Jeśli kursor znajduje się nad tą kontrolką i jest ona namalowana, nie trzeba jej ponownie malować, zanim kursor z niej wyjdzie. Oczywiście mogę po prostu namalować tę kontrolkę za każdym razem, gdy pojawi się `WM_MOUSEMOVE`. Lub mogę użyć większej liczby zmiennych, aby zarejestrować stan tej kontrolki i malować ją tylko wtedy, gdy stan zostanie zmieniony. Chociaż nie jest to pytanie (w praktyce) w moim przykładzie, nadal chcę mieć wyczucie, co jest lepszym wyborem ogólnie. A jeśli to zależy od przypadków, to jakiś sposób na wyrobienie sobie zdrowego rozsądku, aby dokonać wyboru? (Nie skupiam się na „wydajnym”. To mniej więcej takie pytanie, jak: Jeśli jesteś idealistą w programowaniu, który z nich jest Twoim zdaniem lepszy.)


title: Prefiks oparty na projekcie dla nazw klas

text: Mój lider projektu używa prefiksów opartych na projektach dla nazw klas, powiedzmy nazwa projektu ABC, tworzy nazwę klasy użytkownika jako ABCUser. i mówi, że robi to, ponieważ jeśli chce, aby użytkownicy User.aspx byli mieszani. więc powiedziałem mu, dlaczego nie użyć przestrzeni nazw (Entity.User ie.), aby uczynić to konkretnym, ale on jest temu przeciwny. Chciałbym usłyszeć od Was opinie na ten temat. Programujemy c#.net i wykorzystujemy Visual Studio do projektów.


title: Nauka C# w zunifikowany sposób

text: Technologie Microsoft są coraz lepsze, ale robią to kosztem dodawania za każdym razem jeszcze jednej warstwy abstrakcji. Na wczesnych etapach bawiliśmy się kodem C# i procedurami SQL, aby wykonywać operacje CRUD. Potem pojawiły się generyki wraz z ADO.NET, DataSets, Entities. Następnie LINQ oferuje LINQ to SQL, XML, Entities, Objects. Aby być łatwiejszym i bardziej zagmatwanym, pojawił się EF 4.1. C# ciągle ewoluował i ciągle dodawał nowe warstwy abstrakcji. Efektem końcowym jest to, że jestem tak zdezorientowany, że nie wiem, który jest który i kiedy użyć którego. Kiedy próbuję podążać za książkami, niektórzy uczą EF, podczas gdy inni utknęli w ADO.NET. Poważnie, nie mam pojęcia, dlaczego tak bardzo rozwinęliśmy się w zakresie manipulacji danymi. Szczerze mówiąc, wiem tylko o składni C# i kilku podstawowych rzeczach. Manipulacja danymi nie wchodzi w grę, podobnie jak zaawansowane funkcje. * Czy istnieje ujednolicony sposób nauki C#? Nie chcę używać Entity Framework i LINQ, gdy nie rozumiem ich ani tego, co oferują. Chcę po prostu dokładnie zrozumieć poziom od 0 do 10. * Również myślę o jednoczesnej nauce PHP, ponieważ czuję, że nauka innego języka pomoże mi lepiej zrozumieć C#. Czy to właściwa rzecz?


title: Jak trafne są wyniki Brainbench przy ocenie kandydatów?

text: Widziałem wiele firm korzystających z usług certyfikacyjnych, takich jak Brainbench, podczas oceny kandydatów. Najczęściej używają go jako dodatkowego ekranu przed rozmową kwalifikacyjną lub jako walidację do wyboru między kandydatami. Jakie jest twoje doświadczenie z wynikami Brainbench? Czy sam wypróbowałeś testy, a jeśli tak, czy uważasz, że wynik jest na tyle znaczący, by można go było wykorzystać _jako część_ procesu rekrutacyjnego? * * * Trudny wybór. Wydaje się, że konsensus jest taki, że certyfikaty BB nie są zbyt dobre jako certyfikacja. Największym argumentem był fakt, że niektóre pytania są zbyt precyzyjne, aby można je było ocenić. Ten pogląd można prawdopodobnie nieco złagodzić, ale jednak trzymanie czyjejś przyszłości wyłącznie na wynikach tej oceny byłoby nieodpowiedzialne. To powiedziawszy, nadal uważam, że można je właściwie wykorzystać, aby uzyskać dodatkową obiektywną wiedzę na temat poziomu wiedzy kandydata, pod warunkiem, że test jest przeprowadzany w kontrolowanym środowisku, zapewniającym, że wszyscy podejmujący go staną na równi. Poszedłem więc z odpowiedzią, która najlepiej odzwierciedla ten pogląd, pamiętając, że wciąż jest to tylko godzinne 50-krotne pytanie wielokrotnego wyboru, aby ocenić umiejętności i wiedzę, których zdobycie zajmuje lata. Do przyjęcia z przymrużeniem oka ! Krótko mówiąc, testy mają wartość, ale to, czy są warte swojej ceny, to inna debata. Dziękuję wszystkim za poświęcony czas.


title: Testowanie interfejsu użytkownika za pomocą pakietu Visual Studio 2010 Feature Pack 2

text: Jednym z najbardziej intrygujących elementów w niedawno wydanym pakiecie Visual Studio 2010 Feature Pack 2 jest możliwość tworzenia i edytowania testów interfejsu użytkownika w programie Silverlight. Oto przykład zakodowanego testu interfejsu użytkownika. Nie miałem jeszcze zbyt wiele czasu, aby z niego korzystać, ale dla osób, które to zrobiły, jestem ciekaw, co myślisz. Czy uważasz, że jest to szczególnie przydatne? Chciałbym móc zautomatyzować znaczną ilość testów regresji, które obecnie wykonujemy ręcznie. Czy z Twojego doświadczenia wynika, że miało to duży wpływ na zasoby, które normalnie musiałbyś poświęcić na testowanie? Dziękuję


title: Podejście do uwierzytelniania klientów na serwerze TCP

text: Piszę aplikację Serwer/Klient, w której klienci będą łączyć się z serwerem. To, co chcę zrobić, to upewnić się, że klient łączący się z serwerem faktycznie używa mojego protokołu i mogę "ufać" danym przesyłanym z klienta na serwer. To, o czym myślałem, to stworzenie na komputerze klienta swego rodzaju hasha, który podąża za określonym algorytmem. W poprzedniej wersji wziąłem ich adres IP, wersję klienta i kilka innych atrybutów klienta i wysłałem je jako obliczony hash do serwera, który następnie wziął ich adres IP i wersję protokołu klienta twierdził, że używa, i obliczył tę liczbę, aby sprawdzić, czy pasują. Działa to dobrze, dopóki nie otrzymasz klientów, którzy łączą się ze środowiska routera, w którym ich wewnętrzny adres IP jest inny niż ich zewnętrzny adres IP. Moim rozwiązaniem było przekazanie wewnętrznego adresu IP klienta używanego do obliczenia tego skrótu za pomocą protokołu uwierzytelniania. Obawiam się, że to podejście nie jest wystarczająco bezpieczne. Odkąd przekazuję dane użyte do stworzenia "hashu uwierzytelniania". Oto przykład tego, o czym mówię: IP klienta: 192.168.1.10, wersja: 2.4.5.2 hash = 2*4*5*1 * (1+9+2) * (1+6+8) * ( 1) * (1+0) Klient łączy się z serwerem klient wysyła: auth hash wersja ip Serwer oblicza te informacje i akceptuje lub odrzuca hash. Zanim wymyślę inny algorytm, aby udowodnić, że klient może dostarczyć dane na serwer (lub użyć tego istniejącego algorytmu), zastanawiałem się, czy istnieją jakieś istniejące, sprawdzone i bezpieczne systemy do generowania skrótu, które mogą być obie strony generować z ogólną wiedzą. Serwer nie będzie wiedział o kliencie do momentu nawiązania pierwszego połączenia. Intencją protokołu jest zarządzanie siecią klientów, którzy będą okresowo dostarczać dane do serwera. Nowi klienci będą dodawani po prostu przez połączenie klienta z serwerem i „rejestrację” na serwerze. Tak więc klient łączy się z serwerem po raz pierwszy i rejestruje swoje informacje (adres mac lub inny rodzaj unikalnego identyfikatora komputera), a po ponownym połączeniu serwer rozpozna tego klienta jako poprzednią osobę i skojarzy go z jego dane w bazie danych. Edycja: Podejście, które wybrałem, było następujące: ostatecznie zastosowałem podejście podobne do tego, co robi OpenSSH, ale odwrotne. Od kiedy klient się łączy, nie jestem pewien, czy mogę mu ufać. Jeśli klient łączy się po raz pierwszy, dostarczy mi klucz publiczny i unikalny identyfikator (w tym przypadku użyję znacznika serwisowego komputera, ponieważ wszystkie komputery, z którymi będę miał do czynienia, to firmy Dell ). Serwer przechowuje identyfikator i klucz publiczny w bazie danych, a następnie wysyła klientowi tajne pytanie zaszyfrowane przy użyciu klucza publicznego. Następnie klient będzie musiał odpowiedzieć odszyfrowaną odpowiedzią. Zanim klient zostanie zaakceptowany przez serwer, mogę zakończyć ręcznie rejestrację unikalnego identyfikatora na serwerze przed pierwszym połączeniem klienta, w ten sposób żadna chytra osoba nie może po prostu wygenerować kluczy publicznych i emulować tego, co robi klient „nowy unikalny identyfikator”. Dzięki za pomoc! Mam nadzieję, że to komuś pomoże. Nie krępuj się oderwać od zabezpieczeń tego podejścia :)


Czy będziesz pracować ze znacznie mniej doświadczonymi współpracownikami bez pasji? Albo spowalniają Cię tak bardzo, że zawsze powinieneś starać się pracować z co najmniej tak doświadczonymi i pełnymi pasji jak współpracownikami. Czy mniej doświadczony, ale nie pełen pasji współpracownik zmniejszy Twoją produktywność?


title: Scuttlebutt Reconciliation z „Efficient Reconciliation and Flow Control for Anti-Entropy Protocols”

text: _To pytanie może być bardziej odpowiednie dla math.stackexchange.com, ale oto brzmi:_ ## Ich uzgadnianie wersji zajmuje dwie części – najpierw wymiana podsumowań, a następnie wymiana aktualizacji. Najpierw sparafrazuję opis każdego kroku zamieszczony w artykule. Aby wymienić skróty, dwaj peers wysyłają sobie nawzajem zestaw par -- (`peer`, `max_version`) dla każdego peera w sieci, a następnie każdy odpowiada zestawem delt. Delty wyglądają następująco: „(peer, klucz, wartość, wersja)” dla wszystkich krotek, dla których stan „peer” mapuje „klucz” na podaną „wartość” i „wersję”, a numer wersji jest większy niż maksymalny numer wersji, jaki widział `peer`. Wydaje się, że wymaga to, aby każdy węzeł pamiętał stan każdego innego węzła oraz najwyższy numer wersji i identyfikator, który widział każdy węzeł. ## Pytanie Dlaczego musimy iterować przez wszystkich peerów, aby wymieniać informacje między p i q?


title: Dlaczego duże firmy internetowe (Google, Facebook, Twitter itp.) wybierają open source?

text: Te bardzo duże firmy internetowe wykorzystują, rozwijają i promują technologie open source, takie jak szaleństwo. Jakie jest uzasadnienie promowania i rozwijania narzędzi i technologii open source zamiast oprogramowania o zamkniętym kodzie źródłowym, takiego jak tradycyjne firmy technologiczne (Microsoft, Apple, Adobe)?


title: Praktyki kontenerów Dependency Injection/IoC podczas pisania frameworków

text: Używałem różnych kontenerów IoC (Castle.Windsor, Autofac, MEF, itp.) dla .Net w wielu projektach. Odkryłem, że są często nadużywane i zachęcają do wielu złych praktyk. Czy istnieją ustalone praktyki dotyczące korzystania z kontenera IoC, szczególnie w przypadku dostarczania platformy/struktury? Moim celem jako twórcy frameworka jest stworzenie kodu tak prostego i łatwego w użyciu, jak to tylko możliwe. Wolałbym napisać jeden wiersz kodu, aby skonstruować obiekt, niż dziesięć, a nawet tylko dwa. Na przykład kilka zapachów kodu, które zauważyłem i nie mam dobrych sugestii, aby: 1. Duża liczba parametrów (>5) dla konstruktorów. Tworzenie usług jest zwykle złożone; wszystkie zależności są wstrzykiwane za pośrednictwem konstruktora - pomimo tego, że komponenty rzadko są opcjonalne (poza być może w testach). 2. Brak zajęć prywatnych i wewnętrznych; ten może być konkretnym ograniczeniem używania C# i Silverlight, ale interesuje mnie, jak to jest rozwiązane. Trudno powiedzieć, czym jest interfejs frameworka, jeśli wszystkie klasy są publiczne; umożliwia mi dostęp do części intymnych, których prawdopodobnie nie powinienem dotykać. 3. Sprzężenie cyklu życia obiektu z kontenerem IoC. Często trudno jest ręcznie skonstruować zależności wymagane do tworzenia obiektów. Cykl życia obiektu jest zbyt często zarządzany przez framework IoC. Widziałem projekty, w których większość klas jest zarejestrowana jako Singletony. Dostajesz brak wyraźnej kontroli i jesteś zmuszony do zarządzania elementami wewnętrznymi (odnosi się to do powyższego punktu, wszystkie klasy są publiczne i musisz je wstrzyknąć). Na przykład platforma .Net ma wiele metod statycznych. takich jak DateTime.UtcNow. Wiele razy widziałem to zawijane i wstrzykiwane jako parametr konstrukcyjny. W zależności od konkretnej implementacji mój kod jest trudny do przetestowania. Wstrzyknięcie zależności sprawia, że mój kod jest trudny w użyciu — szczególnie jeśli klasa ma wiele parametrów. Jak zapewnić zarówno interfejs testowalny, jak i łatwy w użyciu? Jakie są najlepsze praktyki?


title: Jak skutecznie korzystać ze śledzenia i debugowania?

text: Jestem samoukiem programisty C# i do tej pory tak naprawdę nie korzystałem z debugowania i śledzenia i czuję, że powinienem ich używać. Bardziej opierałem się na TDD, aby zrozumieć i uzyskać informacje zwrotne z mojego kodu. Przewodnik programisty .Net Framework odmawia podania ogólnych wytycznych dotyczących strategicznego umieszczania instrukcji śledzenia __"ponieważ aplikacje, które używają śledzenia różnią się znacznie..."_ ; Jakie masz doświadczenia związane z używaniem debugowania/śledzenia? Czy używanie ich zbyt często powoduje problemy z utrzymaniem kodu? Ile danych wyjściowych to za dużo? Ile to za mało? Jakie rzeczy zazwyczaj nagrywasz?


title: Programy ładujące w systemie Linux i Windows

text: Zastanawiałem się, jak nazywają się loadery w Linuksie i Windowsie, czyli ich nazwy poleceń? Definicje programów ładujących to > W informatyce, program ładujący jest częścią systemu operacyjnego, która jest > odpowiedzialna za ładowanie programów.