title: Organizowanie dużych aplikacji JavaScript - Warstwa widoku

text: W dzisiejszych czasach zastosowanie JavaScript w odpowiednim rozmiarze staje się coraz bardziej powszechne, a w miarę potrzeb identyfikowane są pewne wzorce, które zarządzają złożonością kodu. Staram się stosować dobre rady, ale mam problem z uporządkowaniem warstwy widoku pisanej przeze mnie aplikacji. Podczas gdy inne warstwy są ładnie oddzielone, mam dużą plamę dla interfejsu użytkownika, której chciałbym uniknąć. Aby było jasne, nie mówię o aplikacjach, które Osmani (patrz link powyżej) uważa - podobnie jak Gmail - ale wciąż wystarczająco duży, by zasługiwać na nieco lepszą architekturę. Mój problem polega na tym, że mam dużo elementów UI, które muszę umieścić. Wszystkie te elementy mogą mieć marginesy, dopełnienia i tak dalej, a ja muszę jawnie ustawić ich rozmiar, ponieważ interfejs użytkownika ma wiele ograniczeń, których nie można wyrazić za pomocą CSS (na przykład niektóre obrazy muszą mieć taki rozmiar, że jest to liczba całkowita z nich pojawia się w rzędzie, bez spacji na końcu). Jakby tego było mało, wielkość niektórych elementów zależy od tego, na ile miejsca pozwala ich pojemnik, a to może zależeć od wielkości innych elementów i tak dalej. To, co robię teraz, to obliczanie rozmiaru wszystkich elementów za każdym razem, gdy zmienia się rozmiar okna. Zaczynam od pierwszego, który mogę dowolnie obliczyć. Jak tylko to zostanie umieszczone, odpalam zdarzenie, które uruchamia obliczenie drugiego i tak dalej. Takie podejście mniej więcej działa, ale jest brzydkie jak diabli. Każda funkcja jest pełna kodu, takiego jak function resizeFoo() { var parent = $('#foo').parent(), parentWidth = parent.width(), availableWidth = parentWidth - parseInt(parent.css('padding-left') ), 10); $('#foo').width(dostępnaSzerokość); } tylko znacznie dłużej. Jak tylko dodam trochę odpowiedniego wypełnienia do rodzica #foo, muszę to zaktualizować. Oczywiście od samego początku mogłem odjąć wyściółkę z obu stron, wydłużając ją. > Czy istnieją jakieś przydatne wzorce do obsługi skomplikowanych > wymagań dotyczących rozmiaru i pozycjonowania interfejsu użytkownika, aby móc uporządkować cały powyższy bałagan w coś > znaczącego?


title: Używanie asercji z wyprzedzeniem w wyrażeniach regularnych

text: Używam wyrażeń regularnych na co dzień, ponieważ moja codzienna praca to 90% w Perlu (starszy kod, ale to inny problem). Mimo to nadal uważam, że patrzenie w przyszłość i patrzenie w tył jest strasznie zagmatwane i często nieczytelne. W tej chwili, gdybym miał otrzymać przegląd kodu z wyprzedzeniem lub spojrzeniem w tył, natychmiast odesłałbym go, aby sprawdzić, czy problem można rozwiązać za pomocą wielu wyrażeń regularnych lub innego podejścia. Oto główne powody, dla których ich nie lubię: * Mogą być strasznie nieczytelne. Na przykład asercje z wyprzedzeniem zaczynają się od początku ciągu, niezależnie od tego, gdzie są umieszczone. To między innymi może powodować bardzo „interesujące” i nieoczywiste zachowania. * Zdarzało się, że wiele języków nie obsługiwało lookahead/lookbehind (lub obsługiwało je jako "funkcje eksperymentalne"). Tak nie jest, ale zawsze pozostaje pytanie, jak dobrze jest obsługiwane. * Szczerze mówiąc, czują się jak brudny hack. Wyrażenia regularne często już są, ale mogą być również dość eleganckie i zyskały powszechną akceptację. * Poradziłam sobie bez żadnej potrzeby... czasami myślę, że są obce. Teraz swobodnie przyznam, że zwłaszcza dwa ostatnie powody nie są zbyt dobre, ale czułem, że powinienem wyliczyć, co przychodzi mi do głowy, gdy widzę jeden. Z chęcią zmienię zdanie na ich temat, ale czuję, że naruszają one niektóre z moich podstawowych zasad programowania, w tym: * Kod powinien być jak najbardziej czytelny bez poświęcania funkcjonalności — może to obejmować robienie czegoś w mniej skuteczny, ale jaśniejszy sposób, o ile różnica jest znikoma lub nieistotna dla całej aplikacji. * Kod powinien być możliwy do utrzymania - jeśli inny programista przyjdzie, aby naprawić mój kod, nieoczywiste zachowanie może ukryć błędy lub sprawić, że kod funkcjonalny będzie wyglądał na błędny (patrz czytelność) * "Odpowiednie narzędzie do właściwej pracy" - jestem pewien możesz wymyślić wymyślone przykłady, które mogłyby używać lookahead, ale nigdy nie natknąłem się na coś, co naprawdę ich potrzebuje w mojej pracy programistycznej w świecie rzeczywistym. Czy jest coś, do czego są one naprawdę najlepszym narzędziem, w przeciwieństwie do, powiedzmy, wielu wyrażeń regularnych (lub alternatywnie, czy są najlepszym narzędziem w większości przypadków, w których są obecnie używane)? Moje pytanie brzmi: **Czy używanie lookahead/lookbehind w wyrażeniach regularnych jest dobrą praktyką, czy jest to po prostu hack, który znalazł drogę do współczesnego kodu produkcyjnego?** Byłbym bardzo szczęśliwy, gdybym był przekonany, że ja' Mylę się co do tego, a proste przykłady są przydatne jako przykłady lub ilustracje, ale same w sobie nie wystarczą, aby mnie przekonać.


title: Architektura skryptów symulacyjnych Pythona

text: **Sytuacja:** mam kilka skryptów symulujących aktywność użytkowników na komputerze. Dlatego zdefiniowałem kilka przypadków (workflow) i zaimplementowałem je w Pythonie. Napisałem również kilka klas do interakcji z oprogramowaniem użytkowników (np. przeglądarka internetowa itp.). **Problem:** Jestem totalnym początkującym w projektowaniu/architekturze oprogramowania (kodowanie nie stanowi problemu). Jak mogę uporządkować to, co opisałem powyżej? Zapewnienie biblioteki, która zawiera wszystkie przepływy pracy jako funkcje lub oddzielną klasę/moduł itp. dla każdego przepływu pracy? Chcę, aby przepływy pracy były proste. Złożoność powinna być ukryta w klasach do interakcji z oprogramowaniem użytkowników. Czy są jakieś artykuły/książki, które mógłbym przeczytać na ten temat, lub czy mógłbyś podać jakieś wskazówki?


title: Projektowanie kontrolera dla modułowej architektury Java

text: Projektujemy system, który naśladuje aplikację BPEL z zestawami wymagań funkcjonalnych, takich jak wiadomości zbiorcze, zarządzanie umowami SLA, obsługa błędów i tak dalej. Jednym z celów jest zmodularyzowanie tych funkcjonalnych i niefunkcjonalnych aspektów w oddzielne aplikacje internetowe, abyśmy mogli wybierać w czasie kompilacji i łączyć je wszystkie razem. Jak zaprojektować tę aplikację — wybierając wzorce projektowe dla frameworka kontrolującego, który deleguje między modułami? Innymi słowy - to jest jak łańcuch działań w ESB, więc kontroler przechodzi do A, potem B, potem C. W innych przypadkach idzie A > B > D i tak dalej. Więc moje pytanie: jaki wzorzec projektowy ma ten kontroler? Jak może decydować o logice, czy na końcu A powinien wywołać B czy C


title: co oznacza kompozycja a agregacja?

text: Zarówno kompozycja, jak i agregacja są dla mnie zamętem. Czy poniższy przykładowy kod wskazuje na skład lub agregację? class A { public static function getData($id) { //coś } public static function checkUrl($url) { // coś } class B { public function executePatch() { $data = A::getData(12); } funkcja public readUrl() { $url = A::checkUrl('http/erere.com'); } public function storeData() { //coś zupełnie niezwiązanego z klasą A } } } Czy klasa B jest kompozycją klasy A czy agregacją klasy A? Czy kompozycja oznacza wyłącznie, że jeśli klasa A zostanie usunięta, klasa B w ogóle nie będzie działać, a agregacja, jeśli klasa A zostanie usunięta z metod klasy B, które nie korzystają z klasy A, zadziała?


title: Sugestia, jak wypełnić formularz internetowy (kilka razy)

text: Muszę wypełnić formularz danymi z pliku CSV. Planowałem użyć do tego CURL+PHP, ale potem zdałem sobie sprawę, że formularz ma kilka kroków (po jednym na każdej stronie), plus używa javascript do wypełniania ukrytych danych wejściowych. Jest to formularz ASP.NET, więc ma wiele zmiennych, postback itp. Zastanawiam się teraz nad rozszerzeniem przeglądarki, które ładowałoby plik CSV i bez dodatkowego wkładu użytkownika wypełniłoby formularz i przeszło od strona na stronę wypełniając formularz, a następnie jakoś poczekaj, aż formularz zakończy przetwarzanie, pobierz dane wyjściowe i zrestartuj formularz. Chciałbym to powtórzyć 500-600 razy. Witryna, o której mowa, nie udostępnia interfejsu API, więc wypełnienie formularzy jest jedynym sposobem. Czy ten pomysł brzmi realnie, jakieś inne pomysły?


title: Dostęp do wskaźnika i spójność pamięci podręcznej

text: Według mojego zrozumienia, kiedy uzyskujesz dostęp do zmiennej, ta zmienna i otaczający ją obszar pamięci są umieszczane w pamięci podręcznej L1. Jeśli się mylę, proszę powiedz mi. Teraz moje pytanie brzmi, powiedzmy, że mam tablicę wskaźników i chcę przejść przez nie wszystkie wykonując operację X. Jeśli najpierw muszę uzyskać dostęp do wskaźnika, aby uzyskać adres rzeczywistych danych, czy to oznacza, że pamięć jest blisko wskaźnik zostanie umieszczony w pamięci podręcznej, potem pamięć w pobliżu danych, potem z powrotem do wskaźnika, potem do danych itd.? czyli thrashing pamięci podręcznej? Jeśli tak jest, jak można zachować spójność pamięci podręcznej?


title: Trafność wyników wyszukiwania

text: Zaimplementowałem dla naszej aplikacji łatwe w obsłudze wyszukiwanie tekstowe. Zawiera zwykłe pola tekstowe na * wszystkie słowa kluczowe * dowolne ze słów kluczowych * żadne ze słów kluczowych Teraz chciałbym ustalić priorytety dla moich wyników. Samo policzenie trafień „wszystkie” i „dowolne” byłoby prawdopodobnie wystarczająco dobre, ale wynik może być bardziej trafny, jeśli trafiono więcej niż jeden niezbędny termin „dowolny”. Można też powiedzieć, że wiele trafień na jedno słowo powinno dać „mniejsze zyski”. Czy mógłbyś mi podpowiedzieć, jak zwykle rozwiązywany jest ten problem? **Zastrzeżenie** : Wiem, że wyszukiwanie „ręcznie wykonane” nie skaluje się i nie daje najlepszych możliwych wyników. Ta implementacja jest tylko tymczasowym rozwiązaniem, które zostanie zastąpione czymś w rodzaju Apache Solr, gdy tylko będziemy mieć zasoby.


title: Dlaczego powinienem nauczyć się tworzyć aplikacje na Windows Phone 7 zamiast na Androida?

text: Jaki byłby powód, dla którego ktoś uczyłby się tworzyć aplikacje na Windows Phone 7 zamiast na telefony z Androidem? Czy jest jakiś powód, dla którego programiści wybierają platformę Windows Phone 7 zamiast Androida? Dzięki stosy


title: Czy istnieje różnica w języku C++ między programem Visual Studio a Code::Blocks?

text: Kiedyś programowałem C++ na Code::Blocks, ale teraz jest to nudne. Zdaniem Visual studio jest znacznie lepiej. Czy to coś zmieni? Czy to to samo? Ta sama składnia?


title: Jak ważna jest znajomość standardu C++?

text: Próbowałem wyszukać, ale nie znalazłem podobnego pytania (albo to, albo moja terminologia wyszukiwania była nieprawidłowa - jeśli tak, zamknij). Jestem zapalonym użytkownikiem SO i zauważam, że w dyskusjach i odpowiedziach jest wiele odniesień do standardu C++ - i muszę przyznać, że nigdy nie czytałem tego konkretnego dokumentu, język sprawia, że bolą mnie oczy... Więc , pytanie brzmi, czy programista C++ może naprawdę zarabiać na życie, nie czytając tego dokumentu? Czy to naprawdę ważne dla nas, zwykłych śmiertelników, którzy nie zajmują się pisaniem kompilatorów?


title: Czy Microsoft naprawdę oferuje „wsparcie”?

text: Jednym z argumentów przeciwko korzystaniu z Open Source jest brak „wsparcia”. Czy jednak duzi dostawcy (np. Microsoft) naprawdę oferują wszelkiego rodzaju „wsparcie”? Jestem pewien, że istnieje jakaś opcja „płatnego wsparcia” w wysokości 4 cyfr za godzinę, ale czy jest to naprawdę „opcja” dla każdego problemu poza tym, który doprowadzi do bankructwa Twojej firmy? Mówiąc bardziej konkretnie... kupuję produkt Microsoftu... ma błąd... co teraz? A jak to jest lepsze niż to, co dostaję z Open Source?


title: Pythonowa wersja interfejsów Java

text: W pełni zdaję sobie sprawę, że Python i Java to różne języki programowania i powinny być używane inaczej. To powiedziawszy, "Programuj do interfejsu, a nie do implementacji" jest dobrą radą programistyczną niezależną od języka. Powiedz, że mam jakiś interfejs DAO w Javie: interfejs publiczny DataDao { Object load(); nieważna aktualizacja(); nieważne usuń(); } Programowanie w tym interfejsie pozwala mi na utrzymywanie danych w plikach podczas tworzenia prototypów, zamianę ich na bazę danych w miarę postępów itd. raczej bezboleśnie, o ile przestrzegam umowy z `DataDao`. Jakie jest podejście/wersja Pythona (jeśli istnieje) do programowania kontraktu, aby zachować ortogonalne, modułowe klasy i umożliwić bezproblemowe zmiany implementacji?


title: Mój współpracownik stworzył 96-kolumnową tabelę SQL

text: Oto jesteśmy w 2010 roku inżynierami oprogramowania z 4 lub 5 latami lub doświadczeniem, wciąż projektującymi stoły z 96 kolumnami szczelinującymi. Powiedziałem mu, że to będzie koszmar. Pokazałem mu, że musimy używać liczb porządkowych do łączenia MySQL z C#. Wyjaśniłem, że tabele z większą liczbą kolumn niż wierszy to ogromny zapach. Mimo to otrzymuję komunikat „Tak będzie prościej”. Co powinienem zrobić? EDYTUJ * Ta tabela zawiera dane z czujników. Mamy czujnik 1 z Dynamic_D1X Dynamic_D1Y [...] Dynamic_D6X Dynamic_D6Y [...] EDIT2 * No cóż, w końcu rzuciłem tę pracę. To znak, że drugi programista ciemnieje na wiele miesięcy, to kolejny znak, że kierownictwo nie zdaje sobie sprawy, że jest to problem


title: Jak freelancer może nauczyć się standardów branżowych?

text: Jako freelancer nie mam dostępu do firmowych programów szkoleniowych, w których pracownicy uczą się najlepszych praktyk. Przez większość czasu radzę mi zajrzeć do dostępnego kodu w Internecie. Idealnymi miejscami byłyby: CodePlex i SourceForge. Ale to okazuje się być bardzo mało pomocne. Chcę, aby mój istniejący kod został przeanalizowany i zaproponowane lepsze rozwiązanie poprawiające jakość kodu. Jak nauczyć się kodowania zgodnego ze standardami?


title: Problem z jedzeniem jabłek

text: Gracz A i Gracz B grają w grę. Na środku stołu stoi garnek pełen N jabłek o różnej wadze. Gracz A zaczyna pierwszy, wybiera jabłko i zaczyna je jeść. Nie tracąc czasu, gracz B robi to samo. Gdy gracz zje całe jabłko, nie tracąc czasu, powtórz tę samą procedurę. W przypadku, gdy obaj gracze zjedli jabłko w tym samym czasie, gracz A nadal ma przewagę wyboru pierwszego. Zwróć uwagę, że obaj gracze jedzą z taką samą prędkością Jakie jabłko powinien wybrać najpierw gracz A, aby przy odpowiedniej taktyce zjadł jak najwięcej gramów jabłek, jeśli gracz B gra optymalnie? * * * Pomyślałem, że wybranie najmniejszego lub największego jabłka powinno załatwić sprawę, ale są konkretne przypadki, kiedy to nie działa. To jest problem konkursowy C++, więc powinno być dobre rozwiązanie tego problemu. Myślę, że brutalna siła może być rozwiązaniem, ale to będzie wymagało dużo czasu, bo liczba jabłek to aż 10000. Wolałabym raczej jakąś wskazówkę, jak podejść do tego pytania, jak znaleźć optymalną taktykę lub intuicję niż kod.


title: Jaka może być warstwa modelu podczas korzystania z usług internetowych i braku bazy danych w Django?

text: Używam Django jako frameworka aplikacji i potrzebuje tylko usług internetowych (nie ma potrzeby posiadania tradycyjnych modeli Django i związanego z nimi ORM). W tym przypadku, ponieważ Django jest wariantem architektury MVC (ściśle mówiąc, MVT), czy powinienem opakować wywołania usług internetowych w „model”, z którego korzysta moja aplikacja, czy też powinienem wywołać te usługi internetowe bezpośrednio z widoku Django i usunąć warstwę modelu?


title: Sprzedać aplikację internetową z limitem na klienta?

text: To nie jest „klasyczne” pytanie programistyczne, ale jest związane z naszą pracą. Zajmuję się tworzeniem i sprzedażą aplikacji webowych opartych na danych dla niektórych klientów, małych (10 pracowników lub mniej), większych (1000-2000 pracodawców). Moje pytania to: 1. Czy mogę sprzedawać moją aplikację w różnych cenach, w zależności od "wymiaru" klienta? Czy jest to powszechne na "rynku oprogramowania"..czyż nie? 2. W jaki sposób **"kontrolować" i być może "ograniczyć do pracy" moją aplikację webową asp.net**, gdy klient przekroczy limit licencji? Czy istnieje jakiś gotowy komponent po stronie serwera, który to umożliwia? Dzięki EDIT: Ostatnie pytanie: jak _uzasadnić_ wyższą cenę dla dużej firmy wobec niskiej ceny dla mniejszej firmy?


title: Znak pragma w kakao

text: Jestem nowicjuszem w programowaniu w kakao i rozglądam się po różnych kodach open source online, widzę takie rzeczy jak: #pragma mark deklaracja zmiennych globalnych i zastanawiałem się, co oznacza "znak pragma" w tym, czy jest on inny niż / / lub /* (komentarz). sprawa może być) do wykorzystania później? Znalazłem ten artykuł: http://inchoo.net/mobile-development/iphone-development/what-is-a-pragma-mark/ i jest dość pomocny, ale musiałem tylko ponownie wyjaśnić, czy jest mniej lub bardziej używany przez kodera czy używany przez XCode? Dziękuję!


title: Czy freelancer może korzystać ze zwinnego programowania?

text: Chcę ulepszyć sposób, w jaki tworzę oprogramowanie. Chcę rozwijać się szybciej i mieć świetny kod! Dzisiaj używam metody wodospadu jako freelancer, pisząc teksty internetowe (strony, systemy itp.). Czy istnieje sposób na wykorzystanie zwinnego programowania (XP, SCRUM itp.) działającego w ten sposób? Nie wiem nic o zwinnym rozwoju, od czego mam zacząć? Dziękuję Ci bardzo.


title: Informacja o prawach autorskich GPL

text: Nie mam licencji na prawa autorskie od samorządu. Jak mogę korzystać z GPL? O ile wiem, krokiem do zastosowania GPL jest dodanie informacji o prawach autorskich: Prawa autorskie XXXX shabab haider... Co mam napisać w tej sekcji? Czy mogę coś takiego napisać? Czy muszę przekierować prawa autorskie do fundacji wolnego oprogramowania lub czegoś podobnego?


title: Serwer sieciowy z dużym obciążeniem procesora

text: Czytając o serwerach internetowych, frameworkach itp. przez większość czasu zauważam, że celem jest posiadanie technologii, która ma następujące cechy: * Możliwość obsługi jak największej liczby połączeń. * Dopasuj model I/O (połączenia z bazami danych i innymi usługami sieciowymi). Te funkcje pasują do rzeczywistego modelu internetowego, ale jestem zainteresowany wiedzą, które technologie będą pasować do przypadku użytkownika o dużej mocy obliczeniowej. Na przykład Node.js to technologia, która naprawdę błyszczy, gdy musisz napisać aplikację, która używa dużo I/O. Z drugiej strony, ze względu na naturę zdarzenia Node.js, nie nadaje się do użycia w przypadkach wymagających dużej mocy obliczeniowej (kodowanie wideo, uczenie maszynowe, grafika). Snap and Warp, a w testach są naprawdę szybkie. Czy są to frameworki internetowe firmy Haskell, które są odpowiednie dla problemu dużego obciążenia procesora? Jakie inne języki/technologie są kandydatami?


title: Jakie są zalety przechowywania xml w relacyjnej bazie danych?

text: Przeglądałem dzisiaj bazę danych AdventureWorks i zauważyłem, że wiele tabel (na przykład `HumanResources.JobCandidate` i `Sales.Individual`) ma kolumnę, która przechowuje dane xml. Chciałbym wiedzieć, jaka jest zaleta przechowywania danych z wiersza tabeli bazy danych w kolumnie innej tabeli? Czy to nie utrudnia odpytywania tych informacji? A może założenie, że dane nie będą musiały być odpytywane, a tylko muszą być przechowywane?


title: Dlaczego nie przeprowadza się jeszcze badań rozpoznawania płci, aby rozpoznać płeć bez widzenia (na podstawie zachowania)?

text: Każda strona internetowa ma odwiedzających, a każdy odwiedzający może być potencjalnym klientem (lead), więc naprawdę dobrze jest zrobić wszystko, co może zrobić marketer, aby przyciągnąć tego potencjalnego klienta i przekształcić go w prawdziwego klienta. Jednak niektóre strategie marketingowe działają na płeć leada. Innymi słowy, mężczyźni byliby przyciągani w jeden sposób, a kobiety w inny. Widzę, że istnieją pewne badania dotyczące **rozpoznawania płci** oparte na pewnych wzorcach fizjologicznych i twarzy, takich jak: http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6249810 http://stackoverflow.com/ pytania/5268753/face-gender-detection-library http://www.advancedsourcecode.com/gagender.asp Jednak w marketingu internetowym, który jest gorącym tematem w świecie Internetu, nie widać twarzy odwiedzający Twoją witrynę. Jednak nadal w oparciu o niektóre preferencje i niektóre atrybuty mogą istnieć szanse, że odgadniesz płeć odwiedzającego, co może zwiększyć ogólny zysk poprzez przyciągnięcie większej liczby klientów dzięki dobrym strategiom. Na przykład kobiety zazwyczaj lubią różowy kolor, a mężczyźni zazwyczaj lubią gry online. Ale zastanawiam się, dlaczego do tej pory nie przeprowadzono żadnych badań na ten temat? W świecie, w którym giganci Google, Facebook i internet starają się coraz lepiej zrozumieć swoich użytkowników, wydaje się trochę dziwne, że strony internetowe, które mają wielu odwiedzających (takie jak strony z wiadomościami cnn, bbc, msn, yahoo itp.) nie zrobiły nic lub niewiele rzeczy do obsługi tej koncepcji. Wyobraź sobie, ile pracy można wykonać, gdy zrozumiesz, że odwiedzający jest mężczyzną, czy kobietą. Czy istnieją jakieś techniczne ograniczenia dotyczące niepracy nad **rozpoznawaniem płci** tak samo jak przy **rozpoznawaniu pisma ręcznego**, **rozpoznawaniu mowy** i **rozpoznawaniu twarzy**?


title: Dlaczego Python nie potrzebuje kompilatora?

text: Zastanawiam się tylko (teraz, kiedy zacząłem od C++, który potrzebuje kompilatora), dlaczego Python nie potrzebuje kompilatora? Po prostu wpisuję kod, zapisuję go jako exec i uruchamiam. W C++ muszę tworzyć kompilacje i inne fajne rzeczy.


title: Czy potrzebuję identyfikatorów w mojej bazie danych, jeśli rekordy można zidentyfikować po dacie?

text: Piszę swoją pierwszą aplikację na Androida i będę korzystał z bazy danych SQLite, więc będę starał się maksymalnie ograniczyć rozmiar, ale myślę, że pytanie dotyczy ogólnie projektowania baz danych. Planuję przechowywać rekordy, które będą miały tekst i datę powstania. Aplikacja jest samodzielną aplikacją, tzn. nie będzie łączyć się z internetem i będzie ją aktualizował tylko jeden użytkownik, więc nie ma szans, że będzie więcej niż jeden wpis z podaną datą. Czy moja tabela nadal potrzebuje kolumny ID? Jeśli tak, jakie są zalety używania identyfikatora jako identyfikatora rekordu w przeciwieństwie do daty?


title: Typowanie kaczki, walidacja danych i programowanie asertywne w Pythonie

text: O pisaniu kaczką: > Pisanie kaczką jest wspomagane przez zwyczajowe nietestowanie pod kątem typów argumentów w > treści metod i funkcji, opierając się na dokumentacji, czystym kodzie i testowaniu > w celu zapewnienia prawidłowego użycia. O walidacji argumentów (EAFP: Łatwiej prosić o wybaczenie niż o pozwolenie). Zaadaptowany przykład stąd: > ... uważa się za bardziej pythonic do zrobienia : def moja_metoda(self, klucz): try: value = self.a_dict[member] z wyjątkiem TypeError: # zrób coś innego > Oznacza to, że każdy inny Twój kod nie musi używać prawdziwego słownika > ani podklasy - mogą używać dowolnego obiektu, który implementuje interfejs mapowania >. >> Niestety w praktyce nie jest to takie proste. Co jeśli element > w powyższym przykładzie może być liczbą całkowitą? Liczby całkowite są niezmienne - więc całkiem rozsądne jest używanie ich jako kluczy słownikowych. Jednak są one również używane do > indeksowania obiektów typu sekwencja. Jeśli element członkowski jest liczbą całkowitą, to przykład > dwa może przepuszczać listy i łańcuchy, a także słowniki. O programowaniu asertywnym: > Asercje to systematyczny sposób sprawdzania, czy stan wewnętrzny programu jest zgodny z > oczekiwanymi przez programistę, w celu wyłapania błędów. W szczególności są one dobre do wyłapywania fałszywych założeń, które zostały poczynione podczas > pisania kodu lub nadużywania interfejsu przez innego programistę. Ponadto mogą one działać w pewnym stopniu jako dokumentacja in-line, uwidaczniając > założenia programisty. („Jasne jest lepsze niż niejawne”). Wspomniane koncepcje czasami są ze sobą sprzeczne, więc przy wyborze, czy w ogóle nie przeprowadzam żadnej walidacji danych, czy nie przeprowadzam silnej walidacji, czy używam asertów, liczę na następujące czynniki: 1. Silna walidacja . Przez silną walidację rozumiem podniesienie niestandardowego wyjątku (na przykład `ApiError`). Jeśli moja funkcja/metoda jest częścią publicznego interfejsu API, lepiej sprawdzić poprawność argumentu, aby wyświetlić dobry komunikat o błędzie dotyczący nieoczekiwanego typu. Przez sprawdzanie typu nie mam na myśli używania tylko `isinstance`, ale także tego, czy przekazany obiekt obsługuje potrzebny interfejs (typowanie kaczką). Podczas gdy dokumentuję API i określam oczekiwany typ, a użytkownik może chcieć użyć mojej funkcji w nieoczekiwany sposób, czuję się bezpieczniej, gdy sprawdzam założenia. Zwykle używam `isinstance` i jeśli później chcę wspierać inne typy lub kaczki, zmieniam logikę walidacji. 2. Programowanie asertywne. Jeśli mój kod jest nowy, często używam potwierdzeń. Jakie masz rady na ten temat? Czy później usuwasz potwierdzenia z kodu? 3. Jeśli moja funkcja/metoda nie jest częścią API, ale przekazuje część swoich argumentów do innego kodu, który nie został przeze mnie napisany, zbadany ani przetestowany, robię wiele asercji zgodnie z wywoływanym interfejsem. Moja logika za tym - lepiej zawieść w moim kodzie, a potem gdzieś 10 poziomów głębiej w stacktrace z niezrozumiałym błędem, który wymusza dużo debugowania, a później i tak dodaj asercję do mojego kodu. Komentarze i porady, kiedy używać walidacji typu/wartości, a kiedy nie, potwierdza? Przepraszam za nie najlepsze sformułowanie pytania. Rozważmy na przykład następującą funkcję, gdzie `Customer` jest modelem deklaratywnym SQLAlchemy: def add_customer(self, customer): """Zapisz nowego klienta w bazie danych. @param customer: instancja klienta, której identyfikator to None @return: merged w globalną sesję klient """ # nie ma tu żadnej walidacji # miejmy nadzieję, że sesja SQLAlchemy zostanie przerwana, jeśli `klient` nie jest modelową instancją klient = self.session.add(customer) self.session.commit() return klient Tak więc, istnieje kilka sposobów obsługi walidacji: def add_customer(self, customer): # to jest metoda API, więc zweryfikujmy dane wejściowe, jeśli nie isinstance(customer, Customer): podnieś ApiError('Invalid type') jeśli customer.id nie jest None: podnieś ApiError('id powinien być None') customer = self.session.add(customer) self.session.commit() return customer lub def add_customer(self, customer): # to jest metoda wewnętrzna, ale chcę się upewnić #, że jest to instancja modelu klienta attach isinstance(customer, Customer), 'Achtung!' attach customer.id is None customer = self.session.add(customer) self.session.commit() return customer Kiedy i dlaczego miałbyś używać każdego z nich w kontekście pisania kaczki, sprawdzania typów, walidacji danych?


title: Czy testowanie to najłatwiejszy sposób na przyczynienie się do projektu Open Source?

text: Chcę przyczynić się do projektu open source, ale niewiele wiem o testowaniu jednostkowym. Chcę nauczyć się testować, a następnie ćwiczyć swoje umiejętności na otwartym źródle. Czy to również zostanie uznane za wkład. Chcę najpierw ujawnić swoje nazwisko, a potem skonc. na rozwój.


title: Powód zwrotu w wywołaniu funkcji rekurencyjnej

text: Po prostu miałem wątpliwości. Poniższy podprogram (do wyszukiwania elementu, na przykład na liście) ma na końcu instrukcję return: list *search_list(list *l, item_type x) { if (l == NULL) return(NULL); if (l->pozycja == x) return(l); w przeciwnym razie return( search_list(l->next, x) ); } Nie mogę uzyskać znaczenia instrukcji return na końcu (tj. return search_list(l->next, x) ). Byłoby bardzo pomocne, gdyby ktoś mógł wyjaśnić tę koncepcję za pomocą modelu stosu.


title: Usuwanie starych folderów pakietów Nuget po aktualizacji

text: Czy po uaktualnieniu pakietu należy usunąć stare pliki/foldery pakietów Nuget w katalogu packages? Może po prostu jestem zbyt wybredny, ale widząc pliki/foldery dla starszych wersji pakietów przeszkadza mi. Czy istnieje dobry powód, aby NIE usuwać folderów pakietów z poprzednich wersji pakietów?


title: Udostępnianie danych między procesami i między wątkami

text: Wiem, że systemy operacyjne ułatwiają współdzielenie danych międzyprocesowych i międzywątkowych. Chcę wiedzieć, jakie mechanizmy ułatwiają takie udostępnianie. Czytałem o „rurach”. Jakie są inne sposoby?


title: Udostępnianie dużej kopii zapasowej bazy danych w zespole

text: Pracuję w zespole od trzech do pięciu programistów, którzy pracują zdalnie nad aplikacją webową ASP.net. Obecnie podczas opracowywania na wszystkich naszych komputerach uruchamiamy pełną lokalną bazę danych z ostatniej kopii zapasowej. Aktualna kopia zapasowa, skompresowana, ma około 18 GB. Zastanawiam się, czy istnieje prostszy sposób, aby wszystkie nasze lokalne kopie były stosunkowo świeże, bez każdego z nas, aby regularnie pobierać plik 18 GB przez HTTP z naszego serwera internetowego. Wydaje mi się, że FTP jest opcją, ale wcale nie przyspieszy tego procesu. Jestem zaznajomiony z torrentami i ciągle mi się wydaje, że coś takiego byłoby skuteczne, ale nie jestem pewien bezpieczeństwa ani procesu.


title: Trzy warianty odniesień kołowych między obiektami: jak wybrać?

text: Projektuję wykres zależności obiektowych mojego programu i od czasu do czasu pojawia się jedna niejednoznaczność między wariantami projektu. Wyobraź sobie dwa obiekty mające do siebie odniesienie. Oczywiście co najmniej jedno odwołanie powinno być przypisane po zainicjowaniu obiektu (na przykład za pomocą metody subskrypcji), a drugie opcjonalnie może być bezpośrednią zależnością. Oto diagram obiektu ![tutaj opis obrazu](http://i.stack.imgur.com/7w2Jl.png) Nie jestem pewien, czy użyłem poprawnego UML, więc oto mój opis: 1) Oba obiekty mają subskrypcja/metody wiązania. Sposób użycia: A a = nowy A(); Bb = nowy B(); a.Zestaw(b); b.Zestaw(a); 2) `ObjectB` jest składnikiem `ObjectA`: A a = new A(new B()); // gdzieś, prawdopodobnie w metodzie a : b.Set(a); 3) Trzeci jest właściwie przeciwieństwem drugiego, nie trzeba wyjaśniać. W mojej sytuacji mogę użyć dowolnego z nich i mój program zadziała, ale chcę mieć jakieś teoretyczne powody. Czy można je znaleźć?


title: Co to jest „domyślna” licencja na oprogramowanie?

text: Jeśli wydam jakiś kod i pliki binarne, ale w ogóle nie dołączam do niego żadnej licencji, jakie są warunki prawne, które mają zastosowanie domyślnie (w USA, gdzie jestem). Wiem, że automatycznie posiadam prawa autorskie, nie robiąc nic, ale jakie są na to ograniczenia? Jeśli prześlę swój kod na github i ogłoszę go jako darmowe pobieranie / współtworzenie do woli, to czy ludzie mogą modyfikować i zamykać źródła mojej pracy? Nie powiedziałem, że nie mogą, tak jak zrobiłaby to GPL, ale nie sądzę, by domyślnie kradzież mojej pracy była akceptowalna. Więc co ludzie mogą, a czego nie mogą zrobić z kodem, który jest swobodnie dostępny, ale nie ma żadnych warunków licencyjnych? Swoją drogą wiem, że dobrym pomysłem byłoby wybranie licencji i niedługo zastosowanie jej do mojego kodu, ale nadal jestem tego ciekaw.


title: Typowe błędy Javascript, które poważnie wpływają na wydajność?

text: Na niedawnym spotkaniu UI/UX, w którym uczestniczyłem, przekazałem kilka opinii na temat strony internetowej, która używała JavaScript (jQuery) do interakcji i interfejsu użytkownika – były to dość proste animacje i manipulacje, ale wydajność na przyzwoitym komputerze była przerażająca. Właściwie przypomniało mi to o wielu witrynach/programach, które widziałem z tym samym problemem, gdzie pewne działania po prostu całkowicie niszczą wydajność. Jest to głównie (a przynajmniej bardziej zauważalne w) sytuacjach, w których Javascript prawie służy jako zamiennik Flasha. Stanowi to wyraźny kontrast z niektórymi aplikacjami internetowymi, z których korzystałem, które mają znacznie więcej JavaScriptu i funkcjonalności, ale działają bardzo płynnie (COGNOS firmy IBM to taki, który przychodzi mi do głowy). Chciałbym poznać niektóre z typowych problemów, które nie są brane pod uwagę podczas tworzenia JS, który zabije wydajność witryny.


title: Dlaczego w nawiasach piszemy akcję, która ma być wykonana przez funkcję w jQuery?

text: Generalnie za każdym razem, gdy programujemy w dowolnym języku programowania, powiedzmy C, przekazujemy parametry, które musimy przekazać do funkcji, używając nawiasów obok nazwy funkcji. Podczas gdy w jQuery, poza zdefiniowaną przez użytkownika `function()`, w nawiasach piszemy akcję, której potrzebujemy do wykonania, na przykład $('div').mouseenter(function(){ /* blah blah blah* / }); Czemu?


title: Czy są zalety deklarowania stałych zmiennych stosu w C++?

text: Nie jest dla mnie jasne, jakie są korzyści z deklarowania zmiennych stosu jako stałych w C++, miałem nadzieję, że ktoś wyjaśni korzyści i cel tej techniki. Na przykład: void func(const std::string& arg) { if(someCondition) { const std::string foo ("jakiś łańcuch plus" + arg); std::out << foo << std::endl; jakaśFunkcja(foo); // więcej linijek kodu... } // bla bla bla... } Dzięki!


title: Jaki byłby najlepszy sposób na zarządzanie dużą ilością kodu jQuery?

text: Przepraszam za tępe pytanie, postaram się wyjaśnić dalej. Będę miał stronę, która korzysta z jQuery i czuję, że kiedyś będzie DUŻO kodu jQuery, czyli DUŻO funkcji, selektorów jQuery itp. Czy jest sposób na ograniczenie dostępności Kod jQuery dla określonych stron? Może za pomocą przedmiotów? Szukam tutaj najlepszego podejścia, żebym nie uciekał tak po prostu w burzę i nie mógł znaleźć wyjścia. Dziękuję.


title: Dlaczego niektóre metody sortowania sortują według 1, 10, 2, 3...?

text: Zauważyłem, że wiele metod sortowania numerycznego wydaje się sortować według 1, 10, 2, 3... zamiast oczekiwanych 1, 2, 3, 10... Mam problem z wymyśleniem scenariusza, w którym chciałbym Potrzebuję pierwszej metody i jako użytkownik denerwuję się, gdy widzę ją w praktyce. Czy istnieją uzasadnione przypadki użycia pierwszego stylu nad drugim? Jeśli tak, jakie one są? Jeśli nie, to jak powstał pierwszy styl? Jakie są oficjalne nazwy poszczególnych metod sortowania?


title: Dlaczego społeczność Git wydaje się ignorować równoległe różnice?

text: Kiedyś używałem Windows, SVN, Tortoise SVN i Beyond Compare. To była świetna kombinacja do robienia recenzji kodu. Teraz używam OSX i Gita. Udało mi się zebrać razem skrypt bash wraz z Gitx i DiffMerge, aby znaleźć ledwo akceptowalne rozwiązanie. Mieszałem się z tą konfiguracją i podobnymi przez ponad rok. Próbowałem również użyć przeglądarki różnic Github i przeglądarki różnic Gitx, więc to nie tak, że nie dałem im szansy. Jest tak wielu inteligentnych ludzi, którzy robią świetne rzeczy z Git. Dlaczego nie porównanie side-by-side z opcją obejrzenia całego pliku? Z ludźmi, którzy korzystali z obu, nigdy nie słyszałem o kimś, kto lubiłby pojedynczy widok +/- lepiej, przynajmniej na więcej niż szybkie sprawdzenie.


title: Jak najlepiej opisywać niestandardowe filtry akcji MVC?

text: W miarę jak zagłębiam się w obszar ASP.NET MVC 3, czuję, że znajduję wiele bardzo fajnych technicznych samorodków, a także nowe sposoby robienia rzeczy w porównaniu z klasycznym ASP.NET. Jedną z tych „bryłek” są niestandardowe filtry akcji. Możesz po prostu ozdobić swoje klasy lub metody kontrolera atrybutami, które zgodnie z konwencją wskazują na klasę „niestandardowego filtra akcji”, która może wykonać niektóre operacje w określonym punkcie wykonania (np. Przy wyjątku, Przy wykonaniu metody itp.). Są BARDZO przydatne, jeśli masz jakąś operację, która musi być wykonana w regularnym momencie wykonywania kodu. Pytanie brzmi: jak to najlepiej pasuje do projektowania zorientowanego obiektowo? Jak myślisz, jaki jest najlepszy sposób opisania tego na diagramie UML lub gdy próbujesz narysować je na białej tablicy i wyjaśnić projekt? Jestem bardzo wizualny, więc lubię wyjaśniać moje projekty na białej tablicy, ale nie wiem, jak najlepiej przekazać niestandardowe filtry akcji w oparciu o obiekt zorientowany. Tak naprawdę nie są interfejsem, który należy zaimplementować. Korzystają z dziedziczenia, ale nie w kontekście miejsca, w którym są wykonywane. Wydaje się, że najlepiej pasują do sfery programowania „aspektowego”, gdzie masz akcje, które mają miejsce pod osłonami dla różnych scenariuszy (np. Logowanie, wyjątki). Wszelkie myśli są doceniane.


title: Jaką swobodę powinien mieć programista w wyborze języka i frameworka?

text: Rozpocząłem pracę w firmie, która jest przede wszystkim zorientowana na C#. Mamy kilka osób, które lubią Javę i JRuby, ale większość programistów lubi C#. Zostałem zatrudniony, ponieważ mam duże doświadczenie w tworzeniu aplikacji internetowych i dlatego, że skłaniam się ku nowszym technologiom, takim jak JRuby on Rails czy nodejs. Niedawno rozpocząłem projekt budowy aplikacji internetowej z naciskiem na wykonanie wielu rzeczy w krótkim czasie. Kierownik oprogramowania podyktował, że zamiast szyn używam mvc4. To może być OK, z wyjątkiem tego, że nie znam mvc4, nie znam C# i jestem jedynym odpowiedzialnym za tworzenie serwera aplikacji sieci Web i interfejsu użytkownika. Czy nie byłoby sensowne używanie frameworka, który już bardzo dobrze znam (Rails) zamiast używania mvc4? Powodem tej decyzji było to, że kierownik techniczny nie zna Jruby/rails i nie będzie możliwości ponownego wykorzystania kodu. Kontrargumenty: * Nie będzie wnosił wkładu w kod i, szczerze mówiąc, nie jest potrzebny w tym projekcie. Więc tak naprawdę nie ma znaczenia, czy zna JRuby/rails, czy nie. * Możemy ponownie użyć kodu, ponieważ mamy wiele aplikacji Java, z których JRuby może pobierać kod i odwrotnie. W rzeczywistości poświęcił trochę zasobów na konwersję biblioteki Java do C#, zamiast po prostu uruchamiać bibliotekę Java w aplikacji JRuby on Rails. Wszystko dlatego, że nie lubi Javy ani JRuby Zbudowałem wiele aplikacji internetowych, ale używanie czegoś nieznanego powoduje pewne rozkręcenie i nie jestem w stanie zbudować niesamowitej aplikacji w tak krótkim czasie, jak do tej pory. To byłoby w porządku; nauka nowych technologii jest w tej dziedzinie ważna. Problem polega na tym, że w przypadku tego projektu musimy dużo zrobić szybko. W którym momencie programista powinien mieć możliwość wyboru swoich narzędzi? Czy to zależy od firmy? Czy moja firma jest do bani, czy jest to normalne? Czy istnieją bardziej zielone pastwiska? Czy patrzę na to w niewłaściwy sposób?


title: Przytłoczony złożonym projektem C#/ASP.NET w Visual Studio 2008

text: Zostałem zatrudniony jako młodszy programista do pracy nad projektami, które rozszerzają istniejącą funkcjonalność w bardzo dużym, złożonym rozwiązaniu. Baza kodu składa się z C#, ASP.NET, jQuery, javascript, html i xml. Posiadam pewną wiedzę na ten temat, oprócz rzetelnej wiedzy na temat programowania obiektowego i jego podstawowych pojęć dziedziczenia, abstrakcji, polimorfizmu i enkapsulacji. Mogę śledzić kod poprzez jego klasy bazowe, interfejsy, klasy abstrakcyjne i rozumiem dużą część kodu, który czytam podczas robienia tego. Jednak to rozwiązanie jest tak ogromne i tak wiele rzeczy łączy się ze sobą za każdym razem, gdy nawiguję po kodzie, że czuję się absolutnie przytłoczony. Często nie jestem w stanie w pełni śledzić wszystkiego, co się dzieje z obiektami serializowanymi, dużymi ilościami C# i javascript działającymi na tych samych stronach i metodami wywoływanymi z plików szablonów, które składają się głównie ze znaczników. Uwielbiam uczyć się o kodzie, ale próba radzenia sobie z tym naprawdę mnie stresuje. Dodatkowo wiem, że przeprowadzono znaczną ilość testów jednostkowych, ale nie wiem nic o testach jednostkowych ani o tym, jak z nich korzystać. Wszelkie rady, które ktoś mógłby mi udzielić, dotyczące radzenia sobie z dużą bazą kodu podczas korzystania z Visual Studio 2008, byłyby bardzo mile widziane. Czy są narzędzia, których mogę użyć, aby zrozumieć, co się dzieje? Być może nawet w Visual Studio są rzeczy, o których nie wiem. Jak mogę podążać za kodem do funkcjonalności niskiego poziomu, aby lepiej zrozumieć, co dzieje się na wysokim poziomie?


title: Jak oddzielenie kodu i danych stało się praktyką?

text: **Proszę uważnie przeczytać pytanie: pyta ono _jak_ , a nie _dlaczego_.** Niedawno natknąłem się na tę odpowiedź, która sugeruje użycie bazy danych do przechowywania niezmiennych danych: > Brzmi to jak wiele magicznych liczb, które opisujesz - szczególnie jeśli > są częściowo zależne - są tak naprawdę danymi, a nie kodem. [...] Może to oznaczać bazę danych typu SQL > lub po prostu sformatowany plik tekstowy. Wydaje mi się, że jeśli masz dane, które są częścią tego, co robi twój program, to należy umieścić je _w programie_. Na przykład, jeśli funkcją twojego programu jest liczenie samogłosek, co jest złego w tym, że zawiera w sobie `samogłoski = "aeiou"`? W końcu większość języków ma _struktury danych_ zaprojektowane właśnie do tego celu. Dlaczego miałbyś zawracać sobie głowę _oddzieleniem danych_ przez umieszczenie ich w "sformatowanym pliku tekstowym", jak sugerowano powyżej? Dlaczego po prostu nie sformatować tego pliku tekstowego w wybranym przez Ciebie języku programowania? Czy to jest baza danych? Czy to kod? Jestem pewien, że niektórzy pomyślą, że to głupie pytanie, ale zadaję je z całą powagą. Wydaje mi się, że „oddzielny kod i dane” wyłaniają się kulturowo jako pewnego rodzaju oczywista prawda, wraz z innymi oczywistymi rzeczami, takimi jak „nie podawaj zmiennym mylących nazw” i „nie unikaj używania spacji tylko dlatego, że twój język uwzględnia to nieistotne”. Weźmy na przykład ten artykuł: Problem z oddzielaniem danych od kodu marionetkowego. _Problem_? Jaki problem? Jeśli Puppet jest językiem opisującym moją infrastrukturę, dlaczego nie może również opisać, że serwer nazw to 8.8.8.8? Wydaje mi się, że problem nie polega na tym, że kod i dane są przemieszane1, ale na tym, że Puppetowi brakuje wystarczająco bogatych struktur danych i sposobów łączenia się z innymi rzeczami. Uważam, że ta zmiana jest niepokojąca. Programowanie obiektowe mówiło „chcemy dowolnie bogatych struktur danych”, a więc wyposażyło struktury danych w moc kodu. W rezultacie otrzymujesz enkapsulację i abstrakcję. Nawet bazy danych SQL mają procedury składowane. Kiedy sekwestrujesz dane do YAML, plików tekstowych lub głupich baz danych, tak jakbyś usuwał guza z kodu, tracisz to wszystko. Czy ktoś może wyjaśnić, jak powstała ta praktyka oddzielania danych od kodu i dokąd zmierza? Czy ktoś może cytować publikacje luminarzy lub podać jakieś istotne dane, które demonstrują „oddzielny kod od danych” jako wyłaniające się przykazanie i ilustrują jego pochodzenie? 1: czy można w ogóle dokonywać takich rozróżnień. Patrzę na was, programiści Lisp.


title: Dlaczego maszyna do odgadywania Shannona pokonała Hagelbargera?

text: Czytam „Rock Breaks Scissors”, w którym opisano dwie „maszyny do odgadywania” zbudowane w Bell Labs, które próbują wykorzystać ludzką nielosowość w grze w dopasowywanie pensów. Była maszyna do odgadywania zbudowana przez słynnego Claude'a Shannona i jedna zbudowana przez Dave'a Hagelbargera. Maszyny działały w ten sposób (cytat z książki): > Załóżmy, że wygrywasz dwa razy z rzędu tym samym wyborem. Co byś wybrał > dalej? Mógłbyś pozostać przy wyborze, który wygrywał - lub mógłbyś > zmienić, być może na tej podstawie, że trzy razy z rzędu nie byłoby > "losowe". > > Za każdym razem, gdy miała miejsce konkretna sytuacja, maszyna [Shannona] archiwizowała to, co > zadecydował gracz. Każda decyzja została zakodowana jako 1 lub 0 i umieszczona > w jednym z 16 cennych bitów pamięci maszyny. Dla każdej z ośmiu > podanych sytuacji maszyna Shannona skatalogowała tylko dwie ostatnie decyzje. > To wypełniło 16 bitów maszyny. > > Kiedy maszyna musiała przewidzieć, sprawdzała, co zrobił gracz > ostatnie dwa razy, kiedy zdarzyła się ta sama sytuacja. Ilekroć odpowiedź gracza była w obu przypadkach identyczna, maszyna przewidywała, że gracz zrobi to samo ponownie. W przeciwnym razie zgadywał > losowo ze swojego [generatora liczb losowych]. > > Główna różnica między maszyną Shannona i Hagelbargera polegała na tym, że > maszyna Shannona była prostsza. Maszyna Hagelbargera śledziła procent > wyników dla każdej z ośmiu sytuacji. Im wyższy procent, tym większe > prawdopodobieństwo, że maszyna Hagelbargera przewidziała powtórkę z przeszłości. To może brzmieć bardziej rozsądnie i bardziej zniuansowane niż podejście „wszystko albo nic” Shannona, ale w praktyce urządzenie Shannona było lepszym predyktorem. Maszyna Shannona pokonała ludzi szybciej niż maszyna Hagelbargera, a także pokonała maszynę Hagelbargera, gdy grali ze sobą. Nie rozumiem, dlaczego prostsze podejście Shannona było znacznie lepsze niż podejście oparte na procentach Hagelbargera.


title: Czy istnieje wzorzec ograniczający, które klasy mogą aktualizować inną klasę?

text: Powiedzmy, że mam klasę ImportantInfo z publiczną właściwością do zapisu Data. Wiele klas odczyta tę właściwość, ale tylko kilka z nich kiedykolwiek ją ustawi. Zasadniczo, jeśli chcesz zaktualizować dane, powinieneś naprawdę wiedzieć, co robisz. Czy istnieje wzór, którego mógłbym użyć, aby to wyrazić w inny sposób niż poprzez udokumentowanie tego? Na przykład jakiś sposób na wymuszenie, że tylko klasy implementujące IUpdateImportantData mogą to zrobić (to tylko przykład)? Nie mówię tutaj o bezpieczeństwie, ale bardziej o „hej, czy na pewno chcesz to zrobić?” rodzaj rzeczy. ## UPDATE Miałem już do czynienia z podobnymi sytuacjami, dlatego starałem się, aby pytanie było bardziej ogólne, ale wydaje się, że zdecydowanie potrzebny jest bardziej konkretny przykład. Tak oto idzie: mam klasę Context z właściwością CurrentYear. Wiele klas korzysta z tego obiektu Context i za każdym razem, gdy CurrentYear ulegnie zmianie, muszą zareagować (na przykład ponownie się wczytać). Teraz istnieje kilka klas, które mogą legalnie zmienić bieżący rok. Oczywiście nie chcesz, aby wszyscy zmieniali bieżący rok, ponieważ ma to wpływ na wiele innych klas. Jak byś się do tego zabrał?


title: Jakie jest lepsze podejście podczas tworzenia kontrolki użytkownika: otrzymaj pełny obiekt czy tylko potrzebne wartości?

text: Pracuję z ASP.NET Web User Control (WUC) i dotarłem do tego pytania: Tworzę WUC, aby pokazać dane obiektu. Ten obiekt jest już załadowany, kiedy wywołuję to WUC. Zastanawiam się, co byłoby lepsze: dać WUC pełny obiekt, czy tylko niezbędne atrybuty?


title: Jak utrzymać SOA DRY?

text: W naszej organizacji przeszliśmy na bardziej „architekturę zorientowaną na usługi”. Aby podać przykład, załóżmy, że musimy pobrać obiekt „Quote”. Ta oferta zawiera nadawcę, odbiorcę, numery telefonów, kontakty, adresy e-mail i inne informacje o lokalizacji. Innymi słowy, obiekt Cytat składa się z wielu innych obiektów. Wydaje się więc, że sensowne byłoby utworzenie „usługi wyszukiwania cytatów”. W naszej sytuacji osiągnęliśmy to, tworząc rozwiązanie .NET i pisząc usługę. API usługi wygląda mniej więcej tak (w pseudokodzie): Funkcja GetQuote(String ID) Zwraca cytat Jak na razie dobrze. Teraz, gdy ta usługa jest wykorzystywana, aby zachować „oddzielenie”, tworzymy zasadniczo duplikat obiektu Quote i mapujemy z wersji QuoteService na QuoteService na wersję Quote dla konsumenta. W wielu przypadkach te klasy będą miały dokładnie takie same właściwości. Tak więc, jeśli usługa Wycena jest wykorzystywana przez 5 innych aplikacji, mielibyśmy 6 definicji tego, czym jest Wycena. Jeden dla każdego konsumenta i jeden dla usługi. To jest złe. Myślałem, że kod powinien być SUCHY, ale wygląda na to, że nasza metoda SOA zmusza nas do tworzenia wielu zduplikowanych definicji klas. Co robimy źle, czy może powielanie kodu jest tylko „złem koniecznym” SOA?


title: Dlaczego sprzężenia są przestarzałe dla bazy danych w pamięci?

text: Popraw mnie, jeśli nie rozumiem. Zobacz następujące zdanie: > Przepełnienie stosu skopiowało kluczową część projektu bazy danych Wikipedii. To > okazało się błędem, który będzie wymagał ogromnej i bolesnej > refaktoryzacji bazy danych do naprawienia. **Refaktoryzacja ma na celu uniknięcie nadmiernego łączenia w > wielu kluczowych zapytaniach.** To jest kluczowa lekcja z gigantycznej wieloterabajtowej tabeli > schematów (takich jak BigTable Google), które są całkowicie wolne od łączenia. **Jest to > istotne, ponieważ baza danych Stack Overflow jest prawie całkowicie w pamięci RAM >, a złączenia wciąż są zbyt wysokie.** 1 Właściwie staram się przejść od zainteresowania pojedynczą technologią, taką jak Asp.net MVC, do projektowania architektur . Czy możesz lepiej wyjaśnić cytowane zdanie? [1] http://highscalability.com/stack-overflow-architecture


title: Przepływ pracy w Git dla niepewnej przesłanki (oczekuje na decyzję)

text: Nie jestem do końca pewien, jak nazwać mój problem. Ale zacznę od tego, jak zwykle używałem git. Pracuję jako pojedynczy programista na jednym repozytorium git. Zwykle tworzę gałęzie funkcji z wzorca i scalam je z powrotem w wzorce, gdy funkcja jest gotowa. Kiedy w międzyczasie inna gałąź funkcji została połączona z masterem, przed scaleniem przestawiam drugą gałąź na master. To działało bardzo dobrze, do niedawna. Jedna zależność, którą mam w moim projekcie, wymaga aktualizacji. Ale jeszcze nie zdecydowano, jak ta aktualizacja zostanie zaimplementowana. Ale mogę całkiem prosto zasymulować nowe zachowanie. Więc rozgałęziłem się od mastera i zasymulowałem tę poprawkę. Tak więc, gdy aktualna poprawka jest dostępna i scalona z wzorcem, wszystkie powyższe zmiany mogą zostać ponownie oparte na wzorcu. Ale decyzja w sprawie tej poprawki jest wciąż w toku, a moje gałęzie się układają: * ee8d0ab (HEAD, featureTwo) * e659932 * 27986c0 (featureOne) * f0011e6 * d4187cf * 552e35a * 37d597f (simulatedFix) * e0eb3d0 (origin/master, ) * b06583c * d295b3e Czuję, że to nie jest dobre. Wydaje mi się, że buduję się głęboko. Wyobraź sobie, jak wyglądałoby to na featureTen lub featureTwenty. Jakie są możliwe wady tej metody? A jaki jest najlepszy sposób na poradzenie sobie z tą sytuacją?


title: Jak to się nazywa, gdy definiujesz stałe, które po prostu odwołują się do dużej przestrzeni nazw?

text: Używam JRuby. Mam wiele klas zaimplementowanych w Javie i chcę tworzyć obiekty z nich w moich skryptach Rubiego. Załóżmy, że mam klasę „Sprite” w Javie. W Ruby, aby się do niego odnieść, używam następującego: Java::ComMyWebsiteMyProjectName::Sprite Ponieważ Sprite jest zdefiniowany w pakiecie `com.myWebsite.myProjectName`. Teraz, żeby uprościć sprawę, lubię to zrobić: Sprite = Java::ComMyWebsiteMyProjectName::Sprite Który ustawia stałą `Sprite` na klasę `Sprite` zdefiniowaną w Javie. Teraz mój kod Rubiego może się do niego odwoływać, pisząc po prostu `Sprite`. Mam plik pełen takich oświadczeń. Coś takiego Nie jestem za bardzo obeznany z pojęciami programistycznymi. Mam problemy z nadaniem temu plikowi nazwy, bo nawet nie wiem, czy istnieje nazwa dla tego rodzaju rzeczy. **Czy ten rodzaj „praktyki” ma faktyczną nazwę?**


title: Jak włączasz GTD do swoich codziennych zadań programistycznych?

text: Metoda Davida Allena „Getting Things Done” wydaje się być bardzo użytecznym sposobem organizowania zadań i ich wykonywania. Czy ktoś tutaj używał GTD w swoich codziennych zadaniach programistycznych, a jeśli tak, to jak najlepiej się do tego zabrać?


title: Jak mogę codziennie śledzić wydajność programowania?

text: Jak mogę śledzić, że tworzę oprogramowanie mniej lub bardziej wydajne niż w poprzednich dniach?


title: Czy inteligentniejsze oprogramowanie jest koniecznie większe?

text: To trochę niejasne pytanie, więc z góry przepraszam. Kiedy oprogramowanie jest „mądrzejsze”, mam tendencję do interpretowania tego jako po prostu mówiącego, że obejmuje więcej przypadków brzegowych. Po pierwsze, czy to prawda? Zakładając, że tak jest, czy oznacza to, że oprogramowanie jest pełne instrukcji if/switch, aby upewnić się, że dane wejściowe są obsługiwane prawidłowo, dzięki czemu jest „inteligentniejsze”? To myślenie sprawia, że czuję, że kod skończy się nadęty i niechlujny. Wkraczam w punkt, w którym chcę poradzić sobie z tymi skrajnymi przypadkami, ale nie chcę nadużywać mojego kodu, po prostu przeoczając niektóre najlepsze praktyki. czego mi brakuje?


title: Czy można zrobić porządne filtrowanie spamu bez skanowania treści e-maili?

text: Nie mam dużej wiedzy na ten temat, ale jak wiem, serwery otrzymujące e-mail mają dwa źródła danych, aby sklasyfikować go jako SPAM lub nie. Treść wiadomości (temat + treść) i towarzyszące jej metadane (od kogo / do kogo / serwer, który wysłał wiadomość itp.). Wiem, że możesz wykonać podstawowe filtrowanie, umieszczając na czarnej liście e-maile i inne rodzaje metadanych. Ale czy można zrobić porządne filtrowanie spamu bez sprawdzania zawartości wiadomości? Zdefiniowanie „sprawdź zawartość” jako użycie dowolnej funkcji, która opiera się na danych znalezionych w treści/temacie wiadomości, aby sklasyfikować ją jako spam lub nie spam. **Edytuj** : Powód, dla którego o to pytam, to „przekrzywiona” kampania, w której Microsoft oskarża Google o skanowanie treści e-maili w celach reklamowych i myślę, że robią to samo w celu zapobiegania spamowi. Zapytałem ich, a oni powiedzieli: > Mamy narzędzia i system skonfigurowany do filtrowania wiadomości spamowych do iz > kont e-mail Outlook.com. Jednak ze względów bezpieczeństwa nie wolno nam ujawniać, jak działają te filtry antyspamowe. > > JA: Czy możesz mnie zapewnić, że żadna treść z mojego osobistego e-maila nie jest > w żaden sposób analizowana i porównywana z innymi danymi? > > ...W odpowiedzi na Twoje pytanie, jest tak, możemy Cię to zapewnić.


title: Wywiad: jak zadawać pytania związane z procesem rozwoju/kulturą

text: Właśnie obejrzałem prezentację Richa Hickeya na temat prostoty w InfoQ, w której omawia konstrukcje używane przez programistów do tworzenia artefaktów i jak te konstrukcje wprowadzają różne kompromisy, jeśli chodzi o uzyskiwanie prostych artefaktów. Myślę, że większość programistów zgodziłaby się z wieloma z tego, co mówi, ale ostatecznie nie wiem, ile sklepów deweloperskich aktywnie ćwiczy procesy rozwoju i używa narzędzi, które pozwalają im tworzyć proste artefakty. Jako kandydat na rozmowę kwalifikacyjną chciałbym pracować w sklepie programistycznym, w którym tworzenie prostych artefaktów jest najwyższym priorytetem. Jakie pytania mogę zadać, aby dowiedzieć się, czy miejsce, w którym przeprowadzam ze mną wywiad, jest rzeczywiście takim miejscem.


title: Najlepszy sposób na dostęp do sprzętu przez port szeregowy COM przez adapter USB

text: Otwieramy zupełnie nowy Oddział w naszej firmie. Zwykle zajmuję się tworzeniem interfejsów bazodanowych lub wewnętrznych aplikacji/narzędzi serwerowych/klienckich dla naszej firmy, ale nigdy nie musiałem robić nic ze sprzętem. **Szenario** Mój szef chce sprzedać urządzenie, które ma ekran dotykowy do konfiguracji wielu, wielu funkcji. Jednak konfiguracja urządzenia może być bardzo czasochłonna. Chce dać oprogramowanie za darmo dobremu klientowi i za niewielką opłatą „małym” klientom. Klient powinien mieć możliwość korzystania z oprogramowania tylko wtedy, gdy zarejestruje się w naszym systemie, aby nie mógł skopiować oprogramowania bez powiadomienia z naszej strony. **Wymagania** Urządzenie posiada wbudowany kabel USB. Jeśli podłączysz go do komputera, otworzy się nowy port szeregowy COM. Oprogramowanie ma następujące wymagania: * Konfiguracja różnych prezentów dla urządzenia * Odczytywanie i zapisywanie presetów na urządzeniu * Oprogramowanie odmówi uruchomienia, jeśli użytkownik nie ma rejestracji na naszym serwerze * Użytkownik może przechowywać swoje presety na naszym serwerze i podziel się nim z innymi klientami * Jedno ustawienie, kopiowane w kółko do wielu urządzeń Mój szef widział podobny system (mówił coś o pilotach logitech harmonicznych) i teraz muszę stworzyć architekturę. Strona serwera: serwer nie jest tego rodzaju problemem. Mamy wystarczająco dużo różnych maszyn, aby zaspokoić wszelkie potrzeby (IIS, LAMPP, Apache/Tomcat itp.). Mogę wziąć MSSQL lub MySQL DBase do przechowywania danych, to nie jest problem. Strona klienta: To dla mnie trudna część. Nigdy nie robiłem czegoś ze sprzętem. Mój szef zasugerował, że powinienem użyć Silverlight. Twierdziłem, że chcę to zrobić natywną aplikacją. Ale jaka jest najlepsza kombinacja? * Total Client-Side (C++, C# lub Java to języki, które mógłbym napisać) * Mixed Structure #1 Silverlight + Natywna aplikacja „sterownika” * Mieszana struktura #2 Java-Applet + Natywna aplikacja „Driver” * Tylko przeglądarka — Silverlight lub Aplet Java? * Wszelkie inne sugestie Urządzenie jest przeznaczone dla specjalnej grupy klientów, którzy są przeszkoleni w zakresie każdego zakupu, więc zagrożenia bezpieczeństwa, takie jak niebezpieczny kod lub niebezpieczne wtyczki przeglądarki, nie stanowią negatywnego argumentu na temat sprzedaży. Zrobiłem trochę badań na temat połączenia portu szeregowego COM z Silverlight i P/Invoke, ale nie chcę zaczynać bez dyskusji, jaki byłby najlepszy sposób.


title: Skąd mam wiedzieć, że nie naruszam patentu na oprogramowanie?

text: Obecnie używam w mojej aplikacji ekranu blokady podobnego do Androida (ten z dziewięcioma kropkami, z którymi musisz się połączyć, aby się zalogować). Boję się otrzymać maila od google z powodu pewnych patentów, których nie znałem. Czy ekran blokady Androida jest opatentowany, czy mogę go odbudować i używać w mojej aplikacji?


title: Jakie jest dobre słowo stop w indeksowaniu pełnego tekstu?

text: Po przejściu do dodatku D w Oracle Text Reference znajdują się listy odrzuconych słów używanych przez Oracle Text podczas indeksowania zawartości tabeli. Kiedy widzę listę angielską, nic mnie nie dziwi. Ale powód, dla którego francuska lista zawiera na przykład moyennant (po francusku „w świetle którego”) jest niejasny. Oracle prawdopodobnie przemyślało to więcej niż raz, zanim to włączyło. Jak utworzyłbyś listę odpowiednich odmowy, gdybyś zaprojektował indeksator?


title: Czy warstwa może składać się z wielu projektów / bibliotek dll?

text: Pracuję nad architekturą dla nowej aplikacji internetowej i jestem całkiem nowicjuszem, jeśli chodzi o architekturę. Przerabiałem przewodnik po architekturze aplikacji .NET, wydanie 2 i dużo się uczę. Zdecydowałem się na „standardową” architekturę trójwarstwową: warstwa prezentacji, warstwa biznesowa, warstwa danych. Będzie używał ASP.NET MVC i Entity Framework. Obecnie warstwa biznesowa zawiera logikę i podmioty gospodarcze (modele anemiczne). Planuję wykorzystać podmioty gospodarcze jako podmioty EF. Spowodowałoby to jednak zależność warstwy danych od warstwy biznesowej. Ten „problem” można rozwiązać, przenosząc jednostki biznesowe do własnego projektu i mając warstwy, które są zależne od jednostek biznesowych, odwołują się do tego projektu. 1. Czy to jest dobry/dobry sposób robienia rzeczy? 2. Czy / może / należy projekt podmiotów gospodarczych należy traktować jako część warstwy biznesowej? 3. Czy warstwa może składać się z wielu projektów, czyli warstwa działa tylko jako „kontener logiczny”? We wspomnianej książce mówią o tym, jak warstwa biznesowa może składać się z „Business Workflow”, „Business Components”, „Business Entities” i zakładam, że każdy z nich to osobny projekt (może nawet kilka projektów)?


title: Jakie są wszystkie składniki „aplikacji na Facebooku”?

text: Jestem programistą, który nigdy osobiście nie uczestniczył w mediach społecznościowych (w żadnej formie) z powodów całkowicie wykraczających poza zakres tego pytania. Jestem „poza siecią” (brak kont na Facebooku, Twitterze itp.). Obecnie tworzę aplikację internetową i chciałbym, aby aplikacja była obecna na Facebooku, a być może nawet „przeniosła” moją aplikację jako aplikację Facebooka. Moje _zrozumienie_ aplikacji Facebook jest takie, że są to zwykłe aplikacje internetowe, które umieszczają `<iframe>`d na stronie Facebooka. Aplikacja jest faktycznie hostowana na Twoim serwerze (nie na serwerach FB). Ale to dało mi do myślenia: 1. Czy aplikacje Facebooka nie mają „stron profilowych”? Czy programiści mogą coś zrobić, aby dostosować zachowanie swoich stron profilu? 2. Czy aplikacje mają możliwość wykonywania takich czynności jak motywy MySpace (tj. dostosowywania i interakcji ze stronami profilu użytkownika, grupami itp.)? 3. Czy aplikacje Facebook zyskują jakieś dodatkowe możliwości (wewnątrz Facebooka), których nie miałaby normalna aplikacja internetowa? Wydaje mi się, że gdyby cała aplikacja Facebooka była aplikacją internetową iframe, nadal musiałaby komunikować się z Facebookiem za pośrednictwem wielu interfejsów API, tak jak musiałaby to robić normalna aplikacja, prawda? 4. Jeśli nie można napisać aplikacji, która może dostosować interfejs użytkownika lub zachowanie profili użytkowników i innych stron, w jaki sposób gry takie jak „Farmville” współdziałają z profilami użytkowników, aby zobaczyć aktualizacje profili, takie jak „Jan Kowalski osiągnął poziom 2 z Farmville”? Zasadniczo pytam wszystkich zapracowanych w bojach twórców aplikacji na Facebooka, czy moje rozumienie Aplikacji Facebooka jest poprawne, lub czy brakuje mi tutaj czegoś ważnego. Rozumiem, że ze względów bezpieczeństwa (oczywiście) Facebook nie zezwala aplikacjom na dostosowywanie czegokolwiek poza ramką iframe, w której się znajduje. Więc jeśli chcę, aby moja aplikacja wyglądała tak, jakby „interakcja” z użytkownikami Facebooka, wygląda na to, że po prostu muszę publikować rzeczy w kanałach informacyjnych użytkowników, aby zachęcić ludzi do korzystania z mojej aplikacji (proszę mnie poprawić, jeśli się mylę!). Z góry dziękujemy za wszelkie poprawki, wyjaśnienia, porady lub sugestie!


title: Jak utrzymujesz entuzjazm podczas pracy nad przytłaczającym projektem?

text: Kiedy pracuję nad złożonym/dużym projektem programistycznym i czuję się przytłoczony lub zagubiony, często tracę motywację i po prostu nie mam energii, aby ponownie zagłębić się w problem, aby go rozwiązać. Po pewnym czasie może wrócę do tego i nabierze nowego entuzjazmu potrzebnego do ponownego przemyślenia problemu z pierwszych zasad. To zwykle działa, jeśli wrócę do pierwotnego problemu. Najczęściej odwracam się od innych projektów, a oryginalny program/problem drzemie na zawsze. Wiem, że jest to powszechna reakcja na złożoność lub przytłoczenie problemem i brak wiedzy, dokąd pójść dalej. Dość szybko kończy ci się para. Ale są rzeczy, na których mogę się skupić dla zabawy, i często podnieca mnie powrót do programowania, im bardziej złożony projekt, tym lepiej! Te rzeczy brzmiałyby niesamowicie dziwnie na każdej innej stronie, ale prawdopodobnie mniej tutaj. Mówię o takich rzeczach jak słuchanie podcastu Stack Overflow, czytanie starego artykułu Steve'a Yegge'a lub Paula Grahama, oglądanie odcinka Matt Chat, w którym przeprowadza on wywiad z jakimś programistą, który pracował nad starą grą na Atari 800, lub po prostu oglądanie film jak Wargames (choć nie wiele innych filmów przychodzi mi na myśl). Problem polega na tym, że czasami kończą mi się te pomysły, które odnawiają moje zainteresowanie informatyką, więc proszę o niektóre z twoich pomysłów. Może ograniczyć to do jednej na odpowiedź, aby ludzie mogli głosować na konkretne odpowiedzi/rekomendacje. Dzięki za wkład!


title: Amazon SOA: baza danych jako usługa

text: Jest interesujący wywiad z Wernerem Vogelsem, który częściowo dotyczy tego, jak Amazon realizuje architekturę zorientowaną na usługi: > Dla nas orientacja na usługi oznacza enkapsulację danych z logiką biznesową, która działa na danych, z jedynym dostępem poprzez opublikowany interfejs usługi. Nie jest dozwolony bezpośredni dostęp do bazy danych spoza usługi > i nie ma udostępniania danych między usługami. Nie rozumiem tego. Dlaczego muszą „zawijać” bazę danych w jakąś warstwę, jeśli już może być wykorzystana jako usługa przez inną usługę za pośrednictwem adapterów baz danych? Czy Amazon robi to tylko dlatego, że musi ujawnić bazę danych osobom trzecim, czy z powodu czegokolwiek innego? Dlaczego „nie zezwala się na bezpośredni dostęp do bazy danych”? Jakie są zalety takiej decyzji architektonicznej?


title: Aplikacja Ajax: używanie SOAP vs REST ?

text: Buduję ciężką aplikację ajax (po stronie klienta ściśle html/css/js), która będzie pobierać wszystkie dane i używać logiki biznesowej serwera za pośrednictwem usług internetowych. Wiem, że REST wydaje się być gorącym tematem, ale nie mogę znaleźć żadnych dobrych argumentów. Głównym argumentem wydaje się być jego „lekkość”. Moje dotychczasowe wrażenie jest takie, że usługi oparte na wsdl/soap są bardziej wyraziste i pozwalają na bardziej złożony transfer danych. Wygląda na to, że mydło byłoby bardziej przydatne w budowanej przeze mnie aplikacji, gdzie jedynym kodem zużywającym usługi będzie js pobrany w przeglądarce klienta. Z drugiej strony wydaje się, że REST ma mniejszą barierę wejścia, dlatego może być bardziej przydatny w przypadku usług takich jak Twitter, umożliwiając innym programistom łatwe korzystanie z tych usług. Ponadto wydaje się, że REST lepiej nadaje się do prostych transferów danych. Podsumowując, SOAP jest przydatny do złożonego przesyłania danych, a REST do prostego przesyłania danych. Obecnie mam wrażenie, że użycie SOAP byłoby najlepsze ze względu na złożoność komunikatów, ale być może są jeszcze inne czynniki. Co sądzisz o zaletach i wadach mydła/odpoczynku dla ciężkiej aplikacji internetowej ajax? **EDYTUJ:** Podczas gdy wsdl jest w formacie xml, dane, które przesyłam tam iz powrotem, są w rzeczywistości w formacie JSON. Po prostu wydaje się, że użycie wsdl/soap jest tutaj bardziej naturalne ze względu na charakter aplikacji. Czasowniki GET i POST mogą nie wystarczyć. Mógłbym powiedzieć coś takiego: processQueue lub executeTimer. Dlatego mój wniosek jest taki, że wsdl/soap byłby dobry do połączenia złożonej warstwy między dwiema aplikacjami (klientem i serwerem), podczas gdy REST byłby lepszy (ze względu na swoją prostotę), aby umożliwić wielu programistom programistycznym korzystanie z zasobów. Można więc powiedzieć, że wybór leży w dwóch liniach * Czy aplikacja będzie zorientowana na czasowniki (wykonywanie zadań: użyj mydła) czy na rzeczownikach (zużywa zasoby: użyj REST) * Czy interfejs API będzie używany przez kilku programistów czy wielu programistów (REST jest silny dla wielu programistów)? Ponieważ taka ciężka aplikacja ajaxowa potencjalnie używałaby wielu czasowników i byłaby używana tylko przez programistę klienta, wydaje się, że najlepiej będzie pasować mydło/wsdl.


title: Jaki ekran ma najlepszą jakość obrazu do czytania/programowania?

text: Zastanawiam się nad kupnem nowego laptopa i chociaż kupiłem swój oryginalny, nie zdając sobie sprawy z tego, że mogą być dostępne ekrany o różnej jakości, po zobaczeniu ekranu w netbooku mojej siostry zdałem sobie sprawę, że być może będę musiał uważać z moim następny zakup. To prawda, że nie potwierdziłem, że powodem, dla którego ekran mojej siostry wygląda tak, jak wygląda, jest sam ekran, a nie schemat kolorów/karta graficzna, ale bardzo niewiele wiem o różnych technologiach ekranu i o tym, jak różnią się one jakością obrazu, a zatem naprawdę nie mogę powiedzieć, czy zastanawianie się nad tym ma sens, czy nie. Pytam więc: czy powinienem się martwić o jakość ekranu? A jeśli tak, jakich technologii powinienem szukać? Czym się różnią i które są najlepsze? Jakie są różne elementy, które decydują o jakości ekranu i jakie statystyki powinienem wybrać w każdym elemencie? Dla przypomnienia, nie interesują mnie opinie na temat rozmiaru ekranu, ale jakość obrazu do dużo czytania/kodowania.


title: Jaka jest korzyść z używania ostrej architektury?

text: Pracuję w projekcie, który używa nhibernate jako orm. Czy jest dla mnie jakaś korzyść z używania ostrej architektury? jakie są te korzyści?


title: Dodatek, dodatek i wtyczka

text: Chociaż na pierwszy rzut oka słowa AddIn, AddOn i Plugin mają to samo znaczenie, istnieją między nimi pewne różnice. Czy ktoś mógłby mi wyjaśnić subtelne różnice między _AddIn_ , _AddOn_ i _Plugin_?


title: Jaki jest poprawny interfejs użytkownika, którego należy się nauczyć, aby tworzyć aplikacje dla systemu Windows Phone 8?

text: Jestem doświadczonym programistą Delphi 6 przechodzącym na programowanie w C#. Mój pierwszy projekt to biblioteka typu open source, która będzie miała minimalny interfejs użytkownika, ponieważ ma być używana jako składnik głównie na komputerach stacjonarnych z programem Visual Studio. Moim następnym projektem będzie aplikacja na telefon dla systemu Windows 8 i zamierzam, aby ta platforma była moim głównym celem dla przyszłego rozwoju C#, a nie pulpitu. Obawiam się, że marnuję jak najmniej czasu na naukę ram prezentacji, które przyniosą korzyści lub odciągną moją uwagę od pisania aplikacji na telefony z systemem Windows 8. Mnóstwo nazw frameworków, z którymi już się spotkałem, to WinForms, WPF (Windows Presentation Framework), Silverlight, Silverlight Mobile, Metro i mogą być inne. Biorąc pod uwagę mój cel nakreślony w pierwszym akapicie powyżej, jakie ramy należy przestudiować do opracowania aplikacji na telefony z systemem Windows 8? Czytałem o narzędziach Portable Library Tools w tym wątku Stack Overflow: http://stackoverflow.com/questions/5522355/windows-phone-7-wpf-sharing-a-codebase Ale odpowiedź Simona Guindona zdawała się wskazywać na to, że nie jest to najlepsze rozwiązanie do pisania konkurencyjnej aplikacji na telefon z systemem Windows 8.


title: Ile czasu spędzasz wykonując każdą z poniższych czynności

text: Ostatnio myślałem, że spędzam zbyt dużo czasu na SO i ogólnej nauce / nadążaniu za technologią, a nie na rzeczywistym kodowaniu. Więc moje pytanie brzmi: jaki stosunek czasu poświęcasz na: * Rzeczywiste kodowanie * Czytanie na dany temat, pogłębianie wiedzy, uczenie się nowych rzeczy


title: Czy istnieją dobre zasoby do refaktoryzacji istniejącego kodu C# w celu użycia LINQ przy jednoczesnym utrzymaniu testów?

text: Uczyłem się trochę LINQ i ćwiczeniem, które uznałem za przydatne, było przekształcenie mojego istniejącego kodu Project Euler C#, który zbudowałem przy użyciu Test Driven Development, i stopniowe przekonwertowanie go na LINQ. Zdaję sobie sprawę, że LINQ nie zawsze jest najlepszym rozwiązaniem dla wszystkich problemów Projektu Euler, ale nie chcę tutaj wchodzić w to. Zastanawiam się, czy możliwe jest zrefaktorowanie „tradycyjnego” kodu OO C# w celu użycia LINQ i składni programowania funkcjonalnego przy jednoczesnym zachowaniu wszystkich testów. Nie mogę znaleźć sposobu na wykonanie drobnych kroków, do których jestem przyzwyczajony, używając TDD podczas konwersji na LINQ, a to jest dla mnie przeszkoda. Wydaje mi się, że muszę dokonać dużych zmian, aby wymyślić jedną funkcję, którą następnie zastępuję całe fragmenty mojego kodu. Zdaję sobie sprawę, że mógłbym napisać to od podstaw w LINQ, ale w prawdziwym świecie chciałbym móc zastąpić części mojego istniejącego kodu C#, aby w razie potrzeby skorzystać z LINQ. Czy ktoś odniósł sukces z takim podejściem? Jakie zasoby okazały się przydatne do refaktoryzacji istniejącego kodu C# w celu użycia LINQ podczas korzystania z podejścia Test Driven Development?


title: Problem z próbką ramienia robota w „Podręczniku projektowania algorytmów” firmy Skiena wydaje mi się niepoprawny

text: Czytam _Algorithm Design Manual_ firmy Skiena i pojawia się problem na stronie 5, „Robot Tour Optimization”, gdzie opisuje on przykładowy problem: „Załóżmy, że dostaniemy ramię robota wyposażone w narzędzie, powiedzmy lutownicę. W produkcji płytek drukowanych wszystkie chipy i inne elementy muszą być przymocowane do podłoża. Dokładniej, każdy chip ma zestaw punktów styku, które należy przylutować do płytki. Aby zaprogramować ramię robota do tego zadania, musimy najpierw skonstruować uporządkowanie punktów styku tak, aby robot odwiedził pierwszy punkt styku, drugi itd..." "Najpierw musimy skonstruować kolejność" - wydaje mi się to dziwne. Ponieważ, cóż, każdy chip ma określoną liczbę pinów i są one ponumerowane, a ich pozycja jest udokumentowana, spójrz tutaj: ![tutaj wpisz opis obrazka](http://i.stack.imgur.com/Q0MWK.jpg) oznacza, że chip nie ma kompletu pinów, ma uporządkowaną listę pinów, ok, nie ma, ale ma bardzo konkretne wymiary i określoną kolejność pinów z każdej strony, dzięki czemu można określić ich dokładną pozycję (i kolejność) łatwo obliczyć. Może bez związku, ale prawdopodobnie IRL płytka porusza się na jakimś zacisku w wymiarze X, Y a lutownica idzie tylko w górę iw dół. Najprostszym problemem, jaki mogę podać jako przykład trasy Robot Optimization, jest kurier pizzy, który jeździ samochodem i musi odwiedzić wszystkich swoich klientów (załóżmy, że ruch jest bliski zera) i wraca do restauracji z jak najmniejszym zużyciem benzyny. Potrzebuje więc narzędzia (nawigatora samochodowego), które rozwiąże za niego ten problem. A ta aplikacja nawigacyjna musi znaleźć optymalną trasę - więc ilustruje problem. Czy mam rację, że oryginalna ilustracja problemu z ramieniem robota jest błędna?


title: Dlaczego zawsze jest to „jakiego języka mam się później nauczyć” zamiast „jakim projektem mam się zająć w następnej kolejności”?

text: Dlaczego początkujący programiści (tacy jak ja) zawsze pytają o następny język, którego powinni się nauczyć, zamiast pytać o kolejny projekt do rozwiązania? Dlaczego Eric Raymond w części „Naucz się programować” swojego eseju „Jak zostać hakerem” omówił kolejność, w jakiej należy uczyć się języków (w przeciwieństwie do kolejności, w jakiej należy realizować projekty). Czy początkujący stolarze pytają: „Wiem, jak posługiwać się młotkiem… czy powinienem nauczyć się w następnej kolejności posługiwać się piłą lub poziomicą?” Pytam, ponieważ stwierdzam, że prawie każdy znaczący projekt, którym jestem zainteresowany (np. aplikacja internetowa, zestaw narzędzi do analizy pokera) wymaga, abym nauczył się **tylko tyle** z **wielu języków** (Python, C, HTML, CSS, Javascript, SQL) oraz frameworki/biblioteki (wxPython, tkinter, Django) do ich implementacji. Dzięki, Mike


title: Czy nadmiarowe sprawdzanie stanu jest złym stylem?

text: Często dochodzę do pozycji w kodzie, w których ciągle sprawdzam określony warunek. Chcę podać mały przykład: załóżmy, że istnieje plik tekstowy, który zawiera wiersze zaczynające się na „a”, wiersze zaczynające się na „b” i inne wiersze, a ja właściwie chcę pracować tylko z pierwszymi dwoma rodzajami wierszy. Mój kod wyglądałby mniej więcej tak (przy użyciu Pythona, ale przeczytaj go jako pseudokod): # ... clear_lines() # usuwa wszystkie inne linie niż te zaczynające się od "a" lub "b" dla linii w liniach: if (linia. startWith("a")): # wykonaj rzeczy elif (line.startsWith("b")): # magiczne else: # to jeszcze jest zbędne, już upewniłem się, że nie ma innego przypadku # używając clear_lines() # ... Możesz sobie wyobrazić, że sprawdzę ten warunek nie tylko tutaj, ale może także w innych funkcjach i tak dalej. Czy myślisz o tym jako o szumie, czy dodaje to jakiejś wartości do mojego kodu?


title: Narzędzia JavaScript do obsługi oddziałów

text: Szukam narzędzi, które pomogą mi pisać przypadki testowe obejmujące wszystkie ścieżki przez funkcję w JavaScript. Idealnie chciałbym coś, co wyrzuci listę kombinacji wartości parametrów i właściwości, które powinny być testowane. Jednak, gdyby narzędzie po prostu podało mi, jakie parametry i właściwości mają wpływ na funkcję, byłoby to również bardzo przydatne. Dziękuję! edit: Nie jestem pewien, czy "zasięg oddziału" jest właściwym terminem dla tego, co opisuję. Jeśli „eksploracja kodu” jest lepszym terminem (lub cokolwiek innego), dodaj komentarz.


title: Czy istnieje język oferujący makra podobne do LISP o bardziej złożonej składni?

text: Makra LISP-a są niezwykle potężnymi konstrukcjami, a niemożność introspekcji i modyfikacji samego programu poza poziomem sygnatury metody zawsze wydawała mi się ograniczeniem. Jednak preferuję „złożoną” składnię, ponieważ wydaje się być bliższa językowi naturalnemu. **Do tej pory nie udało mi się znaleźć języka, który łączyłby potężny mechanizm makro, taki jak LISP, z naturalnie wyglądającą składnią** (1). Czy ktoś wie o takim języku? Przypis: 1. Uważam, że Python ma naturalnie wyglądającą składnię, ponieważ pozwala na konstrukcje takie jak: `if 0 < a < 5 i b na liście`. Unikanie nawiasów klamrowych w blokach strukturalnych jest jednak w tym przypadku nieistotne.


title: Jak radzić sobie z twórcami open-source o dobrych intencjach?

text: Jeśli programista skontaktuje się z Tobą i poprosi o udział w Twoim projekcie, jak sobie z tym poradzisz? * Nie wiesz, czy ten facet jest dobry. Może sprawi więcej kłopotów, niż jest wart. * Być może próbuje dołączyć swoje imię do udanego projektu tylko dla uznania. * Być może próbuje poprowadzić projekt w kierunku, którego tak naprawdę nie chcesz, dodając funkcje, które Twoim zdaniem nie są warte dodatkowej złożoności. * Albo może być bardzo przydatnym współpracownikiem. Po prostu nie wiesz. Jak radzisz sobie z takimi prośbami od osób, których nie znasz (w szczególności na GitHubie, jeśli to ma jakiekolwiek znaczenie)? Jaka jest tutaj etykieta?


title: Jak sprzedać procedury logistyczne, które wymagają mniej czasu na wykonanie, ale więcej finezji?

text: Pracuję z grupą, której częścią obowiązków jest zarządzanie pewnym zestawem plików konfiguracyjnych, które oczywiście mają ten sam szkielet/strukturę w różnych środowiskach, ale różne wartości (takie jak serwer, użytkownik, to ustawienie, to ustawienie itp.) . Całkiem klasyczny scenariusz... Problem polega na tym, że wszyscy po prostu modyfikują ostateczne, specyficzne dla środowiska pliki i w zasadzie powtarzają pracę dla każdego środowiska. Osobiście czuję się obrażony, że muszę wykonywać powtarzalne, przyziemne zadania w dzisiejszych czasach, kiedy mamy technologie do automatyzacji tego wszystkiego. Opracowałem więc bardzo prostą procedurę abstrahowania plików do szablonów, zatykania wartości specyficznych dla środowiska parametrami, a następnie napisał prosty skrypt Perla, który, mając szablon i macierz środowiska z wartościami specyficznymi dla środowiska dla każdego parametru, tworzy ostateczny plik . Nie jest to więc nic specjalnego, nowatorskiego ani rewolucyjnego -- jestem prawie pewien, że 20 lat temu wydajne miejsca tak zrobiły swoje CM. Wymaga to jednak wprowadzania zmian na poziomie szablonu, a następnie rozpowszechniania ich w różnych środowiskach za pomocą skryptu i niewprowadzania zmian w ostatecznych plikach specyficznych dla środowiska. W tym miejscu spotykam się z urazą, bo czują się „komfortowo” robiąc to na swój stary, manualny, powtarzający się sposób pracy. Osobiście nie mam problemu z ich ciężką pracą niż mądrą, ale problem polega na tym, że kiedy muszę budować na cudzych zmianach, muszę scalić ich zmiany do mojego szablonu z określonego pliku, co wymaga czasu i jest wyczerpujący. Więc moje pytanie brzmi: jak sprzedać moją metodę, która sprawia, że jest ona o wiele szybsza w środowisku, które jest niechętne zmianom i gdzie większość rzeczy musi być załatwiona na poziomie najmniej kompetentnego członka zespołu?


title: Dlaczego wsparcie dla Windows XP zostało porzucone w PHP 5.5?

text: W informacjach o wydaniu PHP 5.5.0 ogłoszono, że Windows XP i Windows 2003 nie są już wspierane: > Odrzuć wsparcie dla Windows XP i 2003. (Pierre) Dlaczego tak jest? Wiele osób w różnych firmach tworzy aplikacje pod Windows XP. Czy ktoś może mi powiedzieć, jaki jest sens rezygnacji z obsługi systemów Windows XP i 2003?


title: Szukasz inspiracji do projektowania aplikacji internetowych dla przedsiębiorstw

text: Sprawdziłem wiele stron internetowych, aby zainspirować się tym, jak powinna wyglądać poważna aplikacja internetowa dla przedsiębiorstw. Ale całość, którą widziałem, była przeznaczona do użytku przez pojedynczych użytkowników, a nie poważnych użytkowników korporacyjnych. Projekty, które widziałem, były w większości kolorowe i wyglądały, jakby były tworzone przez mały zespół młodych, pełnych pasji programistów. Ale to, czego szukam, to prezentacje projektów poważnych aplikacji internetowych (np. aplikacji internetowych tworzonych przez duże korporacje), które są opracowywane do użytku przez dużą liczbę zastosowań korporacyjnych. Czy możesz zasugerować mi źródła tego rodzaju inspiracji?


title: Kto jest ojcem CIL?

text: ...wcześniej znany jako MSIL, proste pytanie, powszechnie wiadomo, że Anders Hejlsberg jest ojcem C#, ale czy istnieje „ojciec CIL”?


title: aby wiedzieć, ilu odwiedzających odwiedza moją witrynę, muszę koniecznie umieścić jakiś kod śledzący na samej stronie?

text: Czy to prawda, że aby wiedzieć, ilu odwiedzających odwiedza moją witrynę, jakiś kod śledzący musiał zostać umieszczony na tej stronie i nie ma innego sposobu na obejście tego? Nawet jeśli pośrednio używamy czegoś takiego jak Google Analytics, umieszczają one również jakiś rodzaj skryptu śledzącego na naszych stronach, prawda? Czy to prawda, że nawet jeśli na mojej stronie nie ma skryptu śledzącego, ktoś (jakiś organ?) będzie miał dostęp do tych informacji?


title: Czy tworzenie instancji z zapytania SQL jest złą praktyką?

text: Badam sposoby tworzenia warstwy OO-model/repozytorium przy użyciu PDO PHP. Mój pomysł polegał na stworzeniu klas modeli reprezentujących obiekt domeny i klasę repozytorium dla każdego modelu, który odpowiada za: * Zapisywanie do bazy danych poprzez pobranie modelu jako argumentu i mapowanie właściwości obiektów na WARTOŚCI zapytania SQL. * Odczyt z bazy danych poprzez zwrócenie egzemplarza modelu w podobny sposób. Zainspirował mnie kurs OOP, w którym używaliśmy .NET, EF i LINQ dla laboratoriów. Zadałem pytanie na SA o to, jak można to osiągnąć na SA. Zapaliłem się, bo to podobno zła praktyka. Nie rozumiem, dlaczego tak jest.


title: Zdrap witrynę intranetową bez serwera WWW

text: Próbuję odbudować proste narzędzie czasu c#, które wyświetla pewne statystyki dotyczące czasu pracy w sieci, jednak nie mam dostępu do serwera, więc nie mogę użyć kodu serwera, takiego jak PHP, co zrobiłbym, gdybym mógł a to zadanie byłoby błahostką. Informacje o pracy pracownika są przechowywane w witrynie intranetowej, do której narzędzie C# może uzyskać dostęp, wyszukując tę witrynę i pobierając to, czego potrzebowało. Jak mogę to zrobić (zdrapać witrynę intranetową) bez użycia kodu serwera i tylko rzeczy po stronie klienta, takich jak HTML, JavaScrit/jQuery? **Edycja:** Zapomniałem wspomnieć, że komputery z systemem Windows nie mają zainstalowanego .net


title: Jak efektywnie czytać duże pliki XML

text: Mam duży plik XML (około 75 000 wierszy), z którego muszę zbudować katalog (domy). Budowanie list działa dobrze, ale teraz mam problem. Katalog powinien zawierać szczegółową stronę prezentacyjną jednego domu. Jeden dom (`<item id="123">`) ma około 800-1200 linii danych, w zależności od typu domu. **Jaki jest najlepszy sposób, jeśli chodzi o przyspieszenie skryptu i zapisanie linijek kodu, aby odczytać te dane i je zaprezentować?** Niektóre domy, na przykład, mają saunę, a kiedy te dane są w pliku XML , strona prezentacji powinna zawierać sekcję sauna. Próbowałem wcześniej odczytać całą zawartość XML za pomocą funkcji rekurencyjnej do tablic i z dużą ilością "foreache" (maksymalna głębokość dzieci to trzy) za pomocą SimpleXML, ale było to naprawdę brzydko wolne, a rekursja w ogóle nie działała , ponieważ mój komputer nie był w stanie obsłużyć tak dużej ilości danych wejściowych. **Czy istnieje inny sposób budowania tych danych poza zapytaniem każdej zmiennej za pomocą `if`?**


title: Przydatne skrypty dla CM?

text: Będę tworzyć zdalny zespół i chcę mieć możliwość korzystania ze skryptów (lub czegoś innego), aby _upewnić się_, że kod ludzi jest sprawdzany każdej nocy. Obecnie używam niektórych skryptów BASH, które są trochę niepewne i nie można ich łatwo dostosować. Czy ktoś ma do tego przydatne narzędzia, wskazówki lub zasoby? Czy robią to jakieś pułapki, których nie widzę, czy mogę zrobić to lepiej w inny sposób? (przesyłane do superużytkownika)


title: Czy biblioteki i frameworki bardziej się obracają po stronie GPL lub MIT?

text: Podoba mi się licencja GPL, ale projekt, nad którym pracuję, jest projektem bardziej ogólnym, który będzie używany w innych programach. Nie działa niezależnie jak CMS czy aplikacja. Więc rozglądam się po innych projektach, aby zobaczyć, co zrobili. * JQuery ma interesującą licencję MIT/GPL * Framework Zend ma nową licencję BSD * Framework Symfony ma licencję MIT Jako programiści, czy istnieje ugruntowana preferencja, której oczekujemy od bibliotek. Rzadko mnie to obchodziło, ponieważ nigdy nie tworzę aplikacji, które były sprzedawane lub dystrybuowane, co wyeliminowało możliwość konfliktu z licencją biblioteki, której używam, ale chcę wiedzieć, co myślą inni. Czy unikniesz używania biblioteki lub frameworka, jeśli jest to GPL? Jestem trochę rozdarty. Chciałbym używać GPL i jako jedynej licencji (w przeciwieństwie na przykład do JQuery), ale obawiam się, że odstraszy to programistów, którzy chcą używać biblioteki do budowania kodu dystrybucyjnego. Inną rzeczą jest to, że widzę, że wiele bibliotek to frameworki wydanych jako MIT, ale uważam, że licencja MIT jest, no cóż, trochę zbyt „luźna” jak na mój gust.


title: Czy czytasz błędy kompilacji C lub C++ po pierwszym?

text: Nigdy nie rozumiałem, dlaczego kompilatory C i C++ próbują naprawić błędy i kontynuować parsowanie. Prawie zawsze pierwszy błąd generuje strumień fałszywych błędów, które znikają, gdy tylko pierwszy zostanie naprawiony. Po kilku latach doświadczenia po prostu przestałem patrzeć na jakikolwiek błąd, z wyjątkiem pierwszego z każdego pliku. Ponownie uruchamiam kompilator i robię to jeszcze raz, aż nie będzie więcej błędów. Czy to powszechna praktyka?


title: Bezpieczeństwo przeglądarki i płatności

text: Odkryłem wiele postów na blogu, w których twierdzi się, że szyfrowanie JS jest niebezpieczne, oto kilka szczegółowych: http://www.matasano.com/articles/javascript-cryptography/ http://rdist.root.org/2010 /11/29/final-post-on-javascript-crypto/ Moje pytanie brzmi: jeśli przeglądarki naprawdę są z natury niebezpieczne, to, co za tym idzie, wprowadzanie w przeglądarce jakichkolwiek informacji związanych z PCI jest niebezpieczne – niezależnie od szyfrowania JS, HTTPS lub jakieś inne środki bezpieczeństwa? Co by sugerowało, że złośliwe strony powinny w dużej mierze wykorzystać ten fakt, prawda? Czy ktoś mógłby podać konkretne przykłady, w których luki w zabezpieczeniach przeglądarki były wykorzystywane do kradzieży **ogromnych** ilości informacji o PCI/PII (przez „ogromne” mam na myśli porównywalną z ilością, którą można uzyskać poprzez włamanie się do serwerów hostingowych/DB)? Poza tym, pomimo wszystkich tych postów opisujących luki w zabezpieczeniach, istnieje coraz więcej usług płatniczych i bibliotek kryptograficznych JS – czy to oznacza, że większość firm/społeczności: 1. nie jest świadoma luk w przeglądarkach? 2. po prostu lekceważą podstawowe problemy i wskakują na modę, aby zarobić trochę ciasta? 3. zważyłeś (prawdopodobnie niskie) prawdopodobieństwo, że ktoś będzie miał problem z wykorzystaniem przeglądarek i zdecydowałeś, że nadal warto przechwytywać płatności za pośrednictwem przeglądarek? EDYCJA Korzystanie z SSL/TLS rozwiązuje niektóre problemy, ale na pewno nie wszystkie. Oto kilka godnych uwagi problemów, które wykraczają poza obszar, który może rozwiązać SSL/TLS (cytowane bezpośrednio z wpisu na blogu Matasano): > Rozpowszechnienie kodu kontrolowanego treścią. > > * Mamy na myśli to, że strony są zbudowane z wielu żądań, niektóre z nich bezpośrednio przekazują JavaScript, a niektóre wpływają na JavaScript za pomocą atrybutów tagów DOM (takich jak "onmouseover"). > > > Plastyczność środowiska uruchomieniowego Javascript. > > * Nie ma niezawodnego sposobu na zweryfikowanie przez jakikolwiek fragment kodu JavaScript jego środowiska wykonawczego. Kod kryptograficzny Javascript nie może zapytać: „czy naprawdę mam do czynienia z generatorem liczb losowych, czy z jakimś faksem dostarczonym przez atakującego?” I z pewnością nie może twierdzić, że „nikomu nie wolno > robić nic z tym sekretem kryptograficznym, z wyjątkiem sposobów, które ja, autor, > aprobuję”. Są to dwie właściwości, które często są udostępniane w innych > środowiskach używających krypto i są niemożliwe w JavaScript. > > > Czego jeszcze brakuje w środowisku wykonawczym Javascript dla implementatorów kryptowalut? > > * Dwie duże z nich to bezpieczne wymazywanie (Javascript jest zwykle zbieranym śmieciem, > więc sekrety czają się w pamięci potencjalnie długo po tym, jak są potrzebne) oraz > funkcje o znanej charakterystyce czasowej. Prawdziwe biblioteki kryptograficzne są > dokładnie badane i sprawdzane w celu wyeliminowania ścieżek kodu zależnych od danych --- > upewnienie się, że przetworzenie jednego wiadra bitów o podobnej wielkości zajmuje tyle czasu, co w przypadku > każdego innego --- ponieważ bez tej weryfikacji napastnicy mogą wyodrębnić krypto > klucze od rozrządu. > Ponownie, moim głównym celem jest to, że technicznie rzecz biorąc, gdy numer karty kredytowej (lub jakaś inna ważna informacja) zostanie wprowadzony do pola tekstowego strony, istnieje szansa, że został on skompromitowany - a przy tym łatwiejszy do skompromitowania jeśli został wprowadzony w aplikacji natywnej.


title: Jak nazwać parametr nazwy pliku, aby był jasny, że powinien zawierać pełną ścieżkę?

text: Szukam istotnego nazewnictwa parametru string `filename` na liście parametrów używanej w różnych metodach, w których oczekiwana jest **nazwa pliku z pełną ścieżką**. W wielu przypadkach ścieżka UNC może być faktycznie podana jako pełna ścieżka, ponieważ wiele bibliotek obsługuje ją natywnie. Zwykle nazywam ten parametr po prostu `filename`, ale może to być mylące na dwa sposoby: * Początkujący myślą, że jest to tylko nazwa pliku – bez ścieżki. * Jeśli istnieje potrzeba podzielenia wartości na ścieżkę i nazwę pliku, termin **filename** lepiej trzyma się części nazwy pliku bez ścieżki, która pojawiła się po podziale. W każdym razie nie jest łatwo nadać tej drugiej części lepszą nazwę niż `filename`. Alternatywa dzielenia `filename` na `path` i `filename Only` wygląda dla mnie dziwnie. Myślę, że lepiej byłoby użyć wyraźnie rozróżnialnego terminu dla nazwy pliku ze ścieżką niż pożyczanie **nazwapliku**, który już ma silniejsze znaczenie dla czegoś innego. Myślałem o terminach `absoluteFilePath` lub `fullyQualifiedFilename`, aby stały się nazwami argumentów. Może są dobre i potrzebuję tylko zachęty, aby zacząć z nich korzystać, ale chciałbym zrozumieć Twoje najlepsze praktyki. **EDYTUJ:** Nadal chciałbym trzymać się oficjalnych konwencji nazewnictwa i wielkich liter VB.NET, więc jedyne, czego potrzebuję, aby wyostrzyć, to jasne, samodokumentujące się sformułowanie tego terminu. (Nie czy powinienem używać notacji węgierskiej, czy nie – nie mogę.)


title: Wiązania Java GNOME, czy to dobry pomysł?

text: Co sądzisz o wiązaniach Java GNOME i byłem zaskoczony, gdy dowiedziałem się, że najnowsza wersja wiązań została wydana w tym miesiącu i są wspierane przez firmę, która ich używa, co oznacza, że w projekcie jest duża aktywność, i że nie zniknie w najbliższym czasie Czy to będzie druga szansa dla Javy na desktopie, skoro GTK+ jest cross-platformowy jak swing, ale mniej rozdęty i bardziej responsywny. Czy powinienem się uczyć, jak tworzyć aplikacje przy jego użyciu? czy to nie jest warte czasu?


title: Obecnie w Grad School, swędzenie, aby wrócić do miksu

text: Byłem w branży oprogramowania przez 3 lata, zanim wróciłem i zacząłem zdobywać mistrzów. Mam za sobą rok studiów podyplomowych, został mi jeszcze rok i 4.0 GPA. Naprawdę nie mogę się doczekać powrotu do pracy w pełnym wymiarze czasu pracy programisty. Zajmuję się badaniami w obszarze, który mnie interesuje, grafiką komputerową, ale wiedz, że prawdopodobnie nie będę pracował w przemyśle, korzystając z tego, czego się nauczyłem. Myślę, że główną korzyścią z ukończenia studiów jest uzupełnienie CV i nauczenie się pewnych rzeczy, których nie nauczyłbym się w inny sposób. Czy byłoby głupio, gdybym rzucił szkołę i wrócił do pracy? Czy studia podyplomowe to zła decyzja dla zapalonych programistów (ja uważam się za jedną z nich)?


title: Jak sprawdzić błędy na komputerach klienta?

text: Wygląda na to, że istnieje mnóstwo metod łączenia się i sprawdzania, co się dzieje na komputerze klienta. Ale wydaje się, że sprowadzają się do zaledwie 2. Wybieranie i sprawdzanie za pomocą VNC i pulpitu zdalnego. VNC wydaje się beznadziejny z systemami operacyjnymi z większą ilością grafiki i czasami prośba o dostęp do serwera terminalowego jest zbyt duża (szczególnie, gdy klient go nie posiada). Jakie są inne metody łączenia się z klientami w celu diagnozowania i naprawiania błędów, które mogą odtworzyć, ale niekoniecznie muszą być w stanie odpowiednio opisać przez telefon. Doceniane są alternatywy dla VNC i Remote Desktop, ale naprawdę szukamy lepszego sposobu na zrobienie tego niż tylko połączenie się i sprawdzenie - lub najskuteczniejszy sposób korzystania z VNc i Remote Desktop.


title: Dostawca stanu sesji i operacje atomowe

text: Myślałem o tym i to mnie oszałamia... Jak dostawca stanu sesji właściwie działa wewnętrznie? Chodzi mi o to, że próbowałem napisać niestandardowego dostawcę stanów sesji w oparciu o Azure Tables lub Blobs, ale szybko zdałem sobie sprawę, że ponieważ nie ma możliwości zapewnienia atomowej operacji lub ustanowienia blokady, warunki wyścigu są odpowiednie, gdy kilka serwerów WWW operacji na tej udostępnionej informacji. Wiem, że istnieje SQL Server Session State Provider (SQLS-SSP) i ludzie są z niego zadowoleni, więc sądzę, że używa pewnego rodzaju poziomu izolacji transakcji, aby osiągnąć pewien stopień współbieżnego bezpieczeństwa, na przykład sprawdzanie danych to lock (prosta kolumna), blokując go, jeśli nie, i zwracający dane w atomowej operacji, ale czy tak jest? co się stanie, jeśli dane są zablokowane? czy zwraca błąd? zablokować na chwilę połączenie? zwraca go w trybie tylko do odczytu? Paradygmaty przetwarzania w chmurze mogą być jakoś nowe, ale farmy internetowe są tu już od jakiegoś czasu, więc jako że jestem w tym całkiem nowy... czy polecacie jakieś dobre wykłady na ten temat? Dziękuję.


title: Kod DRY, testy DRY?

text: W pewnym momencie musiałem stworzyć jakąś klasę "Class1" i ta klasa potrzebuje metody "method". Mam więc następujące: Class1MethodTest: W sumie N testów, które sprawdzają zachowanie Class1.method Metoda Class1: Pełna implementacja metody Ale trochę później potrzebuję innej klasy „Class2”, aby mieć całkowicie podobną metodę „method ”. Teraz mam kilka podejść: ## Podejście 1 Class1MethodTest: W sumie N testów Metoda Class1: Pełna implementacja Class2MethodTest: Kolejny zestaw identycznych testów Metoda Class2: Kolejna pełna implementacja Plusy: Głupie proste Wady: nie DRY Przynajmniej to jest pierwsza próba i Może nawet napiszę to przed wykonaniem jakiejkolwiek refaktoryzacji, prawda? ## Podejście 2: _hidden_private_implementation_function: Pełna implementacja wymaganej metody Class1MethodTest: W sumie N testów Metoda Class1: Wywołaj hidden_private_whatever Class2MethodTest: Kolejny zestaw identycznych testów Metoda Class2: Wywołaj także hidden_private_stuff Plusy: Kod DRY, wciąż prosty Wady: Testy są głupie t DRY, „Interfejs testowy, a nie implementacja” ## Podejście 3: MethodTest: W sumie N testów TotallyPublicCommonMethod: Pełna implementacja wymaganej metody Class1MethodTest: Tylko jeden test, aby sprawdzić, czy metoda Class1 wywołuje publiczną metodę Class1: Wywołaj publiczną wspólną metodę Class2MethodTest: Jeszcze jeden test Metoda Class2: Wywołaj również wspólną metodę Plusy: DRY, głupie proste Minusy: .. jakiekolwiek inne niż „Testujesz implementację, a nie interfejs”? ## Podejście 4: Tutaj robi się trochę egzotycznie. Python pozwala mi bezpośrednio wysuszyć „Podejście 3”: _hidden_private_implementation_function: Pełna implementacja wymaganej metody makeTestForClass(cls): zwróć w sumie N testów dla klasy cls Class1MethodTest = makeTestForClass(Class1) Metoda Class1: Wywołaj hidden_private_cokolwiek Class2MethodTest(Class = makeTestFor) Metoda Class2: Wywołaj także hidden_private_stuff Plusy: DRY, „Nie testuj implementacji” Wady: Nie takie proste. Zbyt trudne do zmodyfikowania, jeśli kiedykolwiek zdecyduję się zmienić coś w Class1.method, ale nie w Class2.method. W tej chwili mam trochę kodu, który wygląda jak „Podejście 1” i zastanawiam się, w którą stronę powinienem pójść dalej, aby wszystko było czystsze i lepsze.


title: Jaki jest najlepszy sposób na wdrożenie komercyjnych programów w systemie Linux?

text: Ze względu na różnorodność dystrybucji Linuksa dość często zdarza się, że programy są rozprowadzane w formacie źródłowym wraz ze skryptami, które pomagają w konfiguracji, wykonaniu i wykonaniu sekwencji instalacji. Jednak w przypadku programów komercyjnych dystrybucja źródła jest zwykle po prostu niemożliwa. Więc jeśli ktoś chce sprzedać program i wdrożyć go w środowisku Linux, co powinien zrobić? Jak to się zwykle robi?


title: Jak zaplanować rozwój aplikacji wieloplatformowych

text: We wcześniejszych dniach programowania używałem do nauki języka Visual Basic. Nauczył mnie wielu pojęć i udało mi się zrobić kilka fajnych programów (w każdym razie moim zdaniem...). Rozszerzyłem swój horyzont o podstawowe C/C++, PHP i MySQL. Jeden z moich ulubionych projektów, chcę przekształcić w wieloplatformową (dla x86/x64) aplikację okienkową i udostępnić ją jako open source. Zdecydowałem się już na licencję, ale chcę wiedzieć, zanim zacznę programować w nowym języku, w jaki sposób mogę wybrać język, którego będę używać, czyli wieloplatformowy i pozwalający na tworzenie okien? Nie chcę korzystać z technologii webowych, ponieważ aplikacja będzie działać na wielu lokalnych plikach na raz. To **nie** pytanie o to, która technologia jest lepsza, ale o to, która z nich byłaby przydatna w tym projekcie. Wiem, że coś musi być możliwe, ponieważ istnieją aplikacje działające jako pliki binarne Mac OSX, Windows, a nawet Linux, wszystkie w systemie Windows (np. VLC Media Player, Firefox (Ice Wheazel) itp.)


title: Implementacja klasyfikacji tekstu

text: Próbowałem zaimplementować system klasyfikacji tekstu. Musi odczytać plik tekstowy i wyodrębnić słowa i częstotliwość słów. Do tej pory planowałem przeanalizować słowa, umieścić je w słowniku i zapisać w pliku XML. Używam C++/CLI. Czy to dobra implementacja, czy jest prostsza lub lepsza implementacja? Może być powiązane pytanie (niektóre implementacje kodu): http://stackoverflow.com/questions/10631309/save-dictionary-to-xml-file


title: Co zrobić, gdy jesteś zmuszony do kodowania według złych standardów kodowania (projektowania)

text: Nie chodzi tu o typowe konwencje nazewnictwa, gdzie umieszczać komentarze, czy powinniśmy używać regionów itp. Tu chodzi o standard kodowania, który omawia szczegóły dotyczące tego, jak programista powinien projektować swoje aplikacje. Rzeczy takie jak: (w aplikacji .NET, a nie w dokładnych sformułowaniach) * Zrób jak najmniej klas możliwych * Klasy powinny robić tyle, ile potrafią ich odpowiedniki w świecie rzeczywistym * Modyfikacja jest lepsza niż rozszerzenie * Jedna biblioteka DLL na kategorię (jedna biblioteka dla poczty e-mail funkcje, jedna biblioteka dla funkcji związanych z plikami) Wszyscy mieli swoje doświadczenia ze złym kodem i prawdopodobnie złym projektem, ale co, jeśli zostałeś umieszczony w zespole (opuszczenie nie wchodzi w grę), gdzie mieli standardy projektowe, które po prostu nie wydają się właściwe. Nie jestem pewien, jak odpowiedzieć profesjonalnie, kiedy czuję, że umieram w środku, kiedy jestem proszony o kodowanie w ten sposób.