title: Przedstawienie prezentacji na temat „stylów kodu i wzorców projektowych”

text: Moja firma (mała, około 40 osób w 3 biurach) od czasu do czasu organizuje „warsztaty dla programistów” online, podczas których jeden z twórców prowadzi prezentację na jakiś temat techniczny. Niekoniecznie chodzi o naszą pracę, ale tylko o to, aby pomóc wszystkim poprawić swoje umiejętności i zrozumienie. Zostałem poproszony o hostowanie następnego, a tematem (wybranym z podanej przeze mnie listy) jest styl kodu i wzorce projektowe. Wiem, że te rzeczy nie są ze sobą ściśle powiązane, ale wytrzymaj ze mną. Widziałem wiele miejsc w naszej bazie kodu, które można by ulepszyć, a niektóre mogą nawet kwalifikować się do DailyWTF, więc chcę, aby ta prezentacja była jak najbardziej efektywna. Problem w tym, że po prostu nie wiem dokładnie, co mam pokryć w godzinę. Moim pierwszym pomysłem jest użycie naszego własnego kodu jako przykładu, aby uświadomić sobie, że „proszę, zastosuj to w swojej pracy”. Ale temat jest tak szeroki. Niektóre problemy z naszym kodem (PHP) to: * Minimalne OO. Ostatnio się poprawia, ale wciąż jest mnóstwo funkcji globalnych. Trochę mi zajmuje znalezienie rzeczy. * Globalna konfiguracja (chyba opinia). Możesz znaleźć $GLOBALS['blah'] rozproszone w prawie każdym pliku. * Niespójny styl klamry. Brzmi minimalnie, ale w rzeczywistości spowodowało to wypchnięcie błędu składni do źródła pięć dni temu, co nadal nie zostało poprawione od wczoraj. * Nieefektywne konstrukcje. Udało mi się dokonać kilku podstawowych ulepszeń, które skróciły czas pracy w niektórych obszarach o 70%. Chcę, żeby ta rzecz była jak najbardziej użyteczna, bez brzmienia protekcjonalnego dla moich współpracowników. Na jakich aspektach „stylu” powinienem się skupić i które wzorce projektowe mogą być najbardziej przydatne do wyjaśnienia?


title: Struktury danych: Jakie są typowe przykłady problemów, w których działają „bufory”?

text: Zastanawiałem się tylko, czy istnieją jakieś „standardowe” przykłady, których każdy używa jako podstawy do wyjaśnienia natury problemu, który wymaga użycia bufora. Jakie są dobrze znane problemy w prawdziwym świecie, które mogą przynieść ogromne korzyści z używania bufora? **Ponadto trochę tła lub wyjaśnienia, dlaczego problem odnosi korzyści z użycia bufora i jak bufor zostałby zaimplementowany, może pomóc w zrozumieniu tej koncepcji!**


title: Jaki jest dobry prosty sposób na zwalczenie problemu n+1?

text: Próbuję lepiej zrozumieć wydajność w PHP. Jedną z kwestii, o której myślę, jest problem n+1. Przez n+1 rozumiem coś takiego: $posts = Posts::getPosts(); foreach($posts as $post) { $comments = Comments::getComments(array('post_id' => $post->id)); // zrób coś z komentarzami.. } Jest to dość nieefektywne, ponieważ musimy wykonać wiele zapytań dla każdego posta, aby uzyskać komentarze. Czy coś takiego jest lepsze? To bardziej kod PHP, ale zostaną wykonane tylko dwa zapytania: $posts = Posts::getPosts(); // pobranie identyfikatorów do tablicy $post_ids = array(); foreach($posts as $post) { array_push($post_ids, $post->id); } // pobierz komentarze do WSZYSTKICH postów w jednym zapytaniu, przekazując tablicę identyfikatorów postów (post_id IN (...)) $comments = Comments::getComments(array('post_id' => $post_ids)); // mapuj komentarze na posty foreach($posts as $key => $post) { foreach($comments as $comment) { if($post->id == $comment->post_id) { $post->pushComment( $komentarz); } } } foreach($posts as $post) { $comment = $post->comments; // zrób coś z komentarzami.. } To jest dużo bardziej PHP i trochę bałaganiarski, ale tym razem używam tylko dwóch zapytań (jedno dla postów, drugie do pobrania WSZYSTKICH komentarzy tych postów w jednym zapytaniu). Czy to dobra propozycja rozwiązania problemu n+1 w PHP? A także, jak ogólnie radzą sobie z tym frameworki pod maską?


title: W jakim punkcie/zakresie plik kodu jest za duży?

text: Znajduję wiele plików wierszy o wielkości 2-3k i nie wydaje mi się, żeby były tak duże. Jakie są dobre kryteria, aby obiektywnie nazwać plik z kodem źródłowym „zbyt dużym”?, czy istnieje coś takiego jak maksymalna liczba wierszy, jaką powinien mieć plik z kodem źródłowym?


title: Domena „przecinająca” w DDD

text: Niedawno zacząłem studiować projektowanie oparte na domenie i jak dotąd wygląda na to, że będzie to ogromnie pomocne w bieżącym projekcie mojego zespołu. Mam mały problem, chociaż faktycznie określam _jakie_ domeny są w naszym projekcie. Po moim wstępnym przejściu skończyło się na czymś takim: ![Domeny D i E nakładają się na A,B,C](http://i.stack.imgur.com/aJJYe.png) Mam trzy domeny: A, B i C dla różnych obszarów działalności. Jednak dla każdego z nich muszę śledzić bieżące dane, a także tworzyć plany na przyszłość. Doprowadziło mnie to do dodania domeny **Planning**, ale nie widzę jasnego sposobu na oddzielenie Planning od innych domen. A, B i C muszą posiadać szczegółową wiedzę na temat planowania lub odwrotnie. Przykład: Załóżmy, że domena A to „inwentarz”. Implementacja zawiera komunikaty dla rzeczy takich jak ItemsAdded i ItemsRemoved i śledzi ilości różnych produktów. Następnie, jeśli chcę umożliwić planowanie przyszłych ilości towarów, muszę dodać do modelu klasy, które pozwolą mi powiązać przyszłe informacje o produkcie z różnymi oknami czasowymi. Ten rodzaj wydaje się nową domeną, z wyjątkiem tego, że ta sama logika planowania i okna czasowego dotyczy również Domeny B i C. Zasadniczo mam domenę przekrojową. Czuję, że muszę na to patrzeć w niewłaściwy sposób. Może faktycznie mam 6 domen i bibliotekę używaną przez 3 z nich?


title: Czy C# staje się trudniejszy do odczytania?

text: W miarę postępu C# dodano wiele funkcji językowych. Doszło do punktu, w którym stało się dla mnie nieczytelne. Jako przykład rozważmy następujący fragment kodu z kodu Caliburn.Micro: container = CompositionHost.Initialize( new AggregateCatalog( AssemblySource.Instance. Select(x => new AssemblyCatalog(x)) .OfType<ComposablePartCatalog>() ) ); To tylko mały przykład. Mam kilka pytań: * Czy jest to powszechny lub znany problem? * Czy społeczność C# znajduje to samo? * Czy jest to problem z językiem, czy ze stylem używanym przez programistę? Czy istnieją proste rozwiązania pozwalające lepiej zrozumieć kod innych osób i uniknąć pisania kodu w ten sposób?


title: Który model programowania ASP.Net jest bliższy PHP?

text:
Używam ASP.Net WebForms przez ostatni rok lub dwa w pracy do rozwoju, ale używam PHP do osobistych projektów od 10 lat. Więc jestem o wiele bardziej biegły w programowaniu w PHP. Jeśli chodzi o ASP.Net MVC, nie mam z nim doświadczenia, ponieważ unikałem go, ponieważ założyłem, że będzie to po prostu bardziej skomplikowana forma WebForms. Ostatnio robię więcej badań i wygląda na to, że MVC może być bliższe temu, czego chcę. Ale coś, co nadal nie jest jasne, dotyczy tego, który model programowania ASP.Net jest bliższy rozwijaniu za pomocą PHP. * Moją największą skargą na ASP.Net WebForms są „magiczne pudełka”. Mianowicie stan widoku i menedżer skryptów. * Nie podoba mi się, że WebForms zaśmieca HTML/JavaScript/CSS po stronie klienta. WebForms robi wiele z tego, w tym między innymi: * Wstawianie JavaScript, którego nie mogę modyfikować i muszę polegać na Microsoft, aby zapewnić kompatybilność z różnymi przeglądarkami. * Wymuszona zmiana atrybutów `name` w tagach korzystających z `runat="server"`. * Zawijanie zawartości `<form>` w znacznik `<div>`. * Wymuszanie umieszczania wszystkiego w jednym dużym tagu `<form>`. * Wszystko w WebForms wydaje się być przeznaczone dla niedoświadczonych programistów, którzy wiedzą tylko, jak pisać aplikacje Windows za pomocą .Net. * Standardowe nazwy tagów i atrybutów są zmieniane podczas używania tagów `<asp:xxx>`. Na przykład zamiast znacznika kotwicy (`<a>`) jest to „hiperłącze” (tj. `<asp:HyperLink>`). Zamiast `href=` jest `NavigationUrl=`. * Model oparty na zdarzeniach. * Nie podoba mi się też całkowite oddzielenie kodu po stronie serwera od kodu po stronie klienta. Brakuje mi możliwości robienia takich rzeczy...

 Imię	 Wiek
 <? foreach( $people as $person ) { ?>
 <?= $person->name ?>	 <?= $person->wiek ?>
 <? } ?>
 Mając powyższe na uwadze, który model programowania jest bliższy programowaniu w PHP (tj. czy niedogodności związane z WebForms, które tutaj wymieniłem, istnieją w MVC)? * * * _Uwaga: Znalazłem sposoby na obejście wielu, jeśli nie wszystkich tych przykrości, ale nie czułem, że rozwiązania, których używam, są odpowiednie dla tego pytania._


title: Dopasowanie ważonego niezrównoważonego wykresu dwudzielnego

text: Szukam sposobu na rozwiązanie problemu przypisania, ale mam problemy ze znalezieniem odpowiedniego algorytmu. Mam 2 listy węzłów A i B, a w moim zadaniu długość A może nie być równa B. Ponadto węzeł a w A może nie być potencjalnym dopasowaniem ze wszystkimi węzłami w B. Preferencja jest podana przez dublet, w którym 0 nie jest zainteresowany do 1, który jest bardzo zainteresowany, a następnie usuń wszystkie mecze z krawędzią 0 (ponieważ mogą być mecze, to jest niemożliwe). Jeśli a ma preferencję x względem b, to b będzie miało taką samą preferencję względem a. Przykładowy wykres: ![Przykładowy wykres](http://i.stack.imgur.com/at6uT.jpg) Interesuje mnie stworzenie jak najbardziej optymalnego dopasowania, co oznacza, że suma krawędzi jest jak największa. W powyższym przykładzie byłbym zainteresowany dopasowaniem (1,1) i (3,2), pozostawiając 2 w lewym rzędzie niedopasowane, z całkowitą wagą krawędzi 1,9. Przyglądałem się stabilnemu małżeństwu i algorytmowi węgierskiemu, ale oba te algorytmy wymagają równej liczby węzłów po każdej stronie i nie znajdują największej całkowitej wagi krawędzi. (Największa lub najniższa jest grzywna, ponieważ mogę po prostu odwrócić wagę krawędzi) Czy ktoś z was może wskazać mi algorytm, który rozwiąże ten problem za mnie?


title: Wtyczka ftp do wysublimowanego tekstu z aktywną obsługą edycji

text: używam notepad ++ z wtyczką npp ftp do edycji stron internetowych. Chciałbym mieć podobną wtyczkę do wysublimowanego tekstu. to, co chcę osiągnąć przez wtyczkę ftp dla wysublimowanego tekstu, to ta sama funkcjonalność wtyczki ftp npp. 1. Wtyczka Npp FTP zapewnia widok paska bocznego plików. 2. Wtyczka ftp npp pozwala na pobieranie pliku i wprowadzanie zmian, za każdym razem, gdy dokonywana jest zmiana pliku, plik na serwerze ftp jest również aktualizowany poprzez samo zapisanie pliku. Problem z wtyczką sublimetext ftp polega na tym, że nie pozwala ona na aktywną edycję plików ftp. Pobierany przeze mnie plik nie jest powiązany z serwerem. Dlatego za każdym razem muszę ręcznie przesyłać, aby zobaczyć zmianę.


title: Praktyka łączenia/streamowania zasobów HTTP

text: Nasze SPA (zwykły HTML i Javascript) korzysta z ogromnej ilości javascriptu i innych zasobów, które są pobierane za pośrednictwem XHR. Biorąc pod uwagę samą liczbę komponentów i ograniczenia jednoczesnych żądań przeglądarki, zastanawiamy się nad sposobami dostarczania naszych zasobów w bardziej wydajny sposób. Rozważamy metodę łączenia kilku zasobów, które logicznie tworzą spójną grupę w jeden plik; zmniejszając w ten sposób do tylko jednego XHR (na grupę). Ponadto, aby był bardziej responsywny, chcielibyśmy stale sprawdzać częściowy tekst odpowiedzi podczas stanu LOADING, określając, czy nadający się do użytku fragment (zasób atomowy) został już pobrany i udostępnić go do deserializacji/przetwarzania, nawet zanim XHR zostanie WYKONANE . (doświadczenie podobne do strumienia) Myślimy, że ktoś inny rozważałby z grubsza to samo podejście wcześniej, ale tak naprawdę nie natknął się na jakąkolwiek bibliotekę/frameworka lub format pliku kontenera, który byłby odpowiedni dla naszego scenariusza. Czy ktoś jeszcze wie o czymś podobnym?


title: Agile — skoki i ogólna oś czasu

text: Zespół rozpoczyna swój pierwszy duży projekt - A Agile i wygląda na to, że projekt będzie ładnie zgodny z metodologią (tj. prawdopodobnie możemy po prostu wziąć książkę zwinną i postępować zgodnie z nią jak przepis), z pewnym zamieszaniem: Projekt obejmuje trzy rzeczy, z którymi nikt w zespole nie ma żadnego doświadczenia: Integracja z systemem Foo Payroll, możliwość obsługi typu pliku XYZ89 (gdzie „XYZ89” = jakiś typ pliku, o którym nigdy nie słyszałeś) i przekonwertowanie niektórych inne pliki, aby mogły być obsługiwane przez Frobnobdicator. Jak rozumiem, standardową praktyką Agile byłoby zaplanowanie skoków dla każdego z nich, po czym możemy określić, jak długo one potrwają (nie jestem pewien, czy jest duża szansa, że klient zdecyduje się tego nie robić je, ponieważ są one w dużej mierze solidnymi wymaganiami projektu) Więc moje pytania są następujące: 1. Czy robimy wszystkie skoki z góry w pierwszej iteracji, aby uzyskać lepsze oszacowanie czasu, jaki zajmie ich wykonanie i/ lub uruchomić „chodzący szkielet”? 2. Jeśli nie, to czy cały harmonogram projektu nie byłby na łasce jednego z tych skoków, które powracają z danymi, że ta konkretna historia potrwa o wiele dłużej, niż zakładaliśmy? **Jaki jest najlepszy sposób radzenia sobie z wieloma skokami, gdy są one zasadniczo niezbywalnymi wymaganiami projektu?**


title: Hiperłącza, zewnętrzna dokumentacja kodu źródłowego

text: Dlaczego nadal umieszczamy opisy kodu źródłowego w języku naturalnym (tj. powód _dlaczego_ napisano wiersz kodu) w kodzie źródłowym, a nie w osobnym dokumencie? Biorąc pod uwagę rozległą nieruchomość, jaką zapewniają nowoczesne środowiska programistyczne (monitory o wysokiej rozdzielczości, dwa monitory, itp.), IDE może zapewnić panele typu semi-lock-step, w których kod źródłowy jest wizualnie oddzielony od — ale nierozerwalnie powiązany z — odpowiadające mu komentarze. Na przykład programiści mogą pisać komentarze do kodu źródłowego w hiperlinkowanym języku znaczników (łączącym się z dodatkowymi wymaganiami oprogramowania), co jednocześnie zapobiegałoby zaśmiecaniu kodu źródłowego dokumentacją. Jakie niedociągnięcia hamowałyby taki mechanizm tworzenia oprogramowania? Makieta, która pomoże wyjaśnić pytanie: ![Dual Editor Mockup](http://i.stack.imgur.com/JlUiE.png) Kiedy kursor znajduje się w określonej linii w kodzie źródłowym (pokazany niebieskim tło, powyżej), dokumentacja odpowiadająca wierszowi przy kursorze jest podświetlona (tj. Odróżniona od innych szczegółów). Jak zauważono w pytaniu, dokumentacja pozostawałaby w stałym kroku z kodem źródłowym, gdy kursor przeskakuje przez kod źródłowy. Skrót klawiszowy może przełączać między „trybem dokumentacji” a „trybem rozwoju”. Potencjalne zalety to: * Więcej kodu źródłowego i więcej dokumentacji na ekranie (ekranach) jednocześnie * Możliwość edycji dokumentacji niezależnie od kodu źródłowego (niezależnie od języka?) * Równoległe pisanie dokumentacji i kodu źródłowego bez konfliktów scalania * Hiperłącza w czasie rzeczywistym dokumentacja z doskonałym formatowaniem tekstu * Tłumaczenie maszynowe w czasie niemal rzeczywistym na różne języki naturalne * Każdy wiersz kodu może być wyraźnie powiązany z zadaniem, wymaganiami biznesowymi itp. * Dokumentacja może automatycznie oznaczać czas napisania każdego wiersza kodu (metryki) * _Dynamiczne_ dołączanie diagramów architektury, obrazów wyjaśniających relacje itp. * Dokumentacja z jednego źródła (np. fragmenty kodu znaczników do dołączenia w instrukcji obsługi). Uwaga: * Okno dokumentacji może być zwinięte * Nie ma to wpływu na przepływ pracy do przeglądania lub porównywania plików źródłowych * _Jak_ przebiega implementacja jest szczegółem; dokumentacja może być: * przechowywana na końcu pliku źródłowego; * podzielić na dwa pliki zgodnie z konwencją (`nazwapliku.c`, `nazwapliku.c.doc`); lub * w pełni oparte na bazie danych * Przez dokumentację z hiperłączami rozumiem linkowanie do zewnętrznych źródeł (takich jak StackOverflow lub Wikipedia) i dokumentów wewnętrznych (tj. wiki na subdomenie, która może odwoływać się do dokumentacji wymagań biznesowych) i innych plików źródłowych (podobne do JavaDocs). Powiązany wątek: Co z niechęcią do dokumentacji w branży?


title: Jak uzyskać średnią tablicy?

text: Popraw metodę „ave”. metody klasy publicznej { public static void main (String [] args) { int [] a = {1,2,3,4,5,6,7,8}; System.out.println("Suma to: " + suma(a)); System.out.println("Średnia to: " + ave(a)); System.out.println("Minimum to: " + min(a)); System.out.println("Maksymalna wartość to: " + max(a)); System.out.println("Pojawia się minimum: " + countmin(a) + "razy"); System.out.println("Pojawia się maksymalna liczba:" + countmax(a) + "razy"); } //suma tablic public static int sum(int[] array){ int sum = 0; for (int i = 0; i < tablica.długość; i++){ suma += tablica[i]; } zwróć sumę; } //średnia public static int ave(int[] array){ double ave; for (int i = 0; i < tablica.length; i++){ ave = suma(tablica)/tablica.length; } return ave; } //wyświetla najmniejszą liczbę public static int min(int[] array){ int min = array[0]; for (int i = 0; i < tablica.długość; i++){ if (tablica[i] < min) min = tablica[i]; } powrót min; } //wyświetla największą liczbę public static int max(int[] array){ int max = array[0]; for(int i = 0;i < tablica.długość; i++){ if (tablica[i] > max) max = tablica[i]; } zwróć max; } //wyświetla ile razy min pojawił się public static int countmin(int[] array){ int countmin = array[0]; for(int i = 1;i < tablica.długość; i++){ if (tablica[i] == min(tablica)) licznikmin++; } licznik powrotu min; } //wyświetla ile razy max pojawiło się public static int countmax(int[] array){ int countmax = 0; for (int i = 1; i < tablica.length; i++){ if (tablica[i] == max(tablica)) countmax++; } zwróć countmax; } }


title: Niezmienne struktury i głęboka hierarchia kompozycji

text: Zajmuję się tworzeniem aplikacji GUI, intensywnie pracuję z grafiką - można o tym myśleć jak o edytorze wektorów, przez wzgląd na przykład. Bardzo kuszące jest, aby wszystkie struktury danych były niezmienne - dzięki czemu mogłem cofać / ponawiać, kopiować / wklejać i wiele innych rzeczy prawie bez wysiłku. Dla uproszczenia posłużę się następującym przykładem - aplikacja służy do edycji kształtów wielokątów, więc mam obiekt "Polygon", czyli po prostu listę niezmiennych punktów: Scena -> Wielokąt -> Punkt I tak mam tylko jeden zmienna zmienna w moim programie - ta, która przechowuje aktualny obiekt Scene. Problem jaki mam zaczyna się, gdy próbuję zaimplementować przeciąganie punktów - w wersji mutowalnej po prostu chwytam obiekt `Point` i zaczynam modyfikować jego współrzędne. W wersji niezmiennej - utknąłem. Mogłem przechowywać indeksy `Polygon` w bieżącej `Scene`, indeks przeciąganego punktu w `Polygon` i za każdym razem je zastępować. Ale to podejście nie skaluje się - gdy poziomy kompozycji osiągną 5 i dalej, schemat stałby się nie do zniesienia. Jestem pewien, że ten problem da się rozwiązać - w końcu jest Haskell z całkowicie niezmiennymi strukturami i monadą IO. Ale po prostu nie mogę znaleźć sposobu. Czy możesz dać mi wskazówkę?


title: Czy byłaby to dobra architektura aplikacji internetowych?

text: **Mój problem** Nasz framework oparty na MVC nie pozwala nam na buforowanie tylko części naszych danych wyjściowych. W idealnym przypadku chcielibyśmy buforować wszystkie statyczne i półstatyczne części oraz uruchamiać części dynamiczne. Ponadto musimy wziąć pod uwagę buforowanie danych, które reaguje na zmiany w bazie danych. **Mój pomysł** Pomysł, który wymyśliłem, polegał na reprezentowaniu strony jako **drzewa obiektów fragmentów XML**. Niektóre fragmenty są dynamiczne i mogą pobierać dane bezpośrednio z modeli lub innych źródeł, ale większość fragmentów to statyczne rusztowanie. Jeśli poddrzewo fragmentów jest całkowicie statyczne, wyobrażam sobie, że mogą one **rozwinąć się** w XML, który następnie byłby buforowany jako reprezentacja tekstowa ich elementu nadrzędnego. Idealnie byłoby, gdyby ten proces był kontynuowany, dopóki nie zostanie nam element główny, który zawiera cały statyczny XML i kilka dynamicznych fragmentów XML, które są rozwiązywane i dołączane do odpowiednich węzłów drzewa XML tuż przed wyświetleniem strony. Oprócz rozdzielania treści na fragmenty dynamiczne i statyczne, niektóre fragmenty mogą być dynamiczne i buforowane. Prosty czas wygaśnięcia, który propaguje się w drzewie fragmentów XML, wskazywałby, że określony fragment powinien być okresowo odświeżany. Dział prasowy lub strona tytułowa nie muszą być aktualizowane co sekundę. Wystarczy kilka minut, a czasem nawet dłużej. Inne fragmenty byłyby dynamiczne i niebuforowane. Zazwyczaj wyświetlanych jest zbyt wiele artykułów, aby można je było zapisać w pamięci podręcznej — pamięć podręczna uległaby przepełnieniu. Niektóre artykuły mogą być przechowywane w pamięci podręcznej, jeśli są niezwykle popularne. **Uwagi funkcjonalne** Mechanizm składania może być wystarczająco inteligentny, aby ocenić, kiedy bardziej opłaca się złożyć dynamiczny fragment z pamięci podręcznej i propagować datę wygaśnięcia do fragmentu nadrzędnego, lub zachować go oddzielnie i po prostu dołączyć do XML drzewo podczas rozwiązywania strony. Jeśli niektóre dynamiczne fragmenty pamięci podręcznej są powiązane z obiektami bazy danych za pomocą mechanizmów takich jak globalnie unikalny identyfikator zawartości, zmiany w bazie danych mogą wywołać zmiany w wyjściowej pamięci podręcznej. Jeśli fragmenty przechowują identyfikatory fragmentów nadrzędnych, mogą wywołać proces ponownego składania, który następnie zawiera zaktualizowane dane. Zestaw czystego XML z uporządkowaną tablicą fragmentów obiektów (z których każdy przechowuje informacje identyfikujące węzeł, do którego powinny być dołączone), można rozwiązać w dość prosty sposób, przechodząc po drzewie XML i łącząc dane z paprochy. Ponieważ nie jest konieczne parsowanie i konstruowanie całego drzewa w pamięci przed dołączeniem węzłów, przetwarzanie powinno być dość szybkie. Identyfikatory każdego fragmentu byłyby kombinacją odpowiednich danych identyfikacyjnych i typu obiektu fragmentu. Buforowane fragmenty nadrzędne zawierałyby odniesienia do tych identyfikatorów, aby następnie albo wyciągnąć je z pamięci podręcznej fragmentów, albo uruchomić ich kod. Odpowiedzialność kontrolera sprowadza się do dokonywania zmian w bazie danych i nakazywania głównego obiektu fragmentu XML, aby się renderował. Chciałbym tylko wyjaśnić, że mówiąc XML, tak naprawdę mam na myśli XHTML. Projekt generuje i zwija XHTML od samego początku, bez próby dodawania dodatkowego kroku w celu przekształcenia XML na XHTML. Jest to po prostu funkcjonalny odpowiednik XML. **UPDATE:** ![Zmodyfikowany MVC](http://i.stack.imgur.com/6rRmu.png) Projekt jest nadal zasadniczo MVC. Tradycyjnie w aplikacjach internetowych kontrolery bezpośrednio wprowadzają zmiany w modelach, _następnie_ ładują wszystkie dane z modeli i wysyłają je do widoku. Problem polega na tym, że trudno jest wykonać częściowe buforowanie strony. Większość aplikacji internetowych spędza większość czasu w bazie danych. Jeśli kontroler musi _za każdym razem_ ładować dane z modeli, to buforowanie widoku nie ma sensu, chyba że buforujesz cały widok i nie wykonujesz zapytań do bazy danych. Jednak w Smalltalk, skąd pierwotnie pochodził wzorzec MVC, widoki pobierały dane bezpośrednio z modeli. " _Widok pobiera własne dane z modelu._ " - MVC na Wikipedii Jeśli widoki pobierają swoje dane z modeli, a widoki składają się z innych widoków, wówczas _wyjście_ widoków w pamięci podręcznej staje się trywialne. Jeśli nie wymaga ponownego ładowania, nie ładuje się i nie kontaktuje się z bazą danych. Traktuję widok wyjściowy jako XML/XHTML, ponieważ mamy kilka narzędzi, które pozwalają nam całkiem dobrze manipulować XML, czyniąc przeplatanie się fragmentów statycznych i dynamicznych dość prostym. **Pytanie** Moje pytanie składa się z dwóch części: 1. Czy to dobry projekt? Czy są jakieś oczywiste wady, których mi brakuje? 2. Czy ktoś inny pomyślał o tym wcześniej? Bibliografia? 3. Czy istnieje alternatywa, którą powinienem rozważyć? Może fajny silnik do szablonów?


title: Jaka licencja na oprogramowanie komercyjne?

text: W tej chwili piszemy moduły dla cms o otwartym kodzie źródłowym. Chcielibyśmy sprzedawać je z licencją. Ale jakie są najlepsze opcje? Wszelkie sugestie i doświadczenia.


title: Jaka jest możliwa wada umieszczania deklaracji w blokach wewnętrznych, zamiast na początku funkcji?

text: W miejscu, w którym pracuję, znajdują się wyraźne wytyczne dotyczące umieszczania deklaracji zmiennych. W związku z tym wymagane jest umieszczenie ich na poziomie globalnym i/lub na początku funkcji, a nie w blokach wewnętrznych (takich jak pętla for). Ponieważ zostały one określone przez osoby bardziej ode mnie doświadczone, jestem pewien, że musi być ku temu dobry powód, ale nie wiem, co to może być. Byłoby miło wiedzieć, czy są jakieś korzyści związane z czasem kompilacji/wykonywania z zadeklarowania ich w większym zakresie.


title: przyszłość w rozwoju iPhone'a?

text: Zrobiłem btech, nw szukam pracy, ale jedno wielkie pytanie pojawia się przede mną kilka razy, że jako ** programista iPhone ** mogę przetrwać, czy nie? Nauczyłem się teraz programowania iPhone'a, ale moi seniorzy powiedzieli mi, że po nauczeniu się programowania iPhone'a zostaniesz programistą mniejszościowym, dlaczego nie zaczynasz od java, .net lub php plateform. ale czuję, że moja przyszłość jest bezpieczna w i telefon developer? mam rację, czy nie? jestem całkowicie zdezorientowany? pomóż mi i daj cenne sugestie


title: Czy można używać dynamicznego wpisywania w celu zmniejszenia liczby zmiennych w zakresie?

text: Często, kiedy coś inicjuję, muszę użyć tymczasowej zmiennej, na przykład: file_str = "ścieżka/do/pliku" file_file = open(file) lub regexp_parts = ['foo', 'bar'] regexp = new RegExp( regexp_parts.join('|') ) Jednak lubię ograniczać zakres moich zmiennych do najmniejszego możliwego zakresu, aby było mniej miejsc, w których można je (niewłaściwie) użyć. Na przykład próbuję użyć `for(var i ...)` w C++, aby zmienna pętli była ograniczona do ciała pętli. W tych przypadkach inicjalizacji, jeśli używam języka dynamicznego, **Często kusi mnie, aby ponownie użyć tej samej zmiennej**, aby zapobiec używaniu początkowej (i teraz bezużytecznej) wartości w funkcji. file = "ścieżka/do/pliku" file = otwórz(plik) regexp = ['...', '...'] regexp = new RegExp( regexp.join('|') ) Pomysł polega na tym, że _przez zmniejszenie liczba zmiennych w zakresie zmniejszam szanse na ich niewłaściwe użycie_. Jednak czasami sprawia to, że nazwy zmiennych wyglądają trochę dziwnie, jak w pierwszym przykładzie, gdzie "plik" odnosi się do "nazwy pliku". Myślę, że nie byłoby to problemem, gdybym mógł użyć niezagnieżdżonych zakresów begin scope1 filename = ... begin scope2 file = open(filename) end scope1 //użyj pliku tutaj //nie można użyć nazwy pliku w razie wypadku end range2 ale nie mogę wymyślić żadnego języka programowania, który to obsługuje. **Jakich zasad powinienem użyć w tej sytuacji?** * Kiedy najlepiej ponownie użyć zmiennej? * Kiedy najlepiej utworzyć dodatkową zmienną? * Jakie inne sposoby możemy rozwiązać ten problem zakresu?


title: Testy jednostkowe i .Net

text: Pochodzę z natywnego środowiska programistycznego i jestem przyzwyczajony do tego, że moje moduły uruchamiające testy jednostkowe wyprowadzają plik i wiersz, które spowodowały niepowodzenie testu. To pozwoliło mi uruchomić testy jako krok po kompilacji, a jeśli jakikolwiek test się nie powiedzie, kompilacja zakończy się niepowodzeniem. Mogłem też nacisnąć klawisz skrótu i przejść bezpośrednio do obraźliwej linii. W świecie .Net odkrywam, że nikt nie pracuje w ten sposób. Chętnie przyznam, że być może istnieje inny, lepszy sposób robienia rzeczy w tym alternatywnym wszechświecie, ale chciałbym wiedzieć, co to jest. Nie chcę potrzebować zewnętrznego narzędzia (okropne) i nie chcę pamiętać o kompilacji, a następnie uruchomieniu testów. To, czego naprawdę chcę, to to, co kiedyś miałem: nieudane testy również kończą się niepowodzeniem kompilacji, a szybkie naciśnięcie klawisza skrótu przeniesie mnie do testu, który się nie powiódł. Edycja: Powinienem dodać, że chciałbym zobaczyć jakąś integrację z formatem pliku csproj programu Visual Studio. Posiadanie niestandardowego zadania MSBuild byłoby świetne, ale byłbym całkowicie zadowolony z polecenia konsoli, które umieściłem w Exec lub AfterBuild.


title: jak zacząć od brzytwy ASP.NET MVC 3

text: Zamierzam rozpocząć nowy projekt w mojej firmie, w którym używam MVC 3, teraz po raz pierwszy używamy tego frameworka i mam kilka pytań, 1. Zaleca się zacząć od MVC3 i nie z MVC2? 2. Jakieś samouczki, które możesz polecić? 3. Ten framework ma pełną integrację z jQuery?


title: Jeśli chodzi o hosting Twoich osobistych jednorazowych projektów, czy wyróżnia się jedna usługa i struktura projektu?

text: Patrzę na Google Code, SourceForge, BitBucket i GitHub, ponieważ wydają się być dużymi graczami. Nie podzieliłem jeszcze wszystkich funkcji, które zapewniają, ale naprawdę szukam miejsca, w którym mógłbym umieścić różne kody, które piszę (moje rozwiązania dla Project Euler, kod, który mógłbym napisać dla Code Golf/ Programowanie Puzzle Stack Exchange i tak dalej) w scentralizowanej lokalizacji. Więc moje pierwsze pytanie brzmi: czy w takiej sytuacji jedna usługa wyróżnia się na tle innych? * * * Po wybraniu usługi muszę wybrać sposób dystrybucji kodu. Widzę kilka opcji konfiguracji repozytoriów i projektów. Pojedyncze repozytorium może pomieścić dowolną liczbę projektów - na przykład mogę mieć repozytorium „Tom Owens's Project Euler Solutions” dla wszystkich moich różnych rozwiązań dla Project Euler, z projektami dla każdego języka i środowiska w katalogach w tym repozytorium, innym repozytorium dla moich różnych rozwiązań Code Kata i tak dalej. Lub mógłbym podzielić coś takiego na język (mieć rozwiązania Project Euler w Pythonie w jednym repozytorium, rozwiązania PE w Javie w innym repozytorium i rozwiązania Code Kata C++ w trzecim repozytorium). Moje drugie pytanie: Czy istnieją jakieś ograniczenia lub konwencje określające, w jaki sposób należy udostępniać próbki kodu, które zdecydujesz się otworzyć, zwłaszcza jeśli chodzi o sposób tworzenia repozytoriów? Myślę, że może to być podyktowane usługą, którą wybierzesz (w oparciu o konwencje społeczności).


title: Co powinieneś zostawić swoim następcom?

text: Załóżmy, że jesteś jedynym programistą, który odchodzi z pracy. Jakie informacje/materiały poza samym kodem należy stworzyć i pozostawić w celu zastąpienia? Oczywistą odpowiedzią jest na pewno „czego byś chciał w nowej pracy”, ale minęło trochę czasu odkąd zacząłem nową pracę i zapominam, jakie były wtedy najważniejsze rzeczy, których potrzebowałem. Myślę: * konta/hasła * lokalizacja sprzętu, kopie zapasowe, płyty z oprogramowaniem Co jeszcze?


title: Co sprawia, że dokumentacja jest dobra?

text: Muszę napisać dokumentację do kilku projektów, nad którymi pracowałem. Zastanawiałem się, co według Pana doświadczenia sprawia, że dokumentacja jest użyteczna i kompletna. Jaką część powinienem uwzględnić, jak głęboko powinienem zagłębić się w moje wyjaśnienie itp.? Moją grupą docelową są programiści. Celem dokumentacji jest ułatwienie aktualizacji lub zakończenia projektów.


title: Ogólna zasada dotycząca kosztów a oszczędności w przypadku ponownego wykorzystania kodu

text: Czy to dobra zasada, aby zawsze pisać kod z zamiarem ponownego użycia go gdzieś dalej? Lub, w zależności od rozmiaru komponentu, który piszesz, czy lepiej jest zaprojektować go do ponownego użycia, gdy ma to sens w odniesieniu do czasu poświęconego na to. Jaka jest dobra praktyczna zasada poświęcania dodatkowego czasu na analizę i projektowanie elementów projektu, które z „pewnym prawdopodobieństwem” będą później potrzebne do innych rzeczy, które mogą lub mogą potrzebować tej części. Na przykład, jeśli mam potrzebę, aby projekt `X` robił rzeczy `A` i `B`. „A” zdecydowanie musi zostać napisane do ponownego użycia, ponieważ ma to sens. „B” jest w tej chwili bardzo specyficzne dla projektu i mogę zhakować to wszystko w ciągu kilku dni, aby zakończyć projekt na czas i pochwalić wszystkich za bycie świetnym zespołem itp. ' 2 tygodnie zastanawiania się do czego projekt `Y/Z` może tego potrzebować i poświęcić dużo dodatkowego czasu na część `B` ponieważ pewnego dnia możemy go użyć w projekcie `Y/Z` (gdzie oszczędności będą urzeczywistniać się). Wyobrażam sobie, że idealna sytuacja światowa byłaby ładnie wykonaną kombinacją komponentów specyficznych dla projektu i ponownie wykorzystanych komponentów architektonicznych biorąc pod uwagę projekt. Jednak niektóre sklepy z kodem mogą uznać, że dobrym pomysłem byłoby napisanie wszystkiego z zamiarem użycia go w pewnym momencie.


title: Zaprojektuj dla przyszłych zmian lub rozwiąż problem pod ręką

text: Czy podczas pisania kodu lub podczas projektowania starasz się uogólniać problem na samym początku, czy próbujesz rozwiązać ten bardzo konkretny problem. Pytam o to, ponieważ próba uogólnienia problemu zwykle komplikuje sprawy (co może nie być konieczne), az drugiej strony bardzo trudno będzie rozszerzyć konkretne rozwiązanie, jeśli nastąpi zmiana wymagania. Myślę, że rozwiązaniem jest znalezienie środkowej ścieżki, którą łatwiej powiedzieć niż zrobić. Jak radzisz sobie z tego typu problemem? Jeśli zaczniesz to uogólniać, w którym momencie wiesz, że tyle uogólnień wystarczy?


title: Agile: kiedy refaktoryzować, a kiedy przedłużać przy naliczaniu długu technicznego?

text: Rozważ następujący scenariusz. Obecnie masz zestaw funkcji „A”, który chcesz rozszerzyć o zestaw funkcji „B”. W najbliższej funkcji istnieje duże prawdopodobieństwo, że zechcesz ją jeszcze bardziej rozszerzyć, aby uwzględnić zestaw funkcji `C`. * Opcja 1) Koszt rozszerzenia `A` -> `B` to minimalne, ale wysokie koszty utrzymania. * Opcja 2) Koszt refaktoryzacji „A” i „B” w celu nadania bardziej logicznego sensu jest umiarkowany, ale niskie koszty utrzymania. Rozszerzenie o zestaw funkcji `C`: * Koszt rozszerzenia refactored(`A` & `B`) -> `C` jest minimalny, ponownie niskie koszty utrzymania. * Koszt rozszerzenia A,B -> C jest wysoki (zarówno refaktoryzacji, jak i rozszerzenia). Zakładając, że włączenie zestawu funkcji „C” wykracza poza zakres bieżącego sprintu, w jaki sposób podejdziesz do wyboru opcji? Jak to się zmieni, jeśli dodanie zestawu funkcji C to kilka (2 lub więcej) przebiegów?


title: Skąd wiedzieć, kiedy przestać projektować?

text: Po pierwsze, jestem na stażu w firmie produkującej sprzęt do przetwarzania równoległego. Obecnie pracujemy nad projektem komponentu naszego sterownika, który ma ewoluować w ciągu kilku generacji naszych produktów. Następna generacja jest wciąż w fazie symulacji, a specyfikacja, którą mamy teraz, może się zmienić, gdy faktycznie otrzymamy sprzęt. Nasz moduł ma działać na obecnej i wszystkich przyszłych genach. Zawsze miałem wrażenie, że projekt powinien być jak najbardziej przyszłościowy. W tym przypadku wiemy dokładnie, co zrobić z obecną generacją sprzętu, ale na niektórych frontach nie wiemy dokładnie, co zrobić z następną generacją. Więc moje pytanie brzmi: **Kiedy wiesz, że powinieneś przestać projektować na przyszłość i po prostu zachować prostotę i poprawność tego, co wiesz teraz?**


title: Zwinne szacowanie za pomocą długu technologicznego

text: Czy szacując (punkty historii) historię polegającą na rozszerzeniu obecnej funkcjonalności o znany dług technologiczny, powinniśmy wziąć pod uwagę wysiłek, jaki zostanie włożony w refaktoryzację obecnego kodu, czy też powinniśmy szacować niezależnie od tego długu technologicznego?


title: Wbudowana biblioteka Scala wolno?

text: Znalazłem to pytanie i zaakceptowałem odpowiedź na StackOverflow. Jest to związane z wolnym parserem JSON w standardowej bibliotece Scala. Konsensus jest taki, że wbudowana biblioteka JSON jest wolna i, jak mówi DMC: „tak jest i tak już jest”. Może po prostu jestem tu naiwny, ale to brzmi jak złe podejście do rozwijania języka. Czy _wbudowane_ biblioteki nie powinny być idealne? Nie muszą być wszystkim dla wszystkich i akceptuję fakt, że Scala jest rozszerzalna. Ale jeśli istnieje wbudowana biblioteka, to z pewnością powinna być solidna i tak szybka, jak język ma do zaoferowania. Składam skargę do Star Command ;-) Czy ktoś wie, gdzie lub jak normalny facet, taki jak ja, może wyrazić swoją opinię na ten temat, tj. gdzie możemy się udać, aby pomóc w kształtowaniu języka Scala? Aktualizacja: To pytanie nie było zamierzone w żaden negatywny sposób. Scala, to twórcy i społeczność Scala jest pełna dobroci. Byłem po prostu zaskoczony, widząc, że coś takiego jak wbudowany parser JSON jest daleki od optymalnego (zgodnie z pytaniem w podanym linku)


title: Pisanie skryptów do projektu Visual Studio

text: Jaki jest najlepszy sposób na pisanie i uruchamianie małych skryptów i zadań, które są specyficzne dla konkretnego projektu .Net? Takie rzeczy jak konfigurowanie bazy danych czy potwierdzanie prawidłowych połączeń z serwerami. W Ruby budowałbym zadania prowizji dla tego typu rzeczy. Obecnie do tych zadań używam testów jednostkowych, ponieważ są one łatwe do uruchomienia w VS i mają dostęp do wszystkich niezbędnych bibliotek i kodu projektu. Jednak nie jest to tak naprawdę ich zamierzonym celem i po usunięciu list testowych w VS 2012 nie działa to tak dobrze, jak kiedyś. Czy jest lepsze rozwiązanie niż pisanie projektu konsoli do obsługi tych małych fragmentów kodu, które muszę uruchamiać okresowo?


title: Zdefiniuj, które testy są uruchamiane po kompilacji w Visual Studio 2012

text: Visual Studio 2012 ma nową funkcję, w której automatycznie uruchamia testy jednostkowe po każdej kompilacji. Chciałbym skorzystać z tej funkcji, ale mam wiele testów, których nie należy uruchamiać po każdej kompilacji (długotrwałe testy wydajności itp.). Czy istnieje sposób na zdefiniowanie, które kategorie są uruchamiane automatycznie? Lub inny sposób zdefiniowania, który test należy uruchomić?


title: Metody porządkowania definicji funkcji w kodzie

text: Kiedy pracuję nad jakimś projektem programistycznym (zazwyczaj aplikacja wiersza poleceń w Pythonie z wieloma przełącznikami), zwykle tworzę około 30 i więcej funkcji. Większość funkcji znajduje się w jednym pliku (poza kilkoma pomocnikami, których używam w wielu projektach). Niektóre funkcje są wywoływane na konkretnym przełączniku (takim jak -p lub --print), ale wiele funkcji wykonuje obliczenia pomocnicze, operacje drukowania lub operacje na bazie danych, ponieważ nie chcę, aby główne funkcje były zbyt duże. Kiedy mam pomysł na nową funkcjonalność, często losowo umieszczam nowe funkcje w pliku. Czy powinienem się nad tym zastanowić i umieścić go w jakimś konkretnym miejscu? Czy są na to jakieś metody?


title: Procedura składowana Konwencje nazewnictwa?

text: Jeden z naszych starszych programistów stwierdził, że powinniśmy używać konwencji nazewnictwa procedur składowanych ze stylem nazewnictwa „objectVerb”, takim jak („MemberGetById”) zamiast typu nazewnictwa „verbObject” („GetMemberByID”). Uzasadnienie tego standardu jest takie, że wszystkie powiązane procedury składowane byłyby grupowane według obiektu, a nie według akcji. Chociaż widzę logikę tego sposobu nazywania rzeczy, po raz pierwszy widzę procedury składowane nazwane w ten sposób. Moim zdaniem konwencja nazewnictwa jest taka, że nazwy nie można odczytać w sposób naturalny i zajmuje trochę czasu, aby ustalić, co mówią słowa i co może zrobić procedura. Jakie są twoje zdanie na ten temat? Który sposób jest najbardziej powszechnym sposobem nazywania przechowywanej procedury i czy jakie typy konwencji nazewnictwa przechowywanego procesu zostały użyte lub przez które przechodziłeś?


title: Czy możesz połączyć java i javascript?

text: Jako programista, który obecnie spędza większość czasu w Javie lub Javascript, mam fantazję na temat języka, który łączy je ze sobą. Zawsze brakuje mi czegoś od jednego lub drugiego. Wiem, że żaden z nich nie jest doskonały, ale dla mnie oba można uznać za głównych, współczesnych potomków języka C. Wiem, że w powszechnym mniemaniu są to zupełnie inne języki, które mają tylko powierzchowne podobieństwa (oczywiście nazwa, ale też wiele podobieństw syntaktycznych , zwłaszcza na poziomie wypowiedzi i ekspresji). Myślę jednak, że teoretycznie i tak powinno być możliwe stworzenie nowego języka, który jest zasadniczo nadzbiorem zarówno Javy, jak i JavaScriptu (oczywiście nieścisłego). Oczywiście, byłyby wyzwania związane z tworzeniem języka, który jest luźno typowany w niektórych miejscach, a silnie typowany w innych, kompilowany w niektórych miejscach i interpretowany w innych, itp. ... ale moje przeczucie jest takie, że żaden z nich nie będzie przeszkadzał w pokazach ( z wyjątkiem tych z otwartymi umysłami i dobrą wyobraźnią). Poza kwestiami „gdzie działają” (po stronie przeglądarki a serwera itp.)… jakie problemy mogą się pojawić, zwłaszcza po stronie składni? Jak radzić sobie w sytuacjach, w których te dwa języki byłyby sprzeczne? Jak by to wyglądało? Mogę to docenić, jeśli pomyślisz „nie powinno się tego robić” lub „co za koszmar praca w tym języku”, ale liczę na odpowiedzi od ludzi o otwartych umysłach, którzy mają więcej do powiedzenia…


title: O co powinienem zapytać potencjalnego klienta podczas pierwszego spotkania?

text: Mam zamiar zająć się dodatkowymi kontraktami. Jakie pytania warto zadać potencjalnemu klientowi podczas pierwszego spotkania? Pomyślałem o kilku rzeczach, które wydają się dość oczywiste: * Jaki jest projekt? * Jakie są terminy? * Jaki jest budżet? * Co/jak chcą, abym dostarczył ukończoną pracę? Czy o to chodzi, czy są jakieś trudne rzeczy, na które należy uważać?


title: Jakie są zalety zaciemniania kodu wydania?

text: Konkretny przykład, który mam na myśli, dotyczy gry Minecraft, która jest obecnie w fazie alfa, ale jest to ogólne pytanie, które moim zdaniem wymaga rozmowy. Minecraft jest napisany w Javie, a ślady stosu zwykle wyglądają tak (prawdziwy przykład): java.lang.NullPointerException at d.a(SourceFile:247) at gi.b(SourceFile:92) at bd.a(SourceFile:33) at bn .a(SourceFile:69) w bn.e(SourceFile:115) w bn.d(SourceFile:103) w net.minecraft.client.Minecraft.i(SourceFile:1007) w net.minecraft.client.Minecraft.run (SourceFile:596) w java.lang.Thread.run(Nieznane źródło) Oczywiście nie są to prawdziwe nazwy pakietów i metod, których programista używa podczas pisania. Ponieważ jest w fazie alfa, wydaje się, że programista powinien mieć możliwość zrozumienia swoich śladów stosu, zwłaszcza jeśli ktoś jest w stanie dostarczyć go do raportu o błędzie. W obecnej sytuacji jest to w większości bezsensowne. Jaką korzyść można by liczyć na zaciemnianie kodu w taki sposób, który przezwycięża wady trudniejszej identyfikacji błędów?


title: Co powinno się stać, gdy zostanie osiągnięty kod, który nie powinien być, zgodnie z zasadami biznesowymi lub logicznymi?

text: Obecnie piszę aplikację, która nie jest duża, ale będzie używana w całej mojej firmie liczącej ponad 200 osób i klientów zewnętrznych o projektach, nad którymi pracujemy (nie projektach oprogramowania), ale istnieje sporo reguł biznesowych, wraz z z domniemanymi, które wiążą się z tworzeniem, weryfikacją i utrzymywaniem kont użytkowników. Często zdarza mi się pisać taki kod If (A) { foo(); } else If (B) { foo2(); } else { wrzuć nowy wyjątek("Nie powinno się zdarzyć, ponieważ XYZ"); } or foo() { //do rzeczy if (D == F) { wrzuć nowy wyjątek("Metoda nie powinna być wywoływana jeśli D==F, zapomniałeś jak jej używać"); } //zrób inne rzeczy } Czy ten kod śmierdzi, ponieważ sugeruje, że mój kod może się zepsuć? Czy to dobra praktyka programistyczna do debugowania, gdy coś pójdzie nie tak? Czy to paranoja?


title: Jak mam obsłużyć wyjątek, który *nie powinien* nigdy być zgłaszany?

text: Jaki jest najlepszy sposób radzenia sobie z błędami, które nigdy nie powinny się zdarzyć? Moim obecnym sposobem na zrobienie tego jest zgłoszenie wyjątku, jeśli wydarzy się 'coś, co nie powinno się wydarzyć', na przykład: /* * Przywracanie z zapisanego stanu. To nie powinno być * null, chyba że ktoś w przyszłości nie ustawi go poprawnie, * w takim przypadku zda sobie sprawę, że zrobił coś złego, ponieważ może się zawiesić. */ Obiekt foo = bundle.getSerializable("foo"); if (foo != null) { zróbCośZ(foo); } else { // To nigdy nie powinno się zdarzyć. if (BuildConfig.DEBUG) { throw new RuntimeException( "Foo is null!"); } foo = nowy Obiekt(); zrobićCośZ(foo); } Jest to trochę bezcelowe, ponieważ to _nie powinno się zdarzyć_. Ale na wypadek, gdyby kod został zepsuty i został wypuszczony do produkcji z wartością null `foo`, czy powinienem zostawić tego typu sprawdzenia w kodzie?


title: Aplikacja internetowa z licencją na oprogramowanie

text: Jesteśmy w trakcie budowy aplikacji internetowej dla klienta, który zapytał o posiadanie kodu na stronę. Chcielibyśmy wystawić klientowi umowę licencyjną na korzystanie z kodu, jeśli z jakiegokolwiek powodu nie pracujemy już nad projektem. Chcielibyśmy mieć prawo własności do kodu, ale pozwolilibyśmy im używać wszędzie tam, gdzie uznają to za stosowne, jedynym ograniczeniem, jakie chcielibyśmy mieć, jest sprzedaż kodu. Są firmą zatrudniającą kilku pracowników i będą korzystać z aplikacji tylko w swojej firmie. Jak wyglądałaby taka umowa licencyjna?


title: Modułowość i „enkapsulacja” w C

text: Odnosi się to do C (i prawdopodobnie do każdego innego podobnego języka niezorientowanego obiektowo). Jeśli mam centralny magazyn danych i potencjalnie równoczesny dostęp, istnieją dwa sposoby jego ochrony. Załóżmy, że mam magazyn danych z kilkoma elementami danych... struct MyStore { int data1, data2, data3, ...., dataN; } sklep[M]; W tym przykładzie typy danych są takie same, ale wyobraźmy sobie, że dotyczy to czegoś nieco bardziej zróżnicowanego z różnymi typami itp. To tylko po to, aby pytanie było proste. Aby umożliwić innym użytkownikom dostęp do danych, mogę zrobić kilka rzeczy. 1. Może zapewnić krytyczne funkcje regionu i polegać na dzwoniącym, aby uzyskać prawidłową ochronę. 2. Mogę zapewnić funkcję ustawiającą i pobierającą dla każdego typu elementu danych w sklepie i zarządzać krytycznymi regionami w module oraz chronić użytkownika przed koniecznością radzenia sobie z jakąkolwiek logiką. Mój problem z pierwszą metodą polega na tym, że ciężar spoczywa na dzwoniącym. Mój problem z drugim, przynajmniej w C, polega na tym, że po pierwsze piszę cały ładunek akcesorów do płyty kotłowej, a po drugie bardziej skomplikowane rzeczy, takie jak testowanie i ustawianie lub konieczność blokowania danych podczas wykonywania kilku operacji, staje się niechlujny. Np. dla metody 2 potrzebuję int GetData1 (indeks int bez znaku) { dane int; ENTER_CR(); dane = przechowuj[indeks].dane1; WYJDŹ_CR(); dane zwrotne; } ... ... int GetDataN(unsigned int index) { int data; ENTER_CR(); dane = przechowuj[indeks].daneN; WYJDŹ_CR(); dane zwrotne; } I to samo dla wszystkich seterów. A co jeśli chcę ustawić wiele pozycji atomowo? Robi się ciężko! Jak uzyskać niektóre korzyści z modułowości i enkapsulacji, ale nadal mieć elastyczny interfejs?


title: Techniki zwiększające logikę w programowaniu

text: Programowaniem zajmuję się od 3 lat. Ale wydaje mi się, że się w tym zagubiłem. Nie jestem w stanie być w tym dobry, mimo że koduję codziennie. przypuśćmy, że rozwiążę jeden problem, będę wędrował od rozwiązania do rozwiązania i zaimplementował inne rozwiązanie. Nie mogę się zbytnio skupić. Dostaję wiele defektów w pisanym przeze mnie kodzie. Boję się kodu, nie wiem dlaczego, jeśli nie skończę go na czas, szef mnie zwolni itp. Lubię kodować, ale nie cały czas. Jak zwiększyć cierpliwość? Zawsze zastanawiam się, jak zostać najlepszym koderem, jak wielu wyjątkowych programistów. Wiem, że brzmi to subiektywnie, ale myślę, że pomoże to społeczności programistów stać się w tym dobrym, szczególnie dla przeciętnych jak ja lub początkujących programistów.


title: Jak zaimplementować branch-and-bound w funkcjonalnym języku programowania?

text: Próbuję napisać wyszukiwanie rozgałęzione i powiązane na zbiorze wszystkich funkcji f:D -> R, gdzie rozmiar domeny jest mały (|D| ~ 20), a zakres jest znacznie większy (|R| ~ 2^20 ). Początkowo wymyśliłem następujące rozwiązanie. (konstruktor (częściowa mapa zakresu domeny) (let ((przeszedł? (sprawdź częściową mapę listy kont))) (war ((nie przeszedł?) nil) (domena (powtarzanie się na pierwszej części listy kont zakresu domeny ' ())) (t częściowa mapa)))) (recur-on-first (częściowa mapa condlist zakresu domeny jest ignorowana) (cond ((zakres null) nil) (t (let ((od pierwszego do pierwszego (konstruktor) (domena cdr) (dodaj ignorowane (zakres cdr)) condlist (minusy (minusy (domena samochodowa) (zakres samochodowy)) mapa częściowa)))) ) lista kont mapa częściowa (cons (zakres samochodów) zignorowana)))))))) Tutaj parametr `condlist` do funkcji `builder` jest listą warunków, które powinno być spełnione przez rozwiązanie. Funkcja `check` zwraca zero, jeśli jakikolwiek element z listy warunków jest naruszony przez `mapę częściową`. Funkcja `recur-on-first` przypisuje pierwszy element w domenie do pierwszego elementu w zakresie i próbuje zbudować rozwiązanie z tego miejsca. Niepowodzenie tego „rekursu na pierwszym” powoduje próbę skonstruowania rozwiązania, które przypisuje pierwszy element w domenie do elementu innego niż pierwszy w zakresie. Musi jednak utrzymywać listę `ignored`, która przechowuje te odrzucone elementy (jak pierwszy element w zakresie), ponieważ mogą one być obrazami innych elementów w domenie. Z tym rozwiązaniem widzę dwa problemy. Pierwszym z nich jest to, że listy `ignored` i `range` w funkcji `recur-on-first` są dość duże, a `dołączanie` ich jest kosztowną operacją. Drugi problem polega na tym, że głębokość rekurencji rozwiązania zależy od wielkości zakresu. Wymyśliłem więc następujące rozwiązanie, które wykorzystuje podwójnie połączone listy do przechowywania elementów w zakresie. Funkcje `start`, `next` i `end` umożliwiają iterację po podwójnie połączonej liście. (builder (condlist zakresu domen &opcjonalne (częściowa mapa nil)) (konstruktor bloków (let ((przeszły? (sprawdź częściową mapę))) (cond ((nie przeszły?) (zakres początkowy)) (prev (dbl-node-prev cur))) (pętla (jeśli (nie (koniec cur)) (progn (zakres splicing-out cur) (let ((sol (konstruktor (domena cdr) lista cond zakresu) (cons (cons (domena samochodowa) (data cur)) częściowa mapa)))) (zakres splicingu prev cur) (if sol (return-from builder sol)))) (setq prev cur) (setq cur (następny cur))) (return-from builder nil))))) (t częściowa mapa)))))) Środowisko wykonawcze drugiego rozwiązania jest znacznie lepszy niż czas wykonania pierwszego rozwiązania. Operacja `append` w pierwszym rozwiązaniu została zastąpiona przez łączenie elementów do i z podwójnie połączonej listy (operacje te są stałym czasem), a głębokość rekurencji zależy tylko od rozmiaru domeny. Ale mój problem z tym rozwiązaniem polega na tym, że używa kodu w stylu `C`. Więc moje pytanie jest takie. Czy istnieje rozwiązanie, które jest tak samo wydajne jak drugie rozwiązanie, ale nie używa `setf` i mutowalnych struktur danych? Innymi słowy, czy istnieje skuteczne rozwiązanie tego problemu w programowaniu funkcjonalnym?


title: Czy rozmowy kwalifikacyjne na stanowiska programistyczne powinny być skoncentrowane na wiedzy CS czy behawioralnej?

text: Wygląda na to, że wiele pytań związanych z wywiadami na tej stronie skupia się na testowaniu tradycyjnej wiedzy CS, takich jak: * Algorytmy * Struktury danych * Język/środowisko programowania Oczywiście strona nazywa się "programiści", więc można się tego spodziewać. Twierdzę jednak również, że istnieje wiele innych aspektów, które mogą być lepszymi predyktorami sukcesu kandydata (zakładając, że kandydat ma dyplom z CS z dobrej szkoły i ma dobre oceny): * Czy mają ogólną miłość do programowanie i ciągłe zainteresowanie doskonaleniem swoich umiejętności? * Czy są chętni do nauki nowych umiejętności? * Czy są gotowi poświęcić czas na dzielenie się swoją wiedzą z innymi i pomaganie im? * Czy mają historię sukcesu? * Czy rozmówca będzie zadowolony z rodzaju pracy wykonywanej przez firmę i czy będzie jej oddany? * Czy pracowali wcześniej nad podobnymi projektami lub podobnymi firmami i cieszyli się nimi? * Czy spodoba im się kultura firmy? * Czy są zdeterminowani, aby projekty zakończyły się sukcesem? Czy jest więcej korzyści z testowania wiedzy o CS lub aspektów behawioralnych lub kombinacji?


title: Jak poradzić sobie z nastawieniem do programowania cargo-kult?

text: Mam kilku studentów informatyki na obowiązkowym wstępnym kursie programowania, którzy widzą język programowania jako zestaw magicznych zaklęć, które należy rzucić, aby osiągnąć jakiś efekt (zamiast postrzegać go jako elastyczne medium do wyrażania swojego pomysłu na rozwiązanie) . Zwykle kopiują i wklejają kod z poprzednich, podobnie wyglądających zadań, nie biorąc pod uwagę istoty problemu. Czy istnieją jakieś ćwiczenia lub analogie, które sprawią, że uczniowie będą bardziej pewni, że potrafią i powinni zrozumieć strukturę i znaczenie każdego napisanego przez siebie fragmentu kodu?


title: Czy programowanie „kopiuj i wklej” jest złe?

text: Dzięki zwykłym narzędziom wyszukiwania Google i Google Code można łatwo znaleźć sposób programowania przy użyciu niektórych zasobów lub rozwiązywać określone problemy (takie jak utworzenie klasy Java lub bloku FTP w Perlu itp.). Dlatego programiści są kuszeni, aby po prostu skopiować i wkleić kod (w pewnym sensie ponowne wykorzystanie). Czy to niekompetencja? Zrobiłem to sam, chociaż myślę, że jestem lepszym programistą niż wielu innych, których widziałem. Kto ma czas na RTFM? W dobie obfitości informacji nie uważam, że programowanie „kopiuj i wklej” jest złe. Czy i tak nie robią tego strony takie jak Stack Overflow? Ludzie pytają - OK, oto mój problem - jak go rozwiązać? Teraz ktoś opublikuje pełny kod, a osoba, która zadała pytanie, po prostu skopiuje i wklei odpowiedź z największą liczbą głosów. Nieważne, jak mały jest problem. Pracuję z grupą młodych programistów, którzy w dużym stopniu polegają na Internecie, aby wykonać swoją pracę. Widzę wygodę w kopiowaniu/wklejaniu i modyfikowaniu kodu, aby wykonać zadanie. Na przykład możesz być całkiem dobry w algorytmach itp., ale możesz nie wiedzieć, jak używać `BufferedReader` w Javie - czy przeczytałbyś kompletną dokumentację Javadoc dla `BufferedReader` lub poszukał jakiegoś przykładu użycia go gdzieś? Jakie są prawdziwe zagrożenia związane z kodowaniem „kopiuj i wklej”, które mogą wpłynąć na ich kompetencje?


title: Czy jest gdzieś przewodnik idioty po licencjonowaniu oprogramowania?

text: Zasadniczo moja wiedza na ten temat jest zupełnie inna niż fakt, że istnieje open-source i closed-source. Jestem programistą stron internetowych (a nie projektantem), więc szukam w Internecie takich rzeczy, jak ikony. Zawsze byłem wielkim fanem tych ikon, które mają licencję Creative Commons Attribution 2.5. O ile widzę, ta licencja mówi „rób z nimi, co chcesz, pod warunkiem, że masz link do mnie _gdzieś_”. Czy to założenie jest poprawne? Właśnie dzisiaj znalazłem nowy zestaw ikon, z dużo bardziej zagmatwaną licencją (znalezioną tutaj) i szczerze mówiąc nie mam pojęcia, czy mogę ich używać, czy nie. * W tej chwili chcę ich używać tylko do zabawek, które mogą nigdy nie ujrzeć światła dziennego, ale mój kod źródłowy jest przechowywany na Github, czy jest legalne przechowywanie ikon tam, gdzie są publicznie dostępne? * Jeśli umieszczę je na mojej osobistej stronie internetowej, która może zawierać reklamy, aby od czasu do czasu zarobić pięć centów, czy _to_ jest legalne? * Czy korzystanie z nich w witrynie oferującej użytkownikom bezpłatną usługę jest _to_ legalne? * Jeśli ta strona zacznie zarabiać pieniądze (np. poprzez płatne subskrypcje) lub zostanie przez kogoś wykupiona (bardzo mało prawdopodobne, ale pewnego dnia możliwe), czy _to_ jest legalne? Czy istnieje jakiś przewodnik noobów, który wyjaśnia to wszystko, ponieważ nie chciałbym zacząć używać tego rodzaju rzeczy teraz tylko po to, aby wszystko zmienić później. Nawet jeśli kupię ikony, nadal istnieją problemy licencyjne, których nie rozumiem! :( A takie rzeczy pojawiają się coraz częściej...


title: Przenosisz całą logikę interfejsu użytkownika na stronę klienta?

text: Nasz zespół początkowo składał się głównie z programistów po stronie serwera z minimalną wiedzą na temat Javascript. W ASP.NET pisaliśmy dużo logiki interfejsu użytkownika w kodzie lub ostatnio za pomocą kontrolerów w MVC. Jakiś czas temu do naszego zespołu dołączyło 2 wysokopoziomowych programistów po stronie klienta. Mogą zrobić w HTMl/CSS/Javascript prawie wszystko, co mogliśmy wcześniej zrobić z kodem po stronie serwera i kontrolkami sieciowymi po stronie serwera: * Pokaż/ukryj kontrolki * Wykonaj walidację * Kontroluj odświeżanie AJAX Zacząłem więc myśleć, że może to być bardziej wydajnym, po prostu tworząc API wysokiego poziomu wokół naszej logiki biznesowej, coś w rodzaju API Amazon Fulfillment: http://docs.amazonwebservices.com/fws/latest/APIReference/, aby programiści po stronie klienta w pełni przejęli interfejs użytkownika, podczas gdy programiści po stronie serwera skoncentrowaliby się tylko na logice biznesowej. Czyli dla systemu zamówień będziesz miał API wysokiego poziomu, takie jak: OrderService.asmx CreateOrderResponse CreateOrder(CreateOrderRequest) AddOrderItem AddPayment - SubmitPayment - GetOrderByID FindOrdersByCriteria ... Będzie dostęp JSON/REST do API, więc byłoby łatwe do wykorzystania z klienta -boczny interfejs użytkownika. Możemy używać tego interfejsu API zarówno do wewnętrznego rozwoju interfejsu użytkownika, jak i do tworzenia własnych aplikacji przez osoby trzecie. Czy dzięki postępom w JavaScript i dostępności dobrych programistów po stronie klienta jest to dobry moment, aby pozbyć się kodu/kontrolerów i po prostu skoncentrować się na tworzeniu interfejsów API wysokiego poziomu (ala Amazon), z których mogą korzystać programiści po stronie klienta?


title: Jakie są zalety i wady używania prawdziwego imienia i nazwiska w Internecie?

text: Czy jako programista widzisz jakąś zawodową lub inną przewagę w używaniu swojego prawdziwego nazwiska w dyskursie internetowym, w porównaniu z wymyślonym uchwytem? Zawsze używałem jednej nazwy użytkownika i zawsze wyświetlałem moje prawdziwe imię, kiedy tylko było to możliwe, z kilku powodów: * Moje zainteresowania online są prawie wyłącznie profesjonalne i ponadprzeciętne. * Tworzy przyjazny dla wyszukiwania publiczny dziennik wszystkich moich prac, wszędzie. * Jeśli ktoś chce się ze mną skontaktować, jest na to wiele sposobów. * Moje portfolio prac jest związane ze mną osobiście. Możliwe wady pełnego ujawnienia obejmują: * Jeśli masz ochotę zaangażować się w coś niefortunnego, może to być trudniejsze. * Psychopata, który dziedziczy Twój projekt, może łatwiej dowiedzieć się, gdzie mieszkasz. * Możesz być spamowany przez ludzi, którzy nie są warci cennego czasu, który można by lepiej poświęcić na pisanie większej ilości wspaniałego oprogramowania, z którego słyniesz. * Twoje portfolio prac jest związane z Tobą osobiście. W każdym razie wydaje się, że zdecydowana większość użytkowników StackOverflow korzysta z wymyślonych uchwytów, a nie prawdziwych nazw. Godne uwagi wyjątki obejmują najbardziej znanych użytkowników, którzy zazwyczaj mają ugruntowaną pozycję w branży. Ale jak moglibyśmy kiedykolwiek zostać legendarnymi programistami rockstar, jeśli nie ujawnimy tam naszych imion? Omówić.


title: Trendy w języku programowania

text: Czy istnieją jakieś statystyki, które pokazują około. liczba użytkowników popularnych języków programowania i tempo wzrostu tej liczby w czasie?


title: Jak wzbudzić zainteresowanie programowaniem?

text: Jestem studentem III roku inżynierii oprogramowania, aw dziedzinie programowania nigdzie nie znajduję się. Znam podstawy języków programowania takich jak C, C++, Java, Visual Basic, HTML, JAVAScript, CSS i PHP. Ale za każdym razem, gdy siedzę przed komputerem i zaczynam kodować w którymś z języków, czuję się sfrustrowany i rozkojarzony, więc po prostu go wyłączam. Straciłem zainteresowanie wszystkim i martwię się o swoją przyszłość. Najgorzej jestem w tworzeniu logiki. Czy ktoś może mi pomóc lub poprowadzić mnie, abym wzbudził moje zainteresowanie programowaniem?


title: OOP podczas korzystania z projektanta GUI

text: Zwykle zajmuję się tworzeniem baz danych i stron internetowych, ale w tej chwili uczę się tworzenia desktopów za pomocą Mono i Gtk# przy użyciu IDE MonoDevelop. Używam również Stetic GUI Designer wewnątrz MonoDevelop do tworzenia GUI. **Jakie są najlepsze praktyki podczas korzystania z projektanta GUI do enkapsulacji dodatkowej logiki, która jest powiązana z widżetem używanym w projektancie GUI?** Na przykład mogę użyć widżetu TreeView, ale muszę też mieć logikę specyficzną dla tego, w jaki sposób renderowanie komórek, usuwanie zaznaczeń wierszy itp. Moją pierwszą myślą byłoby po prostu rozszerzenie Treeview w następujący sposób: public class MyTreeView : TreeView {} Ale nie sądzę, że mogę to zrobić i nadal używać GUI Designer (popraw mnie Jeśli się mylę). To, co robię teraz, to tworzenie klasy, która ma TreeView jako jej członka: public class MyTreeView { private widget; private MyTreeView(TreeView treeView) { this.widget = treeView; } } Czy jestem na dobrej drodze, czy jest jakiś specjalny i fantazyjny wzorzec lub funkcja języka C#, o której nie wiem, a którą powinienem użyć zamiast tego?


title: Jak udostępnić kod jako open source?

text: Mam mały program, który napisałem dla lokalnej grupy do obsługi nieco skomplikowanego problemu z planowaniem wielu spotkań w wielu lokalizacjach, które zmieniają się co tydzień zgodnie z pewnymi kryteriami. To niszowa potrzeba, ale nie zdziwiłbym się, gdyby istniały inne grupy, które mogłyby używać takiego oprogramowania. W rzeczywistości otrzymaliśmy od innych prośby o wskazówki dotyczące zakładania takiej grupy, a jeśli ich grupy stają się tak duże, mogą również potrzebować specjalnego oprogramowania, które pomoże w planowaniu. Planuję kontynuować rozwój programu i ostatecznie uczynić z niego internetową aplikację internetową, ale bardzo prosta wersja alfa została ukończona jako aplikacja konsolowa. Chciałbym udostępnić go jako open source, ale nie mam pojęcia, przez jaki proces powinienem najpierw przejść. W tej chwili wszystko, co mam, to kod Java, nawet nie dokładnie przetestowany. Nie pokazywałem kodu nikomu innemu. Brak dokumentacji. Nie wiem, gdzie umieściłbym kod, aby inni mieli do niego dostęp. Nie wiem nic o licencjonowaniu tego. Nie wiem, jakiego rodzaju wsparcia ludzie będą ode mnie oczekiwać, jeśli wydam go jako open source. Nie mam pojęcia, o co jeszcze powinienem się martwić. Czy ktoś może nakreślić dla mnie (lub opublikować artykuł(y) opisujące) proces zmiany oprogramowania open source z „zakodowanego” na „ukończone/dostępne”? Naprawdę nie chcę wprawiać się w zakłopotanie, robiąc dziwne rzeczy.


title: Dlaczego Apple nie „zmusza” użytkownika do aktualizacji, instalując potrzebne aktualizacje interfejsu API, gdy użytkownik pobiera nową aplikację?

text: Programowałem tutaj w iOS z klasą, która jest dostępna tylko dla iOS 6 i zastanawiałem się: po co implementować moją aplikację do obsługi wielu systemów operacyjnych, skoro moja aplikacja będzie dystrybuowana przez Apple za pośrednictwem App Store, a więc mogliby po prostu dołączyć/zainstalować dowolne źródło iOS potrzebne do mojej aplikacji? W dawnych czasach aktualizacje systemów operacyjnych przychodziły za pośrednictwem płyt CD, więc programiści nie mogli oczekiwać, że wszyscy będą mieli najnowszy system operacyjny, i że aktualizacje systemu operacyjnego musiały być zgrupowane w główne wydania i być bardzo nieliczne. Ale czy w dobie internetu, a zwłaszcza iOS, gdzie zarówno użytkownik, jak i twórcy oprogramowania są zmuszeni kupować i sprzedawać aplikacje za pośrednictwem App Store, nie powinniśmy oczekiwać, że nowe interfejsy API będą pobierane w tle podczas instalowania nowych aplikacje? i zmieniono na system operacyjny, aby następować stopniowo, a nie w głównych wydaniach?


title: Dlaczego problemy ze skalowalnością nie mogą być rozwiązane przez więcej serwerów?

text: Wiem, że duże strony internetowe cierpią z powodu problemów ze skalowalnością i sądzę, że więcej serwerów (sprzętu) może pomóc w radzeniu sobie z problemami skalowalności, ale widzę, że duże strony internetowe utknęły w skalowalności, nawet jeśli są w stanie poradzić sobie z kosztami nowych serwerów. Dlaczego więc duże firmy nie mogą poradzić sobie z problemami skalowalności przez większą liczbę serwerów?


title: Z jakimi problemami języki zorientowane na stos są dobrze i źle przystosowane?

text: Programowanie zorientowane na stos jest dość rzadko używanym paradygmatem (cóż, PostScript jest trochę używany pod maską tu i tam). Mając to na uwadze, w jakich problemach są dobre języki zorientowane na stos? Co zrobiliby lepiej niż robi [paradygmat]? Ponadto, na jakie problemy są złym wyborem? Czy programowanie stosowe jest tylko paradygmatem niszowym?


title: Jak wybrać między Powiedz, czy nie pytaj a Rozdzielenie zapytania polecenia?

text: Zasada „Mów, nie pytaj” mówi: > powinieneś starać się mówić przedmiotom, co chcesz, żeby zrobiły; nie zadawaj im pytań o ich stan, nie podejmuj decyzji, a potem mów, co mają robić. > > Problem polega na tym, że jako wywołujący nie powinieneś podejmować decyzji opartych > na stanie wywoływanego obiektu, które powodują zmianę stanu obiektu. Logika, którą wdrażasz, jest prawdopodobnie odpowiedzialnością wywoływanego obiektu >, a nie twoją. Podejmowanie decyzji poza obiektem > narusza jego hermetyzację. Prostym przykładem "Powiedz, nie pytaj" jest Widget w = ...; if (w.getParent() != null) { Panel rodzic = w.getParent(); rodzic.usuń(w); } a wersja tell to ... Widget w = ...; w.removeFromParent(); Ale co, jeśli muszę znać wynik metody removeFromParent? Moją pierwszą reakcją była po prostu zmiana removeFromParent, aby zwracała wartość logiczną oznaczającą, czy rodzic został usunięty, czy nie. Ale potem natknąłem się na wzorzec separacji zapytania polecenia, który mówi, aby tego NIE robić. > Stwierdza, że każda metoda powinna być albo poleceniem, które wykonuje akcję >, albo zapytaniem zwracającym dane do wywołującego, ale nie obydwoma. Innymi słowy, zadawanie pytania nie powinno zmieniać odpowiedzi. Bardziej formalnie, > **metody powinny zwracać wartość tylko wtedy, gdy są referencyjnie przezroczyste > i dlatego nie mają skutków ubocznych.** Czy te dwie naprawdę są ze sobą sprzeczne i jak mam wybrać między nimi? Czy pójdę w tej sprawie z Pragmatic Programmer czy Bertrandem Meyerem?


title: Pytanie dotyczące praw autorskich do danych aplikacji mobilnej

text: Chcę stworzyć aplikację mobilną do planowania ważnych wydarzeń sportowych. Moje wątpliwości polega na tym, czy będzie problem z prawami autorskimi w udostępnianiu harmonogramów, miejsc meczów, statystyk graczy, informacji o biletach itp. w mojej aplikacji, czy też powinienem zrobić z niej darmową lub płatną aplikację. Czy jeśli użyję informacji o oficjalnym kanale z wiadomościami sportowymi, będzie jakiś problem?


title: Strategia konfiguracji ról

text: Jesteśmy blisko rozpoczęcia nowego projektu przy użyciu `sf2` i prawdopodobnie `FosUserBundle`. Mając to na uwadze – jaka jest najlepsza strategia definiowania ról? Aplikacja będzie używana przez wiele oddziałów w naszej firmie (każdy oddział ma swojego kierownika i stałych pracowników), a także użytkowników zewnętrznych, których można podzielić na 3 grupy (na razie). Proponuję dwa możliwe rozwiązania: 1. **każda rola reprezentuje konkretną akcję w aplikacji** , czyli dodanie nowej akcji zadania jest opisane jako rola `task_new`. Wybrani użytkownicy otrzymują tę rolę, aby móc dodawać nowe zadania. 2. **każda rola reprezentuje zdolność użytkownika i każda akcja sprawdza, czy użytkownik ją posiada** np. podczas dodawania nowego zadania kontroler sprawdza, czy aktualny użytkownik ma rolę `task_access`. ~~naprawdę~~ jakoś mi się podoba podejście do tego problemu w naszej obecnej aplikacji - jest jedno miejsce, do którego dostęp ma tylko administrator, z listą wszystkich zarejestrowanych akcji. Użytkownicy są podzieleni na około 10 grup i wystarczy sprawdzić, czy ta grupa ma dostęp do tej akcji. W tym przypadku nie jest wymagane żonglowanie kodem, ale obawiam się, że spowoduje to pewne ograniczenia lub przerost ról w nowej aplikacji. Naprawdę boję się spędzać zbyt dużo czasu na zmianie kodu zabezpieczającego w konkretnym kontrolerze/akcji, tzn. gdy nowy użytkownik musi uzyskać dostęp do określonego miejsca, będę musiał przejść do kodu, obsłużyć nową rolę, kod będzie rosła i tak dalej. Chcę, aby ten czas był jak najkrótszy i jak najbardziej elastyczny. Uważam, że istnieje kilka świetnych rozwiązań tego problemu. Czy mam rację?


title: Co oznacza „pomiędzy” i „w zakresie” w świecie typów numerycznych?

text: Dany jest liczbą całkowitą o wartości 5. Dany jest zakresem z wartościami początkowymi i końcowymi 2 i 5. Czyli liczba całkowita 5 jest teraz pomiędzy tym zakresem? Co powinna zwrócić metoda 'InBetween()' i która z nich jest poprawną reprezentacją 'between': int val = 5 if(val >= 2 && val <= 5) // zwróci true if(val > 2 && val < 5) // zwróci fałsz


title: Teoria struktury danych na podstawie przepisywania grafów

text: Przede wszystkim szukam książki, publikacji, projektu lub jakiejkolwiek informacji, która prawdopodobnie powinna przekraczać limity normalnie nakładane na odpowiedzi na tego rodzaju forum. Znam zasady nie proszenia o poradę przy książce, ale wstrzymaj oddech, nie głosuj jeszcze za zamknięciem. Przeszukałem każde miejsce i wróciłem z pustymi rękami. W końcu natknąłem się na wzmiankę o książce "Teoria struktur danych według gramatyki relacyjnej i grafowej", ale nie mogę jej znaleźć. Ta książka jest naprawdę stara, autor nie kontynuował prac w tym samym kierunku, zamiast tego opublikował kilka książek związanych z praktykami programistycznymi, a nie teorią. Cóż, nie mogę uwierzyć, że to była jedyna książka. Pomożesz mi znaleźć więcej? TL;DR Motywacja, jeśli jesteś zainteresowany. W ciągu ostatnich kilku lat starałem się dotrzeć do każdego, nawet bardzo egzotycznego języka, aby mieć lepsze pojęcie o tym, jak organizują swój system struktur danych. Powodem tego było to, że języki głównego nurtu dostarczają programistom bardzo fragmentaryczny, niezunifikowany pod żadnym rygorystycznym zestawem narzędzi teoretycznych. Niektórzy próbują zbudować hierarchię/heterarchię rzeczy, które wkładają do tego koszyka, ale tak naprawdę jest to po prostu przypadkowe. SQL ma bardzo fajną teorię (algebrę relacyjną) do tworzenia kopii zapasowych, niestety, która nie obejmuje bardzo powszechnych rzeczy, takich jak ciągi znaków lub listy itp. Przez jakiś czas miałem przeczucie, że ogólny przypadek dowolnej struktury danych musi być graf i inne struktury danych byłyby pewnymi rodzajami grafu zdegenerowanego (lista jest acyklicznym grafem bezpośrednim z wymogiem, aby nie było wierzchołka, który łączyłby więcej niż jeden inny wierzchołek itp.) lub „rzutem”, takim jak relacja dwuwymiarowa. Znalazłem kilka stron z książki, o której wspomniałem wcześniej, gdzie autor wyraża to, co uznałem za ten sam/podobny pomysł. Ale musi być w tym coś więcej. Podobnie jak algebra relacyjna definiuje zbiór operacji na relacjach, ta książka wspomina o podstawowych operacjach grafowych, ale szczegóły zostały utracone.


title: Jak poradzić sobie z dużym kanałem rss na stronie

text: Serwisy portalowe mają zazwyczaj bardzo dużą liczbę postów. Na przykład mam 50 000 postów na stronie internetowej. Stworzyłem nawet mapę witryny Google jako fragmenty i umieściłem ją w głównym pliku mapy witryny. Ale nie mam pojęcia, jak sobie radzić z kanałem RSS. 50 000 postów w rozmiarze pliku RSS będzie bardzo duże, jak poradzić sobie z tą sytuacją?


title: Który DVCS (git czy hg) jest łatwiejszy dla studentów programowania?

text: Trochę kontekstu: jestem na 3 roku studiów. studenci są podzieleni na czteroosobowe zespoły. Prawie wszyscy będą pracować pod Windowsem (oprócz kilku takich jak ja, którzy są na Linuksie). W ramach szkolnego programu nauczania wkrótce zaczniemy pracę nad projektem dla prawdziwego klienta, ale wraz z innym zespołem zastanawiamy się, w jaki sposób najlepiej udostępnić sobie nasz kod. Od 3 lat pracuję w niepełnym wymiarze godzin i mam duże doświadczenie w korzystaniu zarówno z git, jak i mercurial w różnych projektach, więc nie mam żadnych problemów z używaniem jednego lub drugiego systemu. Jednak żaden z moich kolegów z zespołu nigdy wcześniej nie korzystał z systemu kontroli wersji. Jest też inny zespół, który próbował używać SVN, ale miał poważne problemy i wolałby wypróbować coś innego, więc poprosili o moją opinię. Moje przemyślenia: Słyszałem, że mercurial + TortoiseHg ma lepszą integrację pod oknami, ale zastanawiam się, czy koncepcja anonimowych głów może ich zmylić, nawet jeśli je wyjaśnię. Z drugiej strony uważam, że gałęzie git są łatwiejsze do zrozumienia dla początkujących (wyraźne rozdzielenie pracy dla każdego programisty), ale nie działają tak dobrze pod Windows.


title: Czy złą praktyką jest rozwiązywanie argumentów o wartości null do domyślnych zmiennych statycznych?

text: Najpierw pokażę przykład (napisany w ActionScript 3.0): class GameObject { public static function MakeFromName( pName:String, pAtlas:TextureAtlas = null, pGameData:Object = null ):GameObject { // Jeśli te argumenty nie zostaną przekazane , domyślnie są to // currentAtlas i currentData statycznej INSTANCJI. if (pAtlas == null) pAtlas = GameBaseClass.INSTANCE.currentAtlas; // <-- if (pGameData == null) pGameData = GameBaseClass.INSTANCE.currentData; // <-- var theSymbolData:Object = pGameData.symbols[pName]; var theSymbolTextures:Vector.<Texture> = pAtlas.getTextures( pName ); var nowyGO:GameObject = nowy GameObject(); newGO.MakeFromData( pNazwa, Tekstury Symbolu, Dane Symbolu ); powrót nowyGO; } // MakeFromData zdefiniowane gdzieś w kodzie... } Prowadzę tę debatę ze współpracownikiem dotyczącą powyższych parametrów „null” (w zasadzie opcjonalnych). Dla mnie sensowne jest automatyczne rozwiązanie tych dwóch parametrów ( _pAtlas_ i _pGameData_ ) do jakiegoś centralnego zasobu (w tym przypadku głównego Atlasu i Danych używanych w grze). Ta `GameBaseClass` idzie w parze z `GameObject`, więc nie widzę nic złego w odwoływaniu się do właściwości pojedynczej instancji. Deweloper nadal ma możliwość dostarczenia własnego Atlasu i Danych. ALE mój współpracownik uważa, że to za bardzo łączy ze sobą zajęcia - to nie jest wystarczająco luźne. Rozumiem jego punkt widzenia, jeśli faktycznie odnosił się do klas pochodnych używanych w grze (np. `AwesomeGame.INSTANCE.currentAtlas`, gdzie _AwesomeGame_ rozszerza _GameBaseClass_ ). Ale tak nie jest! Z jego punktu widzenia deweloper powinien być zmuszony do wprowadzania wszystkich parametrów, nic opcjonalnego (w tej konkretnej sytuacji). Czy istnieje sposób na to, aby mieć to, co najlepsze z obu światów? Jedyny inny sposób, jaki przychodzi mi do głowy, to po prostu napisanie dwóch oddzielnych metod (jedna z drugim i trzecim argumentem, a druga bez), ale to nadal nie rozwiązuje problemu z zależnością GameBaseClass. Jakieś pomysły? **EDYTUJ: W powyższym przykładzie użyłem ActionScript 3.0, który nie obsługuje przypisywania zmiennych niestałych. Innymi słowy, pozwala na zakodowane na stałe liczby, ciągi znaków (również puste), wartości logiczne i stałe (chociaż nie sądzę, że działałoby to ze stałymi nieprymitywnymi, może być jednak błędne). Ponieważ `GameBaseClass.INSTANCE.currentAtlas` jest właściwością, która może ulec zmianie w czasie życia uruchomionej aplikacji, nie może być wstawiona jako wartość domyślna 'czasu kompilacji'. Mam nadzieję, że to ma więcej sensu!**


title: Czy udostępnienie kodu źródłowego wpływa na zdolność generowania przychodów?

text: Pracujemy nad frameworkiem .Net, który ostatecznie sprowadza się do pojedynczej biblioteki DLL. Zamierzamy pobierać opłaty za komercyjne wykorzystanie frameworka, ale udostępnimy go bezpłatnie do użytku otwartego/niekomercyjnego. W tej chwili przybliżony plan polega na administrowaniu tym za pomocą dość prostej licencji, która zostanie wydana bez względu na to, czy używasz jej za darmo, czy płacisz. Zastanawiamy się, czy udostępnić kod źródłowy. To nasze postrzeganie (i nasze własne preferencje), że o wiele bardziej atrakcyjne jest używanie czegoś, w którym masz dostęp do kodu źródłowego. Interesuje mnie, czy ludzie myślą, że udostępnienie kodu źródłowego uszkodzi naszą zdolność do zarabiania pieniędzy na frameworku, czy też zachęci do większego użycia i wystarczająco dużo „dobrych” ludzi zaaranżuje zapłatę za właściwą licencję, jeśli użyje go komercyjnie. Mam wrażenie, że generalnie operacje komercyjne nie zawadzają na froncie licencjonowania, więc udostępnienie kodu źródłowego będzie tylko zachęcać do korzystania, a tym samym ostatecznie generować większe przychody, ale byłbym zainteresowany poglądami/doświadczeniami innych.


title: Open-source czy closed-source dla SaaS?

text: > **Możliwy duplikat:** > Czy udostępnienie kodu źródłowego wpływa na zdolność generowania przychodów? Początkowo przez cały czas korzystałem z zamkniętego źródła, a przynajmniej do czasu, gdy będziemy mieli dobrą reputację, a open-sourcing tylko poprawi tę reputację. Ostatnio jednak myślałem o udostępnieniu całego rozwiązania. Różne popularne rozwiązania SaaS mają otwarte źródła w ramach AGPL i generują przychody. Na przykład Gitorious (http://gitorious.com/subdomain) to AGPL, ale zarabiają. OpenERP czerpie zyski przy użyciu tego samego mechanizmu, co Gitorious, reklamując, że utrzymuje serwery i utrzymuje serwery online. Buduję rozwiązanie e-commerce i rozważam możliwość bezpłatnego korzystania z części systemu, opłatę miesięczną za korzystanie z całego systemu. Czy tworząc rozwiązanie open source, konkurent nie mógłby po prostu pobrać mojego projektu i zaoferować go za niższą opłatę miesięczną? Jeśli udostępnię oprogramowanie typu open source, czy zwiększy to czy zmniejszy moje przychody?


title: Czy moja wewnętrzna aplikacja MVC/MVVM powinna używać Web Services for Persistence?

text: Mówiąc tylko o wewnętrznych aplikacjach lub intranetowych aplikacjach webowych... W niektórych firmach widziałem ich element logiki biznesowej (Model w MVC/VM w MVVM) po jednej (lub obu) stronach usługi sieciowej. A po drugiej stronie serwisu internetowego jest Trwałość. MVC/MVVM > Warstwa usług > Trwałość Ta opcja jest przeznaczona tylko dla klientów korzystających z intranetu/wewnętrznych aplikacji, a zarówno kod sieciowy lub aplikacji, jak i biblioteki dll trwałości (zwykle ORM) znajdują się na tym samym serwerze lub nawet w tym samym folderze. Jestem przyzwyczajony do oglądania wewnętrznych aplikacji i witryn intranetowych, które odwołują się do warstwy biznesowej… następnie ta warstwa biznesowa łączy się z trwałością. Tak więc sama aplikacja jest nietrwała. Ale z moimi własnymi aplikacjami, jeśli coś musiało zostać ujawnione na zewnątrz, to coś jest otwierane za pośrednictwem usługi internetowej. Ale poza tym wszystko pozostaje wewnętrzne. Czy jest jakiś powód, dla którego widziałem, jak robi to kilka różnych firm? Wydawało się, że sami nie znają odpowiedzi.


title: Modułowość Javascript, serwerowe MVC i rzeczywistość biznesowa

text:
Rozumiem, że jest to _bardzo_ szerokie pytanie, ale pracowałem indywidualnie z różnymi aspektami tego problemu i staram się połączyć wszystkie koncepcje i technologie. Chciałbym określić, że odpowiedzi powinny zawierać następujące technologie: * C# * MVC 3 w/ Razor * JavaScript w/jQuery Wszystko powyżej i poza tymi (takie jak Backbone.js, Entity Framework itp.) są mile widziane jako sugestie, jeśli pomagają odpowiedz na pytanie, które brzmi: > **Jaka jest _optymalna_ strategia, jeśli korzystasz z wyżej wymienionych technologii > organizowania kodu i logiki przy jednoczesnym zachowaniu skalowalności i możliwości > tworzenia bogatego, szybkiego i przejrzystego interfejsu użytkownika?** W idealnym przypadku należy się skupić postaw na rozwiązanie wdrażane w środowisku biznesowym/korporacyjnym. W związku z tym powyższa lista technologii **nie zostanie zmieniona**, więc nie oferuj rozwiązań z napisem „powinieneś użyć _xxx_ zamiast _yyy_, którego używasz teraz”. **Tło** Na co dzień pracuję z jQuery, zaadoptowałem MVC ASP.NET i od dłuższego czasu pracuję z C#. Możesz więc prezentować rozwiązania zakładające znajomość tych technologii od średnio zaawansowanego do zaawansowanego. Podzielę pytanie na **mniejsze części**, aby łatwiej było odpowiedzieć na: **1\. Struktura projektu** Biorąc pod uwagę, że pracuję z ASP.NET MVC (w **Visual Studio 2010** ) chciałbym mieć rozwiązanie struktury katalogów, które oferuje pewną akceptację głównego układu tego typu aplikacji. Przypuszczam, że coś takiego jak Brunch, ale z nieco bardziej szczegółowymi informacjami na temat tego, co zawierałby każdy folder i jak działa z innymi obszarami aplikacji. **2\. Dostęp do danych** Chciałbym modulować dostęp do danych tak bardzo, jak to możliwe, za pomocą struktury typu API. Możesz założyć wiele obiektów POCO (`User`, `UserGroup`, `Customer`, `OrderHeader`, `OrderDetails`, itp.), ale będą też pewne złożone raporty, które będą wymagały intensywnego przetwarzania danych SQL i starannego renderowania interfejsu użytkownika. **EF + LINQ** są fantastyczne dla tych pierwszych, ale nie tak bardzo dla tych drugich. Nie mogę znaleźć czegoś, co wydaje się pasować do obu scenerii, nie będąc zbyt skomplikowanym lub zbyt prostym. **3\. Organizacja kodu po stronie klienta i renderowanie interfejsu użytkownika** Podobnie jak większość programistów, którzy po raz pierwszy korzystali z jQuery, wpadłem w pułapkę łączenia kodu, gdziekolwiek musiał się udać, ale szybko odkryłem, że nawarstwia się i staje się brzydki. Chociaż od tamtego czasu robiłem skoki, wciąż mam problemy z modularyzacją mojego kodu i pracą z różnymi częściami interfejsu użytkownika bez powtarzania kodu. Jako przykład, typowy fragment kodu, który mógłbym napisać, wyglądałby tak, skomentowałem rzeczy, które mi przeszkadzają ( _zauważ, że od tego czasu zmieniłem na używanie odroczonych wywołań AJAX i oddzieliłem rzeczywiste żądania danych od manipulacji DOM_ ): $('#doSomethingDangerous').click(function () { // może najpierw coś potwierdzić if (confirm('Czy na pewno chcesz to zrobić?')) { // pokazać spinner? Nie muszę tego powtarzać na każdej stronie $('#loading').show(); // może strona powinna powiadamiać użytkownika o tym, co się dzieje oprócz okna dialogowego?$('#results').show( ).html('
Proszę czekać, może to chwilę potrwać...
'); $.ajax({ url: 'blah/DoDangerousThing', success: function (data) { // Wyniki oczywiście zostanie załadowany do DOM, czy istnieje lepszy sposób na ciągnięcie? tego typu specyficzny kod z połączeń dostępu do danych? $('#wyniki').empty(); $('#results').append('' + data.length + ' użytkownicy zostali dotknięci tą niebezpieczną aktywnością'); $('#results').append('
'); // Niedawno zacząłem używać szablonów jQuery do tego rodzaju logiki, czy to jest droga? $(data).each(function (i, user) { $('#results').append('
' + user.Username + '
'); }); $('#results').append('
'); // Trzeba ukryć spinner, znowu wolałbym zrobić to gdzie indziej $('#loading').hide(); } }); } }); **Pytania ogólne** * Klient MVC a serwer MVC? Mój projekt jest już strukturą MVC po stronie serwera, więc czy nadal istnieje potrzeba klienta MVC, takiego jak zapewnia Backbone.js? * Czy pliki JavaScript powinny być tworzone dla każdego obiektu (takie jak `OrderHeader.js`), a następnie minimalizowane/scalane podczas budowania? A może powinien istnieć plik `Order.js`, który zawiera logikę dla `OrderHeader, OrderDetails, Reports` itp.? * Jak należy obsługiwać złożone zapytania? W tej chwili moją wiodącą teorią jest `/Reports/Orders-by-Date/` lub coś w tym stylu i używam niestandardowego zapytania SQL, które renderuje niestandardowy zestaw danych (lub `ViewModel`) do widoku Razor. Ale co ze stronicowaniem, sortowaniem itp.? Czy lepiej to zrobić po stronie klienta czy serwera? (załóżmy, że większy zbiór danych - 2 do 3 sekund zapytania SQL) * Przeczytałem Project Silk firmy Microsoft. Czy to dobra droga? Jak wypada w porównaniu z Backbone.js lub innymi? * Jestem bardzo przyzwyczajony do architektury N-warstwowej, czy te koncepcje w jakiś sposób wyrzucają to przez okno? Wygląda na to, że MVC jest jak kilka mini-poziomowych sekcji w tym, co w przeszłości byłoby front-endem lub najwyższym poziomem. Ponownie, im bardziej _konkretne_ są twoje odpowiedzi, tym lepsze będą. **Przeczytałem dużo dokumentacji i przykładów na wysokim poziomie** , staram się **lepiej zrozumieć przekładając to na przykłady z prawdziwego świata**.


title: Wynaleźć koło na nowo czy użyć istniejącego koła?

text: Chciałbym zapytać o zarządzanie projektami. Dostałem projekt, który ma pewne wymagania, można to zrobić od podstaw przy użyciu dużego frameworka. Może niektóre narzędzia są potrzebne do niektórych funkcji. Ale korzystanie z frameworka wydaje się bardzo fajne, wydaje się, że zmniejsza ilość pracy, ale najpierw trzeba przestudiować framework. Ale badanie ram wydaje się bardzo duże dla zespołu. Więc co o tym myślisz? Po prostu zrób to od zera lub przestudiuj ramy i zacznij od „Stania na ramionach gigantów”?


title: Czy powinienem nauczyć się języka programowania przed rozpoczęciem studiów na kierunku Inżynieria Komputerowa?

text: Zanurzyłem się w programowaniu C++, ale tak naprawdę nie zagłębiałem się w to. Chcę wiedzieć, czy rzeczywiście muszę się tego nauczyć lub innych języków, zanim pójdę na studia na kierunku inżynieria komputerowa, czy po prostu zamierzam się tego nauczyć w szkole?


title: Czy jest jakaś wtyczka do lepszego przeglądania wyjątków?

text: Nie sądzę, że jestem jedyną osobą, która uważa, że okno wyjątków programu Visual Studio jest bardzo słabe. Informacje o śledzeniu nie są sformatowane i są mało czytelne. * **Czy jest jakaś wtyczka lub narzędzie zewnętrzne, które lepiej wyświetla informacje o wyjątkach?**


title: Pytanie dotyczące tworzenia języka skryptowego

text: Powiedzmy na przykład, że chciałem komuś zapłacić za stworzenie dla mnie języka programowania lub języka skryptowego. Jakiego rodzaju dokumentu potrzebowaliby, aby w pełni zrozumieć, czego dokładnie chcę. Chodzi mi o to, czy istnieją standardowe dokumenty opisujące nowy język programowania/skryptów, o którym mowa?


title: Czy istnieje wzorzec projektowy do dynamicznego stosowania transformacji lub filtrów do modelu?

text: Na przykład istnieje model zdarzenia z pewnymi atrybutami, które można dostosować za pomocą istniejących procesów: może taki, który patrzy na stempel geolokalizacji i określa pobliskie miasto; inny, który sprawdza liczbę rejestracji i stosuje zaokrąglenia; inny, który oblicza lokalną popularność na podstawie liczby uczestników w porównaniu z wydarzeniami w pobliżu. Ważnym elementem jest możliwość **dynamicznego porządkowania operacji** \--filtry/transformacje/zadania przetwarzania--aby móc przekazać zdarzenia do obiektu przetwarzającego, który uporządkuje zadania we właściwej kolejności dla konfiguracji /situation, a następnie przekazuje modele w celu ich zastosowania. Mogę wymyślić kilka brzydkich sposobów, aby tak się stało, ale chcę wiedzieć, czy istnieje wzorzec SOLID, który pozwoliłby na lepszy, bardziej testowalny kod.


title: Pojedynczy wynik jako odpowiedź REST/ODATA na GET

text: W interfejsie API, który powinien być zarówno spokojny, jak i obsługiwać OData dla różnych typów klientów. Mam punkt końcowy, który zawsze zwraca jeden wynik. Czy powinienem: * Zwrócić jednostkę jako pojedynczą jednostkę? * Umieścić go na liście, która zawsze będzie zawierała 1 element? * Czy coś zupełnie innego? Zwykle żądanie Get zwraca listę elementów, a Get(int key) zwraca pojedynczy element na podstawie klucza, jednak jest to _the_ wyjątek. Nie chcę być niespójny, ale umieszczenie pojedynczego elementu na liście wydaje się nieproduktywne. public SingleEntity Get() { } public IEnumerable<SingleEntity> Get() { }


title: Jak alokować zagadnienia przekrojowe w zwinnym planowaniu rozwoju oprogramowania?

text: Mój pracodawca przechodzi od tradycyjnych projektów kaskadowych do zmodyfikowanej wersji agile. Praca jest podzielona na historie, które są szacowane i sekwencjonowane w dwutygodniowe iteracje. Każda iteracja zawiera punkty do budowania, testowania i akceptowania funkcji. Historie koncentrują się na testowalnych funkcjach biznesowych. Nie ma możliwości zaplanowania i rozliczenia przekrojowych problemów, takich jak projektowanie, architektura, infrastruktura lub (o ironio) zarządzanie projektami. Czy zespoły zwinne powinny wyraźnie uwzględniać historie lub zadania dotyczące tych przekrojowych problemów? Jak Twój zespół radzi sobie z zadaniami, które nigdy nie odchodzą? Czy są „poza książką”?


title: Czy mogę przejąć prawa do witryny, którą stworzyłem, gdy technologie back-end, takie jak MySQL i PHP, nie zostały przeze mnie wymyślone?

text: To tylko przykładowy przypadek. Próbuję wskazać, w jaki sposób możesz twierdzić, że coś (oprogramowanie/strona internetowa/lub jakiekolwiek produkty „dotykowe”) jest twoje, jednocześnie korzystając z istniejących technologii? (takich jak silnik bazy danych, języki programowania, kompilatory, a nawet sam komputer!). Jeśli możesz, jak daleko możesz to odebrać?. Czy możemy umieścić informację (Copyright (c) by Me) na stronie internetowej zbudowanej na bazie LAMPP?. Czy mogę umieścić własną informację o prawach autorskich do programu, który napisałem, nad OpenGL? Mam podstawowe wyobrażenia o licencjach na oprogramowanie, takich jak GPL, MIT, LGPL itp. Nadal nie rozumiem faktu, że wszyscy jesteśmy cały czas wspierani przez istniejące technologie, takie jak DBMS, kompilatory, IDE i nawet komputer, którego używamy, teraz, jeśli tworzymy coś z tych technologii, jak dalece możemy uznać go za swój?


title: Biblioteka mnemoniczna Intel do konwertera kodu maszynowego

text: Próbuję wykonać następujące czynności: weź pojedynczą instrukcję IA32 w składni Intela (taką jak `ADD EAX, EBX`) i wygeneruj odpowiedni kod maszynowy dla tej instrukcji. Czy jest jakaś mała biblioteka, najlepiej open source, która może to dla mnie zrobić?


title: nieulotna pamięć wirtualna dla kontenerów C++

text: Czy istnieje proces zarządzania pamięcią wirtualną, który umożliwiłby programowi korzystanie ze standardowych struktur i klas kontenerów, ale zachowanie tych struktur i ich danych, gdy program nie jest uruchomiony (lub jest używany), do wykorzystania przez program w późniejszym czasie? Powinno to być możliwe, ale czy można to zrobić bez zmiany kodu źródłowego i jego (kontenerowych) deklaracji? Czy istnieje standardowy sposób na zrobienie tego?


title: Jaką złą praktyką jest wymaganie wywoływania funkcji w celu uzyskania znaku?

text: Czasami zdarza mi się pisać komentarze do metod klasowych w następujący sposób: class A : public Base { public: /** * Ustawia zmienną; * należy wywołać przed ImplementsInterfaceMtehod(), * w przeciwnym razie nie ma żadnego efektu. */ void SetSomeVariable( var_type value ); Virtual void ImplementsInterfaceMethod(); } Wywołujący `Base::ImplementsInterfaceMethod` oczywiście nie wiedzą o zmiennej i nie powinni. Ale użytkownicy „A” powinni ustawić zmienną, jeśli chcą, aby zadziałała. Nie jest wymagane ustawianie zmiennej (w przeciwnym razie może to być parametr dla konstruktora), więc nie mogę zgłaszać wyjątków w `ImplementsInterfaceMethod`, jeśli nie jest ustawiona. Czy to oznaka jakiejś typowej złej praktyki? Czy jest lepszy sposób niż napisanie komentarza, jak pokazano, aby sobie z tym poradzić? **edytuj** oto bardziej konkretny przykład przypominający część kodu przetwarzania obrazu 3D w czasie rzeczywistym; ze względu na część czasu rzeczywistego i fakt, że obrazy mogą stać się ogromne, wszystko musi być wstępnie przydzielone. class DataProcessor { public: /** * Ustawia wymiary danych dla następnego wywołania Process(). * Może być używany przez implementacje do konfiguracji wewnętrznych, np. prealokacji. * Po zwróceniu zawiera wymiary, które zostaną zwrócone * przez wywołanie Process, podane dims jako wymiary wejściowe. * (A) */ virtual bool SetInputDimensions( const Dimensions& dims, Dimensions& out ) = 0; wirtualny proces bool( const Data& in, Data& out) = 0; }; class ImageStitcher : public DataProcessor { /** * Ustaw rozmiar obrazu wyjściowego zwracanego przez Process() jako współczynnik, * np. gdy size == 2, obrazek będzie dwa razy większy. * (B) */ void SetOutputSize( const double size ); /** * Ustaw pozycję, w której następny obiekt Data przekazany do Process() * zostanie zszyty. * (C) */ void SetStitchPosition( double x, double y, double alpha ); } Tak więc tutaj (A) musi zostać wywołane przynajmniej raz przed wywołaniem Process(). Które wymuszam, zwracając błąd w Process(), jeśli tak nie było. W większości przypadków wymiary nie są znane podczas konstruowania obiektu, więc parametr konstruktora nie jest opcją. Dwa główne komponenty wykorzystują interfejs DataProcessor: wszystkie procesory znajdują się w sieci procesorów, a ta sieć nie jest świadoma typu procesora, po prostu zajmuje się przesyłaniem danych między nimi, wywołując wielokrotnie Process(). Inny składnik zajmuje się konfiguracją sieci, wywołując SetInputDimensions(), ponownie nieświadomy typu procesora. (B) należy wywołać przed wywołaniem SetInputDimensions(), ponieważ definiuje rozmiar wynikowego obrazu. (C) powinno być wywoływane przed każdym wywołaniem przetwarzania, w przeciwnym razie zszywarka nie wie, gdzie umieścić obraz. Teraz cała ta sieć przetwarzania jest używana w aplikacjach komercyjnych i działa bardzo dobrze, ponieważ upewniłem się, że wszystko jest wywoływane ładnie w porządku. Jednak za każdym razem, gdy piszę „trzeba/należy zadzwonić wcześniej”, wszędzie zaczynają dzwonić dzwonki..


title: Jakie było pierwsze komercyjne oprogramowanie typu open source?

text: Zgodnie z artykułem Wikipedii o otwartym kodzie źródłowym, filozofia współdzielenia kodu była stosowana w projektach od wczesnych dni komputerowych (głównie poprzez współdzielenie kodu przez uniwersytety). Jednak jestem ciekaw, co (i kiedy) było pierwszym komercyjnym oprogramowaniem typu open source (udało się czy nie)? Jeśli jest jakieś zamieszanie na temat komercji, definiuję to tak: „Osiąganie zysku jako główny cel”.


title: Jak działało programowanie, gdy programiści używali kart perforowanych?

text: Widziałem to: Nauka programowania na kartach perforowanych i widziałem to: http://en.wikipedia.org/wiki/Computer_programming_in_the_punched_card_era, ale pozostawiają one wiele do życzenia. Czy ktoś może mi wyjaśnić, jak programiści programowali, kiedy używali kart perforowanych? W szczególności system komputerów wejściowych służący do wyprowadzania instrukcji z samej karty dziurkowanej. Nie wiem zbyt wiele o retrokomputerach, więc każdy system wprowadzania danych, który znasz, byłby w porządku. Mile widziane są również bardziej ogólne odpowiedzi.


title: Czy kapitał własny powinien być przemienny w ramach hierarchii klas?

text: Operację „równa się” można łatwo zdefiniować w sposób, który nie jest przemienny. Podczas zapewniania równości w stosunku do innych typów, istnieją oczywiście sytuacje (w większości języków), w których równość nie będąca przemienna jest nieunikniona. Jednak w ramach własnej hierarchii dziedziczenia, w której główna klasa bazowa definiuje członka równości, programista ma większą kontrolę. W ten sposób można stworzyć sytuacje, w których (A = B) ≠ (B = A), gdzie A i B wywodzą się z klasy bazowej T Podstawiając `=` odpowiednią odmianą dla danego języka. (`.Equals(_)`, `==` itd.) Wydaje mi się to niewłaściwe, jednak zdaję sobie sprawę, że mogę być stronniczy ze względu na wykształcenie w matematyce. Nie zajmuję się programowaniem wystarczająco długo, aby wiedzieć, co jest standardową/akceptowaną/preferowaną praktyką podczas programowania. Czy większość programistów po prostu akceptuje `.Equals(_)` może nie być przemienne i kodować w sposób bezpieczny. Czy oczekują przemienności i denerwują się, jeśli tak nie jest. Krótko mówiąc, czy pracując w hierarchii klasowej, czy powinienem się starać, aby równość była przemienna?


title: Jak umieścić bazę danych online?

text: Mam bardzo początkujące pytanie dotyczące tworzenia stron internetowych. Mam doświadczenie z JSP, Hibernate i MAMP, aby stworzyć prosty system do śledzenia zapasów i sprzedaży. Ale to wszystko odbywało się lokalnie na jednym komputerze. Tym razem chcę stworzyć system, który byłby dostępny online. Ma pomóc mojej matce śledzić jej interesy, gdziekolwiek się udaje. Pojawiłyby się więc podobne aspekty, takie jak śledzenie zapasów i sprzedaży. Rozumiem, że musisz mieć serwer, na którym będą przechowywane wszystkie pliki. Ale nie rozumiem, w jaki sposób możesz uzyskać dostęp do swojej bazy danych online. Lub jakie aplikacje lub produkty powinny być używane. Obecnie hostem mojej bazy danych jest localhost. Jak umieścić to w Internecie, aby nadal można było wykonywać operacje CRUD? Czy są jakieś wskazówki, jak to zrobić?


title: Czy w Scrumie należy podzielić backlog na funkcjonalny backlog i techniczny backlog, czy nie?

text: W naszych zespołach Scrum korzystamy z backlogu, który zawiera głównie tematy funkcjonalne, ale czasami zawiera także tematy techniczne. Zaletą posiadania 1 backlogu jest to, że łatwiej jest wybrać tematy do następnego sprintu, ale mam kilka pytań: * Po pierwsze, bardziej logiczne wydaje mi się posiadanie oddzielnego backlogu technicznego, w którym sami programiści mogą dodawać czysto techniczne elementy , np: moglibyśmy poprawić wydajność w tej metodzie, w tej klasie brakuje trochę dokumentacji technicznej, ... Mając jeden backlog, wszyscy programiści zawsze muszą przejść przez właściciela produktu, aby dodać swoje tematy do backlogu, co wydaje się dodatkowe, niepotrzebne praca dla właściciela produktu. * Po drugie, jeśli masz właściciela produktu, który koncentruje się tylko na elementach czysto funkcjonalnych, elementach czysto technicznych (takich jak brakująca dokumentacja techniczna, kod, który ulega erozji i powinien zostać zrefaktoryzowany, klasy, które zawsze powodują problemy podczas debugowania, ponieważ nie mają stabilne podstawy i powinny być refaktoryzowane, ...) zawsze kończą na końcu listy, ponieważ „nie służą bezpośrednio klientowi”. Mając osobny backlog techniczny i czas zarezerwowany w każdym sprincie na te czysto techniczne elementy, możemy ulepszać aplikacje funkcjonalnie, ale także dbać o ich zdrowie wewnątrz. Jakie jest najlepsze podejście? Jedna czy dwie zaległości?


title: Programowanie społecznościowe

text: **Tło** Właśnie zacząłem pracować dla religijnej organizacji non-profit. Podobnie jak w przypadku większości organizacji non-profit, organizacja jest uboga w zasoby i nie ma działu IT, o którym można by mówić. W ciągu dwóch miesięcy tutaj otrzymałem 20 próśb o strony internetowe, aplikacje i wewnętrzną automatyzację. Wiele z tych 20 próśb ma wartość merytoryczną i przyniesie korzyści organizacji. Jestem web developerem .net i jako taka społeczność open source jest dla mnie stosunkowo obca... **Pytanie** _Ze względu na to pytanie, powiedzmy, że mówię o budowaniu jednej, dużej strony internetowej. _ Czy istnieje oprogramowanie (mam nadzieję, że oparte na sieci WWW), które pozwoliłoby mi publikować wymagania i zasoby (grafikę i CSS) dla witryny, a następnie zapraszać programistów do udziału w tworzeniu witryn? Jako prosty przykład mógłbym opublikować wymagania i dane dla strony o nas, a osoba wskazałaby, że mogłaby/spełniłaby wymaganie. Po zakończeniu mogli przesłać nowy kod źródłowy do udostępnionego repozytorium (github).