title: Czy (w większości) aplikacje internetowe JavaScript po stronie klienta są wolniejsze czy mniej wydajne?

text: Jestem w trakcie pisania aplikacji internetowej do pracy. Wszystko jest od podstaw. Jestem programistą PHP od około 13 lat, programistą Node.js od 2 lat i nie brakuje mi doświadczenia z JavaScriptem. Uwielbiam Node.js, a ostatnio przebudowałem w nim firmowe API... Tak więc, planując tę aplikację internetową, rozważam podejście, które polega na posiadaniu API Node.js do pobierania danych z serwera, ale renderowanie wszystkiego w przeglądarka. Użyj AJAX do pobierania danych, History API do ładowania stron i wzorca podobnego do MVC dla różnych składników. Kilka lat temu przeczytałem artykuły opisujące odbudowę twitterów. Była to mniej więcej aplikacja JavaScript po stronie klienta, ale kilka lat po jej uruchomieniu zaczęli przenosić wiele przetwarzania/renderowania z powrotem na serwer, twierdząc, że aplikacja znacznie się poprawiła pod względem szybkości. Tak więc moje pytanie brzmi, jak mówi tytuł, czy aplikacja zorientowana na klienta jest znacznie wolniejsza?


title: Jak zespół może zastosować metodologię Scrum bez wyraźnego klienta?

text: Nasz zespół stara się zrozumieć i dostosować Scrum i inne zwinne praktyki, ale nie możemy dowiedzieć się, jak radzić sobie z opiniami klientów, gdy nie ma klienta. Każdy dokument na ten temat podkreśla, jak ważne jest zaangażowanie klienta w każdy sprint i jak wczesna informacja zwrotna pomaga szybko rozwiązywać problemy i maksymalizować satysfakcję dla obu stron. Jasno rozumiem ten punkt. W naszym przypadku nie mamy jednego klienta. Tworzymy stronę internetową i aplikację na smartfony dla już ugruntowanej i rosnącej grupy odbiorców. Jestem pewien, że jest to dość powszechny przypadek, więc chciałbym poznać prawdziwe doświadczenie na temat tego, jak zastosować i zarządzać Scrum w tym przypadku. Czy sam decydujesz o wszystkich funkcjach, czy włączasz testy użytkowników do sprintu? Jakieś inne rozwiązanie?


title: Czy istnieją przepisy chroniące nas przed hakerami, którzy ujawniają luki w zabezpieczeniach przed powiadomieniem dostawcy?

text: Weźmy za przykład niedawne ujawnienie luki w zabezpieczeniach ASP.NET (i Java Server Faces) na konferencji hakerów w Brazylii. Rozumiem, że narzędzie poety zostało zademonstrowane, zanim Microsoft zdał sobie sprawę z problemu. Czy istnieją przepisy chroniące legalnych klientów przed osobami, które zachęcają społeczność hakerów do hakowania wszystkich możliwych serwerów ASP.NET? Kto wie, ile legalnych firm zostało skompromitowanych między demonstracją narzędzia a zainstalowaniem poprawki na serwerze.


title: Czy EF4 jest wystarczająco dojrzały z MySQL lub Oracle?

text: Czy Entity Framework 4 z MySQL lub Oracle jest wystarczająco dojrzały, aby można go było używać w aplikacji sieci Web na poziomie produkcyjnym? Czy może zapewnić wysoki poziom wydajności, czy też powinniśmy pozostać przy zwykłym dostępie do danych za pomocą `SqlCommand`?


title: Czy łatki to zły znak dla klienta?

text: W biurze właśnie wyszliśmy z długiego okresu, w którym zbyt często publikowaliśmy łatki. Pod koniec tego okresu robiliśmy średnio prawie trzy łatki tygodniowo. Poza tym, że było to bardzo demotywujące dla programistów, zastanawiałem się, co o tym pomyśli klient. Sam zadałem to pytanie i doszedłem do wniosku, że nigdy nie znałem oprogramowania, które było aktualizowane tak często. Jednak w przypadku, który jest najbliższy, nie obchodzi mnie to, ponieważ łatki są dość szybko nakładane. Klienci, którzy otrzymali te łatki, bardzo się od siebie różnią. Niektórzy naprawdę czekali na łatkę, podczas gdy inni nie dbali o to, a jednak wszyscy dostali te same łatki. Czas aktualizacji oprogramowania klienta to mniej niż 30 sekund, więc nie spodziewam się problemów z czasem. Muszą się jednak wylogować. Więc moje pytanie bardziej szczegółowo: Czy otrzymywanie aktualizacji często powoduje wyświetlenie „negatywnego” komunikatu dla odbiorcy? Oczywiście mógłbym zapytać klientów, ale nie jestem w takiej sytuacji ani nie chcę „budzić śpiących psów”. PS: Jeśli jest coś, co mógłbym zrobić, aby poprawić moje pytanie, zostaw komentarz.


title: Dlaczego ktoś miałby potrzebować tej składni java?

text: Pewnego dnia, gdy przeglądałem dokumentację języka Java, tak jak ty, znalazłem to małe piękno czające się w Double: 0.25 == 0x1.0p-2 Teraz oczywiście (!) oznacza to, że weź liczbę szesnastkową 1 i przesuń ją w prawo dziesiętną 2 czasy. Wydaje się, że zasadą jest używanie podstawy 16 po stronie liczb całkowitych i podstawy 2 po stronie rzeczywistej. Czy ktoś tam **właściwie użył składni prawej ręki** w niezbędnym kontekście, a nie tylko w celu wyciągnięcia piwa od innych programistów?


title: Kiedy lepiej przenieść pracę do RDBMS niż robić to w kodzie?

text: Dobra, umiem się do tego zabrać: jestem lepszym koderem niż w bazach danych i zastanawiam się, gdzie leżą przemyślenia na temat „najlepszych praktyk” na temat wykonywania „prostych” obliczeń w zapytaniu SQL vs. kod, taki jak ten przykład MySQL (nie napisałem go, po prostu muszę go utrzymywać!) -- Zwraca nazwę użytkownika i wiek użytkowników z ostatniego zdarzenia. SELECT u.username jako użytkownik, IF ((DAY(max(e.data)) - DAY(u.DOB)) < 0 , OBCIĄGNIĘCIE(((((YEAR(max(e.data))*12)+MIESIĄC (max(e.data))) -((ROK(u.DOB)*12)+MIESIĄC(u.DOB)))-1)/12, 0), OBCIĄŻ((((ROK(maks(e. data))*12)+MIESIĄC(max(e.data)))) - ((ROK(u.DOB)*12)+MIESIĄC(u.DOB)))/12, 0)) JAKO wiek OD użytkowników jak u Zdarzenia JOIN jako e ON u.id = e.uid ... W porównaniu do wykonywania "ciężkiego" podnoszenia w kodzie: Query: SELECT u.username, u.DOB as dob, e.event_date as edate FROM users as u JOIN events as e ON u.id = e.uid kod: function ageAsOfDate($birth, $aod) { //oczekuje daty w mysql formacie Y-m-d... list($by,$bm,$bd) = explode('-' $narodziny); list($ay,$am,$ad) = rozbij('-',$aod); //Wstaw obliczenia tutaj ... return $Dy; //Różnica w latach } echo "Hej! ". $row['user'] ." było ". ageAsOfDate($rząd['dob'], $rząd['edytuj']) . "kiedy go ostatnio widzieliśmy."; Jestem prawie pewien, że w takim prostym przypadku nie miałoby to większego znaczenia (poza pełzającym uczuciem przerażenia, gdy muszę wprowadzać zmiany w zapytaniach, takich jak pierwsze), ale myślę, że to wyjaśnia, co robię. szukam. Dziękuję!


title: Projektowanie procesu ETL opartego na treści za pomocą .NET i SFDC

text: Ponieważ moja firma przechodzi na SFDC jako nasz główny system operacyjny, stworzyliśmy razem kilka portali SFDC, na których możemy publikować dokumenty specyficzne dla klienta, które można przeglądać do woli. W związku z tym potrzebowaliśmy zaimplementować aplikacje pseudo-ETL, które są w stanie wyodrębnić metadane z dokumentów generowanych wewnętrznie przez naszych analityków (większość z nich to standardowe w branży formaty PDF, XML lub MS Office) i umieścić w sieci ” kolejki”. Stamtąd nasze aplikacje pobierają dokumenty z kolejki i przesyłają je do odpowiedniej biblioteki treści SFDC CRM wraz z wybranymi fragmentami metadanych. Używałem głównie DbAmp do pośredniczenia w komunikacji z SFDC (DbAmp jest dostawcą serwera połączonego, który umożliwia korzystanie z konwencji SQL do interakcji z danymi organizacji SFDC). Udało mi się stworzyć aplikacje [konsolowe] w C#, które działają całkiem dobrze i zwykle mają taką strukturę: static void Main() { // Załaduj parametry z app.config. // Pobierz dokumenty z kolejki. var files = someInterface.GetFiles(someFilterOrRegexPattern); foreach (plik var w plikach) { // Wyodrębnij metadane z pliku. // Sprawdź poprawność niektórych atrybutów pliku; dodaj wszelkie błędy walidacji do struktury w pamięci // (np. List<ValidationErrors>). if (isValid) { var fileData = File.ReadAllBytes(file); // Prześlij za pomocą opakowania dla ORM lub DAL someInterface.Upload(fileData, meta.Param1, meta.Param2, ...); } else { // Odbij plik } } // Zgłoś wszelkie błędy walidacji (przez magistralę wiadomości, SMTP lub inne). } I tyle. W większości przypadków wszystkie te operacje opakowuję w klasę „Worker”, która przyjmuje potrzebne interfejsy jako parametry konstruktora. To podejście działa całkiem nieźle, ale mam wrażenie, że jest w tym coś okropnego i chciałbym uzyskać informacje zwrotne. Czy pisanie procesu ETL jako aplikacji konsoli C# to zły pomysł? Zastanawiam się również, czy istnieją jakieś wzorce projektowe, które byłyby przydatne w tym scenariuszu, które wyraźnie przeoczam. Z góry dziękuję!


title: Jakie algorytmy/struktury danych powinienem „rozpoznawać” i znać z nazwy?

text: Chciałbym uważać się za dość doświadczonego programistę. Programuję od ponad 5 lat. Moim słabym punktem jest jednak terminologia. Jestem samoukiem, więc chociaż umiem programować, nie znam niektórych bardziej formalnych aspektów informatyki. Jakie są więc praktyczne algorytmy/struktury danych, które mógłbym rozpoznać i poznać po imieniu? Uwaga, nie proszę o rekomendację książkową dotyczącą implementacji algorytmów. Nie dbam o ich implementację, po prostu chcę być w stanie rozpoznać, kiedy struktura algorytmu/danych byłaby dobrym rozwiązaniem problemu. Proszę więcej o listę algorytmów/struktur danych, które powinienem "rozpoznać". Na przykład znam rozwiązanie takiego problemu: > Zarządzasz zestawem szafek oznaczonych jako 0-999. Ludzie przychodzą do ciebie, aby wynająć szafkę >, a następnie wracają, aby zwrócić klucz do szafki. Jak zbudować > oprogramowanie do zarządzania wiedząc, które szafki są bezpłatne, a które są > używane? Rozwiązaniem byłaby kolejka lub stos. To, czego szukam, to rzeczy typu „w jakiej sytuacji należy użyć B-Tree -- jakiego algorytmu wyszukiwania należy tutaj użyć” itp. A może szybkiego wprowadzenia, jak bardziej złożone (ale powszechnie używane) struktury danych/ algorytmy działają. Próbowałem spojrzeć na listę struktur danych i algorytmów Wikipedii, ale myślę, że to trochę przesada. Więc szukam więcej, jakie są najważniejsze rzeczy, które powinienem rozpoznać?


title: Czy Agile Development jest używany w uczeniu maszynowym i przetwarzaniu języka naturalnego?

text: Od jakiegoś czasu zajmuję się tworzeniem aplikacji internetowych i standardową praktyką w naszym zespole jest stosowanie technik i zasad programowania zwinnego do wdrażania oprogramowania. Od niedawna zajmuję się również uczeniem maszynowym i przetwarzaniem języka naturalnego. Słyszałem, że ludzie głównie używają Matlaba do opracowywania algorytmów ML i NLP. Czy rozwój zwinny ma tam miejsce, czy ta umiejętność jest całkowicie zbędna? Innymi słowy, kiedy tworzysz algorytmy ML i NLP jako praca, czy używasz w tym procesie programowania zwinnego?


title: Przejście z SVN na Mercurial: jedno repozytorium czy wiele?

text: Obecnie posiadamy duże repozytorium Subversion, z drzewem takim jak: root /libraries /library1 /trunk /library2 /trunk /solutions /solution1 /trunk /solution2 /trunk Istnieje 81 rozwiązań i 22 biblioteki. Dodaliśmy podkatalogi `trunk`, abyśmy mogli korzystać z branchy, ale w praktyce w ogóle nie korzystamy z branchy. Moje pytanie brzmi: jeśli przeniesiemy to do Mercurial, czy należy utworzyć jedno duże drzewo Mercurial o tej samej strukturze? A może powinniśmy stworzyć 81+22 repozytoriów Mercurial?


title: Umożliwienie użytkownikowi określenia lokalizacji pliku dziennika

text: Pracuję nad aplikacją i dodaję logowanie, ale teraz utknąłem. Chcę zezwolić ( _nie wymuszać!_ ) użytkownikowi ustawić lokalizację pliku dziennika. Zasadniczo mój problem polega na tym, że: * inicjalizacja loggera powinna być pierwszą rzeczą, jaką robi program * ale nie mogę zainicjować loggera, dopóki nie określę, gdzie użytkownik chce zapisać dziennik * określenie, gdzie ma być zapisany dziennik ... jest proces, który powinien być rejestrowany Jak rozwiązany jest ten problem? Czy lokalizacje plików dziennika nie mogą być dostosowywane przez użytkownika? Czy dane wyjściowe dziennika są buforowane do momentu ustawienia pliku dziennika?


title: Jak zaimplementować algorytm genetyczny z odległością, czasem i kosztem

text: Chcę znaleźć rozwiązanie, aby znaleźć optymalną trasę wizyty w szkole. Na przykład chcę odwiedzić 5 szkół (A, B, C, D, E) w moim mieście. Mając do wyboru pięć tras dotyczących tego, którą szkołę powinienem odwiedzić najpierw, potem drugą, potem trzecią itd., jak obliczyć efektywność każdej trasy z uwzględnieniem kryteriów odległości, czasu i kosztów? Kiedy już to zrobię, jak wykorzystać moje obliczenia (odległość z czasem i kosztami zużycia paliwa) w algorytmie genetycznym, aby znaleźć optymalną trasę?


title: Czy to literówka w Licencji Artystycznej 2.0?

text: _Nie jestem pewien, czy to pasowałoby lepiej do StackExchange/English, ale niezależnie od tego, nie ma praktycznego zastosowania tej odpowiedzi, poza wyleczeniem mojej ciekawości._ Zwróć uwagę na to zdanie na końcu Licencji Artystycznej 2.0: > PAKIET JEST DOSTARCZONE PRZEZ WŁAŚCICIELA PRAW AUTORSKICH I WSPÓŁCZYNNIKÓW „TAK JAK JEST” ORAZ BEZ ŻADNYCH WYRAŹNYCH LUB DOROZUMIANYCH GWARANCJI. Nie ma to wpływu na żadne prawne aspekty licencji, ale czy istnieje powód, dla którego pomieszali użycie pojedynczych i podwójnych cudzysłowów w „TAK JAK JEST” '`? Licencja jest tak nowa, że nie byłoby to „przyjazne dla wiersza poleceń”. Czy kryje się za tym specjalne zastosowanie lub znaczenie w języku angielskim, czy była to literówka?


title: Informacja o tym, ile czasu spędziłem w funkcji, na podstawie danych wejściowych tej funkcji

text: Czy istnieje (ilościowe) narzędzie do pomiaru wydajności funkcji na podstawie jego danych wejściowych? Do tej pory narzędzia, których używałem do mierzenia wydajności mojego kodu, mówią mi, ile czasu spędziłem w funkcjach (np. Jetbrain Dottrace dla .Net), ale chciałbym mieć więcej informacji o parametrach przekazywanych do funkcji w kolejności wiedzieć, które parametry mają największy wpływ na wydajność. Załóżmy, że mam taką funkcję: int myFunction(int myParam1, int myParam 2) { // Wykonaj i zwróć coś na podstawie wartości myParam1 i myParam2. // Kod prawdopodobnie użyje if, for, while, switch, itd... } If chciałby narzędzie, które pozwoliłoby mi powiedzieć, ile czasu spędziłem w `myFunction` na podstawie wartości `myParam1 ` i `mojaParam2`. Na przykład narzędzie da mi wynik wyglądający tak: For "myFunction" : wartość | wartość | Liczba | Średnia mojaParam1 | mojaParam2 | zadzwoń | czas ---------|----------|-----------|-------- 1 | 5 | 500 | 301 ms 2 | 5 | 250 | 1253 ms 3 | 7 | 1268 | 538 ms ... > Oznaczałoby to, że myFunction została wywołana 500 razy z myParam1=1 i > myParam2=5, i że przy tych parametrach zwrócenie wartości zajęło średnio 301 ms. Ideą, która się za tym kryje, jest przeprowadzenie pewnej optymalizacji statystycznej poprzez zorganizowanie mojego kodu w taki sposób, aby bloki kodów, które mają największe szanse na wykonanie, były testowane przed tymi, które są mniej prawdopodobne do wykonania. Mówiąc wprost, jeśli wiem, które wartości są najczęściej używane, mogę przeorganizować strukturę if/while/for itp. funkcji (i całego programu), aby ją zoptymalizować. Chciałbym znaleźć takie narzędzia dla C++, Java lub.Net. **Uwaga** : Nie szukam wskazówek technicznych dotyczących optymalizacji kodu (takich jak przekazywanie parametrów jako const, inline funkcji, inicjowanie pojemności wektorów itp.).


title: Jak Microsoft Market DotNet?

text: Właśnie przeczytałem artykuł Joela o przełomowej zmianie Microsoftu (nie-wsteczna kompatybilność) z wprowadzeniem dot net. Jest to ciekawe i jednoznacznie odzwierciedla stan w tamtym czasie. Ale teraz minęło prawie 10 lat. ## Przełomowa zmiana Wynika to głównie z tego, jak zły jest Microsoft wprowadzający narzędzia programistyczne nie zapewniające kompatybilności wstecznej, takie jak dot net, zamiast ulepszania już szeroko stosowanego asp classic czy VB6. Jak wiadomo, dot net nie jest natywnie osadzony w Windows XP (tak w Vista lub 7), więc aby korzystać z aplikacji .net, musisz zainstalować framework .net o wielkości ponad 300 MB (to duży tego dnia). Jednak, jak widzimy, obecnie wiele firm używa .net jako swoich głównych narzędzi programistycznych, a asp.net lub mvc jako aplikacje internetowe. C# jest obecnie jednym z najlepszych języków programowania (najwięcej pytań w stackoverflow). Co ciekawsze, win32api wciąż żyje, nawet jeśli istnieje nowsza technologia (i nadal jest szeroko stosowana). Wyobraź sobie, że jeśli Microsoft nie wprowadzi przełomowej zmiany, wiele firm nadal będzie korzystało z aplikacji opartych na asp classic lub vb (jest ich nadal, ale nie tak dużo). Wiele firm korzysta z dodatkowych usług, takich jak azure czy sharepoint (poza tym, jak drogie jest to). Proszę zauważyć, że wiem również, że wiele flagowych aplikacji (może Adobe i Blizzard) nadal używa języka opartego na C lub starszego i nie przenosi się na nowszy język wysokiego poziomu. ## Pytanie Jak Microsoft może przekonać użytkowników do migracji starych aplikacji do dot net? Jak wiemy, jest to bardzo trudne i nie daje natychmiastowej wartości podczas przepisywania aplikacji (netscape story) i jest bardzo ryzykowne. Bardziej interesuje mnie sposób Microsoftu, a nie opinie typu "ponieważ dot net to OOP, albo dot net to dll-embedable, itp". To pytanie może być konstruktywne, ponieważ technologia ostatnio bardzo się zmienia. Jak widać, Microsoft zmienia formularz webowy Asp.Net na MVC, winform jest już przestarzały, zaczyna się przestawiać na sklep z systemem Windows zamiast na podstawowy-instalację, ekran dotykowy, a później będziemy mieli przezroczyste aplikacje, takie jak klasa google. A to będzie przełomowe zmiany. W dzisiejszych czasach będziemy musieli uznać przenośność za problem. Będziemy potrzebować nie tylko wyboru technologii, ale także planów migracji. Nawet może tak krytyczne, jak potrzebujemy wieloplatformowego kompilatora języka, jak podszedł do Wasabi Joela. (hej, za dużo czytam jego artykuły!)


title: Jaka jest historia dlaczego bajty mają osiem bitów?

text: Po co działają siły historyczne, jakie kompromisy należy dokonać, decydując się na użycie grup ośmiu bitów jako podstawowej jednostki? Dawno, dawno temu istniały maszyny używające innych rozmiarów słów, ale dzisiaj dla nieośmiobitowych trzeba spojrzeć na eksponaty muzealne, wyspecjalizowane układy scalone do aplikacji wbudowanych i procesory DSP. Jak bajt wyewoluował z chaosu i kreatywności wczesnych dni projektowania komputerów? Mogę sobie wyobrazić, że mniejsza liczba bitów byłaby nieefektywna do obsługi wystarczającej ilości danych, aby przetwarzanie było możliwe, podczas gdy zbyt wiele doprowadziłoby do drogiego sprzętu. Czy w grę wchodziły inne wpływy? Dlaczego te siły zrównoważyły się do ośmiu bitów? (Przy okazji, gdybym mógł podróżować w czasie, cofnąłbym się do czasów, gdy „bajt” został zadeklarowany jako 8 bitowy, i przekonałbym wszystkich, by zrobili 12 bitów, przekupując ich drobiazgami z początku XXI wieku.)


title: Jak mogę ocenić możliwości wsparcia i niezawodność pakietu przed wprowadzeniem go do projektu?

text: Niedawno znalazłem pakiet (JavaBuilders), który mi się podoba i myślę, że pomoże w rozwoju mojego projektu, ale ma pewne problemy: * Nie jest już rozwijany (ostatnie zatwierdzenie na github > 1 rok temu) * Brak aktywności oznacza, że nie jest już wspierany przez Deweloperzy * Żadna zauważalna społeczność nie oznacza, że nie jest wspierany przez większą bazę użytkowników. Wiem tylko, że ten pakiet jest martwy, a wszelkie problemy, które napotkamy, będą nie do pokonania bez dużego przepisywania go w celu usunięcia jego użycia w scenariuszu najgorszego przypadku. Osobno (prawdopodobnie warte innego pytania), jeśli ten pakiet nie jest powszechnie znany, wydłuży czas wprowadzania nowych członków, którzy dołączą do zespołu. Czy istnieje bardziej niezawodny sposób oceny użycia pakietu, aby sprawdzić, czy jest on „wspierany” i wystarczająco elastyczny (np. jeśli chcemy, aby zawierał funkcję X, nie możemy wrócić do programisty, który zniknął z tworzenia pakietu ) nie narażać projektu na ryzyko?


title: Jakie są różnice między językami programowania?

text: Dawno, dawno temu usłyszałem od kogoś > jedyną różnicą między językami programowania jest składnia, której chciałem temu zaprzeczyć - aby powiedzieć, że istnieją inne **podstawowe** aspekty, które naprawdę odróżniają język od innych niż tylko składnia. Ale nie mogłem... Więc możesz? Za każdym razem, gdy szukam w Google czegoś takiego jak „różnice między językami programowania”, wyniki są zwykle debatami między dwoma konkretnymi językami (chciałabym czegoś bardziej ogólnego) – jednak niektóre z aspektów, o których ludzie zdawali się najbardziej dyskutować, to: * Zorientowane obiektowo * Przeciążanie metody/operatora (w rzeczywistości widzę to raczej w związku ze składnią) * Garbage-Collection (Chociaż wydaje się to być dobrą różnicą, z jakiegoś powodu nie wydaje się to „podstawowe”) Jakie ważne aspekty inne niż składnia czy możesz pomyśleć o?


title: Najlepsze praktyki JSF dotyczące wiązania komponentów interfejsu użytkownika z fasolą zapasową?

text: Czy w JSF można wiązać komponenty UI z backing bean tylko w celu renderowania komunikatów, czy też powinniśmy wiązać tylko wtedy, gdy musimy zrobić o wiele więcej niż tylko renderowanie komunikatów?


title: Co jest tak przydatnego w domknięciach (w JS)?

text: W moim dążeniu do zrozumienia domknięć w kontekście JS zadaję sobie pytanie, po co w ogóle trzeba używać domknięć? Co jest takiego wspaniałego w posiadaniu funkcji wewnętrznej, która może uzyskać dostęp do zmiennych funkcji nadrzędnej nawet po powrocie funkcji nadrzędnej? Nie jestem nawet pewien, czy zadałem to pytanie poprawnie, ponieważ nie rozumiem, jak z nich korzystać. Czy ktoś może podać przykład z prawdziwego świata w JS, w którym zamknięcie jest bardziej korzystne w porównaniu z alternatywą, cokolwiek to może być? Edycja: pytanie Dlaczego zamknięcie jest ważne dla JavaScript? nie odpowiedziałem wystarczająco jasno, co chcę zrozumieć. Więc nie uważam tego za duplikat. Przyjrzę się wszystkim odpowiedziom/zasobom i zaznaczę jedną zaakceptowaną. Dziękuję wszystkim!


title: Jaka jest główna różnica między językami skryptowymi a językami programowania?

text: Powiedz różnicę między Pythonem a C++?


title: Wzorzec bezpieczeństwa do przechowywania kluczy SSH

text: Piszę prostą aplikację kolbową do przesyłania zadań naukowych do zdalnych zasobów HPC. Moja aplikacja w tle komunikuje się ze zdalnymi maszynami przez SSH (ponieważ jest szeroko dostępna na różnych zasobach HPC). Aby móc utrzymywać to połączenie w tle, muszę albo użyć kluczy ssh użytkownika na uruchomionej maszynie (gdy użytkownik ma dostęp ssh bez hasła do maszyny zdalnej) albo muszę przechowywać dane uwierzytelniające użytkownika dla zdalnych maszyn. Nie jestem pewien, którą ścieżką mam obrać, czy powinienem przechowywać nazwę użytkownika/hasło zdalnego komputera, czy powinienem przechowywać parę kluczy SSH użytkownika w bazie danych? Chcę wiedzieć, jaki jest prawidłowy i bezpieczny sposób łączenia się ze zdalnymi serwerami w tle w kontekście aplikacji internetowej.


title: Czy korzystanie z klawiatury numerycznej w programowaniu jest efektywne?

text: Jestem programistą i używam vima do całego mojego oprogramowania. Używam klawiszy `hjkl`, aby uniknąć przechodzenia z pierwszego rzędu. Czy korzystanie z klawiatury numerycznej na klawiaturze jest wydajne/nieefektywne? Myślę, że to nieefektywne, bo trzeba poruszyć ręką? Wielkie dzięki.


title: Pomóż mi zrozumieć ten wzór wizualny „mapa myśli/konstelacja”

text: Proszę o pomoc w rozpoznaniu i zrozumieniu tego wzoru wizualnego. Jaka jest popularna nazwa takich wizualizacji mapy myśli / konstelacji? http://asterisq.com/products/constellation/roamer/demo http://apps.asterisq.com/mentionmap/#user-scobleizer Poszukuję również frameworka, biblioteki lub **formuły matematycznej**, która będzie pomóż mi zbudować coś podobnego. Szczególnie interesuje mnie funkcja automatycznego rozmieszczania, ponieważ będę miał mnóstwo węzłów, które muszę rozmieścić na ekranie w najlepszy możliwy sposób. Jaka jest matematyka polegająca na automatycznym aranżowaniu czegoś w 2D? Muszę też połączyć to wszystko z rozbudowanym zoomem i nawigacją podobną do mapy. Jeśli wiesz o czymkolwiek, co mogłoby pomóc w osiągnięciu mojego celu, nie wahaj się zostawić odpowiedzi. Mój preferowany język to ActionScript 3 / Flash, ale będę wdzięczny za wszelkie informacje, samouczki lub artykuły w dowolnym języku.


title: Co to jest wstrzyknięcie konstruktora?

text: Przyglądałem się terminom iniekcji konstruktora i iniekcji zależności podczas przeglądania artykułów na temat wzorców projektowych (Lokalizator usług). Kiedy wygooglowałem o wstrzykiwaniu konstruktora, otrzymałem niejasne wyniki, co skłoniło mnie do sprawdzenia tutaj. Co to jest wstrzyknięcie konstruktora? Czy jest to specyficzny rodzaj wstrzykiwania zależności? Bardzo pomocny byłby przykład kanoniczny! **Edytuj** Wracając do tych pytań po tygodniowej przerwie, widzę, jak zagubiłem się... Na wypadek, gdyby ktoś inny wpadł tutaj, zaktualizuję treść pytania o trochę mojej wiedzy. Prosimy o komentowanie/poprawianie. _Wstrzykiwanie konstruktora i wstrzykiwanie właściwości to dwa rodzaje wstrzykiwania zależności._


title: Najlepsze praktyki dotyczące graficznej reprezentacji architektury systemu?

text: Tak naprawdę nie znam nomenklatury dotyczącej tych spraw, ale oto krótki opis tego, czego chcę. Proszę dać mi znać, czy powinienem uzasadnić więcej. Mam więc ten większy projekt obejmujący bazy danych, różne języki i interfejsy (SQL, R, C, Python, zarówno GUI, jak i CLI). To trochę za duże, by zmieścić się w prostej mentalnej konstrukcji tego, co się naprawdę dzieje. Interesuje mnie uczynienie matką wszystkich wykresów mapujących projekt z perspektywy architektury systemu. Ogólnie rzecz biorąc, chciałbym, aby informacje pokazywały raczej metainformacje o danych i gdzie są one produkowane / konsumowane. Wydaje mi się, że jest blisko schematu blokowego, ale ponieważ nie jestem ekspertem w tych sprawach, proszę o pomoc. Czy są do tego jakieś narzędzia? Jakieś najlepsze praktyki dotyczące formatowania itp.? A co z symbolami dla wszystkich procedur / klas / metod / funkcji? Proszę wtrącić się, jeśli masz jakieś zdanie w tej sprawie. Żeby tylko ułożyć trochę więcej tego, czym bym się zainteresował: * Raczej używam narzędzi typu Latex niż Visio * Nienawidzę dużych i wymyślnych IDE, ale uwielbiam VIM * Zrobiłbym z rozwiązaniami statycznymi, ale byłbym zainteresowany automatami rozwiązania też (o ile nie są zbyt skomplikowane oczywiście)


title: Gra do pobrania a nie do pobrania

text: Chcę stworzyć sieciową grę budowlaną z ograniczoną fizyką (tylko dla postaci) i chciałem wiedzieć, jaka będzie najlepsza trasa. Patrzyłem na przeglądarkową grę Java lub grę w języku C++ do pobrania, a może nawet grę Java do pobrania. W każdym razie, czy gra oparta na przeglądarce byłaby zbyt wolna na coś takiego (tysiące bloków z wieloma graczami)? Jakie są Twoje przemyślenia/sugestie?


title: Kiedy ktoś pyta Cię, co robisz, co mówisz (np. programista, programista, małpa kodu)?

text: Czy nazywasz siebie programistą, programistą czy małpą kodu? Osobiście wolę powiedzieć, że jestem programistą.


title: Motywacja i praktyczna nauka

text: Jestem nowicjuszem w StackExchange i wydaje mi się, że to bardzo dobre miejsce na zadanie pytania, które od kilku miesięcy błąka się po mojej głowie. Obecnie mam 22 lata, studiuję licencjat z informatyki na UNED (hiszpański uniwersytet na odległość) i dobrze sobie radzę. Mam też pracę, zajmując się programowaniem stron internetowych (PHP, SQL, CSS, HTML, Apache, tego typu rzeczy) w firmie, ale pracuję w domu. Próbowałem tych ostatnich kilku lat, aby osiągnąć sukces w innych językach programowania. Zaczynałem od C++, Javy, Perla i Pythona i chociaż mogę powiedzieć, że mam w tym przyzwoity poziom, to trudno mi znaleźć projekty, w których mógłbym je wykorzystać. Mam na myśli **prawdziwe projekty**, w których możesz podnieść poziom języka do granic możliwości. Myślę, że brak motywacji jest jedną z przyczyn tego. To jak po całodniowym, powtarzalnym programowaniu, mój mózg jest wyczerpany i ciężko coś osiągnąć. Mam też problemy z metodami uczenia się. Czytam wiele forów (takich jak to), wiele książek i stron internetowych mówiących o programowaniu, ale nie wiem, jak zastosować zdobytą wiedzę. To tak, jakbym potrzebował innego podejścia do nauki, bardziej praktycznego. Pytanie więc brzmi: Jak znaleźć motywację do dalszego programowania po całym dniu pracy? Jak znaleźć bardziej praktyczną metodę nauki? (W końcu łatwo jest dalej _czytać o_ programowaniu, ale kodowanie **coś dużego** jest czymś innym). Z góry dziękuję. PS: Nie jestem native speakerem, więc nie zwracaj uwagi na błędy leksykalne i gramatyczne.


title: Praca nad projektem, brak motywacji, aby faktycznie zająć się kodowaniem

text: Jestem programistą hobbystą. Często w okresie pracy nad projektem mam trudności z zajęciem się kodowaniem. Siedzę przed komputerem, czasami otwieram IDE i zamiast kontynuować pracę nad projektem, oglądam filmy na YouTube (często związane z programowaniem), przeglądam Facebooka, czytam pytania na tej stronie itp. Również czasami w projektowaniu faza czegoś, ciężko myślę o różnych projektach i rozwiązaniach, wymyślam fajne rozwiązanie, które mnie ekscytuje, szkicuję je na papierze, ale w końcu, kiedy faktycznie siedzę przed komputerem, aby wdrożyć to, co zaprojektowałem, nie robię tego t programować, ale raczej robić inne rzeczy, a czasem trochę kodować. Bardzo lubię programować. Lubię też projektować i myśleć o pomysłach. Jednak często, kiedy faktycznie siadam do kontynuowania mojego obecnego projektu, mam ten brak motywacji do kodowania. Mam dwa pytania na ten temat: 1. Czy to normalne? **Czy są inni ludzie - _które bardzo lubią programować_ \- doświadczają tego samego problemu?** Czy to uczucie "zaczęcia do pracy" jest powszechne? 2. Jak sugerujesz, żebym to rozwiązał? **Czy siadając do programowania, powinienem po prostu „przejść” przez tę początkową fazę braku motywacji, wiedząc, że po „rozgrzewce” i zagłębieniu się w kodowanie będzie więcej zabawy?** **A może ryzykuję wypalenie się i zmęczenie programowaniem przez zmuszanie się do tego, gdy brakuje mi motywacji?** Co sugerujesz z własnego doświadczenia? **To nie jest tylko „czy sympatyzujesz z tym?” rodzaj pytania. Proszę o znalezienie rozwiązania. Dziękuję za pomoc** _Nie sądzę, żeby to był duplikat. Istnieje wiele pytań dotyczących braku motywacji, ale to w szczególności dotyczy konkretnego uczucia braku motywacji podczas siadania do kodowania._


title: Motywowanie się do pisania kodu po zaprojektowaniu czegoś

text: **Czy zdarza się to tylko mnie, czy tobie też to jest znajome?** To jest tak: Musisz coś stworzyć; moduł, funkcja, cała aplikacja... cokolwiek. To jest coś interesującego, czego nigdy wcześniej nie robiłeś, jest to wyzwanie. Więc zaczynasz myśleć, jak zamierzasz to zrobić. Rysujesz kilka szkiców. Piszesz prototypy, aby przetestować swoje pomysły. Łączysz ze sobą różne elementy, aby uzyskać pełny widok. W końcu otrzymujesz projekt, który Ci się podoba, coś, co jest proste, jasne dla wszystkich, łatwe w utrzymaniu... Ty to nazywasz. Pokryłeś każdą bazę, pomyślałeś o wszystkim. Wiesz, że będziesz mieć tę klasę, ten plik i ten schemat bazy danych. Skonfiguruj to tutaj, dostosuj inne rzeczy tam itd. Ale teraz, kiedy wszystko jest już ustalone, musisz usiąść i właściwie napisać kod. I nie jest już wyzwaniem.... Byłem tam, zrobiłem to! Napisanie kodu teraz to tylko „formalności” i sprawia wrażenie powtórzenia tego, co właśnie skończyłeś. W mojej poprzedniej pracy czasami uchodziło mi to na sucho, ponieważ ktoś inny wykonał kodowanie na podstawie moich specyfikacji, ale na moim nowym koncercie jestem odpowiedzialny za cały proces, więc muszę to zrobić również (ponieważ płacą mi za wykonanie to). Ale mam projekt dla zwierząt, nad którym pracuję w domu, po pracy i jestem tylko ja i nikt mi za to nie płaci. Zajmuję się pracą twórczą, a potem, kiedy przychodzi czas, aby to spisać, po prostu nie mam na to ochoty (poszukajmy trochę w Internecie, zobaczmy, co nowego na P.SE, na SO itp.). Chcę tylko przejść do następnej trudnej rzeczy, potem do następnej i następnej... Czy tobie też się to przytrafia? Jak sobie z tym radzisz? Jak przekonać siebie, żeby wejść i napisać cholerny kod? Przyjmę każdą odpowiedź.


title: Czy warto doświadczenie zdobyte przez opublikowanie prostej aplikacji w App Store?

text: Np. Kolejna głupia aplikacja Fart czy coś w tym rodzaju. Nie dla pieniędzy, uznania czy czegokolwiek innego, z wyjątkiem być może doświadczenia, które z tego czerpiesz. Czy są jakieś zastrzeżenia, o których należy pamiętać przed podjęciem decyzji, aby przez to przejść?


title: Kod generowany przez IDE

text: Wiele środowisk IDE ma możliwość wyrzucania automatycznie napisanych fragmentów kodu. Na przykład może wygenerować dla Ciebie parę pobierającą/ustawiającą. Zastanawiam się, czy nie jest to próba obejścia pewnych wad języka. Jeśli twoje IDE może bez twojej pomocy dowiedzieć się, jaki powinien być kod, dlaczego nie może tego zrobić kompilator? Czy są przypadki, w których jest to naprawdę dobry pomysł? Jaki rodzaj generowania kodu zapewnia Twoje IDE? Czy lepiej byłoby podać to samo jako cechę języka?


title: Czy wymagane jest śledzenie czasu w branżach internetowych/usługowych?

text: Pracuję w branży webdeveloperskiej i wdrażamy system śledzenia czasu do rejestrowania naszego czasu (Projekt/czas/komentarz). Na początku projektu tworzymy umowę i ustalamy cenę na podstawie naszej stawki godzinowej _x_ szacunkowych godzin. Wylogowujemy się razy, aby sprawdzić, czy przekroczymy budżet. Czy śledzenie czasu w tej branży jest normą? Czy jest to wymagane? Jakie są plusy i minusy?


title: Dlaczego rozmowa w C++ nie jest kompletna, jeśli nie ma pytań vtable?

text: Szczerze mówiąc, nie rozumiem praktycznego znaczenia vtable. Dla mnie to tylko koncept teoretyczny, który trzeba podkopać, bo ankieter na pewno o to zapyta. Czy ktoś może rzucić nieco światła na to, dlaczego ankieterzy uwielbiają vtable? Nie rozumiem, jak znajomość vtable czyni mnie kompetentnym programistą c++ :-|


title: Dlaczego GPL została stworzona tak, aby wymagała otwartego kodu aplikacji, ale nie otwartego potoku skompilowanych aplikacji?

text: Powiedzmy, że mamy bibliotekę GPL (na przykład CGAL). Mamy duży łańcuch zadań, takich jak modelowanie i testowanie rur. Chcielibyśmy użyć biblioteki do naszej aplikacji wewnętrznej, ale musimy otworzyć źródła... więc tworzymy minimalną aplikację, która pobiera argumenty i pliki, a zwraca pliki i dane. I jest używany jak `closedSourceApp> GPLApp> closedSourceApp`. Wszystkie interesujące/istotne części są wykluczone z aplikacji GPL. Jednocześnie biblioteka GPL nie jest w pełni wykorzystywana i nie jest integrowana z większymi aplikacjami. Powstaje więc pytanie, jakie powody stały za pomysłem na licencję GPL, aby zmusić projekt nowego kodu do życia pod nią?


title: Jak mentorować młodszego członka zespołu, pozostając produktywnym we własnych projektach?

text: To pytanie nie dotyczy wielozadaniowości... istnieje wiele wskazówek na ten temat. Chodzi o to, jak podjąć kroki, aby wydajnie wykonywać wiele projektów (praca nad dwoma projektami naraz) na jednej dużej bazie kodu. Mówiąc dokładniej, w jaki sposób starszy programista pracuje nad jednym projektem i jest mentorem dla innego początkującego programisty w innym projekcie z tą samą bazą kodu, a tym samym pomaga w szkoleniu, projektowaniu, integracji, rozwiązywaniu problemów itp. aby zapobiec wkradaniu się niepotrzebnej złożoności i zadłużenia do bazy kodu. Nie widzę żadnych pytań dotyczących tego scenariusza. Najbliższy jest senior + senior, ale mentoring początkującego to inne zwierzę. Zastanawiam się, czy multiprojektowanie jest czymś normalnym w branży. Czy istnieją wzorce, które sprawiają, że jest bardziej wydajny? Zmiana kontekstu jest brutalna. Wielozadaniowość jest już wystarczająco trudna. Myślę, że obaj inżynierowie powinni w idealnym przypadku pracować nad tym samym projektem, dopóki początkujący nie będzie wystarczająco zaawansowany, aby móc samodzielnie poradzić sobie z projektem, oczywiście zawsze z pewną pomocą starszego. Aby nie odbiegać zbytnio od tematu, ale aby nadać kontekst, wydaje się, że kierownictwo chce pominąć etap szkolenia i rzucić początkującego w głęboki koniec dużej bazy kodu. Mniej przejmuję się sukcesem krótkoterminowych projektów, a bardziej wynikającą z tego zwiększoną entropią i złożonością kodu, jeśli nie będę mentorem, co na dłuższą metę okazałoby się katastrofalne.


title: Ustawianie parametrów globalnych: czy to rozsądne użycie const_cast i volatile?

text: Mam program, który uruchamiam wielokrotnie z różnymi zestawami parametrów. W różnych częściach programu używane są różne parametry (w tym różne pliki źródłowe). Ten sam parametr może być również użyty w różnych miejscach. Jednak wszystkie parametry są **stałe** w czasie działania po ich ustawieniu. Bardzo szybko odkryłem, że deklarowanie parametrów lokalnie nie ma sensu (wymaga pamiętania, gdzie każdy parametr jest zdefiniowany itp.), więc uciekłem się do użycia `params.h`, gdzie zadeklarowałem i zdefiniowałem wszystkie parametry: ` const int Param1 = 42;` itd. Wadą tego jest to, że muszę ponownie kompilować za każdym razem, gdy zmieniam parametr. Zastanawiam się więc nad zastosowaniem poniższej metody. Polega na używaniu `volatile` i `const_cast`, które zwykle uważane jest za „brudne”, ale zapewnia, że po ustawieniu parametrów w `main` nie zostaną one przypadkowo zmienione nigdzie indziej w programie. Zastanawiam się, czy ludzie uważają, że to jest w porządku, ponieważ ostatecznie chcę otworzyć swój kod. W `params.h`: namespace Params { extern volatile const int Param1; // itd. } W `main.cpp`: #include "params.h" volatile const int Params::Param1 = 0; int main(int argc, char* argv[]) { int* const pParam1 = const_cast<int*>(Params::Param1); *pParam1 = // Pobierz wartość z argv[] lub jakiegoś pliku config.ini. // itd. }


title: Dlaczego narzędzie do analizy kodu miałoby być wyceniane na podstawie liczby wierszy kodu?

text: Słyszałem, że niektóre narzędzia do analizy statycznej są wyceniane w zależności od tego, na ile kodu są licencjonowane. Myślę, że to zwykła segmentacja - im więcej kodu ma klient, tym więcej opieki potrzebuje i tym bardziej przydatne jest dla niego narzędzie, więc powinien płacić więcej, więc w zasadzie jest to sposób na to, aby dostawca narzędzia dostał więcej pieniędzy. Czy są jakieś inne obiektywne powody, dla których cena narzędzia do analizy kodu źródłowego byłaby uzależniona od tego, ile kodu klient planuje przeanalizować?


title: Czy jest to właściwa implementacja wzorca iOS MVC?

text: Po przejrzeniu dokumentacji Apple natknąłem się na ten przykład ich wzorca MVC: ![mvc](http://i.stack.imgur.com/BYaCl.png) Czy przy użyciu NSNotificationCenter i bez użycia KVO ten diagram przedstawiałby poprawna implementacja wzorca MVC? Jeśli nie, co jest nie tak i jak można to poprawić lub poprawić? ![przykład mvc](http://i.stack.imgur.com/jjQa2.png) 1. Aplikacja uruchamia się z włączonym lewym światłem, a prawym wyłączonym. W danym momencie może świecić tylko jedna lampka. 2. Użytkownicy naciskają prawy przełącznik, który wysyła akcję docelową do kontrolera widoku. 3. Kontroler widoku odbiera wiadomość i wysyła wiadomość do odpowiedniego modelu danych światła. 4. Właściwe światło używa NSNotificationCenter do powiadamiania kontrolera o zmianie odpowiedniego światła. 5. Kontroler odbiera wiadomość i wykonuje następującą metodę `BOOL rightLightOn = [rightLightData on]; if( rightLightOn ) { [rightLightImage setImage:onImage]; [ustawienie lewego przełącznika światła na:NIE]; } else { [rightLightImage setImage:offImage]; }` 6. Zmiana przełącznika powoduje, że UISwitch wywołuje w kontrolerze metodę „leftSwitchChanged”. 7. Kontroler odbiera wiadomość i wysyła wiadomość do lewego modelu danych światła. 8. Lewe światło używa NSNotificationCenter, aby powiadomić kontroler o zmianie lewego światła. 9. Sterownik odbiera komunikat i ponownie wykonuje tę samą metodę, jak pokazano powyżej, ale zmodyfikowaną dla właściwego światła. Ponadto, co by było, gdyby system nie używał przełącznika, a zamiast tego używał UIButton, który wyświetlał tekst „Włącz” lub „Wyłącz”. Czy przełącznik zaktualizuje swój własny tekst, a następnie wywoła „rightSwitchChanged”, czy też wywoła natychmiast rightSwitchChanged i poczeka, aż kontroler widoku zmieni tekst?


title: Szybkie obracanie dużych ilości danych

text: Rozwijamy produkt, który może być wykorzystany do tworzenia modeli predykcyjnych oraz dzielenia i krojenia danych w celu zapewnienia BI. Mamy dwa rodzaje wymagań dotyczących dostępu do danych. W przypadku modelowania predykcyjnego musimy codziennie czytać dane i robić to wiersz po wierszu. W tym przypadku normalna baza danych SQL Server jest wystarczająca i nie otrzymujemy żadnych problemów. W przypadku krojenia i kostkowania danych o ogromnych rozmiarach, takich jak 1 GB danych, powiedzmy 300 M wierszy. Chcemy łatwo zmieniać te dane przy minimalnym czasie odpowiedzi. W obecnej bazie danych SQL występują problemy z czasem odpowiedzi. Podoba nam się, że nasz produkt działa na każdym normalnym komputerze klienckim z 2 GB pamięci RAM i procesorem Core 2 Duo. Chciałbym wiedzieć, jak powinienem przechowywać te dane, a następnie w jaki sposób mogę stworzyć zmieniające się doświadczenie dla każdego wymiaru. Idealnie byłoby, gdybyśmy mieli dane o, powiedzmy, dziennej sprzedaży sprzedawcy według regionu według produktu dla dużej korporacji. Następnie chcielibyśmy go pokroić i pokroić w kostkę w oparciu o dowolny wymiar, a także móc wykonać agregację, wartości unikalne, wartości maksymalne, minimalne, średnie i kilka innych funkcji statystycznych.


title: Książki programistyczne są przydatne, ale kiedy znaleźć czas na ich przeczytanie?

text: Na mojej liście życzeń do przeczytania mam 5 książek. Kiedy je przeczytam? Mam na myśli to, że mógłbym zmusić się do wykorzystania 1 godziny w godzinach pracy, ale to potrwa 2 dni, potem ktoś poprosi mnie o zrobienie więcej "rzeczy o wysokim priorytecie". Jedną z opcji może być czytanie w nocy, ale to też ma swoje ograniczenia, chociaż wolę spędzać czas z dziećmi. Czy mógłbyś podzielić się swoimi doświadczeniami? Potrzebny jest oczywiście długoterminowy plan, nie ma sensu czytać 5 książek w tygodniu, ale ciągle coś czytać. Z tego powodu nie może to być stresujące. To powinno być łatwe. Znalezienie czasu na czytanie nie może być problemem, ale powinno odbywać się w sposób ciągły i regularny. Jakoś to pytanie może być podobne do TEGO, ale chcę zapytać o książki. Ile, jeśli czytasz książki w pracy dla samodoskonalenia, a nie do wykonania konkretnego zadania?


title: Czy programista powinien być niezbędny?

text: Jako programista lub administrator systemu możesz albo starać się mieć palce w każdym systemie, albo izolować się tak bardzo, jak to możliwe, aby stać się łatwym do zastąpienia trybikiem. Zaletą tych ostatnich jest możliwość wzięcia urlopu i brak dyżurów, podczas gdy ta pierwsza oznacza, że zawsze będziesz miał coś do roboty i bardzo trudno będzie cię zwolnić. Dążenie do obu skrajności wymagałoby świadomego wysiłku. **Poza oczywistymi względami etycznymi**, do czego należy dążyć?


title: Wytyczne dotyczące programowania w parach i prywatności firmy

text: W naszym biurze wprowadzane są nowe przepisy dotyczące prywatności, wymagające od każdego pracownika ochrony swojego komputera osobistym hasłem. Pracownicy są zobowiązani nie udostępniać tych haseł. Wcześniej każdy mógł uzyskać dostęp do komputera każdego. Nie, nie ma wątpliwości, że jest to poprawa z punktu widzenia bezpieczeństwa. Jednak my - jako programiści - borykamy się z tym, ponieważ zajmujemy się programowaniem w parach (często przez kilka dni z rzędu) i ze względu na elastyczne godziny pracy itp. potrzebny jest dostęp do różnych stacji roboczych bez obecności programisty kto jest właścicielem komputera. Istnieje tendencja, że programiści będą udostępniać swoje hasła (nawet umieszczając je jako listę na ścianie). Jak pogodzić potrzebę dostępu do niezatwierdzonego kodu na stacji roboczej od różnych programistów z wytycznymi dotyczącymi bezpieczeństwa i prywatności dotyczącymi tych stacji roboczych?


title: Korzyści z osobistej kontroli wersji

text: Jakie są korzyści z posiadania osobistego systemu kontroli wersji? Obejmuje to takie rzeczy, jak osobiste projekty, hobby, przykładowy kod nagromadzony przez lata itp. ### Oprócz oczywistych korzyści, takich jak tworzenie kopii zapasowych/historia.


title: Czy powinienem używać natywnego, generycznego PHP czy frameworka?

text: Pracuję z zespołem, który właśnie poznałem. Do tej pory używałem normalnego natywnego generycznego php do kodowania i zbudowałem z nim kilka aplikacji internetowych. Ale członek zespołu sugeruje, abyśmy przeszli na korzystanie z frameworka do programowania. Osobiście wolę iść normalną drogą, używając natywnych ogólnych kodów PHP, ale sugeruje, że użyjemy frameworka. Dowiedziałem się, że Code Igniter ma problem z ładowaniem obrazów i jest to jeden z problemów z niektórymi frameworkami, mają pewne trudności, z którymi po prostu trzeba się uporać, w przeciwieństwie do pisania natywnych kodów PHP. Mam duże archiwum kodów PHP, które wykonuje pracę tego, co robi niektóre Frameworki, mogę to wykorzystać i zaimplementować w WebApp. Czy lepiej jest skorzystać z PHP Framework czy Go Native & Generic. Inną rzeczą jest to, że jest to aplikacja internetowa na urządzenia mobilne, którą wraz z zespołem rozwijamy dla firmy, a w najbliższej przyszłości będzie potrzeba utrzymania, jeśli nie będziemy dostępni do utrzymania. Nasze kody muszą być bardzo proste, niezbyt dwuznaczne i oczywiste, a także z komentarzami dla przyszłego programisty. Dlatego myślę, że piszemy własne kody i czynimy to bardzo prostym w najlepszy możliwy sposób.


title: Jak oznaczyć klasę jako w fazie rozwoju w Javie?

text: Pracuję nad projektem stażowym, ale muszę wyjechać, zanim wszystko dokończę. Mam 1 klasę, która nie jest wystarczająco stabilna do użytku produkcyjnego. Chcę oznaczyć/oznaczyć tę klasę, aby inne osoby nie wykorzystały jej przypadkowo w produkcji. Umieściłem już ogłoszenie w Javadoc, ale to nie wydaje się wystarczające. Niektóre błędy lub ostrzeżenia kompilatora byłyby lepsze. Kod jest zorganizowany w następujący sposób: [Pakiet] | company.foo.bar.myproject |-- Class1.java |-- Class2.java |-- Class3.java <--(niestabilna) Gdyby istniała pojedyncza klasa fabryczna, która wywołuje te klasy w metodach publicznych, mógłbym mieć ustaw metodę na `class3` jako `private`. Jednak API NIE jest ujawniane w ten sposób. Użytkownicy będą bezpośrednio korzystać z tych klas, m.in. `new Class1();`, ale nie mogę uczynić klasy najwyższego poziomu prywatną. Jaka jest najlepsza praktyka radzenia sobie z tą sytuacją?


title: Czy ktoś używał Sproutcore?

text: Czy ktoś używał Sproutcore do aplikacji internetowej? Jeśli tak, czy możesz mi opisać swoje doświadczenie? Obecnie rozważam to, ale mam kilka obaw. Po pierwsze, dokumentacja jest zła/niekompletna i obawiam się, że spędzę dużo czasu na zastanawianiu się lub przekopywaniu się przez kod źródłowy. Również trochę waham się, czy korzystać z projektu, który jest stosunkowo nowy i może ulec znaczącym zmianom. Wszelkie przemyślenia osób, które rozwinęły się w Sproutcore, są mile widziane! EDIT/PS: Tak, widziałem ten post: http://stackoverflow.com/questions/370598/sproutcore-and-cappuccino . Jednak interesuje mnie nieco dłuższy opis samego Sproutcore od kogoś, kto używał go do znaczącego projektu.


title: Czy biedni pisarze robią biednych programistów?

text: Czytam _Koderzy w pracy_ Petera Seibela i wiele razy wspominano, że programiści, którzy nie potrafią pisać, na ogół są słabymi programistami – twierdzą tak Douglas Crockford, Joshua Bloch, Joe Armstrong, Dijkstra (a ja przeczytaj tylko połowę książki). Jakie jest twoje zdanie na ten temat? Czy niemożność wyrażenia siebie na piśmie w języku naturalnym, takim jak angielski, jest przeszkodą w pisaniu dobrego kodu?


title: Co powinna mieć wizytówka freelancera?

text: Na przykład, kiedy rok temu zaczynałem jako freelancer, moja wizytówka zawierała moje imię i nazwisko, adres e-mail i stronę internetową – a na górze listę technologii, z którymi czuję się komfortowo. Z perspektywy czasu wydaje mi się, że nie była to mądra decyzja. Dlaczego potencjalny klient miałby wiedzieć, czym jest Python lub Ruby? Skąd mógł wiedzieć, czym jest .NET? Zostało mi jeszcze kilka starych kart, ale wyślę po nowe karty. Co polecasz nam, programistom, pokazać na naszych wizytówkach? Czy mam rację, myśląc, że technologie tworzenia list są bez znaczenia dla potencjalnych klientów?


title: Użyj zmiennej globalnej, singletona lub czegoś innego

text: **Przedmowa:** Pracuję w PHP ( _Porzućcie nadzieję, że tu wchodzicie_ ). **Tło:** W PHP istnieje duży zestaw funkcji globalnych, z których wiele to różne wywołania systemowe, takie jak sleep (i inne). Teraz używam `sleep` (i innych) w kilku różnych skryptach, które uruchamiam w wielu różnych miejscach, i stwierdziłem, że potrzebuję snu, aby zadzwonić do `pcntl_signal_dispatch` zaraz po zakończeniu `sleep`, ale prawdopodobnie nie we wszystkich moich skryptach. **Uogólnienie:** muszę sprawić, by funkcja globalna działała więcej niż obecnie, bez nadmiernego zakłócania mojego obecnego ekosystemu. **Moje rozwiązanie:** Wyobrażam sobie, że mógłbym stworzyć klasę opakowującą, która wykona poprawny `"sleep"`. _Singleton:_ Mógłbym stworzyć pojedynczą klasę "System", która otacza funkcje globalne. Do diabła, mógłbym nawet zrobić owijarki metodami statycznymi. Minusem jest to, że byłoby dużo sprawdzania schematów, aby zobaczyć, którą wersję muszę wykonać, albo wywołanie funkcji waniliowej, albo z dodatkowymi rzeczami. _Zmienna globalna:_ Mogę stworzyć ogólną klasę "System", która otacza funkcje globalne. Mogłem wtedy rozszerzyć klasę System o różne klasy, które zastępują funkcje opakowujące. W każdym skrypcie tworzę globalną zmienną `System`, w zależności od tego, jak mają się zachowywać funkcje. Wszystkie moje skrypty mają dostęp do tej zmiennej globalnej. Minusem jest to, że musiałbym upewnić się, że zmienna globalna jest zadeklarowana, nigdy nie jest nadpisywana i używa właściwego `Systemu`. _Coś jeszcze:_ Mógłbym utworzyć klasę `SysControl` ze statyczną zmienną `System` i statycznymi wrapperami `System````````````````````````````` sta statycznych ,, a następnie zamiany, do których `System` odnosi się moja klasa `SysControl`. Minusem jest to, że czuję, że przesadzam. Czy są jeszcze jakieś opcje, które powinienem rozważyć? Która z tych metod jest najlepsza i dlaczego? Jakich pułapek powinienem szukać w przyszłości? EDYCJA: Skończyło się na użyciu rozwiązania _Coś jeszcze_.


title: Dlaczego C++ jest często pierwszym językiem nauczanym na studiach?

text: Moja szkoła rozpoczyna program informatyczny od kursów programowania C++, co oznacza, że jest to pierwszy język, którego uczy się wielu uczniów. Widziałem, że wielu ludzi nie lubi C++ i czytałem z różnych powodów. Wydaje się niemal powszechną opinią, że C++ nie jest zbyt dobrym językiem. Odnoszę wrażenie, że nie jest zbyt lubiany na podstawie kilku pytań na StackExchange, a także postów takich jak: http://damienkatz.net/2004/08/why-c-sucks.html http://blogs.kde.org/ node/2298 http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/ itp. _(Uwaga: Nie uważam, że C++ to zły język. W rzeczywistości jest to główny język, którego używam. Jednak internet, a także niektórzy profesorowie sprawili wrażenie, że nie jest to zbyt popularny język. W rzeczywistości jeden z mój profesor ciągle łapie C++, ale wciąż jest to podstawowy język na mojej uczelni!)_ Mając to na uwadze, **dlaczego jest to pierwszy język, którego uczy się w wielu szkołach? Jakie są powody rozpoczęcia programu nauczania w C++?** Uwaga: To pytanie jest podobne do „Czy C++ nadaje się jako pierwszy język”, ale jest trochę inne, ponieważ nie interesuje mnie, czy jest odpowiedni, ale dlaczego jest został wybrany.


title: Pod względem wydajności : while , for ... Loops VS recursion

text: Co jest lepsze dla wydajności, aby zapisać pętlę jako liniową, np. for , while czy napisz to jako rekurencję ?


title: Jak wygląda proces określania, która metoda w hierarchii klas powinna zostać wykonana?

text: Myślałem, że rozumiem dziedziczenie i polimorfizm, ale zadano mi to pytanie i nie mogę za życia ustalić, jaka jest właściwa odpowiedź ani do czego próbują dotrzeć: > Proces określania której metoda w hierarchii klas powinna wykonać > jest znana jako: > > * a) dziedziczenie > * b) polimorfizm > * c) is-a > * d) has-a > * e) klasa nadrzędna > Patrząc na każdy z terminów , żadna z nich nie wydaje się właściwą odpowiedzią. **Dziedziczenie** ma miejsce tylko wtedy, gdy klasa automatycznie pobiera publiczne zmienne i metody w swojej klasie nadrzędnej. Więc to wyraźnie nie jest właściwa odpowiedź. **Polimorfizm** pozwala nam napisać jedną metodę do obsługi obiektu A, dzięki czemu będzie działać ze wszystkim, co rozszerza obiekt A (lub kontynuuje go, IE Object B rozszerza Object A. Object C rozszerza Object B, itd.) Więc to wyraźnie nie jest właściwa odpowiedź! **Jest-a** : To nawet nie ma sensu. Is-a służy po prostu do zadeklarowania, że klasa jest instancją swojej klasy nadrzędnej (pies to zwierzę), więc dziedziczy swoje publiczne zmienne i metody. Nie rozumiem, jak to jest „określanie, która metoda w hierarchii klas powinna zostać wykonana” **Ma-a** : Nie jestem za bardzo zaznajomiony z tym, ale zasadniczo jest to kompozycja, w której Obiekt-A ma-obiekt B , ale obiekt-B nie jest instancją obiektu A. To nie wydaje się być właściwą odpowiedzią również **Klasa nadrzędna** : To jest tylko klasa bazowa, jeśli prześledzimy drzewo dziedziczenia w górę, od wierzchołka drzewo jest klasą nadrzędną. Czy ktoś może wyjaśnić, który termin można również zdefiniować jako _"Proces określania, która metoda w hierarchii klas powinna zostać wykonana, jest znany jako"?_ Czy nie rozumiem jednego lub więcej terminów? Czy to po prostu źle sformułowane pytanie?


title: Czym są środowiska wykonawcze sieci Web i języki programowania

text: Przyglądałem się szczegółom tych dwóch różnych kategorii: 1. Środowiska wykonawcze sieci Web 2. Języki programowania aplikacji internetowych Uważam, że mam prawidłowe informacje i sformułowałem je poprawnie, ale nie jestem pewien. Szukałem od jakiegoś czasu, ale znajduję tylko fragmenty informacji lub to, co widzę jako bezużyteczne informacje (mogę się mylić). Oto moje dotychczasowe opisy: Środowiska uruchomieniowe sieci Web — środowisko uruchomieniowe implementuje część podstawowego zachowania dowolnego języka komputerowego i pozwala na jego modyfikację za pomocą interfejsu API lub wbudowanego języka specyficznego dla domeny. Środowisko wykonawcze sieci jest podobne, z wyjątkiem tego, że używa języków internetowych, takich jak skrypt Java, który wykorzystuje podstawowe zachowanie języka komputerowego. Innym przykładem języka internetowego środowiska uruchomieniowego jest JsLibs, który jest stabilnym środowiskiem wykonawczym programowania JavaScript do używania JavaScript jako ogólnego języka skryptowego. JavaScript jest często używany do tworzenia responsywnych interfejsów, które poprawiają wrażenia użytkownika i zapewniają dynamiczną funkcjonalność bez konieczności oczekiwania na reakcję serwera i przekierowanie na inną stronę. Języki programowania aplikacji internetowych — język programowania aplikacji internetowych to coś, co naśladuje tradycyjną aplikację komputerową na stronie internetowej. Na przykład za pomocą PHP można tworzyć formularze i tabele, które korzystają z bazy danych podobnej do tej z Microsoft Excel. Niektóre inne języki programowania aplikacji internetowych to: * Ajax * Perl * Ruby Oto niektóre z używanych zasobów: http://en.wikipedia.org/wiki/Web_application_development http://code.google.com/p/ jslibs/ **Proszę o potwierdzenie, że stworzone przeze mnie opisy są poprawne, ponieważ nadal nie jestem pewien, czy trafiłem w sedno.**


title: Jak odnieść sukces na Warsztatach Specyfikacji BDD?

text: Dzisiaj próbowaliśmy wprowadzić BDD do naszego procesu tworzenia oprogramowania, organizując warsztaty specyfikacji. Na ten warsztat mieliśmy 2 programistów, 1 testera i 1 analityka biznesowego. Warsztaty trwały 1h30 i pod koniec udało nam się wymyślić kilka scenariuszy BDD dla naszej nowej funkcji. Staraliśmy się skoncentrować na znalezieniu scenariuszy, które moglibyśmy przegapić i tych trudnych. Pod koniec warsztatu niektórzy ludzie byli z niego niezadowoleni. Jeden programista uznał, że **zmarnował swój czas**, ponieważ był przyzwyczajony do otrzymywania scenariuszy bezpośrednio przez analityka biznesowego i przeglądania ich z nią. Analityk biznesowy **nie czuł się pewnie z naszym omówieniem scenariusza** (miałem wrażenie, że mogliśmy pominąć inne ważne rzeczy), ale **co ważniejsze, uważał, że te warsztaty były również stratą czasu, jak mogła się domyślić wszystkie te scenariusze samodzielnie i w krótszym czasie**. Ten eksperymentalny warsztat trwał 1h30, a pod koniec nie czuliśmy się wystarczająco pewni tego, co zrobiliśmy… pewnie mogliśmy poświęcić na to więcej czasu, ale szczerze mówiąc, większość ludzi jest wykończona po 1h30 burzy mózgów, aby znaleźć firmę zasady z mózgu BA. Więc moje pytanie brzmi, jak ten rodzaj warsztatu może faktycznie działać. Teoretycznie, biorąc pod uwagę, że masz nową funkcję do opracowania, umieszczasz drzewo „amigos” (dev/tester/ba) w tym samym pokoju, aby mogli współpracować przy pisaniu różnych wymagań dla nowej funkcji na przykładach. Widzę z tego wszystkie korzyści. Zwłaszcza w zakresie dzielenia się wiedzą i wspólnego produktu/celu końcowego/zrealizowanej wizji. Nasz wniosek z tego eksperymentu był taki, że w rzeczywistości bardziej opłacalne jest **najpierw mieć licencjat, który będzie sam pracował nad przykładami**, a dopiero **a potem scenariusze zostaną przejrzane/przerobione przez 3 'amigos' **. Dzięki temu, że BA pracuje sam, czujemy się bardziej pewni, że mniej przeoczymy pewne rzeczy + nadal możemy później przejrzeć scenariusze, aby dokładnie sprawdzić. Nie sądzimy, że zwykła jednorazowa burza mózgów / przemyślana sesja odkrywania nie wystarczy, aby poważnie spełnić wszystkie wymagania dotyczące nowej funkcji. Analityk biznesowy jest właściwie najlepszą osobą do tego typu rzeczy. Najlepszą rzeczą, jaką możemy zrobić, to przejrzeć to, co napisała i sprawdzić, czy mamy wspólne zrozumienie (co może doprowadzić do przepisania niektórych jej scenariuszy lub dodania nowych, które mogła przegapić). Jak więc sprawić, by to działało efektywnie **w praktyce** ?


title: Krótki materiał na temat zarządzania czasem życia obiektów w C++ oraz przekazywania i zwracania wartości/odniesień

text: Zastanawiałem się, czy ktoś może wskazać post, pdf lub fragment książki zawierającej zasady dotyczące zmiennych czasów życia w C++ i najlepsze praktyki przekazywania i zwracania parametrów funkcji. Rzeczy takie jak kiedy przekazywać przez wartość i przez odniesienie, jak współdzielić własność, unikać niepotrzebnych kopii itp. To nie jest mój konkretny problem, programowałem w C++ wystarczająco długo, aby znać zasady instynktownie, ale jest to coś, z czym potyka się wielu nowicjuszy w tym języku i chętnie im na to wskażę.


title: Powiadomienie GPL dotyczące fragmentów

text: Nie chcę tylko pytać, czy można umieścić informację o GPL w małym skrypcie lub fragmencie? > Ten program jest wolnym oprogramowaniem: możesz go redystrybuować i/lub modyfikować > zgodnie z warunkami Powszechnej Licencji Publicznej GNU opublikowanej przez Free > Software Foundation, w wersji 3 tej Licencji lub (według Twojego wyboru) > dowolna późniejsza wersja. > > Ten program jest rozpowszechniany w nadziei, że będzie przydatny, ale BEZ > ŻADNEJ GWARANCJI; nawet bez dorozumianej gwarancji PRZYDATNOŚCI HANDLOWEJ lub > PRZYDATNOŚCI DO OKREŚLONEGO CELU. Zobacz Powszechną Licencję Publiczną GNU > więcej szczegółów. > > Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU wraz z > tym programem. Jeśli nie, zobacz http://www.gnu.org/licenses/. A może wystarczy informacja o prawach autorskich?


title: Generowanie niestandardowego widżetu, który użytkownicy mogą osadzić na swojej zewnętrznej stronie internetowej na podstawie danych z mojego serwera, które okresowo się zmieniają

text: Decyduję o tym, jak wygenerować kod, aby umożliwić użytkownikom generowanie widżetu, który można osadzić (podobnie jak znaczek StackOverflow) na zewnętrznych stronach internetowych. Zawartość osadzonego widżetu będzie się okresowo zmieniać, ale nie musi komunikować się w czasie rzeczywistym z moim serwerem po załadowaniu przez użytkownika strony, na której jest osadzony. Otwiera to kilka możliwości, aby to zadziałało: 1. Na serwerze wstępnie wygeneruj statyczną zawartość HTML, którą chcę renderować na ich stronie (i zaplanuj zadanie, które regeneruje plik statyczny). Moi użytkownicy mogą następnie osadzić go na swojej stronie, używając odwołania iframe do zasobu statycznego. 2. To samo co powyżej, ale zamiast iframe tworzę plik js, do którego się odwołują (podobnie jak kod Google Analytics), a następnie serwowany plik js wstawia dane do swojego DOM. Mój serwer WWW musiałby dynamicznie generować plik js przy każdym żądaniu zasobu pliku. 3. Daj im plik js, który tworzy element na ich stronie, jak powyżej, z wyjątkiem tego, że ładunek pliku js nie zawiera wszystkich danych i zamiast tego zasadniczo generuje element DOM jako szablon, a następnie wywołuje usługi sieciowe w celu wypełnienia danych ( jak ich nazwa i wynik) za pomocą żądań JSONP do mojego serwera. Podoba mi się 2 dla wyraźnej kontroli po stronie serwera, ale zajmie to więcej czasu. 3 jest dobre, ponieważ usługi, które udostępniam w celu pobrania tych danych, mogą być później ponownie użyte do innych celów. Generalnie nie lubię ramek iframe, ale działają i są bardzo szybkie w implementacji. Jakieś sugestie dotyczące sposobu postępowania lub pomysły, które przegapiłem?


title: Dlaczego wiele projektów ignoruje normalizację w RDBMS?

text: Widziałem wiele projektów, w których normalizacja nie była pierwszą kwestią rozważaną w fazie podejmowania decyzji. W wielu przypadkach projekty te zawierały ponad 30 kolumn, a głównym podejściem było „umieścić wszystko w tym samym miejscu”. Zgodnie z tym, co pamiętam, normalizacja jest jedną z pierwszych, najważniejszych rzeczy, więc dlaczego czasami tak łatwo ją odrzucić? **Edytuj:** czy to prawda, że dobrzy architekci i eksperci wybierają zdenormalizowany projekt, podczas gdy niedoświadczeni programiści wybierają coś przeciwnego? Jakie są argumenty przeciwko rozpoczynaniu projektowania z myślą o normalizacji?


title: Jaka jest korzyść z dwuetapowego procesu zatwierdzania git (przemieszczania)?

text: Uczę się git i zauważyłem, że ma on dwuetapowy proces zatwierdzania: 1. `git add <pliki>` 2. `git commit` Pierwszy krok umieszcza wersje w tak zwanym „obszarze pomostowym” lub „ indeks". Interesuje mnie, dlaczego podjęto tę decyzję projektową i jakie są jej zalety? Ponadto, jako użytkownik git robisz to, czy po prostu używasz `git commit -a`? Pytam o to, ponieważ pochodzę z bzr (Bazaar), który nie ma tej funkcji.


title: Ograniczenia klucza obcego -> tak czy nie?

text: Chciałbym usłyszeć sugestie „z prawdziwego życia”, jeśli ograniczenia klucza obcego są dobre lub złe do wprowadzenia w DB. Uprzejmie proszę studentów/początkujących o powstrzymanie się od skakania i odpowiadania szybko i bez zastanowienia. Na początku mojej kariery myślałem, że najgłupszą rzeczą, jaką można zrobić, jest lekceważenie integralności referencyjnej. Dziś po „kilku” projektach myślę inaczej. Trochę inny. Jak myślisz: czy powinniśmy egzekwować ograniczenia dotyczące kluczy obcych, czy nie? *Proszę wyjaśnić swoją odpowiedź.


title: Czy niezmienność jest bardzo warta zachodu, gdy nie ma współbieżności?

text: Wydaje się, że bezpieczeństwo wątków jest zawsze/często wymieniane jako główna zaleta używania typów niezmiennych, a zwłaszcza kolekcji. Mam sytuację, w której chciałbym się upewnić, że metoda nie zmodyfikuje słownika ciągów (które są niezmienne w C#). Chciałbym maksymalnie ograniczyć rzeczy. Nie jestem jednak pewien, czy warto dodać zależność do nowego pakietu (Microsoft Immutable Collections). Wydajność też nie jest dużym problemem. Myślę więc, że moje pytanie brzmi, czy kolekcje niezmienne są _zdecydowanie_ zalecane, gdy nie ma twardych wymagań dotyczących wydajności i nie ma problemów z bezpieczeństwem wątków? Weź pod uwagę, że semantyka wartości (jak w moim przykładzie) może, ale nie musi być również wymogiem.


title: Dane statyczne i dynamiczne: czy powinienem używać różnych baz danych?

text: Powiedzmy, że buduję stronę internetową, która używa dwóch różnych typów danych: * Statyczne: informacje, które prawie się nie zmienią, takie jak nagrody filmowe lub nazwy krajów świata (chcę mieć szybki dostęp, więc nie ma zewnętrznego API) * Dynamiczne: informacje wprowadzone przez użytkowników, których nie mam napisałem jeszcze jedną linijkę kodu. Moja statyczna baza danych prawdopodobnie będzie dość duża, ale nie zmieni się z czasem. Co do dynamicznego db nie mam jeszcze pojęcia, ale może potrzebuję skalowalności. Czy na dłuższą metę powinienem używać różnych baz danych? Czy to powszechna praktyka?


title: Czy przechowujesz gotowe historie w fizycznym rejestrze produktów?

text: Mamy nasz Backlog Produktu jako fizyczną tablicę Kanban z kolumną TODO & DONE. Niektóre historie przechodzą z kolumny TODO do backlogu Sprintu podczas naszego planowania, a następnie podczas przeglądu Sprintu z powrotem do Backlogu Produktu w kolumnie DONE dla tego, który ukończyliśmy. Zastanawiałem się, czy trzymanie historii DONE na ścianie jest w ogóle interesujące. Zaczyna zajmować miejsce Sprinty po Sprintach i na razie nie widzę z tego żadnej wartości.


title: Jak mogę nauczyć się praktycznych zastosowań zasad inżynierii oprogramowania?

text: Mam problemy z wprowadzeniem inżynierii oprogramowania, której nauczyłem się w szkole, do moich projektów w pracy. Wszystkie wzorce są dość łatwe do zastosowania, ale wymyślanie architektur i ogólnych struktur klas jest dla mnie trudne. Jest tak otwarty i nigdy nie wiem, jak podejść do moich projektów, z wyjątkiem każdego projektu, który czysto pasuje do architektury MVC. Pracuję nad coraz większymi projektami. Produkt końcowy działa, ponieważ dobrze znam się na testowaniu, ale dotarcie tam to piekło, a powrót do dodania funkcji jest gorszy. Moja praca zwykle sprowadza się do planowania od punktu wejścia do aplikacji i przemyślenia przypadków użycia. To w końcu działa, ale kończy się to niską spójnością i ściśle powiązanym kodem. Miałem wystarczające doświadczenie po ukończeniu szkoły, aby rozpocząć pracę z większą ilością obowiązków niż programiści na poziomie podstawowym, więc nie mam korzyści z uczenia się od bardziej doświadczonego zespołu. Problem w tym, że jestem bardzo nieefektywny. Mój szef powiedział kiedyś, że jeśli zrealizuję te projekty szybciej i przy takim samym poziomie testów, mogę zarobić więcej. Więc muszę nauczyć się inżynierii oprogramowania. Przeczytałem wiele książek, ale są one trochę zbyt abstrakcyjne; Potrzebuję czegoś konkretnego. **Gdzie powinienem się uczyć, aby nauczyć się inżynierii oprogramowania do prawdziwych projektów?** **EDYTUJ:** Wiedza, że czasami kończę z czystym kodem, może pomóc. Dotarcie tam albo zajmuje mi naprawdę dużo czasu, albo poddaję się i hackuję, bo wiem, że to zadziała. Większość ludzi powie, że jest to związane z doświadczeniem, ale musi być jakieś miejsce, do którego mogę się udać, które mówi: jeśli twój projekt jest taki i taki, wypróbuj te architektury.


title: Zrozumienie list Pythona IZIP zwraca pustą listę

text: Mam listę ciągów, które sortuję. Na liście znajduje się 12 różnych ciągów kluczy, których używam do sortowania. Więc zamiast pisać 12 oddzielnych list składanych, chciałbym użyć listy pustych list i listy ciągów kluczy do sortowania, a następnie użyć izip do wykonywania list składanych. Oto co robię: >>> from itertools import izip >>> tran_types = ['DDA Debit', 'DDA Credit'] >>> tran_list = [[] for item in tran_types] >>> trans = get_info_for_branch( 'sco_monday.txt',RT_NUMBER) >>> for x,y in izip(tran_list, TRANSACTION_TYPES): x = [[item.strip() for item in line.split(' ') if not item == ''] for line in trans if y in line] >>> tran_list[0] [] Chciałbym zobaczyć wynik bardziej podobny do następującego: >>> tran_list[0] [['DDA Debit','0120','18 ','3','83.33'],['DDA Debit','0120','9','1','88.88']] Wynik nie ma dla mnie sensu; obiekty zwracane przez izip to listy i ciągi znaków >>> dla x,y w itertools.izip(tran_list, TRANSACTION_TYPES): type(x), type(y) (<type 'list'>, <type 'str'>) (<type 'list'>, <type 'str'>) Dlaczego ten proces zwraca puste listy?


title: Nauka wydanego tokena w usłudze sfederowanej

text: Chciałbym nauczyć się sfederowanej usługi WCF. Mam w swoim systemie następujące elementy. • Windows XP • Visual Studio 2010 Express • SQL Server 2008 Express Czy możliwe jest utworzenie przykładowej usługi federacyjnej za pomocą tej infrastruktury? Czy jest na to jakiś artykuł? **AKTUALIZACJA** Federacja: http://msdn.microsoft.com/en-us/library/ms730908.aspx Przykład Federacji: http://msdn.microsoft.com/en-us/library/aa355045.aspx


title: Jak system może być wiedzą zerową?

text: Właściwie interesuje mnie system przechowywania wiedzy zerowej. Systemy, w których dostawca przechowywania twierdzi, że nie ma dostępu do przechowywanych danych. O ile wiem, dane są szyfrowane przy użyciu systemu szyfrowania symetrycznego, takiego jak AES lub inny, ale ten system potrzebuje klucza do działania. Więc co się dzieje z kluczem? czy to jest przechowywane? Gdzie? Jeśli użytkownik łączy się z innej lokalizacji i chce pobrać jeden ze swoich plików, musi najpierw pobrać klucz. Jeśli więc dostawca pamięci masowej również przechowuje klucz, może mieć dostęp do zaszyfrowanych danych. To tak, jakby mieć zamkniętą skrzynię i kod na kartce obok skrzyni, a następnie twierdzić, że nie możesz otworzyć skrzyni. Czy jest w tym jakaś wada? Całkowicie się mylę co do systemu o zerowej wiedzy? Jeśli w końcu mogą otworzyć plik, jak niektórzy z nich mogliby uniknąć sprawiedliwości, mówiąc: „Nie możemy wiedzieć, że przechowujemy nielegalne pliki?”


title: LAMPA bez PHP

text: Moje pytanie brzmi, czy część P LAMPY jest naprawdę potrzebna? Będę miał bazę danych i będę mógł połączyć się z nią przez appache http, więc po co mi php/python po stronie serwera (jeśli jest to naprawdę prosta konfiguracja) również z separacji obaw może być przynajmniej bardziej niezawodny teoretycznie, aby pominąć P z równania i używać tylko LAM. Co myślicie? Muszę zbudować to jako serwer linuksowy, aby zapleczać mobilny system iOS i Android. Twoje zdrowie


title: Dlaczego programowanie ekstremalne (XP) stało się przestarzałe na rzecz Agile, Kanban itp.?

text: Lubię XP (programowanie ekstremalne), zwłaszcza część, w której na jednym ekranie pracuje 2 programistów, ponieważ często rozwiązanie problemu jest bliższe, jeśli tylko wyjaśnisz, co robisz, a programowanie parami zmusza Cię do wyjaśnienia, co robisz. W ciągu ostatnich 10 lat styl pracy XP wydaje się przestarzały na rzecz metodologii pracy Agile i/lub Kanban. Czemu? Ponieważ XP wydaje mi się bardzo dobrym sposobem pracy i jest dużo o programowaniu, gdzie Agile i Kanban są bardziej o procesach.


title: Podstawy zarządzania projektami / tworzenie oprogramowania

text: Nagle uderzyło mnie dzisiaj, że nigdy nie tworzyłem żadnej dużej aplikacji ani nie pracowałem z zespołem programistów, przez co bardzo mi brakuje – zarówno pod względem wiedzy technicznej, jak i tej związanej z zabawą społecznościową. I chciałbym to naprawić - pomysł polega na założeniu grupy open source poprzez szkolenie studentów (bezpłatnie) i rozwijanie z nimi jakiejś aplikacji open source. Proszę o kilka podstawowych porad dotyczących całego procesu, jak (1) planować i (2) zarządzać projektami w zespole. Jakie nowe zestawy umiejętności polecilibyście? (Przeczytałem _Joel na temat oprogramowania_ i _37 Sygnałów_ i otrzymałem od nich wiele wnikliwych wskazówek. Ale chciałbym trochę więcej wiedzy technicznej...) * * * Doświadczenie (freelancer, ponad 4 lata) - Inżynier komputerowy > grafik / projektant stron internetowych > marketing online > przeszedłem do programowania w PHP, Perl, Python > zrobiłem szkolenie Oracle DBA OCP, aby zrozumieć DB > aktualny tytuł samoprzypisany - programista aplikacji internetowych.


title: Akceptacja ryzyka kolizji UUID na podstawie liczby klientów

text: Po przeczytaniu kilku pytań dotyczących prawdopodobieństwa kolizji UUID wydaje się, że kolizje, chociaż mało prawdopodobne, nadal są możliwe i nadal potrzebne jest rozwiązanie konfliktu. Dlatego zastanawiam się nad pochodzeniem wyboru UUID dla CouchDB * Czy „nieprawdopodobna kolizja” jest obowiązkiem dewelopera? * Czy oczekiwano, że identyfikatory będą używane przez ograniczoną liczbę klientów? Kiedy przejrzałem dokumentację, wyglądało na to, że algorytm CouchDB świetnie znosi partycje, ale im więcej czytam o problemach z rozproszonym generowaniem identyfikatorów, tym bardziej uważam, że ryzyko kolizji UUID jest możliwe tylko przy małej liczbie klientów. Chociaż nadal interesują mnie poprzednie pytania, najważniejsze, czego chcę się dowiedzieć, to: * Czy normalną praktyką jest akceptowanie ryzyka kolizji UUIDów liczących na małą liczbę rozproszonych generatorów? Czy zawsze zakładał, że prawdopodobieństwo kolizji jest tak niskie, że nie stanowi to problemu?


title: Szukasz bardzo wydajnego pamięciowo sposobu na znalezienie eksportowania wszystkich relacji w drzewie genealogicznym

text: Pomyśl o tym pytaniu jak o drzewie genealogicznym, w sekcji **PS** wyjaśnię, co to dokładnie jest, ale drzewo genealogiczne jest łatwiejsze do wyobrażenia: więc ojciec ma dzieci, te dzieci mogą mieć więcej dzieci, te dzieci mogą mieć więcej dzieci itp. 1- Nie mam w pamięci wszystkich informacji, aby je przemierzyć. Z każdym wywołaniem metody i trafieniem do bazy danych mam tylko ojca na pewnym poziomie i jego dzieci. Zobacz tutaj jest wysoki poziom metody, którą posiadam i potrzebuję, jak wykorzystać kilka dobrych jej części: private void Foo(string fatherNode) { // wywołaj kilka skryptów DB i pobierz dane, z którymi musisz pracować. int numberOfKids = // pobierz go z rzeczy, którą wypełniłeś wywołaniem bazy danych. for(int i = 1 to numberOfKids) { Node Child = // pobierz dziecko[i] z listy, którą wypełniliśmy z wywołań bazy danych //dodaj je do treeView } } To działało, ponieważ jest to aplikacja GUI i z każdym wiesz, że zdarzenie „kliknij”, tak naprawdę prosiliśmy o tylko jeden poziom informacji, ale teraz potrzebuję nowej funkcji, w której mogę kliknąć przycisk Eksportuj i zapisuje ona CAŁĄ strukturę tego całego drzewa genealogicznego do pliku XML. rozwiń te węzły i nadal zobacz hierarchię rodzin) 2- Jest dużo danych. Jeden ojciec może mieć 400 dzieci, każde z nich może mieć 10 dzieci więcej, a każde z tych dzieci może mieć 500 dzieci więcej… więc muszę się również martwić o wyjątki pamięci… 3- Rekurencja? czy naprawdę możemy załadować WSZYSTKIE tę hierarchię do pamięci? Nie sądzę.. pamiętaj, że celem jest wyeksportowanie go do XML. Może więc skutecznym sposobem jest napisanie dobrego algorytmu, który przy każdym wywołaniu zapisuje jeden poziom hierarchii do pliku i nie ładuje całości do pamięci. .. Ale ja ciągnę za włosy i uderzam głową o biurko i nie mogę złamać kodu i rozgryźć go.. Więc jakie są twoje sugestie dotyczące pseudokodu... Nawiasem mówiąc, używam C#. * * * **P.S:** To jest właściwie hierarchia Bioinformatyki Klinicznej, więc mówisz Ok, ludzkie genomy..ok teraz pod tym jest 27000 genów, Ok teraz dostaje gen234 i powiedzmy jakie są jego dzieci,...


title: Wydajność i inne problemy związane z używaniem typów zmiennoprzecinkowych w C++

text: Będąc zainteresowanym programowaniem wydajnościowym w C ++, jest jeden aspekt, o którym naprawdę nie mam pojęcia - i to jest implikacja używania obliczeń zmiennoprzecinkowych w porównaniu z podwajaniem w porównaniu z normalną matematyką całkowitą? Jakie problemy z wydajnością przy tego typu obliczeniach należy wziąć pod uwagę? Jakie inne kwestie należy wziąć pod uwagę przy podejmowaniu decyzji, jakiego rodzaju operatorów użyć? Jedyne, co obecnie wiem, to to, że podwajania są prawdopodobnie najdroższe, ponieważ są większe, następne są obliczenia zmiennoprzecinkowe, a następnie obliczenia na liczbach całkowitych są zwykle najszybsze na procesorze, ponieważ są znacznie prostsze.


title: Używanie openid w „systemie zamkniętym”

text: Chciałbym opublikować stronę internetową tylko dla niektórych członków rodziny. Mówiąc najprościej, jak miszmasz rodzinnych zdjęć i filmów. Jednak chcę, aby pozostała prywatna. Rozważałem użycie openid do procesu logowania, ponieważ naprawdę chciałem uniknąć: 1. Przechowywania nazw użytkowników i haseł (zbyt dużo konserwacji) 2. Tworzenia zaciemnionego adresu URL, który można pobrać z paska narzędzi (niewystarczająco prywatne) 3. Tworzenia hasła aby uzyskać dostęp do strony (miałem użytkowników, którzy nie mogli tym zarządzać) Więc miałem nadzieję, że użyję openid, aby powiedzieć, że mój brat zaloguje się za pomocą swojego konta Google. Ale z tego, do czego używałem openid, nie przeszkadzałoby to innym logować się na stronie. Pomyślałem, że może mógłbym ograniczyć to ręcznie, ale ten akapit z najlepszych praktyk Google App Platform skłania mnie do podwójnego myślenia: > Z perspektywy protokołu oba logowania do dwóch IDP są legalne i > atrybuty zwracane przez drugiego IDP wyglądają identycznie — ten sam e-mail > adres, imię i tak dalej. Jedyną różnicą między tymi dwoma > żądaniami jest deklarowana tożsamość użytkownika. W rzeczywistości strony ufające są > zobowiązane do zweryfikowania, czy dostawcy tożsamości zwracają tylko tożsamości, które > są autorytatywne, aby uniemożliwić nieuczciwemu dostawcy tożsamości > potwierdzanie tożsamości od innych dostawców. Ale nic nie stoi na przeszkodzie, aby nieuczciwy dostawca tożsamości dostarczył atrybutów, takich jak > nazwy i adresy e-mail, które mogą być niezgodne z prawdą. Czy openid jest „właściwym” narzędziem do tego, co chcę zrobić? (Miej prywatny interfejs internetowy, który wymaga logowania, ale nie ma zarządzania użytkownikami poza identyfikacją członków rodziny)


title: Czy przechwytywanie artefaktów budowania w Artifactory przez Jenkinsa jest dobrą praktyką?

text: Używamy Jenkins do uruchamiania kompilacji ciągłej integracji. Wynikiem tych kompilacji mogą być pliki EAR, pliki WAR lub po prostu kolekcja plików utworzonych w systemie TAR. Do tego momentu używaliśmy Jenkinsa do zarządzania produkowanymi artefaktami. Posiadamy Artifactory wdrożone we własnym zakresie. Czy nie byłoby złym pomysłem wykorzystać Artifactory do uchwycenia wyprodukowanych artefaktów? A może Artifactory jest przeznaczony do przechowywania plików JAR z wersjami, które można wciągnąć do projektów za pomocą Mavena podczas budowania, a nie do przechwytywania artefaktów, których używa narzędzie do ciągłej integracji?


title: Jak mogę stwierdzić, czy oprogramowanie jest mocno sprzężone?

text: Znam termin „silnie sprzężony”, ale jestem ciekaw, czy istnieją znaki (zapachy kodu), które mogą wskazywać, że kod jest silnie sprzężony. Obecnie pracuję z Java EE, ale może to dotyczyć dowolnego języka. **Edytuj:** Jeśli ktoś jest zainteresowany, ten artykuł może okazać się pomocny: w pogoni za jakością kodu: uważaj na zwartą parę! (IBM)


title: Bycie kierownikiem zespołu i programistą w zespole Scrum

text: Zarządzam 6-osobowym zespołem, który niedawno przeniósł się do Scrum. Mamy Scrum Mastera (jeden z programistów w zespole) oraz Product Ownera. Ponieważ mam dość dużo wolnego czasu (ponieważ dużo pracy związanej z zarządzaniem, którą kiedyś wykonywałem, jest teraz wykonywane przez Scrum Mastera i Product Ownera) i ponieważ chcę pozostać technicznie istotny, robię trochę prac związanych z rozwojem technicznym. Działam jako część zespołu deweloperskiego, angażuję się w niektóre historie w każdym sprincie i uczestniczę we wszystkich spotkaniach jako część zespołu. Czy uważasz, że to dobry pomysł? Czy może zaprzeczyć „samoorganizacji” zespołu?


title: Wzorce projektowe dla wielowątkowego serwera wiadomości

text: Projektuję serwer wiadomości błyskawicznych jako osobiste ćwiczenie, które ma poprawić moje zrozumienie i zastosowanie wzorców wielowątkowych i projektowych w Javie. Nadal projektuję, jeszcze nie ma kodu. Moim celem jest posiadanie serwera, który powinien efektywnie wykorzystywać skrzynkę wieloprocesorową. Chciałbym, żeby serwer był rozprowadzany w wielu boksach, ale zastanawiam się, czy to działa, zanim będę mógł chodzić. Moje pierwsze przemyślenia to: * `ClientConnectionManager` posiada obiekt `ServerSocket`, który stale akceptuje połączenia klienta `Socket`. * `ClientConnectionManager` posiada pulę wątków, która tworzy nowy obiekt `ClientProxy` po zaakceptowaniu połączenia przez gniazdo klienta, przekazując klientowi obiekt `Socket`. * Obiekty `ClientProxy` reprezentują aplikację kliencką i obsługują wysyłanie/odbieranie komunikatów w strumieniu `Socket`. Czy to prawda, że tylko jeden `ServerSocket` może łączyć się z portem? Rozumiem, że nie ma możliwości, aby pula obiektów akceptowała połączenia Socket? Mam dwa pomysły na przekazywanie wiadomości pomiędzy obiektami `ClientProxy`. Albo bezpośrednio między obiektami `ClientProxy`, które są „znajomymi”, albo przez centralny obiekt „Exchange”, albo jeszcze lepiej, pulę obiektów. Jakie są plusy/minusy tych dwóch podejść? Czy Exchange lepiej nadaje się do aplikacji rozproszonej? Czy odpowiednie byłyby odpowiednio wzorce Obserwatora i Pośrednika?


title: Mało pamięci GDI

text: Jestem świeży w Visual C++. Idąc dalej w książce "Programowanie Windows z MFC", natknąłem się na GDI (Graphics Device Interface) i użycie pędzla. Książka mówi, że pędzla nie można utworzyć, jeśli w GDI brakuje pamięci. Chcę wiedzieć, kiedy i jak GDI ma mało pamięci? A co ważniejsze, jaki jest powód, dla którego nie możemy stworzyć pędzla, gdy GDI ma mało pamięci?


title: Czy małe ilości programowania funkcjonalnego są zrozumiałe dla osób niebędących FP?

text: **Case** : Pracuję w firmie, pisząc aplikację w Pythonie, która obsługuje dużo danych w tablicach. W tej chwili jestem jedynym programistą tego programu, ale prawdopodobnie będzie on używany/modyfikowany/rozszerzany w przyszłości (1-3 lata) przez jakiegoś innego programistę, w tej chwili mi nieznane. Prawdopodobnie nie będę tam bezpośrednio, aby pomóc, ale może udzielę wsparcia przez e-mail, jeśli będę miał na to czas. Tak więc, jako programista, który nauczył się programowania funkcjonalnego (Haskell), mam tendencję do rozwiązywania na przykład filtrowania w ten sposób: filter = filter(element lambda: included(item.time, dur), Measures) Reszta kodu jest OO, to tylko kilka małych przypadków, w których chcę to rozwiązać w ten sposób, ponieważ według mnie jest to o wiele prostsze i piękniejsze. **Pytanie** : Czy można dzisiaj pisać taki kod? * Jak programista, który nie napisał/nie nauczył się FP, reaguje na taki kod? * Czy jest czytelny? * Modyfikowalny? * Czy powinienem napisać dokumentację, taką jak wyjaśnienie dziecku, co robi linia? # Odfiltruj elementy z miar, dla których zawarte(item.time, dur) != Prawda, zapytałem mojego szefa, a on po prostu mówi "FP to czarna magia, ale jeśli działa i jest najbardziej wydajnym rozwiązaniem, to jest OK by z niego korzystać." Jaka jest twoja opinia na ten temat? Jako programista niebędący programistą FP, jak reagujesz na kod? Czy kod jest „googable”, dzięki czemu możesz zrozumieć, co robi? Chciałabym poznać opinię na ten temat :) **Edytuj** : Zaznaczyłem post phant0m jako odpowiedź, ponieważ daje dobre rady, jak napisać kod w bardziej czytelny sposób, a mimo to zachowuje zalety. Ale chciałbym również polecić post superM ze względu na jego punkt widzenia jako programisty nie-FP.


title: Czy zasada substytucji Liskov jest niezgodna z introspekcją lub typowaniem kaczki?

text: Czy dobrze rozumiem, że zasady substytucji Liskov nie można zaobserwować w językach, w których obiekty mogą się sprawdzać, jak to jest zwykle w językach kaczych? Na przykład w Rubim, jeśli klasa `B` dziedziczy z klasy `A`, to dla każdego obiektu `x` klasy `A`, `x.class` zwróci `A`, ale jeśli `x` jest obiektem `B`, `x.class` nie zwróci `A`. Oto instrukcja LSP: > Niech _q(x)_ będzie właściwością możliwą do udowodnienia dotyczącą obiektów _x_ typu _T_. Wtedy _q(y)_ > powinno być możliwe do udowodnienia dla obiektów _y_ typu _S_ gdzie _S_ jest podtypem > _T_. Na przykład w Ruby klasa T; klasa końcowa S < T; end narusza LSP w tej formie, o czym świadczy właściwość _q(x)_ = `x.class.name == 'T'` * * * _Dodanie._ Jeśli odpowiedź brzmi "tak" (LSP niezgodne z introspekcją), wtedy moje inne pytanie brzmiałoby: czy istnieje jakaś zmodyfikowana „słaba” forma LSP, która może być odpowiednia dla dynamicznego języka, prawdopodobnie pod pewnymi dodatkowymi warunkami i tylko ze specjalnymi typami _właściwości_. * * * _Aktualizacja._ Dla porównania, oto inne sformułowanie LSP, które znalazłem w sieci: > Funkcje używające wskaźników lub odwołań do klas bazowych muszą być w stanie > używać obiektów klas pochodnych bez wiedzy o tym. I jeszcze: > Jeśli S jest zadeklarowanym podtypem T, obiekty typu S powinny zachowywać się jak obiekty > typu T powinny się zachowywać, jeśli są traktowane jako obiekty typu T. Ostatni z nich jest opisany: > Zauważ, że w LSP chodzi o oczekiwane zachowanie obiektów. Można > śledzić LSP tylko wtedy, gdy jest jasne, jakie jest oczekiwane zachowanie obiektów >. Wydaje się, że jest to słabsze od oryginalnego i może da się zaobserwować, ale chciałbym, aby zostało to sformalizowane, w szczególności wyjaśnione, kto decyduje o oczekiwanym zachowaniu. Czy zatem LSP nie jest właściwością pary klas w języku programowania, ale pary klas wraz z danym zbiorem właściwości spełnianych przez klasę przodka? Czy w praktyce oznaczałoby to, że aby skonstruować podklasę (klasę potomków) respektującą LSP, wszystkie możliwe zastosowania klasy przodków muszą być znane? Według LSP klasę przodka można zastąpić dowolną klasą potomka, prawda? * * * _Aktualizacja._ Zaakceptowałem już odpowiedź, ale chciałbym dodać jeszcze jeden konkretny przykład z Ruby, aby zilustrować pytanie. W Rubim każda klasa jest modułem w tym sensie, że klasa `Class` jest potomkiem klasy `Module`. Jednak: klasa C; end C.is_a?(Module) # => true C.class # => Class Class.superclass # => Moduł modułu M; end M.class # => Moduł o = Object.new o.extend(M) # ok o.extend(C) # => TypeError: błędny typ argumentu Class (oczekiwany Module)


title: Czy są jakieś problemy z implementacją niestandardowych metod HTTP?

text: Mamy adres URL w następującym formacie > /instance/{instanceType}/{instanceId} Możesz go wywołać standardowymi metodami HTTP: POST, GET, DELETE, PUT. Istnieje jednak kilka innych działań, które podejmujemy, takich jak „Zapisz jako wersję roboczą” lub „Weryfikuj”. Pomyśleliśmy, że możemy po prostu użyć niestandardowych metod HTTP, takich jak: DRAFT, VALIDATE, CURATE Myślę, że jest to dopuszczalne, ponieważ standardy mówią > „Zestaw typowych metod dla protokołu HTTP/1.1 jest zdefiniowany poniżej. Chociaż ten zestaw > można rozszerzyć, nie można zakładać, że dodatkowe metody mają tę samą > semantykę dla oddzielnie rozszerzonych klientów i serwerów”. A narzędzia takie jak WebDav tworzą własne rozszerzenia. Czy są jakieś problemy, które ktoś napotkał z niestandardowymi metodami? Myślę o serwerach proxy i firewallach, ale wszelkie inne obszary zainteresowania są mile widziane. Czy powinienem pozostać po bezpiecznej stronie i po prostu mieć parametr adresu URL, taki jak action=validate|curate|draft?


title: Co powinienem wziąć pod uwagę, wybierając między uczestnictwem w MOOC a pracą nad projektem?

text: W tle programowałem od około 5 lat i czuję, że jestem nieco na bieżąco z najlepszymi praktykami i technikami w branży (w szczególności w zakresie tworzenia stron internetowych), a także podstawami tworzenia oprogramowania. Wiem jednak, że muszę się jeszcze wiele nauczyć. Ostatnio wiele bezpłatnych zajęć online, MOOC, zostało udostępnionych z wielu inicjatyw, w tym z wielu uniwersytetów. Wiele z tych kursów dotyczy rozwoju oprogramowania, informatyki teoretycznej, matematyki i innych dziedzin, które są ogólnie istotne dla programowania. Brałem udział w wielu kursach MOOC, wiele się nauczyłem i świetnie się przy tym bawiłem. Jednak czas, jaki zajmuje mi ukończenie materiału **pozostawia niewiele miejsca na cokolwiek innego** , w tym zagłębienie się w temat czy zastosowanie materiału w formie projektu (zwykle biorę 3+ kursy na raz). Zastanawiając się nad tym, zadałem sobie kilka pytań: * Z perspektywy czysto umiejętnościowej, _jakie są plusy i minusy uczęszczania na zajęcia/pracy nad projektami?_ Czy praca nad projektami pomoże mi szybciej poprawić moje rzeczywiste umiejętności programistyczne ? Czy ominie mnie jakiś głęboki wgląd, jeśli nie będę brał udziału w kursach? * Z perspektywy kariery, _co najbardziej cenią pracodawcy?_ (podejrzewam, że już znam odpowiedź) Czy mnogość projektów (open source) czy mnogość zajęć będzie najbardziej przekonująca? * Wreszcie, zakładając, że kursy są uważane za „pozytywne netto”, _ile edukacji formalnej wystarczy?_ Jeśli nadal będę uczęszczał na kursy MOOC, kiedy powinienem zrobić sobie przerwę i pracować nad projektem?


title: klasy java i zapytania do bazy danych

text: Czy ktoś może wyjaśnić najlepszy sposób rozwiązania tego problemu. Załóżmy, że mam trzy klasy 1. `Osoba` 2. `Miejsce` 3. `Pojazd` Mam metodę DAO, która po wykonaniu zapytania musi zwrócić niektóre lub wszystkie te atrybuty z każdej z klas. Proszę zauważyć, że zgodnie z wymaganiami używam jednego DAO dla wszystkich trzech klas i bez frameworków. Tylko moja własna implementacja MVC Jak to zrobić? Wydaje się bardzo błędem, aby utworzyć klasę `PersonVenueVehicle` i zwrócić ją jako obiekt, aby uzyskać wartości pola instancji. Uczono mnie, że encje bazy danych muszą być odzwierciedlone przez klasy, jeśli tak jest, jak to jest zaimplementowane w takiej sytuacji?


title: Algorytm do znajdowania czasów, kiedy zasoby są dostępne

text: Piszę aplikację do półautomatycznego planowania. Biorąc pod uwagę niektóre istniejące rezerwacje i pewne wymagania dotyczące zasobów, musi znaleźć godziny, w których można zaplanować nowe wydarzenie. Użytkownik oceni wtedy wyniki i wybierze jedną z opcji. Nie trzeba optymalizować harmonogramu dla wielu wydarzeń, a zatem nie jest to zwykły problem z planowaniem zajęć NP-Hard. System posiada szereg zasobów (trenerów, sal, sprzętu), z których każdy ma określony rodzaj (np. nauczyciel francuskiego, sala seminaryjna, projektor...). Zasoby są zarezerwowane na wydarzenia, z których każde ma swój czas rozpoczęcia i zakończenia. Powiedzmy, że muszę zaplanować 2-godzinną lekcję francuskiego przy użyciu projektora w sali seminaryjnej, w jakich godzinach co najmniej jeden zasób z każdego wymaganego typu zasobów jest dostępny? Aby ograniczyć problematyczną przestrzeń, przez następne 90 dni dopuszczalne jest uwzględnienie tylko 9-17, od poniedziałku do piątku w 15-minutowych odstępach. Całkowita liczba zasobów rzędu 1000. Jak to zrobić bez konieczności porównywania każdego zasobu z każdym innym zasobem?


title: Czy w przypadku scentralizowanej kontroli wersji zawsze dobrze jest często aktualizować?

text: Zakładając, że: * Jesteś w zespole tworzącym oprogramowanie. * Twój zespół korzysta ze scentralizowanej kontroli wersji w procesie rozwoju. * Pracujesz nad nową funkcją, której ukończenie z pewnością potrwa kilka dni, a wcześniej nie będziesz w stanie zatwierdzić, ponieważ zepsułoby to kompilację. * Członkowie Twojego zespołu codziennie wprowadzają coś, co wpływa na niektóre pliki, z którymi pracujesz, w ramach nowej, wymyślnej funkcji. Ponieważ jest to scentralizowana kontrola wersji, w pewnym momencie będziesz musiał zaktualizować swoją lokalną kasę: przynajmniej raz tuż przed wprowadzeniem nowej funkcji. Jeśli zaktualizujesz tylko raz tuż przed zatwierdzeniem, może pojawić się wiele konfliktów z powodu wielu innych zmian wprowadzonych przez twoich kolegów z drużyny, co może być światem bólu do rozwiązania na raz. Lub możesz często aktualizować, a nawet jeśli istnieje kilka konfliktów do rozwiązania z dnia na dzień, powinno to być łatwiejsze, stopniowo. Czy możemy powiedzieć, że zawsze warto często aktualizować?


title: Czy adres C++11 dotyczył przekazywania obiektów z biblioteki standardowej między granicami biblioteki dynamicznej/współdzielonej? (tzn. dll i tak)?

text: Jedną z moich głównych skarg na C++ jest to, jak trudno w praktyce przekazać obiekty biblioteki standardowej poza granice biblioteki dynamicznej (tj. dll/tak). Biblioteka std często zawiera tylko nagłówki. Co jest świetne do robienia niesamowitych optymalizacji. Jednak w przypadku bibliotek dll są one często budowane z różnymi ustawieniami kompilatora, które mogą wpływać na wewnętrzną strukturę/kod kontenerów biblioteki standardowej. Na przykład w MSVC jedna biblioteka dll może kompilować z włączonym debugowaniem iteratora, podczas gdy inna kompiluje z wyłączonym. Te dwie biblioteki dll mogą powodować problemy z przekazywaniem kontenerów std. Jeśli udostępnię `std::string` w moim interfejsie, nie mogę zagwarantować, że kod, którego używa klient dla `std::string` jest dokładnym dopasowaniem do `std::string` mojej biblioteki. Prowadzi to do trudnych do debugowania problemów, bólów głowy itp. Albo sztywno kontrolujesz ustawienia kompilatora w swojej organizacji, aby zapobiec tym problemom, albo używasz prostszego interfejsu C, który nie będzie miał tych problemów. Lub określ swoim klientom oczekiwane ustawienia kompilatora, których powinni używać (co jest do bani, jeśli inna biblioteka określa inne ustawienia kompilatora). Moje pytanie brzmi, czy C++11 próbował coś zrobić, aby rozwiązać te problemy?


title: Jak obchodzić się z poufnymi danymi podczas korzystania z Github i Heroku?

text: Nie jestem jeszcze przyzwyczajony do sposobu działania Gita (i zastanawiam się, czy ktoś oprócz Linusa jest ;)). Jeśli używasz Heroku do hostowania swojej aplikacji, musisz sprawdzić swój kod w repozytorium Git. Jeśli pracujesz nad projektem open source, prawdopodobnie udostępnisz to repozytorium na Github lub innych hostach Git. Niektórych rzeczy nie należy sprawdzać w publicznym repozytorium; hasła do baz danych, klucze API, certyfikaty itp. Ale te rzeczy nadal muszą być częścią repozytorium Git, ponieważ używasz go do przesyłania kodu do Heroku. Jak pracować z tym przypadkiem użycia? Uwaga: Wiem, że Heroku lub PHPFog mogą używać zmiennych serwera, aby obejść ten problem. Moje pytanie dotyczy bardziej tego, jak „ukryć” części kodu.


title: Numery portów w projektach Visual Studio i IIS

text: Mam kilka pytań dotyczących lokalnych hostów i numerów portów, ponieważ jest to obszar, w którym nie mam zbyt dużej wiedzy, a ponieważ ostatnio musiałem pracować z konfiguracją projektów Visual Studio i IIS i są rzeczy, których nie jestem jasny . Mam następujące pytania dotyczące rzeczy, które są dla mnie mylące. Pomyślałem, że rozsądniej byłoby zawrzeć je wszystkie w jednym pytaniu, zamiast tworzyć osobne pytania. 1. Zauważyłem, że w projektach, nad którymi pracowałem w przeszłości, generowany jest losowy numer portu, ale ostatnio widziałem projekt, w którym numer portu został naprawiony. Jaki jest cel posiadania stałego/domyślnego numeru portu hosta lokalnego? tj. czy jest to szczególnie przydatne w projektach, w których nad projektem pracuje wielu programistów? 2. Jeśli rozwiązanie zawiera wiele projektów (na przykład usługi WCF, domenę, strony MVC/sieci sieci Web), czy można skonfigurować inny port hosta lokalnego dla każdego z nich? Jeśli tak, jakie są z tego korzyści? 3. Jeśli rozwiązanie zawiera wiele projektów i ma różne adresy URL/numery portów hosta lokalnego, czy musi istnieć odpowiednia witryna internetowa (i pula aplikacji) dla każdego projektu w usługach IIS? A może tylko dla projektu, który zawiera rzeczywiste strony internetowe?


title: Najczęściej zapominane rzeczy do zrobienia podczas programowania / tworzenia stron internetowych

text: Czy ktoś jeszcze ma tę jedną rzecz, o której zawsze zapomina podczas programowania lub tworzenia strony internetowej? Osobiście zapominam o dołączeniu Doctype na stronie internetowej ... ilość czasu, którą spędziłem wieki na naprawianiu / dodawaniu / hakowaniu za pomocą CSS, aby naprawić problemy z IE i okazuje się, że jest to deklaracja F'in Doctype !!!


title: Czy źle jest brać kod, który wyprodukowałeś w pracy, i ponownie wykorzystywać go do osobistych projektów?

text: W różnych miejscach pracy i życiu uniwersyteckim zawsze pisałem kod, który, jak sądziłem, "byłby bardzo przydatny w ogólnych sytuacjach". Rzeczywiście, celowo piszę kod, nawet jeśli zajmuje mi to trochę czasu, co wiem, że pomoże mi w przyszłości (np. niestandardowe funkcje `SubString()`). Stąd powód zajęć „Pomocnik”. Jestem pewien, że te funkcje można znaleźć gdzie indziej w Internecie, ale chodzi o to, że napisałem je i użyję ich później w innych pracach lub w projektach osobistych. Obecnie nie prowadzę osobistej biblioteki kodów, ponieważ nigdy nie mam czasu, aby tam siedzieć i kopiować kod z mojego miejsca pracy / projektów do innej osobistej lokalizacji. Pytanie brzmi, czy niewłaściwe jest branie kodu, który stworzyłeś w pracy i ponowne wykorzystywanie go ( **a** ) do osobistych projektów i ( **b** ) w innych miejscach pracy?


title: Rozwój AI, zmienność efektu horyzontu

text: Rozwijanie wyszukiwania alfa-beta hasła „Colorito”, którego cechą charakterystyczną jest to, że czasami prosta wspinaczka jest niemożliwa; więc sekwencja 2 lub 3 ruchów jest jedynym sposobem na osiągnięcie postępu. Wymyśliłem pozycję końcową, w której przy przeszukiwaniu 6 warstw możliwe jest zrobienie dobrego postępu w 2 ruchach, ale trzeci ruch musi być „złym” ruchem nowej sekwencji. Możliwe jest również, aby ta sama sekwencja 2 ruchów zajęła 3 ruchy, unikając „złego” ruchu na horyzoncie. Te 3 ruchy, które mogłyby być 2 ruchami, stają się zasadniczą odmianą. Problem polega na tym, że ta sama analiza dotyczy również następnego ruchu; więc sztuczna inteligencja utknie, nie robiąc żadnych postępów. Platforma wyszukiwania obsługuje wiele różnych gier, więc najbardziej interesują mnie ogólne podejścia do wykrywania/unikania tego problemu, ale także pomysły na konkretne gry, które mogą uniknąć tego konkretnego problemu. Edycja: Po pewnym namyśle rozsądnym i nieco ogólnym podejściem jest zezwolenie na ruchy „przejścia” na poziomie terminala wyszukiwania, nawet jeśli gra tego nie robi. Te sztuczne podania mogą być wyceniane na zero lub lekko dodatnio, więc zamiast znaleźć "złe" ruchy na granicy głębokości wyszukiwania, wyszukiwanie znajdzie podanie.