title: PHP - Wewnętrzne API/Biblioteki - Co ma sens?

text: Ostatnio dyskutowałem z kilkoma kolegami na temat najlepszego sposobu podejścia do nowego projektu i pomyślałem, że byłoby ciekawie wrzucić kilka zewnętrznych myśli do miksu. Zasadniczo przebudowujemy dość dużą witrynę (napisaną w PHP) i mamy różne opinie na temat konfiguracji platformy. **Wymagania:** Platforma będzie musiała obsługiwać wiele wewnętrznych witryn internetowych, a także projekty zewnętrzne (inne niż PHP), które w tej chwili składają się z aplikacji mobilnej i paska narzędzi. Nie mamy planów/potrzeby w przewidywalnej przyszłości otwierania zewnętrznego API (do użytku w produktach innych niż nasze własne). **Moja opinia:** Powinniśmy mieć bibliotekę dobrze udokumentowanych klas modeli natywnych, które można udostępniać między projektami. Modele te będą reprezentować wszystko w naszej bazie danych i mogą korzystać z funkcji zorientowanych obiektowo, takich jak dziedziczenie, cechy, metody magiczne itp. itp. Jak również z wykorzystaniem ORM. Następnie możemy dodać warstwę API do tych modeli, które mogą zasadniczo akceptować żądania i kierować je do odpowiednich metod, tłumacząc odpowiedź, aby mogła być używana niezależnie od platformy. Ten routing dla każdej metody można skonfigurować w razie potrzeby. **Ich opinia:** Powinniśmy mieć jedno HTTP API, które jest używane przez wszystkie projekty (wewnętrzne PHP lub inne). **Moje przemyślenia:** Dla mnie istnieje wiele problemów z korzystaniem z samego podejścia HTTP API: 1. Będzie to bardzo kosztowne pod względem wydajności. Żądanie jednej strony spowoduje kilka dodatkowych żądań http (które choć lokalne, nadal będą musiały obsłużyć Apache). 2. Stracisz wszystkie najlepsze funkcje PHP do tworzenia OO. Od prostego dziedziczenia, po korzystanie z ORM-ów, które pozwalają zaoszczędzić dużo pisania kodu. 3. W przypadku projektów wewnętrznych sam proces przyprawia mnie o dreszcze. Aby uzyskać nazwę użytkownika, na przykład, żądanie wyszłoby z naszego pudełka, przez sieć LAN, z powrotem, a następnie uruchomiłoby skrypt, który wywołuje metodę, JSON koduje dane wyjściowe i przekazuje je z powrotem. Musiałoby to być następnie zdekodowane w formacie JSON i przedstawione jako tablica gotowa do użycia. 4. Praca z tablicami, w odniesieniu do obiektów, smuci mnie w nowoczesnym frameworku PHP. **Ich myśli (i moje odpowiedzi):** 1. Posiadanie jednej metody działania sprawia, że wszystko jest proste. - _Zrobiłbyś inaczej tylko wtedy, gdybyś i tak używał innego języka._ 2. Stanie się solidny. - _Widząc, że API będzie korzystać z biblioteki modeli, myślę, że moja opcja byłaby równie solidna._ **Co o tym sądzisz?** Bardzo chciałbym usłyszeć opinie innych na ten temat, zwłaszcza że opinie obu stron nie opierają się na żadnych przeszłych doświadczeniach.


title: Wydanie projektu na licencji GPL v2 lub nowszej bez kodu źródłowego bibliotek

text: Napisałem system w Javie, który chcę wydać na warunkach GPL v2 lub nowszej. Użyłem Apache Maven do poradzenia sobie ze wszystkimi zależnościami systemu, więc nie mam kodu źródłowego żadnej z używanych bibliotek. Sprawdziłem już, wszystkie biblioteki zostały wydane na licencjach zgodnych z GPL (Apache v2, 3-klauzulowy BSD, MIT, LGPL v2 i v2.1). Czy mogę rozpowszechniać swoją pracę na licencji GPLv2 lub nowszej i udostępniać biblioteki w tym samym pakiecie co **oddzielne prace** , bez konieczności stosowania na nich GPL (zgodnie z **GPLv2 sec 2** ), nawet jeśli są konieczne skompilować i uruchomić system? Jeśli tak, wiem, że jestem związany tylko oryginalnymi licencjami każdej z nich i wiem, co robić.


title: Czy jest możliwy dostęp do wartości zwracanej javascript poza funkcją?

text: W jaki sposób można uzyskać dostęp do wartości zwracanej przez funkcję javascript poza funkcją? Na przykład, czy możesz powiedzieć funkcji, aby zwróciła coś w innym miejscu kodu? Przykład teoretyczny: milkmachine = function(argument){ var r; var k; //zrób coś z argumentami i zmiennymi return r; } var tęcza = milkmachine(); //tęcza == r milkmachine.return(k); var widmo = milkmachine(); //widmo == k


title: Jaka jest właściwa kolejność czytania tych książek?

text: Jestem młodszym programistą C#, uczyłem się w domu, a teraz dostałem swoją pierwszą pracę :) Chcę kupić te książki. Ale jaka jest właściwa kolejność czytania tych książek? Code Complete: Praktyczny podręcznik tworzenia oprogramowania Czysty kod: Podręcznik zwinnego rzemiosła oprogramowania Pragmatyczny programista


title: Czy najlepszym rozwiązaniem jest tworzenie tylnych drzwi do testowania usługi sieciowej?

text: Mamy publiczną usługę sieciową RESTful, która udostępnia funkcjonalność osobom trzecim. Piszemy automatyczne testy przeciwko niemu. Aby skonfigurować na nim wszystkie scenariusze, musimy zmienić dane, które za nim stoją. Posiadamy również prywatną usługę sieciową RESTful, która udostępnia funkcjonalność innym posiadanym przez nas systemom. Jednak ta usługa sieci Web nie ujawnia punktów końcowych wymaganych do skonfigurowania wszystkich scenariuszy dla publicznej usługi sieci Web. Czy w tej sytuacji najlepiej jest utworzyć dodatkowe punkty końcowe, które nie są potrzebne w normalnym działaniu operacyjnym, w prywatnej usłudze sieciowej, aby wesprzeć testowanie usługi publicznej? A może powinniśmy skonfigurować nasze dane za pomocą innych środków, takich jak wysyłanie poleceń SQL?


title: Radzenie sobie z fanboyami

text: Wszyscy prawdopodobnie spotkaliśmy kogoś takiego, tego programistę, który po prostu _wie_, że jego język jest jedynym prawdziwym językiem i nie będzie się przed tym zamykał. Jak sobie radzisz jak ktoś taki? Nie chcę nikogo urazić (zwłaszcza, że fanboy w moim miejscu pracy jest starszym programistą). Ale chcę mieć możliwość korzystania z wybranego przeze mnie języka skryptowego, gdy muszę napisać jednorazowy skrypt, który nigdy nie trafia do repozytorium i nikt inny nie musi wiedzieć, że istnieje. Myśli, z którymi musiałem sobie z tym poradzić: 1. Wyśmiej się - "haha tak może język X jest trochę łatwiejszy, chyba jestem masochistą!" 2. Idź z tym – naprawdę wolałbym tego uniknąć, ponieważ nie mogę sobie pozwolić na spadek wydajności związany z nauką nowego języka. 3. Ukryj mój język — zostań programistą w szafie i ukryj mój monitor za każdym razem, gdy coś piszę lub automatyzuję. Co byś zaproponował w tej sytuacji?


title: Jaka jest najlepsza praktyka z punktu widzenia doświadczonych programistów

text: Mój przełożony nakłania mnie do stosowania jego najlepszych praktyk, które sam określił. Wszystkie te praktyki oparte są na własnych założeniach. Nie zgadzam się z nimi i chciałbym otrzymać kilka opinii dobrze doświadczonych osób na temat tych praktyk. Wolałbym odpowiedzi od osób zajmujących się utrzymaniem ogromnych produktów i osób, które utrzymują produkt od lat. Preferowani są programiści z ponad 15-letnim doświadczeniem, ponieważ mój menedżer sam ma takie doświadczenie. Mam 7 lat doświadczenia. * * * ## Oto praktyki, które chce, abym zastosował: * nigdy nie rozszerza klas, zamiast tego używaj kompozycji i interfejsu, ponieważ rozszerzanie klas jest niemożliwe do utrzymania i trudne do debugowania. * Co myślę o tym rozszerzeniu, gdy jest to potrzebne, przestrzegaj "Zasady substytucji Liskova", a nigdy nie będziesz miał problemu, ale preferuj kompozycję i dekorację. Nie znam żadnego poważnego projektu, który zabroniłby dziedziczenia, czasami nie da się tego nie wykorzystać np. w frameworku UI. Wzorce projektowe są po prostu bezużyteczne. * * * * W PHP, dla prostych przypadków użycia (na przykład użytkownik potrzebuje interfejsu sieciowego do przeglądania tabeli bazy danych), jego "najlepszą praktyką" jest: skopiowanie jakiegoś losowego kodu php, który posiadamy, wklejenie go i zmodyfikowanie, wstawienie html i kod php w tym samym pliku, nigdy nie używaj klas w PHP, to nie działa dobrze w przypadku małych zadań, aw rzeczywistości nie działa dobrze w ogóle, nie ma dobrego narzędzia do pracy. Kopiuj i wklej kod PHP jest dobrą praktyką przy konserwacji, ponieważ skrypty są niezależne, a jeśli masz gdzieś błąd, możesz go naprawić bez skutków ubocznych. * Co o tym myślę: NIGDY, NIGDY NIE KOPIUJ kodu ani nie rób tego, ponieważ masz pięć minut na dostarczenie czegoś, po tym zrobisz refaktoryzację. Kopiuj i wklej kod jest błędem dla początkujących, jeśli masz błędy, będziesz miał je wszędzie za każdym razem, gdy wkleisz, to koszmar do utrzymania. Jeśli przestrzegasz „zasady otwierania i zamykania”, rzadko będziesz mieć efekty brzegowe, użyj testu jednostkowego, jeśli się tego boisz. W przypadku małych zadań w PHP użyj przynajmniej czegoś, co otrzymasz lub napisz HTML oddzielnie od kodu PHP i używaj go ponownie, kiedy tylko będziesz tego potrzebować. Klasy w PHP są dojrzałe, nie tak dojrzałe jak inne języki, takie jak python czy java, ale można ich używać. Istnieją narzędzia do pracy z klasami w PHP, takie jak Zend Studio, które działają bardzo dobrze. Korzystanie z klas zależy nie od języka, którego używasz, ale od wybranego paradygmatu programowania. Jestem programistą OOP, używam PHP5, dlaczego muszę strzelić sobie w stopę? * * * * Kiedy znajdziesz prosty błąd w kodzie i możesz go po prostu naprawić, jeśli nie pracujesz nad kodem w miejscu, w którym go znalazłeś, nigdy go nie naprawiaj, nawet jeśli zajmuje to 5 sekund. * Mówi mi, że jego „najlepsze praktyki” wynikają z faktu, że ma duże doświadczenie w utrzymywaniu oprogramowania w produkcji (14 lat) i teraz wie, co działa, a co nie, co mówi społeczność jest moda, a ludzie opowiadający się za takimi zasadami, jak nigdy nie kopiuj i nie wklej kodu, nie są rozwinięci w utrzymywaniu aplikacji. * Co o tym myślę: Jeśli znajdziesz błąd, napraw go, jeśli możesz to zrobić szybko, poinformuj osoby, które wcześniej dotykały tego kodu, sprawdź, czy nie wprowadziłeś nowego błędu, najlepiej dodaj do niego test jednostkowy. Obecnie pracuję nad projektem handlu internetowego, który obsługuje 15 tys. unikalnych użytkowników dziennie. Baza kodu musi być utrzymywana i jest utrzymywana w ten sposób od 2005 roku. * * * Najlepiej zamieścić krótki opis swojego stanowiska i doświadczenia w ujęciu lat efektywnego utrzymywania aplikacji, która jest na serio w produkcji.


title: Do czego obecnie używa się języka Java?

text: Java ma piętnaście lat. Rozpoczął życie jako alternatywa dla C++ z obszerną standardową biblioteką. Podążając za płaszczami boomu internetowego, był popularny do pisania apletów internetowych. Jego rzekoma przenośność była reklamowana jako sposób na pisanie aplikacji komputerowych, które działałyby na dowolnej platformie. Teraz jest rok 2010. Aplety już dawno minęły. Aplikacje komputerowe ustępują miejsca aplikacjom internetowym i mobilnym. Języki skryptowe są bardzo popularne, podobnie jak Flash, zwłaszcza wśród programistów zorientowanych na strony internetowe. Od kilku lat ludzie skandują "śmierć Javy jest blisko". Jednak szybkie poszukiwanie pracy pokazuje, że Java jest nadal pożądaną umiejętnością wśród programistów. Więc czego używa się Java w dzisiejszych czasach? Jakie aplikacje piszesz w Javie? To powinno dać nam wyobrażenie o dzisiejszym „stanie Javy”. Czy fala Java zmieniła się z aplikacji komputerowych Swing na aplikacje mobilne na Androida? Jeśli piszesz programy w języku JVM (takim jak Scala lub Groovy), wspomnij o tym.


title: Czy sigile ułatwiają czytanie kodu źródłowego?

text: W większości języków programowania zmienne nie mają znaków identyfikujących, tak jak w PHP. W PHP musisz poprzedzić zmienną znakiem `$`. Przykład; var $foo = "coś"; echo $foo; Tworzę nowy język skryptowy dla aplikacji biznesowej, a moi użytkownicy docelowi nie mają doświadczenia w programowaniu. Czy te znaki ułatwiają czytanie i używanie kodu? Jednym z powodów, dla których PHP używa `$` jest to, że bez niego PHP nie może stwierdzić, czy nazwa jest referencją do funkcji czy referencją do zmiennej. Dzieje się tak, ponieważ język pozwala na dziwne odniesienia do funkcji. Tak więc symbol `$` pomaga parserowi oddzielić przestrzeń nazw. Nie mam tego problemu w parserze. Więc moje pytanie dotyczy wyłącznie czytelności i łatwości użytkowania. Przez tyle lat kodowałem w PHP, że kiedy widzę `$foo`, łatwo jest mi zidentyfikować to jako zmienną. Czy po prostu daję pierwszeństwo temu identyfikatorowi?


title: Jakie są zasoby do rozpoznawania twarzy

text: Interesuje mnie poznanie teorii stojącej za oprogramowaniem do rozpoznawania twarzy, abym mógł je wdrożyć w przyszłości. Nie tylko śledzenie twarzy, ale także umiejętność rozpoznawania osób. Jakie artykuły, książki, biblioteki lub źródła są dostępne, abym mógł dowiedzieć się więcej na ten temat? Znalazłem libface, który wydaje się używać eigenfaces do rozpoznawania. Jeśli są tam jacyś praktycy, podziel się wszelkimi informacjami, które możesz. Edycja: znalazłem tutaj dobry post na ten temat.


title: Entity Framework z dużymi systemami - jak podzielić modele?

text: Pracuję z bazą danych SQL Server z ponad 1000 tabelami, kolejnymi kilkoma setkami widoków i kilkoma tysiącami procedur przechowywanych. Zamierzamy rozpocząć korzystanie z Entity Framework w naszych nowszych projektach i pracujemy nad naszą strategią w tym zakresie. Chodzi mi o to, jak najlepiej podzielić tabele na różne modele (EDMX lub DbContext, jeśli najpierw zaczniemy kod). Przychodzi mi do głowy kilka strategii od samego początku: * **Podział według schematów** Nasze tabele są podzielone na prawdopodobnie kilkanaście schematów. Moglibyśmy zrobić jeden model na schemat. Nie jest to jednak idealne, ponieważ dbo nadal jest bardzo duże, z ponad 500 tabelami / widokami. Innym problemem jest to, że niektóre jednostki pracy będą musiały wykonywać transakcje obejmujące wiele modeli, co zwiększa złożoność, chociaż zakładam, że EF czyni to dość prostym. * **Podziel według intencji** Zamiast martwić się schematami, podziel modele według intencji. Tak więc będziemy mieć różne modele dla każdej aplikacji, projektu, modułu lub ekranu, w zależności od tego, jak bardzo chcemy uzyskać szczegółowość. Problem, który widzę, polega na tym, że istnieją pewne tabele, które nieuchronnie muszą być używane w każdym przypadku, takie jak User lub AuditHistory. Czy dodajemy je do każdego modelu (myślę, że narusza DRY), czy też są one w osobnym modelu, który jest używany w każdym projekcie? * **Wcale nie dziel się – jeden gigantyczny model** Jest to oczywiście proste z punktu widzenia rozwoju, ale z moich badań i intuicji wydaje się, że może działać fatalnie, zarówno w czasie projektowania, kompilacji, jak i w czasie wykonywania . Jaka jest najlepsza praktyka używania EF na tak dużej bazie danych? Konkretnie, jakich strategii używają ludzie przy projektowaniu modeli w odniesieniu do takiej ilości obiektów DB? Czy są opcje, o których nie myślę, że działają lepiej niż te, które mam powyżej? Czy jest to również problem w innych ORM-ach, takich jak NHibernate? Jeśli tak, czy wymyślili jakieś lepsze rozwiązania niż EF?


title: Czy deserializacja złożonych obiektów zamiast tworzenia ich to dobry pomysł w konfiguracji testowej?

text: Piszę testy dla składnika, który jako dane wejściowe przyjmuje bardzo złożone obiekty. Testy te są mieszanką testów z już istniejącymi komponentami oraz testów pierwszego testu nowych funkcji. Zamiast ponownie tworzyć moje obiekty wejściowe (byłby to duży fragment kodu) lub czytać jeden z naszego magazynu danych, pomyślałem o serializacji żywego wystąpienia jednego z tych obiektów i po prostu deserializacji go do konfiguracji testowej. Nie mogę się zdecydować, czy jest to rozsądny pomysł, który pozwoli zaoszczędzić wysiłek na dłuższą metę, czy jest to najgorszy pomysł, jaki kiedykolwiek miałem, powodując, że ci, którzy będą utrzymywać ten kod, wytropią mnie, gdy tylko go przeczytają. Czy deserializacja danych wejściowych jest w niektórych przypadkach prawidłowym sposobem konfiguracji testu? Aby dać poczucie skali tego, z czym mam do czynienia, rozmiar danych wyjściowych serializacji dla jednego z tych obiektów wejściowych wynosi 93 KB. Uzyskane przez, w C#: `new BinaryFormatter().Serialize((Stream)fileStream, myObject);`


title: Wiki/znaczniki w przedsiębiorstwie jako dokumentacja

text: Dlaczego rzadziej używa się wiki/znaczników w przedsiębiorstwie jako dokumentacji? Zamiast tego używają dokumentu Word. Wiki/znaczniki są w formacie tekstowym, który jest przyjazny dla kontroli wersji.


title: Doświadczenie użytkownika systemu Macintosh OS10.8 z pobieraniem „zidentyfikowanego programisty”?

text: Pracuję na wieloplatformowej aplikacji Windows/Mac, która czasami jest pobierana ze stron internetowych. Czasami jest zmieniany pod marką i sprzedawany przez strony trzecie. Jestem „facetem od okien”, mój odpowiednik Maca jest na wakacjach. Dostaję kilka pytań od klientów o to, jakie będą wrażenia użytkowników komputerów Mac, jeśli podpiszemy instalator Maca certyfikatem Apple Developer w naszym systemie kompilacji nazwą naszej firmy. Z jakiegoś powodu ten klient nie chce sam podpisywać aplikacji, ale nie chce, aby nazwa naszej firmy pojawiała się przed użytkownikiem. Zakładając, że system OS 10.8 Gatekeeper użytkownika jest ustawiony tak, aby umożliwiał pobieranie zarówno z Apple App Store, jak i od „zidentyfikowanych programistów”, czy użytkownik widzi jakiekolwiek okno dialogowe z ostrzeżeniem, które zawiera informacje o certyfikacie podobne do monitów kontroli dostępu użytkownika systemu Windows? W moich testach wygląda na to, że pobrane z Internetu aplikacje podpisane przez Apple są po prostu zaufane przez OS10.8 i będą działać bez niczego przypominającego monit UAC systemu Windows. Doświadczenie użytkownika wydaje się być następujące: 1) Pobieranie aplikacji z Internetu podpisanej przez „programistę zidentyfikowanego przez Apple”. 2) Kliknij aplikację na liście pobierania przeglądarki internetowej lub korzystając z wyszukiwarki. 3) Instalator aplikacji działa bez okien dialogowych z ostrzeżeniami lub przestrogami. Czy to jest poprawne? Ponadto, czy w systemie OS10.8 jest jakiś sposób, aby użytkownik mógł wyświetlić w formie czytelnej dla człowieka informacje o certyfikacie „zidentyfikowanego dewelopera” z podpisanego pliku?


title: Używanie przechwyconych zmiennych nielokalnych w domknięciach C++

text: Na tej stronie wikipedii znalazłem następujące zdanie dotyczące domknięć w C++11: > Domknięcia w C++11 mogą przechwytywać zmienne nielokalne przez kopię lub przez odwołanie, ale > bez przedłużania ich życia. Czy to oznacza, że istniejące zamknięcie może odnosić się do zmiennej nielokalnej, która została już cofnięta? Czy w takim przypadku jest jakaś szczególna ostrożność / najlepsza praktyka, której należy przestrzegać podczas używania przechwyconych zmiennych nielokalnych wewnątrz zamknięcia C++?


title: Żądanie przypadków testowych analizy jakości przed wdrożeniem/zmianą

text: Ostatnio zostałem przydzielony do pracy nad głównym wymaganiem, które mieści się pomiędzy prośbą o zmianę a ulepszeniem. Poprzednie wdrożenie zostało wykonane (źle) przez starszego programistę, który opuścił firmę i zrobił to bez pozostawienia śladu dokumentacji. Oto moje pierwsze kroki, aby podejść do tego problemu: 1. Biorąc pod uwagę, że data premiery zbliżała się wielkimi krokami i nie było czasu na wpadki, początkowo zapytałem, czy wymóg jest „must have”. Ponieważ wymóg znacząco pomógł produktowi pod względem użyteczności, odpowiedź brzmiała „Jeśli to możliwe, tak”. 2. Znając powszechne zastosowanie i skutki tego wymagania, gdyby doszło do punktu, w którym wymagania nie można byłoby ukończyć przed wydaniem, zapytałem, czy byłaby realną opcją, aby zniszczyć obecny stan i powrócić do stanu przed wdrożeniem ex-senior. Odpowiedź brzmiała „Najprawdopodobniej: nie”. 3. Rozumiejąc, że wymaganie pochodziło od wyższego kierownictwa i ze względu na jego złożoność, poprosiłem o napisanie wszystkich przypadków testowych użyteczności przed wdrożeniem (przez QA) i przekazanie mi ich, aby pomóc mi w zrozumieniu to zadanie. To było wielkie nie-nie dla ludzi z kierownictwa, ponieważ nie zrozumieli tego podejścia. Wiedząc, że muszę nalegać na moją prośbę i odpowiedzialność za ten wymóg, nalegałem i wypadłem z łask niektórych ludzi, pozostawiając mnie w stanie „konsternacji”. Zasadniczo próbowałem podejścia opartego na testach do wymagań wysokiego ryzyka, wysokiej złożoności i konieczności, starając się być bezpiecznym, a nie żałować. Czy to podejście jest złe, czy też podszedłem do niego niewłaściwie? PS: Żądanie zmiany/ulepszenie zostało anulowane, a wdrożenie zostało przywrócone do poprzedniego stanu ze względu na złożoność problemu i brak czasu. Stało się to dopiero po dwugodzinnym spotkaniu z innymi seniorami w celu przekonania wspomnianych osób.


title: Programowanie funkcjonalne w porównaniu do OOP z klasami

text: Ostatnio interesuję się niektórymi koncepcjami programowania funkcjonalnego. Używam OOP od jakiegoś czasu. Widzę, jak zbudowałbym dość złożoną aplikację w OOP. Każdy przedmiot wiedziałby, jak robić rzeczy, które robi ten przedmiot. Albo cokolwiek, co robi klasa rodziców. Więc mogę po prostu powiedzieć `Person().speak()`, aby ta osoba zaczęła mówić. Ale jak zrobić podobne rzeczy w programowaniu funkcjonalnym? Widzę, że funkcje są elementami pierwszej klasy. Ale ta funkcja robi tylko jedną konkretną rzecz. Czy miałbym po prostu pływającą metodę `say()` i wywołać ją z odpowiednikiem argumentu `Person()`, abym wiedział, co to oznacza? Widzę więc proste rzeczy, jak mam zrobić porównanie OOP i obiektów w programowaniu funkcjonalnym, abym mógł modularyzować i organizować mój kod? Dla porównania, moje podstawowe doświadczenie z OOP to Python, PHP i niektóre C#. Języki, na które patrzę, które mają funkcje funkcjonalne, to Scala i Haskell. Chociaż skłaniam się ku Scali. Podstawowy przykład (Python): Zwierzę(obiekt): def say(self, what): print(co) Dog(Animal): def say(self, what): super().say('pies szczeka: {0}' .format(co)) Kot(Zwierzę): def say(self, what): super().say('kot miauczy: {0}'.format(what)) pies = Pies() kot = Kot() pies .say('ruff') cat.say('mruczenie')


title: Wskazówki dla programisty C#, aby stać się lepszym programistą UI

text: Jestem programistą C# i opracowałem proste strony internetowe w zwykłym asp.net (z kontrolkami asp.net) i aplikacji wpf. Obecnie próbuję nauczyć się Asp.net MVC3 i zostałem wystawiony na HTML z silnikiem widoku Razor. Szczerze mówiąc, moja wiedza na temat HTML i CSS jest ograniczona. Dlatego od czasu do czasu wysyłam pytania na SO dotyczące bardzo prostych zadań. To mnie bardzo zmęczyło procesem tworzenia pytań i odpowiedzi. Więc teraz myślę o nauce podstaw HTML, CSS i może trochę JavaScript. Dlatego prosiłbym, abyś poprowadził mnie, aby stać się wystarczająco wydajnym programistą dla tych technologii. Coś, co nie zajmie mi dużo czasu i sprawi, że szybko wstaję.


title: Czy można zmienić szacunki w trakcie iteracji?

text: Zaczęliśmy używać Agile/Scrum w zespole 4 programistów. Dokonaliśmy estymacji historii i zamówiliśmy historie Opracowane historie w backlogu produktu. Zaczęliśmy od oszacowania punktowego na podstawie złożoności od 1 do 5, zamiast zwykłych 1,2,3,5,8,13.... i tak dalej Po pracy nad kilkoma historiami czuliśmy, że niektóre historie, które zostały oszacowane na 4 punkty powinny mieć tylko 2, podczas gdy inne, które zostały oszacowane na 2, są znacznie bardziej złożone i powinny być oszacowane na 5. Chciałbym wiedzieć: * Czy zmiana naszych szacunków historii w środku jest w porządku iteracji? * Czy można użyć obecnych punktów szacunkowych od 1 do 5, zamiast zwykłych 1,2,3,5,8,13.... i tak dalej Chociaż osobiście uważam, że nie powinno być w obu przypadkach, ale Muszę się poprzeć, ponieważ moje własne zrozumienie nie jest zbyt jasne. (Każdy dobry materiał referencyjny byłby dobry!)


title: Technologia DB do wydajnego wyszukiwania w danych tabelarycznych?

text: Posiadamy repozytorium tabel. Około 200 tabel, każda tabela może mieć tysiące wierszy, wszystkie tabele są oryginalnie w arkuszach Excela. Każdy stół ma inny schemat. Wszystkie dane to tekst lub liczby. Chcielibyśmy stworzyć aplikację, która pozwala na sprawne wyszukiwanie tekstu we wszystkich tabelach (określamy, które kolumny będą przeszukiwane w każdej tabeli) - liczy się szybkość. **Głównym dylematem jest wybór technologii DB.** Stworzyliśmy makietę, importując wszystkie tabele do MS SQL Server i tworząc nad nimi pełnotekstowy indeks. Wyszukiwanie odbywa się za pomocą słowa kluczowego CONTAINS. To rozwiązanie działa dobrze w przypadku małej liczby tabel, ale nie skaluje się. Myśleliśmy o rozwiązaniu NoSQL, ale nie mamy w nim jeszcze żadnego doświadczenia. Nasze ograniczenia (na które niestety nie mogę wpłynąć): Tylko serwery Windows. Ale możemy na nich zainstalować co tylko zechcemy.


title: Korzystanie z kwadratowych krzywych Beziera do wygenerowania jaskini, która pozostaje w określonych granicach

text: Pracuję nad projektem, który generuje serię kwadratowych krzywych Beziera i łączy je ze sobą, utrzymując nachylenie od końca jednego segmentu do początku następnego, aby przejście było płynne. Problem polega na tym, że chociaż ścieżka jest gładka, często znika z ekranu. Obecnie odbywa się to w następujący sposób: P0 = new Point(0, gapStart); P2 = nowy Punkt(WidthWidth,GapEnd); P1 = pobierzPunktZakotwiczenia(); gdzie: GapStart to P2.y poprzedniej krzywej wallWidth to stała przerwaEnd to jedyny losowy aspekt generowania jaskini Jest to wartość Y, na której krzywa się kończy. Funkcja getAnchorPoint pobiera punkty 0 i 2 i generuje punkt kontrolny, tak aby nachylenie na początku tego segmentu było takie samo jak na końcu poprzedniego segmentu. Więc głównym pytaniem jest, jakie wartości mogą mieć gapEnd, aby następna krzywa miała gapEnd, który nie wyśle krzywej poza ekran? Innymi słowy, jak określić minimalną i maksymalną wartość gapEnd, aby następna krzywa była bezpieczna? Ponadto ważne jest, aby te wartości nie zamykały następującej krzywej jako niemożliwej: tj. nie mogą pozwolić, aby następna krzywa nie miała możliwego rozwiązania, które pozwoliłoby na dalsze generowanie krzywej. Obraz procesu generowania jaskini


title: W jakiej sytuacji wyliczenia Entity Framework stają się przydatne?

text: Pracuję nad projektem, w którym w bazie danych będzie przechowywanych wiele opcji statycznych. Patrzyłem na użycie Enums do tego, ale nie widzę, jak mogą być przydatne. Nie tworzą one żadnej tabeli przeglądowej, po prostu odwołują się do liczby w tabeli, która może być użyta w kodzie jako opcja wyliczenia. Ta liczba nie ma znaczenia dla każdego, kto tworzy raporty SSRS, a jeśli potrzebujesz dodać dodatkową opcję, musisz ponownie skompilować. Czy istnieje sytuacja, w której mają one prawdziwy cel i lepiej pasują niż jednostka. A może są generalnie złą praktyką z powyższych powodów?


title: Czy lepiej jest korzystać z istniejących wcześniej złych praktyk, czy z dobrych praktyk, które nie pasują do starego kodu?

text: Myślałem o tym, ponieważ próbowałem napisać rozszerzenie do istniejącego oprogramowania innej firmy, a ich baza danych jest strasznie zdenormalizowana. Musiałem wykorzystać ich istniejące tabele i dodać kilka nowych pól. Miałem możliwość albo stworzenia nowych tabel w ich stylu projektowania (który składa się z prawie wszystkich właściwości znajdujących się w jednej dużej tabeli), albo stworzenia nowego zestawu tabel razem i użycia czegoś dodatkowego, takiego jak wyzwalacze do synchronizacji danych między nowym a stare stoły. Skończyło się na tym, że wybrałem pierwszą opcję wykorzystania dotychczasowego złego stylu projektowania, ale zostało mi pytanie: **Czy lepiej jest iść z wcześniej istniejącymi złymi praktykami, czy wdrożyć dobre praktyki, które nie pasują do istniejących kod? Czy są sytuacje, w których powinienem wybrać jedno zamiast drugiego?** UWAGA: Wiele dotychczasowych odpowiedzi dotyczy powolnej refaktoryzacji złego kodu, jednak nie jestem w stanie tego zrobić. Kod nie jest nasz i często jest aktualizowany przez dostawcę. Mogę tylko na tym budować.


title: Jak określane są wymagania w projektach oprogramowania open source?

text: W korporacyjnym wewnętrznym tworzeniu oprogramowania często zdarza się, że wymagania są określane w formalnym procesie, w wyniku którego powstaje szereg dokumentów wymagań. W tworzeniu oprogramowania open source często wydaje się to być nieobecne. Stąd moje pytanie: jak określane są wymagania w projektach oprogramowania open source? Przez „określenie wymagań” rozumiem po prostu „zastanowienie się, jakie funkcje itp. powinny zostać opracowane w ramach konkretnego oprogramowania”.


title: Problemy z bezpieczeństwem pracy freelancera na istniejącej stronie internetowej

text: Obecnie mam stronę internetową, która została niedawno ukończona. Rozważam korzystanie z usługi niezależnej, takiej jak SO dla wszystkich przyszłych składników. Na istniejącej infrastrukturze do wykonania jest znaczna ilość pracy. Próbowałem szukać odpowiedzi na to pytanie, ale jest to tak ogólne, że jest to trudne. Moja witryna jest dość złożona i wykorzystuje relacyjne bazy danych, MySQL, PHP, Javascript, JQuery i Ajax. Obawiam się, że skorzystam z usług niezależnego pracownika na stronie, aby dać mu dostęp administratora do serwera i umożliwić im dostęp do istniejących baz danych. Czy istnieje wypróbowany i prawdziwy sposób radzenia sobie z tym/zarządzania tym? Jestem otwarty na to, ale jakie masz środki ostrożności i inne pomysły, aby zapobiec psotom?


title: Jak zastosować DRY do plików udostępnianych przez repozytoria?

text: Mam kilka plików, które są używane w kilku moich repozytoriach: * `functions.sh`, biblioteka powłoki np. do drukowania kolorowego ostrzeżenia/komunikatu o błędzie lub dokumentacji pliku skryptu. * `Makefile`; standardowy, który instaluje plik `$(CURDIR)/[dirname].sh` do `$(PREFIX)/[dirname]` i odwołuje się do skryptu testowego. * „LICENCJA”. * `narzędzia.mk`; Polecenia Makefile, aby na przykład wypisać wszystkie definicje zmiennych z rodzica `Makefile`. Są one mniej lub bardziej stabilne, a niektóre są używane w prawdopodobnie kilkunastu repozytoriach. Zastanawiałem się _jak zachować to DRY_ , ale żadna z dotychczasowych opcji nie wydaje się zadowalająca: 1. Rób to tak jak teraz, tworząc **kopię dla każdego nowego repozytorium.** To utrzymuje kod razem ze wszystkimi jego zależnościami (unikanie błędów, gdy ogólne rozwiązanie nie jest wystarczająco ogólne), ale zmiany, które mają zastosowanie w wielu miejscach, muszą być stosowane w każdym z osobna. 2. Dodaj **plik wykonywalny** do każdego z repozytoriów, aby **pobrać potrzebne pliki**. Oznacza to, że programiści i użytkownicy końcowi będą musieli uruchomić dodatkowe polecenie, aby pobrać wszystkie odpowiednie pliki, co uniemożliwia programistom modyfikowanie i `zatwierdzanie`/`przesyłanie` dołączonych plików. 3. Użyj **`submodule git` lub równoważnego.** To przynajmniej utrzymuje połączenie repozytoriów, ale w przypadku Git wygląda na to, że jest on ograniczony do „dedykowanego podkatalogu”, więc nie ma plików najwyższego poziomu ani mieszania z pliki nadrzędnego repozytorium, które należą do tego samego katalogu. Można to obejść za pomocą dowiązań symbolicznych, ale jest to brzydkie obejście oczywistej idealnej sytuacji. _Idealne rozwiązanie_ powinno: 1. **Komunikować się z właściwym repozytorium** podczas wykonywania operacji na pliku. 2. Zezwól na dołączanie do **tych samych katalogów co katalog nadrzędny**. 3. **Pojedyncze, proste polecenie** powinno wystarczyć do zaktualizowania całego repozytorium i wszystkich zawartych, bez względu na to, ile i jak głęboko jest zagnieżdżonych. 4. Zezwól na dołączanie do **katalogu najwyższego poziomu**. 5. **Nie wiąże się** ze znacznymi **ograniczeniami** programisty lub użytkownika (musi być online podczas instalacji) lub **dodatkowej pracy** (uruchamianie polecenia „preinstalacji” niezależnie od polecenia „instalacja”). 6. Zezwól na **"wybieranie" plików** do dołączenia. Wiele projektów może na przykład wymagać innego `Makefile`, a dołączenie takiego, które nie jest używane, jest po prostu brzydkie (i stałoby się brzydsze, gdy dodawanych jest więcej plików). Czy przy obecnym oprogramowaniu jest to możliwe?


title: Rozwój Windows 8 na Macu

text: Czy jest jakiś sposób na rozpoczęcie programowania dla Windows 8 mobile na platformie Mac OS X. Programuję już na iOS i chcę programować na Windows 8 mobile, ale nie chcę instalować systemu Windows.


title: Czy skanowanie portów jest uważane za szkodliwe?

text: Jeśli jakakolwiek aplikacja skanuje porty innych komputerów, aby dowiedzieć się, czy jakaś konkretna usługa/aplikacja jest uruchomiona, czy zostanie uznana za szkodliwą? Czy jest to traktowane jako hakowanie? Jak inaczej można dowiedzieć się, na którym porcie jest uruchomiona żądana aplikacja (bez udziału użytkownika)? Powiedzmy, że znam tylko zakres portów, w którym może działać inna aplikacja, ale nie znam dokładnego portu. W tym przypadku moja aplikacja pinguje każdy port w zasięgu, aby sprawdzić, czy inna aplikacja na nim nasłuchuje, używając już zdefiniowanego protokołu. Czy to normalny projekt? Czy jest to uważane za szkodliwe dla bezpieczeństwa?


title: Dostęp swobodny (odczyt/zapis) w strukturach danych

text: Niektóre struktury danych, takie jak Słownik Pythona, są nieuporządkowane/losowo odczytywane/zapisywane. Ponieważ programowanie w Pythonie jest iteracyjne (i ogólnie jest programowanie?), Jak działają te nieuporządkowane struktury danych? Rozumiem, że Słownik Pythona jest w istocie tablicą haszującą. Ale doszedłem do wniosku, że struktura danych jest przechowywana w pamięci według kolejności wstawiania, a zatem jest odczytywana podczas iteracji całej struktury danych w podobnej kolejności. Ale tak nie jest. Oprócz tego, że nie rozumiem, jak to działa, zastanawiam się również nad korzyściami z tego płynącymi. Ale to może być aż nazbyt jasne, kiedy zrozumiem, jak to działa :) ps. Nie sądziłem, że to pytanie StackOverflow, więc umieść je tutaj ...


title: Czy taka modyfikacja jest dozwolona przez GPL? Które licencje na to pozwalają, a które nie?

text: Załóżmy, że mam **bibliotekę X**, która zawiera **klasę A** z **metodą b** i że biblioteka X jest wydana na **licencji GPL**. public class A { public void b() { // to jest przykład ciała metody b. Załóżmy jednak, że treść metody b // jest bardzo złożona System.out.println("operacja a"); System.out.println("operacja b"); System.out.println("operacja c"); } } Załóżmy, że korzystam z biblioteki X i potrzebuję zachowania podobnego do zachowania metody b, ale z jednym dodatkiem, którego nie mogę osiągnąć przez proste rozszerzenie klasy A i nadpisanie niektórych ich metod. **Pierwsze pytanie brzmi:** Czy mogę rozszerzyć klasę A i nadpisać metodę b w sposób pokazany poniżej i czy nadal jest to dozwolone przez licencję GPL. public class AExt extends A { public void b() { // to jest przykład ciała metody b. Załóżmy jednak, że treść metody b // jest bardzo złożona System.out.println("operacja a"); System.out.println("operacja b"); Potrzeba doOperacji(); System.out.println("operacja c"); } } **Drugie pytanie brzmi:** Które z powszechnie używanych licencji opensource pozwalają na takie rozszerzenie, a które nie?


title: Systemy plików korzystające z rejestrowania: Jeśli zapisujesz dane w dzienniku (na dysku) iw samych rzeczywistych lokalizacjach (także na dysku), to...?

text: Czy w zasadzie nie zapisujesz tych samych danych dwa razy na dysku? Czy to nie powoduje spowolnienia o współczynnik ~2x? Jakie optymalizacje można wprowadzić, aby zminimalizować koszt konieczności pisania dwa razy?


title: Ciągi SQL a warunkowe instrukcje SQL

text: Czy istnieje zaleta dzielenia razem ciągów sql w porównaniu z warunkowymi instrukcjami sql w samym SQL Server? Mam tylko około 10 miesięcy doświadczenia w SQL, więc mógłbym mówić tutaj z czystej ignorancji. Tam, gdzie pracuję, widzę ludzi budujących całe zapytania w ciągach i łącząc je ze sobą w zależności od warunków. Na przykład: Set @sql = 'Wybierz kolumnę1, kolumnę2 z tabeli 1 ' If SomeCondtion @sql = @sql + 'where kolumna3 = ' + @param1 else @sql = @sql + 'where kolumna4 = ' + @param2 To prawda prosty przykład, ale to, co tu widzę, to wiele sprzężeń i ogromne zapytania zbudowane z ciągów, a następnie wykonywane. Niektórzy z nich piszą nawet, co jest w zasadzie funkcją do wykonania, w tym instrukcje Declare, zmienne itp. Czy jest korzyść z robienia tego w ten sposób, gdy można to zrobić tylko z warunkami w samym sql? Wydaje mi się, że dużo trudniej jest debugować, zmieniać, a nawet pisać niż dodawać przypadki, jeśli-else lub dodatkowe parametry where do rozgałęzienia zapytania.


title: Jaki jest najlepszy kod źródłowy C++ do przeczytania dla początkującego?

text: Próbuję ulepszyć moją technikę kodowania c++, czytając kod źródłowy c++. Który projekt open source poleciłbyś? Czy kod bibliotek Boost C++ jest dobry?


title: Przechowywanie metadanych w tekście w dyskretnej strukturze danych

text: Zajmuję się tworzeniem aplikacji, która będzie musiała przechowywać metadane _inline_, _intext_. Mam na myśli to, że: powiedzmy, że mamy długi tekst i chcemy przechowywać metadane związane z konkretnym słowem lub zdaniem tekstu. Jaki byłby najlepszy sposób przechowywania tych informacji? Moją **pierwszą myślą** było dołączenie do tekstu pewnego rodzaju składni **`Markdown`**, która byłaby następnie analizowana podczas pobierania. Coś takiego: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[@note to brzmi naprawdę śmiesznie po łacinie] euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. To wprowadziłoby dwa problemy, o których myślę: 1. Stosunkowo mały jest taki, że jeśli wspomniana składnia przypadkowo znajdzie się we wspomnianym tekście, może to zepsuć parsowanie. 2. Najważniejszą z nich jest to, że metadane nie są **oddzielone** od samego tekstu. Chciałbym mieć dyskretną strukturę danych do przechowywania tych danych, taką inną tabelę DB, w której te metadane są przechowywane, abym mógł ich używać w dyskretny sposób: zapytania, statystyki, sortowanie i tak dalej. * * * **EDYTUJ:** Ponieważ odpowiadający usunął swoją odpowiedź, myślę, że dobrze byłoby dodać tutaj swoją sugestię, ponieważ była to _wykonalna_ sugestia, która rozszerzyła tę pierwszą koncepcję. Autor zasugerował użycie podobnej składni, ale połączenie metadanych z `PRIMARY KEY` tabeli bazy danych `metadata`. Coś, co wyglądałoby tak: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[15432] euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Gdzie `15432` byłoby `ID` wiersza tabeli zawierającego niezbędne, możliwe do zapytania informacje, jak w poniższym przykładzie. * * * Moją **drugą myślą** było przechowywanie informacji tego rodzaju w tabeli bazy danych wyglądającej tak: TABLE: ID metadanych TEXT_ID TYPE OFFSET_START OFFSET_END CONTENT 1 lipsum note 68 79 to brzmi naprawdę śmiesznie po łacinie W ten sposób metadane mieć unikalny identyfikator, `text_id` jako klucz obcy połączony z tabelą przechowującą teksty i łączyłby dane z samym tekstem za pomocą prostego znaku **zakresu przesunięcia**. Załatwiłoby to sztuczkę polegającą na utrzymywaniu _danych_ oddzielonych od _metadanych_ , ale problem, który natychmiast widzę przy tym podejściu, polega na tym, że tekst zasadniczo _nie można edytować_. Lub gdybym chciał zaimplementować edycję tekstu po przypisaniu metadanych, musiałbym w zasadzie obliczyć dodawanie znaków, lub usunięcie w porównaniu do poprzedniej wersji i sprawdzić, czy **każda** z tych modyfikacji dodaje lub usuwa znaki przed lub po **każdym** skojarzonych metadanych. Co dla mnie brzmi jak bardzo nieeleganckie podejście. Czy masz jakieś wskazówki lub sugestie, jak mogę podejść do problemu? * * * ### Edytowanie 2: niektóre problemy z XML Dodanie kolejnego przypadku, który byłby niezbędny, aby nastąpiło rozdzielenie danych i metadanych. * Załóżmy, że chcę umożliwić różnym użytkownikom posiadanie **różnych zestawów metadanych tego samego tekstu** , z możliwością wyświetlania przez każdego użytkownika metadanych innego użytkownika lub bez. Każde rozwiązanie typu _markdown_ (lub HTML lub XML) byłoby w tym momencie trudne do zaimplementowania. Jedynym rozwiązaniem w tym przypadku, o którym mógłbym pomyśleć, byłoby posiadanie kolejnej tabeli DB, która zawierałaby wersję oryginalnego tekstu dla pojedynczego użytkownika, łączącą się z oryginalną tabelą tekstową za pomocą `FOREIGN KEY`. Nie jestem pewien, czy to też jest bardzo eleganckie. * **XML ma hierarchiczny model danych:** każdy element, który akurat znajduje się _w_ granicach innego elementu, jest uważany za jego _dziecko_ , co najczęściej nie ma miejsca w modelu danych, którego szukam; w XML każdy element _children_ musi zostać zamknięty przed zamknięciem tagu _parent_, co pozwala na brak nakładania się elementów. Przykład: > `<note content="początek słynnego symbolu zastępczego">` _Lorem ipsum > dolor sit_ `<comment content="Podoba mi się dźwięk amet/elit">` _amet_ > `</note>`, _consectetuer adipiscing elit_ `</comment>` _,_ `<note > content="przeciwne?">` _sed diam_ **`<note content="śmieszne łac.">`** > _nonummy_ `</note>` _nibh_ * *`</note>`** _euismod tincidunt ut laoreet > dolore magna aliquam erat volutpat._ Tutaj mamy dwa różne problemy: 1. **Nakładanie się różnych elementów:** Pierwszy komentarz zaczyna się w pierwszej nucie, ale kończy się po koniec pierwszej nuty, czyli nie jest to jej dziecko. 2. **Te same elementy nakładają się:** Ostatnia nuta i nuta pogrubiona nakładają się; jednakże ponieważ są to elementy tego samego rodzaju, parser zamknąłby ostatnio otwierany element przy pierwszym zamknięciu, a pierwszy otwarty element przy ostatnim zamknięciu, co w tym przypadku nie jest zgodne z przeznaczeniem.


title: Czy istnieje standardowy sposób czyszczenia plików danych?

text: Spędziwszy sporo czasu pracując w firmach zajmujących się oprogramowaniem, które zajmują się średnimi i dużymi zbiorami danych, zauważyłem, że dławikiem w ich procesach jest często przygotowywanie plików danych do załadowania do baz danych. Na przykład wyszukiwanie błędów formatowania, osobliwych białych znaków lub znaków końca linii, zmaganie się z formatami Unicode, tego typu rzeczy. Każdy, kogo znam, radzi sobie z tym w sposób dostosowany do indywidualnych potrzeb, ponieważ wymagania są tak zróżnicowane i często unikalne dla zaangażowanych firm. Zwykle po prostu bawię się kombinacją edytorów heksadecymalnych, programu Excel, powershell i SQL, aby wykonać zadanie. Ale jest to tak odwieczny problem, że trudno mi uwierzyć, że nie ma już pewnych standardów, które pozwoliłyby wyeliminować niektóre podstawowe prace z procesu. Czy istnieje standardowa technika dostosowana do czyszczenia plików danych?


title: Nadawanie — słuchanie odpowiedzi

text: Nawiasem mówiąc, używamy JS, ale myślę, że to agnostyka językowa. Jestem otwarta na pomysły. Mamy framework "pub-sub", którego używamy w pracy, aby rozwiązać problem ściśle powiązanego kodu. Działa w porządku. Moduły nasłuchują zdarzeń, uruchamiają się rzeczy, transmitują wydarzenia, uruchamiają więcej rzeczy. To niesamowite. Jednak... Na przykład chciałem kliknąć łącze, aby otworzyć modalne, zmodyfikować przekazane dane i odesłać je z powrotem do wywoływanego. Wysłanie go do modalu byłoby tak proste, jak rozgłaszanie zdarzenia z danymi. Modal, zasubskrybowany na wydarzenie, odpowiada i dokonuje pewnych zmian w danych. Problem polega na odzyskaniu danych rozmówcy. Scenariusze: * Moduł transmituje zdarzenie, a jednocześnie nasłuchuje zdarzenia w nadziei na odpowiedź (zdarzenie z innego modułu). Skąd mam wiedzieć, że odpowiedź była efektem wydarzenia, które było transmitowane tuż przed nim? * Innym jest to, że planuję wysłać funkcję zwrotną z danymi przesyłanymi przez zdarzenie. W ten sposób odbiorcy mogą po prostu oddzwonić z danymi ze swojej strony. Jednak moduł otrzymywałby nieznaną liczbę połączeń zwrotnych, w zależności od liczby abonentów. Scenariusz jest bardziej skierowany do wiadomości, co jest nieco sprzeczne z charakterem transmisji typu „uruchom i zapomnij”. Czy są jakieś wzorce, które nadal zachowują luźne sprzężenie, modułowość i „nieznaną dla innych” architekturę?


title: Jest tyle dostępnych języków alternatywnych, czy dobrze jest czytać i wdrażać aplikację za ich pomocą?

text: Miałem na myśli alternatywne języki nie w sensie **jeśli nie Java używaj C#**. Ale miałem na myśli **jeśli nie Java użyj Groovy, Jruby itp., jeśli nie HTML użyj HAML** i tak dalej. Tak, dostępnych jest wiele alternatywnych języków, co sprawia, że kodowanie jest zabawne i ogranicza pracę programistów. Próbowanie tych języków jest dobre czy złe? Uczenie się nowych rzeczy nigdy nie zaszkodzi, te alternatywne języki są dość łatwe do czytania i pisania. Jako student, używając Groovy, mogę łatwo stworzyć aplikację opartą na Swingu i zajęłoby to znacznie mniej linii kodu w porównaniu z Javą. Kiedy wchodzę do firmy IT, w której używają Javy do tworzenia aplikacji Swing, czy będzie mi trudno budować w Javie (ponieważ często używałem alternatywnych języków na studiach)? ### Uwaga: Przykład jest podany z Javą i Groovy, ale potrzebuję odpowiedzi, która jest powszechna. Mam nadzieję, że moje pytanie jest wystarczająco jasne!


title: Jak radzić sobie ze zbyt dużym pragmatyzmem w projekcie?

text: Mój zespół i ja przejęliśmy średniej wielkości bazę kodu ponad rok temu, kiedy poprzedni lider techniczny opuścił firmę. Obawiam się, że wywodząc się z braku siły roboczej, faworyzowaliśmy rozwiązania _pragmatyczne_ nad najlepszymi praktykami. Teraz mam do czynienia z ciągłym spadkiem jakości kodu i pewnego rodzaju _organicznym wzrostem_ codziennych procesów. Żałuję, że pytany rok temu o konwencje kodowe w zasadzie podałem _zdrowy rozsądek_ jako jedyną zasadę. Wkrótce miałem programistów używających różnych stylów składniowych i nie dostrzegających trudności, jakie to powoduje w procesie łączenia. Innym przykładem jest mój nacisk na skrypty migracji bazy danych. Próbowałem włączyć Flyway do naszego procesu, ale już po tygodniu zostałem zignorowany przez mojego szefa. Nawet pomimo tego, że ostrzegałem ich o zbliżającym się obowiązkowym korzystaniu ze skryptów do migracji baz danych i dostarczałem im jak najwięcej wskazówek, podpowiedzi i narzędzi, aby złagodzić problem nieuruchamiania aplikacji z powodu brakujących lub nieudanych migracji, zdecydowali, że najlepiej będzie złożyć skargę do mojego szef o tym, że nie są w stanie wykonywać swojej pracy. Ponownie zablokowałem Flyway i teraz żyjemy z krokami migracji w dowolnie nazwanych plikach SQL w udziale sieciowym, o których należy pamiętać, aby zastosować je do odpowiedniej bazy danych we właściwym czasie. Jednym z problemów w naszym procesie było to, że nigdy nie robiliśmy formalnych przeglądów kodu. Tak więc wiele _hacków_ znalazło się pod radarem i trafiło do bazy kodu bez zauważenia ich na czas. Obecnie mam tendencję do czytania checkinów moich kolegów z zespołu, gdy jest czas (to nie jest częste), ale nie ma automatycznego procesu zapobiegającego niepożądanym zmianom. Ode mnie zależy, czy udam się do danego programisty i spróbuję ułatwić mu zrozumienie, dlaczego jego kod jest zły. Myślałem o wprowadzeniu narzędzi podobnych do lint, takich jak FindBugs i Checkstyle, ale obawiam się, że napotkam te same problemy psychologiczne, co w przypadku migracji baz danych. Przecież utrudniłbym im pracę i rozumiem, dlaczego może to prowadzić do nieporozumień. Więc moje pytanie brzmi: Jak mogę poprawić nasz proces i jakość naszego kodu w środowisku, w którym _wykonanie pracy_ jest cenione znacznie wyżej niż _wykonanie tego właściwie_?


title: Zgłaszając oprogramowanie do konkursu, staje się ich własnością?

text: Zamierzam więc zgłosić grę do konkursu, ale gdy przejrzałem zasady, część mojej uwagi przykuła moją uwagę: > Wszystkie zgłoszenia stają się wyłączną własnością Sponsora i nie będą > potwierdzane ani zwracane. Sponsor jest właścicielem wszelkich praw, tytułów i udziałów > wi do każdego Zgłoszenia, w tym między innymi wszystkich wyników i wpływów > z niego oraz wszystkich elementów lub części składowych Zgłoszenia (w tym między innymi Aplikacji mobilnej, Dokumentów projektowych, Zwiastun wideo, > Odtwarzalne i wszystkie ilustracje, logo, elementy mechaniczne, renderingi, znaki, > grafiki, projekty, układy lub inne materiały w nich zawarte) oraz wszelkie prawa autorskie i > odnowienia i rozszerzenia praw autorskich do nich i do nich. Bez ograniczeń > powyższego, każdy Uprawniony Uczestnik powinien i niniejszym bezwzględnie i nieodwołalnie ceduje i przenosi wszystkie swoje prawa, tytuły i udziały w swoim Zgłoszeniu na Sponsora, a Sponsor ma prawo i może autoryzować innym osobom do używania, kopiowania, udzielania sublicencji, przesyłania, > modyfikowania, manipulowania, publikowania, usuwania, reprodukowania, odtwarzania, rozpowszechniania, wyświetlania > oraz innego wykorzystywania Wpisu (oraz tworzenia i wykorzystywania prac pochodnych) w jakikolwiek sposób, w tym między innymi do umieszczenia Zgłoszenia, w całości lub w części, w aplikacjach i innych pracach dowolnego rodzaju lub natury stworzonych, opracowanych, publikowanych lub dystrybuowanych przez Sponsora oraz rejestrowania jako znaku towarowego w dowolnym kraju w imieniu Sponsora dowolnego elementu Zgłoszenie, > bez zastrzegania przez Uprawnionego Uczestnika jakichkolwiek praw lub roszczeń > w związku z tym. Sponsor ma wyłączne prawo, na zawsze, na całym Terytorium, do zmiany, adaptacji, modyfikacji, używania, łączenia z innymi materiałami i > wykorzystywania Wpisu w inny sposób we wszystkich mediach znanych obecnie lub w przyszłości oraz > w jakikolwiek sposób, wyłącznie i absolutnej dyskrecji, bez konieczności > jakiejkolwiek płatności lub kredytu na rzecz Uczestnika. Tak więc gra stanie się własnością sponsora; jednak nie proszą o kod źródłowy. Czy nadal będę właścicielem praw do kodu źródłowego, cokolwiek to oznacza? A jeśli nie wygra wspomnianego konkursu, czy będę mógł go samodzielnie opublikować bez ich znaków towarowych? Jestem bardzo nowy w kwestii legalności oprogramowania, więc byłbym wdzięczny za wszelkie wyjaśnienia. Skoro istnieje możliwość, że nie będę nawet właścicielem źródła, czy możliwe jest stworzenie oprogramowania open source z rdzeniem gry z niezbyt restrykcyjną licencją i włączenie go do projektu, aby przynajmniej nadal posiadał silnik gry? Czy to nie działa w ten sposób?


title: Jak najlepiej wyjaśnić klientowi rozgałęzienie (kodu źródłowego)?

text: Sytuacja jest taka, że klient zażądał szeregu zmian około 9 miesięcy temu, które następnie wstrzymał, gdy był już w połowie gotowy. Poprosili teraz o więcej zmian, ale nie zdecydowali się kontynuować pierwszego zestawu zmian. Dwa zestawy zmian będą wymagały zmian w tych samych modułach kodu. Miałem za zadanie wyjaśnić, dlaczego nie podejmą decyzji o pierwszym zestawie zmian (albo je zakończą, albo wyrzucą) mogą ponieść dodatkowe koszty (zasadniczo dlatego, że zmiany musiałyby zostać wprowadzone do oddziału, a następnie, jeśli będą kontynuować pierwszy zestaw zmian musielibyśmy scalić je z bagażnikiem - co będzie bałaganem - i przetestować je ponownie). Mam pytanie: Jak najlepiej wytłumaczyć rozgałęzianie kodu nietechnicznemu klientowi?


title: Dlaczego klastry HDFS mają tylko jeden NameNode?

text: Próbuję lepiej zrozumieć, jak działa Hadoop, i czytam > The NameNode jest pojedynczym punktem awarii dla klastra HDFS. HDFS nie jest > obecnie systemem wysokiej dostępności. Kiedy NameNode przestanie działać, plik > system przechodzi w tryb offline. Istnieje opcjonalny SecondaryNameNode, który może być > hostowany na oddzielnym komputerze. Tworzy tylko punkty kontrolne przestrzeni nazw > przez scalenie pliku edycji z plikiem fsimage i nie zapewnia żadnej > rzeczywistej nadmiarowości. Hadoop 0.21+ ma BackupNameNode, który jest częścią planu > posiadania usługi nazw HA, ale wymaga aktywnego udziału osób >, które tego chcą (tj. Ciebie), aby uczynić go wysoce dostępnym. z http://wiki.apache.org/hadoop/NameNode Dlaczego więc NameNode jest pojedynczym punktem awarii? Co jest złego lub trudnego w posiadaniu kompletnego duplikatu działającego NameNode?


title: Zarządzanie alertami w aplikacji internetowej za pomocą RESTful API

text: Zaprojektowałem RESTful API, a teraz pracuję nad stworzeniem aplikacji internetowej do korzystania z usługi. Jedną z rzeczy, z którymi borykam się, jest zarządzanie alertami w aplikacji internetowej (podobnie jak alerty stackoverflow, które daje w twoim profilu dla nowej odpowiedzi, odpowiedzi itp.). Zasadniczo aplikacja internetowa to przepływ pracy między użytkownikiem a jego klientami. Pewne zadania należy wykonać po kolei, a aplikacja webowa ostrzega zarówno użytkownika, jak i jego klientów o wszelkich działaniach. Użytkownik jest również powiadamiany o zaległych działaniach klienta. Sposób, w jaki mam obecnie konfigurację architektury, polega na tym, że API nie ma wiedzy o alertach. Po prostu przechowuje zasoby pobierane przez aplikację internetową. Aby ustalić, czy alert ma być wyświetlany, aplikacja internetowa przegląda wszystkie zasoby i na podstawie zestawu reguł decyduje, jakie alerty mają być wyświetlane. Problem, jaki mam, polega na tym, że nie jestem pewien, czy jest to bardzo skuteczny sposób robienia rzeczy. Istnieje wiele różnych alertów, które można wyświetlić i zależą one od różnych zasobów API, które będą musiały zostać pobrane po zalogowaniu się użytkownika lub klienta. Moje pytanie: Czy jest to najlepszy sposób na osiągnięcie tego, czego chcę, czy też istnieją inne metody, które są lepsze w użyciu i pomogą skrócić czas ładowania aplikacji internetowych i wywołania API?


title: Jak komputery przetwarzają kod warunkowy/wejścia/zdarzenia?

text: Rozumiem, że komputery są w zasadzie złożonym systemem podpisów elektrycznych, które można obliczyć na podstawie tablic logicznych i pewnego rodzaju mechanizmu bramkowego, ale jak komputery przetwarzają coś takiego, jak liczba wytwarzana przez klawiaturę jest mniejsza niż 10 lub jeśli mysz zostanie kliknięty dwa razy w określonym czasie, co jest równoznaczne z podwójnym kliknięciem?


title: Jak porównać i powiązać koncepcję DBMS z koncepcją systemu Cloud Storage?

text: Jestem studentem informatyki i piszę pracę dyplomową na temat aplikacji **Cloud Storage** stworzonej w firmie dla której pracuję. Mój problem jest następujący: mój przełożony (nauczyciel, który nadzoruje moją pracę) prosi mnie o wykonanie **porównania** między **Koncepcją Bazy Danych** a **systemem Cloud Storage**, który prezentuję w rozprawie. Polecił mi skupić się na właściwości **ACID**, która musi być gwarantowana w koncepcji DBMS, ale w pewien sposób również w aplikacji Cloud Storage (na przykład, jeśli umieszczę nowy plik na moim koncie Cloud Storage, to operacja musi być trwała w czasie i tak dalej w przypadku innych właściwości ACID) Moim problemem jest powiązanie koncepcji DBMS z koncepcją Cloud Storage. Napisałem kilka stron podążając za tą ulicą (i pytam, czy to może być dobry sposób na połączenie tych 2 argumentów, które moim zdaniem są dość różne...): 1. Opisuję wath to **SZBMS ** jako coś, co oddziela model danych widziany przez aplikacje od fizycznej reprezentacji tych samych danych na dysku twardym. 2. Opisuję **Model relacyjny** (oraz koncepcję **RDBMS** jako klasycznego modelu dostępu do danych). W tej sekcji przedstawiam pojęcie algebry relacyjnej i mówię o **granicach modelu relacyjnego** w kontekście chmury, o **problemach ze skalowalnością** oraz o **niskiej wydajności przy dostępie do danych w określonych kontekstach ** (głównie spowodowane przez operatora **JOIN**). 3. Zaczynając od poprzedniego problemu _niskiej wydajności przy dostępie do danych w określonych kontekstach_ * Wyjaśniam, dlaczego przyczyną jest operator **JOIN** i mówię o **Object Oriented Databae** jako możliwym rozwiązaniu tego problemu ( atrybut obiektu może być odniesieniem do innego obiektu, więc często nie potrzebuję używać operatora JOIN, aby powiązać ze sobą 2 obiekty, ale po prostu muszę podążać za wskaźnikiem, w ten sposób złożoność czasowa jest usuwana z **O(n) ** do **O(1)** zapewniając niewiarygodnie wyższą wydajność, gdy liczba dostępu do danych jest duża). 4. Następnie powiązałem prezentowaną koncepcję **Object Oriented Database** z opracowanym **Cloud Storage System**, stwierdzając, że mogą one być postrzegane jako podobne narzędzia, ponieważ serwer, który implementuje nasz Cloud Storage System, korzysta z * *Architektura obiektowej pamięci masowej** zaprojektowana do zarządzania petabajtami informacji i miliardami obiektów w wielu lokalizacjach geograficznych jako jeden system. **Pamięć obiektowa** to architektura pamięci, która zarządza danymi jako obiektami... i ta koncepcja jest bardzo podobna do tego, jak **DBMS zorientowany obiektowo** widzi dane. 5. Na koniec opowiem o właściwościach **ACID** wyjaśniając znaczenie tych właściwości w zarządzaniu transakcjami DBMS (zarówno RDBMS, jak i OODBMS) i tłumacząc te właściwości na kontekst **Cloud Storage**. (na przykład, jeśli umieszczę nowy plik na moim koncie Cloud Storage, ta operacja musi być trwała w czasie i tak dalej dla innych właściwości ACID). Co myślisz o tym sposobie powiązania tematu DBMS z tematem Cloud Storage? to ma sens, czy jest to odcinek? Inne pomysły są mile widziane Tnx Andrea


title: Etyka zbierania nieidentyfikowalnych informacji o instalacji

text: Kończę aplikację, którą piszę, która mam nadzieję, że zdobędzie przyzwoitą bazę użytkowników. Będzie darmowy i open source, ale interesuje mnie zbieranie danych analitycznych w bazie instalacyjnej. Zasadniczo mała wersja Google Analytics, ale dla aplikacji komputerowej zamiast strony internetowej. Szczegóły, które chciałbym zebrać to: * Poprzednia wersja aplikacji (jeśli istnieje) * Aktualna wersja aplikacji * Wersja systemu operacyjnego * Regionalne położenie geograficzne (tylko na poziomie kraju/miasta, prawdopodobnie na podstawie adresu IP). * Unikalny skrót systemowy (aby określić liczbę unikalnych instalacji) Mam wrażenie, że pierwsze trzy prawdopodobnie można by zrobić bez większych obaw, ponieważ są to punkty danych gromadzone przez prawie KAŻDĄ istniejącą witrynę bez pytania o pozwolenie. Położenie geograficzne nadal jestem dość wygodne jest OK. Ponownie, zbierane przez każdą witrynę internetową ... i do licha, otrzymują nawet Twoje rzeczywiste IP. Nie zrozumiałbym tego, ale faktycznie rozwiąż po stronie klienta lokalizacji geograficznej i wyślij TYLKO to. Wszystkie te dane prawdopodobnie zostałyby przesłane do formularza Google Docs, więc nie miałbym dostępu do IP nawet na poziomie kolekcji. Trochę bardziej martwię się unikalnym haszem systemowym, ponieważ ludzie mogą uznać go za możliwy do zidentyfikowania. Jednak moją obecną myślą jest zebranie płyty głównej systemu i numeru seryjnego procesora, połączenie ich razem, a następnie utworzenie skrótu (prawdopodobnie MD5) z tego ciągu. To samo, co dzieje się z hasłami, nie ma możliwości odwrócenia tego, więc naprawdę NIE ma możliwości odróżnienia, do kogo faktycznie należą dane. Musiałbyś mieć ten konkretny skrót z każdego komputera wraz z informacjami o jego właścicielu, aby je dopasować. Więc pewnie nic mi nie jest, ale chcę tu tylko zakryć swój tyłek. Wszelkie przemyślenia społeczności dotyczące tego, czy dane, które chcę zebrać, są rozsądne lub czy istnieją pewne punkty danych, których nie powinienem gromadzić (lub wcale). Jak wcześniej wspomniano, aplikacja będzie całkowicie open source, więc będą mogli spojrzeć na kod i sprawdzić, czy nie są przesyłane żadne wątpliwe dane. Jedyną rzeczą, którą mógłbym skusić, aby „ukryć” jest rzeczywisty adres formularza kolekcji, po prostu po to, aby ktoś nie zdecydował się na spamowanie go fałszywymi danymi (może popadam w paranoję). W obecnej sytuacji aplikacja korzysta z niektórych internetowych interfejsów API, dla których mam osobiste klucze, których nie można przekazać w zaewidencjonowanym źródle, więc mam plik, który jest pominięty w kontroli źródła, który zawiera takie elementy, jak te klucze API. Aplikacja nadal działa bez nich, tylko w bardziej ograniczony sposób i każdy może zdobyć własny klucz i skompilować go, aby był w pełni funkcjonalny. Myślę, że mógłbym umieścić adres URL formularza w tej sekcji. Myśli?


title: Jak właściwie pogrupować ten projekt w klasy?

text: Pierwotnie zapytałem o to w SO, gdzie było zamknięte i zaleciłem, abym poprosił o to tutaj. Próbuję wymyślić, jak pogrupować wszystkie funkcje potrzebne do mojego projektu w klasy. Celem projektu jest wykonanie następującego procesu: 1. Uzyskanie poświadczeń FTP użytkownika (nazwa użytkownika i hasło). 2. Sprawdź, czy poświadczenia nawiązują prawidłowe połączenie z serwerem FTP. 3. Przeprowadź zapytanie do kilku list programu Sharepoint i połącz wyniki tych zapytań, aby utworzyć listę elementów, na których należy podjąć działania. 4. Każda pozycja na liście ma folder. Dla każdego elementu: * Spakuj zawartość folderu. * Prześlij folder na serwer FTP za pomocą SFTP * Zaktualizuj dane Sharepoint elementu. 5. Prześlij użytkownikowi raport Excel pokazujący np. * Elementy bez ścieżek folderów * Elementy, których nie udało się skompresować lub przesłać Kroki 2-5, są wykonywane okresowo; jeśli krok 2 zwróci nieprawidłowe połączenie, użytkownik jest ostrzegany, a proces powraca do kroku 1. Jeśli w dowolnym momencie użytkownik naciśnie określony klawisz, proces zostaje zakończony. Zdefiniowałem następujący zestaw klas, z których każda znajduje się w swoim własnym pliku .cs: `SFTP`: procesy przesyłania plików `DataHandler`: procesy pobierania/zapytania/aktualizowania danych Sharepointa. Tworzy i przesyła również pliki zip. `Wyjątki`: Nie tylko jedna klasa, to jest plik .cs, w którym mam wszystkie moje klasy wyjątków. `Raport`: Tworzy i wysyła raport. `Program`: Główna klasa do uruchamiania programu. Zdaję sobie sprawę, że klasa DataHandler jest boskim obiektem, ale nie mam dobrego pomysłu, jak ją refaktoryzować. Uważam, że powinno to być bardziej precyzyjne niż po prostu dzielenie go na Sharepoint, Zip i Upload, ale może to wszystko. Ponadto nie udało mi się jeszcze ustalić, jak połączyć zachowanie okresowe z częścią „czekaj na dane wejściowe użytkownika w dowolnym momencie procesu”; Myślę, że dotyczy to wątków, co oznacza, że inne klasy do zarządzania wątkami... Nie jestem za dobrze zorientowany we wzorcach projektowych, ale czy jest taki, który dobrze pasuje do tego projektu? Jeśli jest to zbyt obszerny temat, aby ładnie wyjaśnić w odpowiedzi na SO, przyjmę również link do dobrego samouczka na temat tego, co próbuję tutaj zrobić.


title: Rozgałęzienie według funkcji: Jakie są rzeczywiste korzyści (i zagrożenia)?

text: Czytałem ostatnio sporo postów o różnych strategiach rozgałęziania (np. dużo linków z To branch czy nie do brancha?), i chociaż prawie każdy artykuł wyjaśnia, jak wykonać tę lub inną strategię, rzadko wyjaśniają dlaczego. Obecnie nasz zespół bada, czy przejść na „oddziały fabularne”. Obecnie używamy modelu „wszyscy zgadzają się na połączenie główne” i mamy gałęzie wydań, których używamy do naprawiania poprawek do poprzednich wydań. W sumie ten model w przeszłości sprawdzał się bardzo dobrze. Więc właściwie powiedziałbym - jeśli nie jest zepsuty, nie naprawiaj tego. Jednak może być punkt, którego mi brakuje, więc chciałbym zapytać: Jakie są rzeczywiste namacalne korzyści z używania strategii rozgałęzień funkcji w porównaniu z „wszystkim angażuje się w łącze trunkingowe”? Jakie są wady gałęzi funkcji w twoim doświadczeniu?


title: Co mogę zrobić, aby moje umiejętności były doskonałe bez internetu?

text: To prawdopodobnie brzmi jak zabawne pytanie od siwobrodych, ale naprawdę nie wiem, co mam zrobić bez pomocy Google. Krótko mówiąc, mam zamiar zostać wywieziony za granicę. Czego mogę się po tym spodziewać: * dużo przestojów * praktycznie brak internetu * prawdopodobnie prąd zabiorę ze sobą laptopa, ale zakładam, że ten niewielki dostęp do internetu, który mam, prawdopodobnie wydam na rozmowy z moimi dziećmi i rodziny przez Skype i IM. Aby dodać do tego, internet za granicą jest ściśle kontrolowany, więc nie ma pamięci USB, zewnętrznego HD ani podłączania laptopa. To, co zobaczę na ekranie, będzie prawdopodobnie wszystkim, co mogę z niego wynieść (kiedy lub jeśli w ogóle to mam). * * * Szukam pomysłów na rzeczy, które mogę pobrać na laptopa przez dłuższy czas z dala od internetu. Nie przejmuję się zbytnio, którą platformę, język lub zestaw pobieram, ponieważ będę miał dużo czasu, aby uzyskać biegłość w czymkolwiek. Naprawdę chcę po prostu dość samowystarczalnego, dobrze udokumentowanego i bogatego środowiska, w którym mógłbym pobrać całość i nie czuć, że internet jest nawet konieczny do kodowania w nim. Czy proszę o zbyt wiele w tym stale dostępnym świecie połączonym z Internetem?


title: Jak nauczyć się bardziej OO podejścia do problemów?

text: Uczę się C# i próbuję zająć się kilkoma wspólnymi projektami / własnymi pracami, aby stać się jeszcze lepszym. Obecnie pracuję nad zrozumieniem problemu łazika marsjańskiego. Przeczytałem opis i widziałem kilka rozwiązań, wydają się ładne i przestrzegają zasad projektowania OO. * Jak dochodzisz do zrozumienia, jakie zajęcia potrzebujesz do projektu? * Czy jest książka, którą mogę przeczytać, aby lepiej zrozumieć koncepcję projektowania OO? Teoretycznie rozumiem, ale po prostu nie rozumiem, jak i co bym zrobił, gdy faktycznie miałbym problem. Na przykład widzę problem z łazikiem marsjańskim i od razu myślę, że OK, mogę to zrobić za pomocą zaledwie 3 klas: Rover, Grid i CommandCenter. Następnie patrzę na przykłady online i jest o wiele więcej klas, interfejsów i ogólnego podziału.


title: Nauka dobrego projektowania OOP i oduczanie złych nawyków

text: > **Możliwe powielenie:** > Jakie książki lub zasoby poleciłbyś, aby nauczyć się praktycznego > projektowania OO i koncepcji rozwoju? W swojej karierze byłem głównie programistą C ze znajomością C++. Opieram się na C++ głównie ze względu na wygodę zapewnianą przez STL i prawie nigdy nie skupiam się na dobrych praktykach projektowych. Kiedy zacząłem szukać nowej pracy, ten mój zły nawyk powrócił, by mnie prześladować. Podczas wywiadów zostałem poproszony o zaprojektowanie problemu (jak szachy lub inny scenariusz) za pomocą OOP i naprawdę źle sobie z tym radzę (poznałem to dzięki informacjom zwrotnym z jednego wywiadu). Próbowałem googlować i wymyśliłem tak wiele opinii i powiązanych książek, że nie wiem od czego zacząć. Potrzebuję dobrego przez wprowadzenie do projektowania OOP, dzięki któremu mogę nauczyć się praktycznego projektowania, a nie tylko teorii. Czy możesz wskazać mi jakąkolwiek książkę, która spełnia moje wymagania? Wolę C++, ale każdy inny język jest w porządku, o ile mogę nauczyć się dobrych praktyk. Poza tym wiem, że książki mogą zajść tylko tak daleko. Byłbym również wdzięczny za wszelkie pomysły dotyczące dobrych praktyk projektowych, które pomogły Ci nauczyć się i udoskonalić Twoje koncepcje OOP.


title: Stos lokalny a stos wywołań

text: W sprawie rekurencji: Kiedy tworzysz funkcję rekurencyjną, tworzysz stos wywołań. Ok, nie ma problemu; Jednak komentarz na tej stronie (poszukaj komentarzy przez "LKM") wywołał moją ciekawość (a google nie pomogło): * Co to jest stos lokalny? * Dlaczego miałby być szybszy niż stos wywołań? * Jak właściwie byś to zaimplementował (pseudo-kod, js/php/ruby/python są w porządku)? Pytanie pomocnicze (może zasługiwać na inne pytanie, ale nie wiem o które (.*\\.)?stack.*\\.com zapytać): W tych rozmowach o programowaniu często widzę motyw „rekurencji” i jak źli / początkujący programiści tego nie robią. Jestem samoukiem i nigdy nie rozumiałem, o co tyle zamieszania. Często używam rekurencji w moim codziennym kodowaniu, zarówno do rozwiązywania problemów, jak i czasami tylko dlatego, że uważam je za piękne. Ale te artykuły sprawiają, że czuję, że może jest coś, czego po prostu nie widzę. A więc: * O co tyle zamieszania związanego z rekurencją? Czego tam nie grok?


title: Wiele małych skryptów, jedno repozytorium czy wiele?

text: Współpracownik i ja natknęliśmy się na problem, na który mamy wiele opinii. Obecnie mamy repozytorium git, w którym przechowujemy wszystkie nasze cronjobs. Jest około 20 cronów i nie są one tak naprawdę powiązane, z wyjątkiem faktu, że wszystkie są małymi skryptami Pythona i są niezbędne do niektórych działań. Używamy pliku `fabric.py` do wdrożenia i pliku `requirements.txt` do zarządzania wymaganiami dla wszystkich skryptów. Nasz problem polega w zasadzie na tym, czy trzymamy wszystkie te skrypty w jednym repozytorium git, czy powinniśmy rozdzielać je na własne repozytoria? Trzymając je w jednym repozytorium, łatwiej jest je wdrożyć na jednym serwerze. Możemy użyć tylko jednego pliku cron dla wszystkich skryptów. Jednak wydaje się to niewłaściwe, ponieważ 20 zadań cron nie jest logicznie powiązanych. Dodatkowo, używając jednego pliku `requirements.txt` dla wszystkich skryptów, trudno jest określić jakie są zależności dla konkretnego skryptu i wszystkie muszą używać tych samych wersji pakietów. Moglibyśmy oddzielić wszystkie skrypty do ich własnych repozytoriów, ale tworzy to 20 różnych repozytoriów, które należy zapamiętać i zająć się nimi. Większość z tych skryptów nie jest zbyt duża i to rozwiązanie wydaje się przesadą. Powiązane pytanie brzmi, czy używamy jednego dużego pliku crontab dla wszystkich zadań cron, czy też osobnego pliku dla każdego? Jeśli każdy z nich ma swój własny, w jaki sposób instalacja jednego crontab pozwala uniknąć nadpisania pozostałych 19? To również wydaje się być uciążliwe, ponieważ 20 różnych plików crona do śledzenia. Krótko mówiąc, naszym głównym pytaniem i problemem jest to, czy trzymamy je wszystkie ściśle powiązane jako jedno repozytorium, czy też rozdzielamy je do własnego repozytorium z ich własnymi wymaganiami.txt i fabfile.py? Mamy wrażenie, że prawdopodobnie szukamy też naprawdę prostego rozwiązania. Czy istnieje łatwiejszy sposób na poradzenie sobie z tym problemem?


title: Miesięczne kreatywne wyzwania dla programistów?

text: Czy ktoś wie o miesięcznych wyzwaniach twórczych dla programistów, takich jak Narodowy Miesiąc Pisania Powieści (NaNoWriMonth), ale dla programistów. Miesiąc, w którym musisz coś stworzyć, a nie tylko serię wyzwań do przezwyciężenia lub problemów do rozwiązania. Coś w stylu: Narodowy Miesiąc Budowania Stron Internetowych (NaWebBuMo) lub Krajowy Miesiąc Budowania Gier (NaGaBuMo), ale prawdziwy zamiast wymyślonych przeze mnie wymysłów? Szukam czegoś, co prosi o (stosunkowo) gotowy produkt na koniec trzydziestu dni.


title: Kształcenie na odległość w informatyce - HCI

text: Od kilku lat jestem inżynierem oprogramowania/grafikiem, a od niedawna rozważam dalszą edukację w tej dziedzinie. (Właściwie to był bardzo hojny prezent świąteczny) Byłbym zainteresowany głównie czymś takim jak interakcja człowiek-komputer lub podobna „twórcza technologia”, która obejmuje ciężki projekt UI/UX, prototypowanie lub architekturę informacji. W każdym razie - nadal planuję pracować na pełny etat i szukałem programów na odległość w niepełnym wymiarze godzin i zastanawiałem się, czy ktoś ma jakieś doświadczenie z realizacją podobnego stopnia (zarówno na odległość, jak i osobiście) i mógłby podzielić się swoimi doświadczeniami. Dziękuję!


title: Pisanie testów dla istniejącego kodu

text: Załóżmy, że ktoś miał stosunkowo duży program (powiedzmy 900 000 SLOC w C#), wszystko dokładnie skomentowane/udokumentowane, dobrze zorganizowane i działające. Cała baza kodu została napisana przez jednego starszego programistę, który nie jest już związany z firmą. Cały kod jest testowalny, a IoC jest używany przez cały czas — z wyjątkiem jakiegoś dziwnego powodu, dla którego nie napisali żadnych testów jednostkowych. Teraz Twoja firma chce rozgałęziać kod i chce dodać testy jednostkowe w celu wykrywania, kiedy zmiany naruszają podstawową funkcjonalność. * Czy dodanie testów to dobry pomysł? * Jeśli tak, to od czego można by zacząć od czegoś takiego? **EDYTUJ** OK, więc nie spodziewałem się odpowiedzi stanowiących dobre argumenty dla przeciwnych wniosków. I tak sprawa może być poza moim zasięgiem. Przeczytałem również "zduplikowane pytania" i ogólnie zgadzam się, że "pisanie testów jest dobre"... tak, ale nie jest to zbyt pomocne w tym konkretnym przypadku. Nie sądzę, że jestem tutaj sam w rozważaniu pisania testów dla starszego systemu. Zamierzam prowadzić metryki dotyczące tego, ile czasu poświęcono i ile razy nowe testy wyłapują problemy (a ile razy nie). Wrócę i zaktualizuję to za około rok o moje wyniki. **WNIOSEK** Okazuje się więc, że w zasadzie niemożliwe jest dodanie testu jednostkowego do istniejącego kodu z jakimkolwiek pozorem ortodoksji. Gdy kod działa, oczywiście nie możesz podświetlać swoich testów na czerwono/zielono, zwykle nie jest jasne, które zachowania są ważne do przetestowania, nie jest jasne, od czego zacząć, a już na pewno nie jest jasne, kiedy skończysz. Naprawdę nawet zadawanie tego pytania mija się z głównym punktem pisania testów. W większości przypadków okazało się, że łatwiej jest przepisać kod za pomocą TDD niż rozszyfrować zamierzone funkcje i wstecznie dodać testy jednostkowe. Przy naprawianiu problemu lub dodawaniu nowej funkcji jest to inna historia i uważam, że nadszedł czas, aby dodać testy jednostkowe (jak niektórzy wskazali poniżej). Ostatecznie większość kodu zostaje napisana od nowa, często wcześniej niż można by się spodziewać — stosując takie podejście, udało mi się dodać pokrycie testowe do zaskakująco dużego fragmentu istniejącego kodu.


title: Jak uczysz się programować?

text: > **Możliwe duplikaty:** > Nadal nie wiem, jak programować? > kończę studia na kierunku informatyka, ale nie czuję, że wiem > jak programować nie wiem, czy macie super mózgi specjalnie do programowania, ale chciałbym wiedzieć, jak udaje wam się uczyć, zrozumieć i zastosować programowanie w języku Java. Jestem w 11 klasie i nauczyliśmy się instrukcji, obiektów, klas i tablic. Co tydzień mamy test z programowania i nie oblewam ich. Teraz mamy projekt do zrobienia BlackJack za pomocą formularza JPanel. Również zapamiętanie pętli while nie stanowi problemu; Myślę, że problem polega na zastosowaniu go do sytuacji (mój kolega nigdy nie programuje w taki sam sposób jak nauczyciel, ale nadal uzyskuje takie same wyniki).


title: Czy konieczne jest mapowanie liczb całkowitych na bity w algorytmie genetycznym?

text: Z tego, co przeczytałem, algorytmy genetyczne są zwykle (zawsze?) stosowane do chromosomów bitów. Jeśli więc problem polega na maksymalizacji funkcji, która przyjmuje wartości całkowite, liczby całkowite są najpierw kodowane jako bity. Czy to mapowanie jest konieczne? Wygląda na to, że można wziąć chromosomy liczb całkowitych i bezpośrednio zastosować crossover i mutację. Tak więc, jeśli mam funkcję, która pobiera 35 liczb całkowitych, mogę po prostu zastosować operatory genetyczne do tych liczb całkowitych, a nie do bitów 35xB (gdzie B to liczba bitów potrzebnych do zakodowania liczby całkowitej). Czy jest jakiś powód, dla którego tak się nie robi? Być może algorytm ucierpi, ponieważ problem jest zdefiniowany bardziej zgrubnie (to znaczy problem można zdefiniować krótszymi chromosomami, jeśli nie używamy bitów), ale jestem ciekaw, czy ktoś ma lepszą odpowiedź.


title: Czy istnieje licencja, w której przyznawane są wszystkie prawa?

text: Znane mi licencje, w tym open source i mniej restrykcyjne, takie jak BSD, nakładają obowiązek: * Zachowania informacji o prawach autorskich i/lub: * Wskazania, że dokładna część kodu źródłowego została napisana przez oryginalnego autora. Powiedzmy, że chcę udostępnić napisany przeze mnie kod źródłowy i przyznać wszystkie prawa, w tym prawo do: * usunięcia informacji o prawach autorskich lub zastąpienia innym, * sprzedaży kodu źródłowego lub wykorzystania go w produkcie komercyjnym bez ograniczeń , * Nigdy nie zaznaczaj, że ten kod źródłowy został napisany przeze mnie¹, ale jednocześnie zrzekam się wszelkich gwarancji, tak jak ma to miejsce w przypadku licencji BSD. Czy istnieją licencje pasujące do tego przypadku? Uwaga: domena publiczna nie jest rozwiązaniem, ponieważ termin jest niejasny i zmienia się z jednego kraju do drugiego. * * * ¹ Dlaczego ktoś miałby to robić? Ponieważ wszyscy mamy fragmenty kodu, które nie są warte prawdziwej licencji, ale nadal są przydatne dla społeczności (przykład: usuwanie znaków diakrytycznych z tekstu). Podanie go "całkowicie za darmo" jest w tym przypadku bardzo miłe, że powiedzenie, że aby użyć twojego kodu, osoba musi przeczytać kilka akapitów lub stron nieczytelnego tekstu WIELKIMI LITERAMI, zrozumieć go, zaakceptować, a następnie skopiować i wkleić Twoje imię i nazwisko oraz informacja o prawach autorskich za każdym razem, gdy używany jest kod.


title: Przełączyć się na Javę?

text: Zajmuję się technologią/arcitecture .NET i MS od ponad 4 lat. W mojej obecnej pracy znalazłem się w ślepym zaułku i rozważam przejście do nowej pracy. Większość aktualnych ofert pracy w moim mieście jest oparta na Javie. J2EE i tym podobne. Czy mądrze jest zostawić te wszystkie lata doświadczenia i zacząć od zera w świecie Javy?


title: Możliwość przełączenia się na Javę z .Net

text: Jestem świeżo upieczonym MCA i będę pracować nad dot Net przez najbliższe kilka miesięcy (prawie 10-12 miesięcy). Potem chcę przełączyć się na Javę. Jaka jest możliwość, że mogę się na to przełączyć? Jaki rodzaj przygotowania mam zrobić? Planuję również wystąpić w SCJP, ale nie mam żadnej wiedzy, jak zarejestrować się jako opłata rejestracyjna. Proszę również o wskazanie, jakie jest podejście firmy do kandydatów zmieniających technologię. Czego szukają firmy?


title: Planning Poker i programiści słowni

text: Mój zespół składa się z 4 programistów; wszystko wytrawne i wykwalifikowane. Jednym z nich jest gadatliwy, dobrze zaplanowany facet, który nalega na zdefiniowanie technicznego rozwiązania naszych historii, zanim przedstawimy nasze szacunki w Planning Poker. Odmawia oceny, jeśli nie ma zgrubnego pomysłu na uzgodnione rozwiązanie techniczne (co brzmi rozsądnie, prawda?). Problem polega na tym, że nasze sesje kalkulacyjne trwają wiecznie! Z twojego doświadczenia, jak radzisz sobie z tego rodzaju osobowością podczas gry w pokera planowania?


title: Jak zaimplementować bazę danych transakcji EJB 3.0?

text: W encji CustomerTransactions mam następujące pole do rejestrowania tego, co kupił klient: @ManyToMany private List<Item> listOfItemsBought; Kiedy myślę więcej o tym polu, jest szansa, że może nie działać, ponieważ sprzedawcy mogą zmieniać informacje o produkcie (np. Cena, rabat itp.). W związku z tym w tym polu nie będzie można zapisać tego, co klient faktycznie kupił w momencie realizacji transakcji. W tej chwili mogę wymyślić tylko 2 sposoby, aby to zadziałało. 1. Zapiszę szczegóły transakcji w polu String. Czuję, że w ten sposób byłbym kłopotliwy, gdybym musiał później wydobyć jakieś informacje o transakcji. 2. Za każdym razem, gdy sprzedawca zmieni informacje o przedmiocie, nie będę aktualizować bezpośrednio w polach tego przedmiotu. Zamiast tego stworzę kolejny nowy przedmiot ze wszystkimi nowymi informacjami i zachowam stary przedmiot w nienaruszonym stanie. Czuję, że ten sposób jest lepszy, ponieważ później mogę łatwo wydobyć informacje o transakcji. Jednak złą stroną jest to, że moja tabela przedmiotów może zawierać wiele wierszy. Byłbym bardzo wdzięczny, gdyby ktoś mógł mi doradzić, jak mam poradzić sobie z tym problemem. **AKTUALIZACJA:** Chciałbym dodać więcej informacji o obecnym projekcie. public class Klient implementuje Serializable { @OneToMany private List<CustomerTransactions> listOfTransactions; } public class CustomerTransactions implementuje Serializable { @ManyToMany private List<Item> listOfItemsBought; } public class Merchant implementuje Serializable { @OneToMany private List<Item> listOfSellingItems; }


title: konwencja nazw dla zmiennych w C#

text: Oglądam film na C# o zmiennych. Autor deklaruje zmienną wewnątrz metody i nazwał ją tak: string MyName ="James"; moje pytanie brzmi: jaka konwencja jest zalecana przez .Net Framework. Czy jest to obudowa Pascal jak w powyższym przykładzie, czy jest to obudowa wielbłąda?


title: Jak/gdzie mogę podać wersję mojego commita na githubie?

text: Po prostu uczę się podawać wersje projektów. Rozumiem pisanie szczegółów dotyczących zmian w moim projekcie podczas zatwierdzania, ale gdzie powinienem umieścić numer wersji mojego projektu?


title: co to jest przechowywanie danych w stałej przestrzeni?

text: „bloom filter pozwala nam przechowywać dane w stałej przestrzeni” Czy ktoś może wyjaśnić, co dokładnie oznacza to zdanie?


title: Dlaczego miałbym uczyć się C++11, znając C i C++?

text: Jestem programistą w C i C++, chociaż nie trzymam się żadnego języka i nie piszę ich mieszanki. Czasami posiadanie kodu w klasach, prawdopodobnie z przeciążeniem operatorów lub szablonami, a tak świetny STL jest oczywiście lepszym sposobem. Czasami użycie prostego wskaźnika do funkcji C jest znacznie bardziej czytelne i jasne. Więc odnajduję piękno i praktyczność w obu językach. _Nie chcę wdawać się w dyskusję na temat „Jeśli je zmiksujesz i skompilujesz za pomocą kompilatora C++, to już nie jest miks, tylko C++”. Myślę, że wszyscy rozumiemy, co mam na myśli przez ich miksowanie._ Również nie nie chcę rozmawiać o C vs C++, to pytanie dotyczy C++11. C++11 wprowadza, jak sądzę, znaczące zmiany w działaniu C++, ale wprowadził wiele specjalnych przypadków, wyjątków i nieprawidłowości, które zmieniają zachowanie różnych funkcji w różnych okolicznościach, nakładając ograniczenia na wielokrotne dziedziczenie, identyfikatory pełniące rolę słów kluczowych, rozszerzenia literałów napisów, przechwytywanie zmiennych funkcji lambda itp. Wiem, że w przyszłości, gdy powiesz C++, wszyscy przyjmą C++11. Podobnie jak w dzisiejszych czasach, gdy mówisz C, najprawdopodobniej masz na myśli C99. To sprawia, że rozważam naukę C++11. W końcu, jeśli chcę dalej pisać kod w C++, być może w pewnym momencie będę musiał zacząć korzystać z tych funkcji po prostu dlatego, że moi koledzy to zrobili. Weźmy na przykład C. Po tylu latach wciąż wiele osób uczy się i pisze kod w C. Dlaczego? Ponieważ język jest dobry. Dobre oznacza to, że przestrzega wielu zasad, aby stworzyć dobry język programowania. Więc oprócz tego, że jest potężny (co jest łatwe lub trudne, prawie wszystkie języki programowania są), C jest regularny i ma kilka wyjątków, jeśli w ogóle. C++11 jednak nie sądzę. Nie jestem pewien, czy zmiany wprowadzone w C++11 czynią język lepszym. Więc pytanie brzmi: **Dlaczego miałbym uczyć się C++11?**


title: Skąd wzięła się „metoda” jako specjalny termin w OOP?

text: „Metoda” to specjalny termin w programowaniu obiektowym. Czy ktoś wie, kiedy słowo zaczęło być używane w tym konkretnym znaczeniu iw związku z jakim językiem programowania lub inną gałęzią uczenia ilościowego?


title: Serializuję wiadomości sieciowe

text: Piszę opakowanie sieciowe wokół `boost::asio` i zastanawiałem się, jaki jest dobry i prosty sposób na serializowanie moich wiadomości. Mam fabrykę komunikatów, która może zająć się wysłaniem danych do właściwego konstruktora, ale chcę wiedzieć, czy istnieją jakieś ustalone rozwiązania dotyczące pobierania danych binarnych po stronie nadawcy, a w konsekwencji przekazywania danych do deserializacji po stronie odbiorcy. Niektóre opcje, które zbadałem, to: przekazanie wskaźnika do `char[]` do funkcji serializacji/deserializacji (dla serializacji do zapisu i deserializacji do odczytu), ale w ten sposób trudno jest wymusić rozmiar bufora; opierając się na tym, zdecydowałem, że funkcja serialize zwraca `boost::asio::mutable_buffer`, jednak własność pamięci jest rozmyta między wieloma klasami, ponieważ opakowanie sieciowe musi wyczyścić pamięć przydzieloną przez konstruktora wiadomości. Widziałem również rozwiązania wykorzystujące `streambuf` i `stringstream`, ale manipulowanie danymi binarnymi pod kątem ich reprezentacji łańcuchowej jest czymś, czego chcę uniknąć. Czy istnieje jakiś strumień binarny, którego mogę użyć zamiast tego? To, czego szukam, to rozwiązanie (najlepiej przy użyciu bibliotek doładowania), które pozwala konstruktorowi wiadomości dyktować ilość pamięci przydzielonej podczas serializacji i jak to wygląda pod względem przekazywania danych między opakowaniem a fabryką wiadomości / konstruktorami wiadomości. PS. Wiadomości zawierają prawie wyłącznie wbudowane typy i POD i tworzą płytką, ale szeroką hierarchię, aby przejść przez fabrykę. Uwaga: link do przykładów użycia `boost::serialization` dla czegoś takiego byłby mile widziany, ponieważ mam trudności z ustaleniem relacji między tym a buforami.


title: Jak przeprowadzić retrospektywę sprintu, aby zmaksymalizować uczestnictwo i uczciwość? A co z kontynuacją działań?

text: Widziałem to zrobione jako free-for-all, gdzie mistrz scrum po prostu prosi wszystkich o wyrzucenie komentarzy. Lub sesja ograniczona czasowo, w której „anonimowe” komentarze są umieszczane na ścianach podzielonych według kategorii. Mój obecny zespół jest ograniczony przez rozproszenie, więc robię to online/przez telefon. Jakie jest najlepsze doświadczenie każdego z nas w uzyskiwaniu konstruktywnych informacji zwrotnych? A w jaki sposób realizujesz czynności do wykonania w celu poprawy?


title: Czym różni się analiza od projektowania?

text: Jestem pewien, że wszyscy słyszeliście, jak menedżerowie mówią, że „potrzebujemy analizatora” lub „potrzebujemy projektanta”. Chociaż jestem programistą .NET, trudno mi odróżnić analizator od projektanta (nie projektanta stron internetowych lub projektanta interfejsu użytkownika). Kim jest analizator? Kim jest projektant? Czy się nakładają?


title: Czy projekty „proaktywne” w nowych projektach są przydatne?

text: Czy przy rozpoczynaniu nowego projektu przydatne są projekty „proaktywne”? Mam na myśli, jeśli stworzysz diagram UML/diagram aktywności/diagram przypadków użycia/diagram klas/itd. bo wszystko może wymyślić, a kiedy myślisz, że skończyłeś, zaczynasz kodować. Potem zdajesz sobie sprawę, że pominięto ważną funkcję lub metodę. Wszystkie twoje sprytne diagramy UML są teraz ładnymi stosami bezwartościowego papieru. Czy łatwiej/lepiej zaprojektować jedną klasę, trochę nad nią popracować, dopracować, a potem dalej nad nią pracować?


title: Myślę, że projekt klienta będzie klapą; czy powinienem z nim porozmawiać?

text: Mam jutro spotkanie z potencjalnym klientem na pewien projekt e-commerce, który chce zlecić. Miałem przegląd tego przez telefon i z tego, co rozumiem, takich pojęć już krąży miliony, a większość z nich to katastrofy i mam powody, by sądzić, że jego projekt prawdopodobnie spotka ten sam los. Czy powinienem poruszyć/omówić z nim komercyjną wykonalność jego pomysłu, czy po prostu zaakceptować projekt, dać z siebie wszystko i pominąć całą resztę?


title: Czy najlepiej jest zminimalizować używanie wskaźników w C?

text: Myślę, że większość ludzi zgodziłaby się, że wskaźniki są głównym źródłem błędów w programach C (jeśli nie największym źródłem błędów). Inne języki całkowicie odrzucają wskaźniki z tego powodu. Czy zatem podczas pracy w C najlepiej byłoby unikać używania wskaźników, gdy tylko jest to praktyczne? Na przykład ostatnio napisałem taką funkcję: void split(char *record, char *delim, int numfields, int fieldmax, char result[numfields][fieldmax]); Chociaż nie jest tak wszechstronna jak dynamicznie alokowana zmienna, ponieważ wymaga od programisty wcześniejszej znajomości liczby pól, a wszystko powyżej `fieldmax` jest obcinane (co jest czasami akceptowalne), eliminuje potrzebę zarządzania pamięcią i potencjalne do uszkodzenia pamięci. Myślę, że to całkiem niezły handel, ale zastanawiałem się, jakie są opinie innych programistów na ten temat.


title: Czy kod bez interfejsu powinien być ukryty przed klientem?

text: Pracuję nad biblioteką, która miała kilka nagłówków, które mają być używane tylko przez samą bibliotekę. Mam też kilka klas i funkcji w nagłówkach, których klient nie chce używać. Na przykład mam nagłówek zawierający funkcje debugowania, ale nie należy ich używać poza biblioteką, ponieważ może to powodować problemy. Czy ten kod powinien być ukryty przed klientem? Jeśli tak to jak?


title: Jak działają komputery?

text: To prawie żenujące pytanie... Mam dyplom z informatyki (i drugi w trakcie). Pracuję jako pełnoetatowy programista .NET od prawie pięciu lat. Generalnie wydaję się kompetentny w tym, co robię. **Ale ja nie wiem, jak działają komputery!** Proszę, zostań ze mną na chwilę. Szybkie Google „Jak działa komputer” przyniesie wiele, wiele wyników, ale trudno było znaleźć taki, który naprawdę odpowiedziałby na to, czego szukam. Zdaję sobie sprawę, że to ogromne, ogromne pytanie, więc naprawdę, jeśli możesz mi podać kilka słów kluczowych lub jakiś kierunek. Wiem, że są komponenty... zasilacz, płyta główna, pamięć RAM, procesor, itd... i otrzymuję „ogólne pojęcie” o tym, co robią. Ale naprawdę nie rozumiem, jak przechodzisz od wiersza kodu, takiego jak `Console.Readline()` w .NET (lub Javie lub C++) i faktycznie _do_ rzeczy. Jasne, jestem mgliście świadomy MSIL (w przypadku .NET) i że trochę magii dzieje się z kompilatorem JIT i zamienia się w kod natywny (chyba). Powiedziano mi, że Java jest podobna, a C++ wycina środkowy krok. Zrobiłem trochę montażu mainframe'a, to było kilka lat temu. Pamiętam, że były jakieś instrukcje i kilka rejestrów procesora i napisałem kod....i wtedy wydarzyła się jakaś magia....i mój program zadziałał (lub się zawiesił). Z tego, co rozumiem, „Emulator” symulowałby to, co się dzieje, gdy wywołujesz instrukcję i aktualizowałby rejestry procesora; ale co sprawia, że te instrukcje działają tak, jak działają? Czy to zamienia się w pytanie o elektronikę, a nie o „komputer”? Domyślam się, że nie ma żadnego praktycznego powodu, abym to zrozumiał, ale czuję, że powinienem być w stanie. (Tak, tak się dzieje, gdy spędzasz dzień z małym dzieckiem. Zajmuje mu około 10 minut i pięć powtórzeń pytania „Dlaczego?”, aby uświadomić sobie, jak wiele nie wiesz)


title: Czy można pisać „dodatkowe” testy jednostkowe?

text: Rozumiem, jak powinno działać TDD, że piszesz nieudany test dla następnego fragmentu funkcjonalności, który chcesz dodać do funkcji lub obiektu, kodujesz do momentu przejścia testu, a następnie piszesz następny test. Czy można pisać testy, które przechodzą z kodem takim, jaki jest? Jeden z przykładów zdarzył się dzisiaj. Pisałem funkcję, która mogłaby zakodować Manchesterowi dowolną liczbę bitów. Napisałem nieudane testy na kodowanie jednego bitu i kodowałem aż do przejścia, a następnie napisałem nieudany test na przekazanie dwóch bitów do funkcji i kodowałem aż do przejścia. Ale rozwiązanie, którego użyłem do obsługi dwóch bitów, sprawiło, że kod działał dla dowolnej liczby bitów. Ponieważ przekazywanie bajtu do funkcji będzie jej najczęstszym zastosowaniem, dodałem test jednostkowy, aby upewnić się, że działa dla 8 bitów, które w rzeczywistości przeszły. Czy naruszyłem zasady TDD? Czy jest coś złego w dodawaniu zbędnych testów tylko dla mojego spokoju? Rozumiem, że część problemu polega na tym, że mogłem napisać wadliwe testy i nigdy bym się nie dowiedział, ponieważ od początku nie zawiódł, ale nie jestem pewien, jaka jest alternatywa.


title: Tworzenie webservice API - ile "kredytu" powinienem dać klientowi/deweloperowi

text: Na ile powinienem liczyć na to, że deweloper będzie działał zgodnie z moimi zasadami podczas tworzenia interfejsu API usługi sieciowej? Naszym celem jest stworzenie API, więc programiści nie powinni za bardzo rozwijać logiki po stronie klienta... na przykład, jeśli w jednej z moich metod wymagamy od klienta przesłania nam unikalnego identyfikatora - polegamy na kliencie, który wysłany identyfikator jest naprawdę unikalny - więc klient powinien również śledzić swoje żądania i dodawać logikę do swojego kodu. czy to w porządku, czy też powinniśmy próbować rozwiązywać tego rodzaju problemy w inny, bardziej przejrzysty sposób?


title: Podziel wykwalifikowany zespół Scrum

text: Zespół Scrumowy został zmuszony do wspólnego działania i czuje się bardzo nieswojo. Ciągle powtarzają, że to im nie działa i że mają dość słuchania słów „Agile” i „Scrum”. Czują, że firma po prostu wymusza na nich nowe słowo. Nie mieli wcześniej żadnego doświadczenia w Agile, w tym mistrza Scrum. Ponadto zespół składa się z bardzo niepowiązanego zestawu umiejętności. * 1 tester manualny * 1 programista .NET * 2 programistów Cobola * BA przekształcił się w PO * Mistrz scrum Programista .NET nie chce uczyć się Cobola, a programiści Cobola nie chcą uczyć się .NET. Zostałem poproszony o pomoc w uczynieniu ich bardziej zwinnymi, jednak jedną z głównych zasad Agile jest to, że moc zmiany musi leżeć w rękach tych, którzy znają się na danej dziedzinie. Kanban mógłby pomóc, ale nie poradziłby sobie ze zepsutym zestawem umiejętności. _Jakaś rada od czego zacząć?_ Obecnie planuję zacząć od PO i zobaczyć, jak się pisze, ale nie wiem, od czego zacząć.


title: Jednolite nazewnictwo zmiennych w HTML, CSS i JS

text: Przepraszam, jeśli jest to oparte na opiniach, ale jak upewniacie się, że HTML, CSS i JS mają jednolite nazewnictwo zmiennych? Używam vima, ale nie wiem, czy IDE są wystarczająco inteligentne, aby zrobić to samodzielnie. Jeśli nie jest to jasne, problem polega na tym, że jeśli zmienię nazwę zmiennej w HTML, muszę przejść i zmienić nazwy zmiennych w CSS i JS.


title: Co to jest „metoda polimorficzna”?

text: Czasami ludzie używają wyrażenia „Polimorficzna metoda/funkcja”. Czy to oznacza: 1. Metoda, która jako parametr przyjmuje typ polimorficzny i wykonuje na nim jakąś operację. Przez „typ polimorficzny” rozumiem supertyp z wieloma podtypami. 2. Abstrakcyjna lub wirtualna metoda w supertypie, z wieloma podtypami, które w różny sposób implementują/zastępują metodę.


title: Czy „Pragmatic Programmer” i „The Mythical Man Month” są dobrymi książkami dla osób z ograniczonym praktycznym doświadczeniem w programowaniu

text: Kiedyś kazano mi przeczytać książki „Pragmatyczny programista” i „Miesiąc mitycznego człowieka”. Mam bardzo małe doświadczenie w programowaniu (podstawowy HTML, CSS i JS). Gdybym kupił te książki, przeczytał je, czy przy tak ograniczonym zrozumieniu byłoby dla mnie korzystne, czy też skorzystałbym z nich? Pytam, ponieważ obecnie uczę się HTML5 i CSS3 ze źródła internetowego i chcę dodać trochę ogólnych materiałów do czytania do mojego kindle'a.


title: Projektowanie egzaminu online

text: Muszę zaprojektować serwer egzaminacyjny online dla egzaminu takiego jak GRE, w którym trudność pytania wzrasta, jeśli odpowiesz poprawnie, i maleje, jeśli odpowiesz niewłaściwie. > Pytania to pytania wielokrotnego wyboru > > Skala trudności pytań to 1-10, gdzie 1 oznacza najłatwiejsze, a 10 najtrudniejsze. > > Jeśli na dwa kolejne pytania udzielono błędnych odpowiedzi, zmniejsz trudność o 1 > a jeśli odpowiedzi na dwa pytania są prawidłowe, zwiększ trudność o 1. > > Test rozpoczyna się pytaniem o poziomie trudności 4. > > Pytanie ma ocenę równą jego trudności . **Moje pytanie** : Jakiej struktury danych należy używać do przechowywania pytań? Który algorytm jest najlepszy do pobrania pytania według stopnia trudności itp.? Obecnie rozważam podwójnie połączoną listę: struct node { int data; węzeł *poprzedni; węzeł *następny; int n int MAX; }; Tutaj 2 n musimy przechowywać. Jeden to MAX (rzeczywisty rozmiar), a n to możliwy losowy rozmiar, aby wybrać pytania z n - MAX wybraliśmy już dla każdej podwójnie połączonej listy możesz dodać dodatkowe dane int, w których możesz przechowywać poprzedni link, następny link, wskaźnik do tablicy, int Maxdata (rozmiar MAX), int n (rozmiar bieżący). Każdy węzeł jest wskaźnikiem do tablicy pytań na każdym poziomie. Jeśli odpowiedź jest prawidłowa, przechodzi do następnego węzła i wybiera losowe pytania z tej listy, w przeciwnym razie przechodzi do poprzedniego węzła i wybiera pytanie. Na przykład załóżmy, że tablica ma 10 pytań od 1 do 10. Ponieważ rozmiar tablicy wynosi n = 10, wiesz, że 1. teraz wybrałeś losowe pytanie rand() % 10 = 6 pytań 2. teraz zamień numer pytania 6 i 10, zrób n -- i zwróć szóste pytanie 3. teraz n = 9, więc następnym razem 10. nie będzie brane pod uwagę 4. random zwróci tylko 1 - 9 Czy istnieje lepszy sposób na zrobienie tego?


title: Czy istnieje różnica między nauką VBA na Macu a Windowsem?

text: Jestem programistą, który chciałby się nauczyć VBA, ale nie mam komputera z systemem Windows. Mam jednak MacBooka Pro z najnowszą wersją MS Office dla Maca (chyba 2011). Ponieważ pracuję w sklepie .Net, chciałbym nauczyć się VBA. Czy jest coś, czego tracę, nie mając komputera z systemem Windows, na którym można się tego nauczyć?


title: Dlaczego składnia języka funkcjonalnego nie jest bardziej zbliżona do języka ludzkiego?

text: Interesuję się programowaniem funkcjonalnym i postanowiłem zmierzyć się z Haskellem. Głowa mnie boli... ale w końcu to zrozumiem... Mam jednak jedną ciekawostkę, dlaczego składnia jest tak tajemnicza (brak innego słowa)? Czy istnieje powód **dlaczego nie jest bardziej wyrazisty**, bliższy ludzkiemu językowi? Rozumiem, że FP jest dobry w modelowaniu pojęć matematycznych i zapożyczył niektóre ze swoich zwięzłych środków wyrazu, ale nadal nie jest to matematyka... to język.


title: Przypisania w próbnych wartościach zwracanych

text: (Pokażę przykłady używające php i phpunit, ale można to zastosować do dowolnego języka programowania) Przypadek: załóżmy, że mamy metodę `A::foo` która deleguje część pracy do klasy `M` i zwraca wartość bez zmian . Które z tych rozwiązań byś wybrał: $mock = $this->getMock('M'); $mock->expects($this->once()) ->method('bar') ->will($this->returnValue('baz')); $obj = nowy A($mock); $this->assertEquals('baz', $obj->foo()); lub $mock = $this->getMock('M'); $mock->expects($this->once()) ->method('bar') ->will($this->returnValue($result = 'baz')); $obj = nowy A($mock); $this->assertEquals($wynik, $obj->foo()); lub $wynik = 'baz'; $mock = $this->getMock('M'); $mock->expects($this->once()) ->method('bar') ->will($this->returnValue($result)); $obj = nowy A($mock); $this->assertEquals($wynik, $obj->foo()); Osobiście zawsze podążam za drugim rozwiązaniem, ale zaledwie 10 minut temu rozmawiałem z kilkoma programistami, którzy powiedzieli, że jest to "zbyt trudne" i wybrali trzecie lub pierwsze. Więc co byś zwykle robił? A czy macie jakieś konwencje do przestrzegania w takich przypadkach?