title: Jak mogę stać się bardziej atrakcyjny dla wydawców oprogramowania?

text: Mam spore doświadczenie w tworzeniu oprogramowania (5 lat) w świecie korporacji/przedsiębiorstw i chciałbym rozpocząć pracę dla wydawcy oprogramowania, takiego jak Microsoft, ale nie wydaje mi się, żebym był zbyt dobrze przyjmowany, gdy rozmawiam z rekruterami lub odpowiadam na reklamy. Nie sądzę, że powstrzymuje mnie to konkretne doświadczenie językowe; Ostatnie 2,5 roku spędziłem na tworzeniu stron internetowych w C#/.NET. Wcześniej pracowałem z technologiami głównego nurtu (C, C++), jak i starszymi (MVS JCL, COBOL itp.). Obawiam się, że może to być moje wykształcenie akademickie (fizyka) lub moje stosunkowo ograniczone doświadczenie z jakąkolwiek _konkretną_ platformą, która mnie powstrzymuje. Moje konkretne pytania to: * Jak powinienem się reklamować, aby uzyskać najlepszą odpowiedź od rekruterów i menedżerów ds. rekrutacji? * Jaki rodzaj dodatkowego doświadczenia zwiększyłby moje szanse na rozmowę/zatrudnienie przez wydawców oprogramowania? Czy powinienem zacząć koncentrować się na jednej technologii/platformie, zamiast być specjalistą od wszystkiego, jak jestem teraz?


title: Jak SCRUM zarządza środowiskiem, w którym członkowie zespołu są współdzieleni?

text: Cóż, pytania mówiły same w sobie. W moim miejscu pracy takie przypadki się zdarzają, ale wiele książek Agile promuje pracę w tym samym miejscu pracy i koncentrację na bieżącym projekcie, aby przyspieszyć tempo pracy. Może nie jestem aż tak poinformowany w temacie, może nie jest aż tak surowy, ale dlatego chciałem wiedzieć, co proponuje Agile w takich przypadkach. Ktoś?


title: Cross-Platform: Rozwój równoległy czy szeregowy?

text: Rozpoczynając nowy projekt oprogramowania, który będzie używany na kilku platformach, w jaki sposób określasz najlepszy sposób rozpoczęcia rozwoju? Czy programujesz na jedną platformę, a potem przenosisz na następną? Czy starasz się rozwijać wszystkie platformy jednocześnie? Na przykład zamierzam rozpocząć tworzenie aplikacji Windows Phone w C#. Większość mojego kodu mogłaby teoretycznie zostać ponownie wykorzystana z .NET Framework i Silverlight. Jednak uważam, że gdy staram się programować na wszystkich platformach jednocześnie, refaktoryzacja i przeprojektowanie wydają się być 3 razy trudniejsze i wolniejsze. Mógłbym spróbować napisać swoją aplikację na Windows Phone, a następnie przenieść ją na inne platformy, ale nie mam pojęcia, jakie kule włosowe tam na mnie czekają i wydaje mi się, że decyzje projektowe będą miały duży potencjał, aby ugryźć mnie w tyłek dopiero po tym, jak rozpocząć przenoszenie. Więc co jest lepsze: opracuj kod dla wszystkich platform jednocześnie, czy refaktoryzuj i przenoś na nowe platformy pojedynczo? Jakie pułapki czekają na mnie na obu drogach?


title: NDA, poszukiwanie partnera

text: Mam pomysł na to, co moim zdaniem byłoby dochodową aplikacją Apple App Store. Wiem też, że nie mam wystarczającej wiedzy, aby ukończyć ją od początku do końca i potrzebuję pomocy bardziej doświadczonych programistów iOS. Czy istnieje standardowa umowa NDA, której użyłeś i która Ci się spodobała, która pozwoliłaby Ci omówić szczegóły aplikacji z osobą trzecią, mając rozsądną pewność, że Twój pomysł nie zostanie skradziony?


title: Oszacowanie historii — oparte na komponentach

text: Czytałem, że szacowanie story point nie ma na celu wiązania się z liczbą godzin, ale służy do określenia względnej pojemności. Mam aplikację java, która ma warstwę adaptera, warstwę realizacji usługi, warstwę DAO i warstwę usługi łącznika zewnętrznego. Jeśli otrzymam wymaganie wysokiego poziomu , czy dobrą praktyką jest klasyfikacja punktów piętrowych dla każdej warstwy - np. Adapter : mały : 1 SP , średni 3 SP , Duży : 5 SP , Extra Large : 8 SP Impl : mały : 3 SP , średni 5 SP , Duży : 8 SP , Bardzo duży : 11 SP DAO : mały : 1 SP , średni 3 SP , Duży : 5 SP , Bardzo duży : 8 SP Czy to dobry sposób szacowania? A może powinniśmy zawsze szacować, patrząc na aplikację jako całość dla każdej zmiany? Na przykład, jeśli mam 2 historyjki użytkownika, czy powinienem oszacować rozmiar historyjki użytkownika jako całości, powiedzmy, że 1 US zajmuje 5 SP, a inne 13 SP? Czy podział pod kątem komponentów ma sens przy szacowaniu punktów fabularnych?


title: Letnie prace związane z programowaniem dla ucznia liceum?

text: Jestem uczennicą liceum, obecnie kończę 12 klasę liceum. Zostałem już przyjęty na program inżynierii oprogramowania na co najmniej jednej uczelni i zdecydowałem się na wybór kariery. Nauczyłem się prawie wszystkiego, co wiem o programowaniu i pracowałem przy wielu projektach open source. W zeszłym roku napisałem stronę internetową dla mojej szkoły, pracując w tym celu z zespołem ~3 osób, ucząc się wielu rzeczy o kontroli kodu źródłowego git i innych umiejętnościach związanych z pracą z zespołem przy projektach takich jak ten. Aby sfinansować moją edukację, będę musiał znaleźć taką czy inną wakacyjną pracę. Chociaż nie mam nic przeciwko pracy w lokalnym sklepie spożywczym lub technicznym, wolałabym pracę związaną z karierą, którą będę prowadził długoterminowo, ponieważ wierzę, że będzie 1. Być bardziej interesująca 2. Lepiej wyglądać w CV 3 Naucz mnie więcej 4. Być może lepiej zarabiać (nie jest to główna motywacja, tylko myśl) Mój problem polega na tym, że nie mam pojęcia od czego zacząć, ani jakie firmy, jeśli w ogóle, mnie zatrudnią. Zajrzałem do GSOC, ale do jesieni nie kończę 18 lat i jako taki nie kwalifikuję się. Rozważałem pójście do różnych lokalnych firm i spytanie, czy chcą, aby ich strona internetowa została wykonana / przerobiona, ale nawet wtedy nie jestem pewien, jak najlepiej to zrobić. Pójście drogą przedsiębiorcy jest również możliwe, ale może być ryzykowne jako praca letnia, od której zależy moja edukacja, zwłaszcza biorąc pod uwagę, że mam bardzo małe doświadczenie we wdrażaniu rzeczy w prawdziwym świecie. Co więcej, wymyślenie produktu, który przyniósłby mi wystarczający zysk w ciągu lata, wydaje się niezwykle mało prawdopodobne, biorąc pod uwagę, że dzikie sukcesy, takie jak Youtube i Facebook, nie były opłacalne przez kilka lat po ich rozpoczęciu. Więc ostatecznie moje pytanie brzmi: * Czy warto szukać pracy związanej z programowaniem, skoro mam mniej niż 18 lat i nie mam dyplomu? Czy mam przyzwoitą szansę na zdobycie jednego? * Jeśli jest to warte wysiłku, od czego powinienem zacząć moje poszukiwania i jakie masz rady dotyczące tych poszukiwań? Czy istnieją konkretne firmy lub strony internetowe, które poleciłbyś dla mojej sprawy? Nie jestem pewien, czy to pytanie jest nie na temat na tej stronie, ale widziałem kilka innych osób proszących o poradę zawodową i wydaje się, że należy to do tej samej kategorii. Daj mi znać, jeśli jest coś, co powinienem zrobić, aby to było jaśniejsze.


title: Jak mam do tego podejść z punktu widzenia rozwiązywania problemów?

text: Obecnie pracuję nad projektem, który ma zastąpić niektóre arkusze programu Excel. Istnieje wiele specyfiki branży, które dość często się zmieniają i nikt tak naprawdę nie wie, jak powinno być, ale każdy wystarczająco pewny myśli, że wie, jak nie powinno być. **Priorytety projektu:** * Utrzymanie — procesy biznesowe często się zmieniają. Istnieje około 3-5 różnych szablonów programu Excel. * Agile - Mój szef chce widocznych zmian co tydzień (czasami mniej). * Struktura — ta aplikacja będzie współpracować z kilkoma innymi systemami dla całego procesu biznesowego. **Podejście i projekt**: Przyjęty przez nas schemat DB to taki, w którym zdefiniowaliśmy pewną logikę biznesową w bazie danych. EntityTypes, Właściwości tych typów i ich wartości są przechowywane w bazie danych (każda ma oczywiście własną tabelę). ![DBSchema](http://i.stack.imgur.com/vNDiH.png) Początkowo myślałem o typowym podejściu, mając tabelę szacunków definiującą jej właściwości, tabelę stawek, tabelę legarów itp. nawiasem mówiąc, są to EntityTypes). Mój szef chciał DBSchema, którego teraz używamy (patrz zdjęcie). **Wady/Wady:** Aktualny Schemat: * Plusy: (Teoretycznie) Adaptuje się do danych pozwalając na późniejsze zmiany tak proste, jak dodanie danych do bazy danych. * Minusy: Nadmiernie skomplikowane. Mam trudności nawet ze zrozumieniem tego schematu, gdy próbuję stworzyć klasę, która sobie z tym poradzi. Schemat typowy/tradycyjny: * Plusy: Uproszczony, każdy, kto nie zna projektu, będzie mógł go wykorzystać w przyszłości. * Minusy: wiele wielu tabel. Nie to, co mamy teraz. **Sytuacja:** Obecnie pobieram dane przy użyciu klasy, którą stworzyłem do reprezentowania encji, a następnie konwertuję je na klasy modelu biznesowego (Estimate, Bid, Joist...), aby przekazać je do widoku. Jest to oczywiście dodatkowa praca dla obecnego schematu, ale czułem, że inny sposób analizowania widoku/kontrolera przez model w celu określenia sposobu wyświetlania danych (co sprawia, że potrzebujemy tylko kilku widoków/kontrolerów) wydaje się złym projektem/ programowanie (choć nie jestem do końca pewien dlaczego). Czy mam rację, myśląc, że ten schemat/projekt jest zły? Jeśli, to dlaczego? Mój szef chce tego schematu, ponieważ „może być złożony, ale po zakończeniu programowania nie trzeba wprowadzać żadnych zmian”. Teraz oczywiście sposób, w jaki to robię, nie jest prawdą. Gdybym miał zrobić to tak, jak chce, czuję, że mógłbym tego nie zrobić, ponieważ ciągle myliłem się ze złożonością. Jednym z argumentów mojego szefa jest to, że podczas wykonywania tradycyjnego schematu znajdujesz się z wieloma polami NULL (co wydaje mi się, że robisz to źle, jeśli tak jest. Może w niektórych przypadkach, ale mają tabele z około 30 kolumnami gdzie 10+ większość wierszy ma wartość NULL dla tej kolumny). Czy wykonanie całego programowania wspierającego obecny Schemat w sposób, w jaki sobie tego życzy, będzie warte teoretycznej prostoty dodawania rzeczy w przyszłości? Dodanie małej funkcji do klasy i dodanie wyświetlacza do szablonu widoku za pomocą nokautu nie jest zbyt pracochłonne. Zwłaszcza biorąc pod uwagę, że projekt jest wykonywany w środowisku Agile i robienie całej pracy na raz, to posiadanie czegoś do pokazania nie brzmi dla mnie zbyt zwinnie, co w zasadzie byłoby konieczne, aby zakodować złożone klasy i wyświetlić je w widoki, nie wspominając o tym, że musiałbym zakodować kilka pomocników HTML (łącząc je trochę z Knockout), aby to zrobić. Więc osobiście brzmi to tak, jakby to po prostu przesuwało pracę, a nie oszczędzało. Czy mam rację w tym procesie myślowym? **Proponowane rozwiązanie:** pewnego dnia zasugerowałem, aby przejść do innego schematu i użyć Entity Framework Code-First, aby ułatwić zmiany (tak, jak robię to teraz, niezależnie od tego mam zmianę modeli biznesowych. Code- Pierwsza teoretycznie pozwoliłaby mi również nie musieć dokonywać zmian w bazie danych). Głównym zmartwieniem mojego szefa jest to, że w przypadku tradycyjnego schematu schemat się zmieni, a inne systemy również będą wymagały aktualizacji. Natomiast twierdzi, że jeśli mamy aktualny schemat, to inne systemy nie będą wymagały aktualizacji, jeśli coś się zmieni w bazie danych. Czego nie do końca rozumiem, ponieważ skąd miałby wiedzieć, jak radzić sobie z danymi? Czy nie oznaczałoby to po prostu, że to również będzie wymagało złożonego kodowania/procesów, aby początkowo utworzyć kopię zapasową? **Pytania:** * Dlaczego projekt tego schematu jest zły (jeśli jest)? Jak mogę argumentować, że ten projekt schematu jest zły? * Jeśli nie jest to zły projekt, jak mogę się do niego lepiej przygotować? Robię co w mojej mocy, aby abstrakcyjne klasy/funkcjonalność i trzymam rzeczy z pojedynczymi obowiązkami. * Jeśli jest to zły projekt, jak mogę przekonać szefa, aby przestawił się na moją sugestię (zakładając, że moja sugestia jest najlepszą/jedyną alternatywą)? Rozumiem, że ostatnie dwa pytania są subiektywne, więc jest zrozumiałe, jeśli zostaną zignorowane.


title: Co w praktyce oznacza „GPL z wyjątkiem ścieżki klas”?

text: Oracle wydaje się licencjonować cały swój kod open source związany z Javą na licencji GPL z wyjątkiem ścieżki klas. Z tego, co rozumiem, wydaje się, że pozwala to połączyć te biblioteki z własnym kodem w produkty, które nie muszą być objęte GPL. Jak to działa? Jakie są przykłady tego, jak mogę i nie mogę korzystać z tych klas? Dlaczego ta nowa licencja była używana w przeciwieństwie do LGPL, która wydaje się dopuszczać prawie te same rzeczy, ale jest lepiej ugruntowana i zrozumiana? Jakie są różnice w stosunku do LGPL?


title: Jak obsługiwać częste żądania ajax w koszyku?

text: Czy powszechne i/lub akceptowalne jest posiadanie żądań Ajax za każdym razem, gdy przycisk jest klikany na stronie koszyka? To nie jest witryna o dużym natężeniu ruchu. Będzie mieć tylko kilku użytkowników na raz, np. 5 max. Nazywam to koszykiem z braku lepszego określenia. Witryna ma na celu umożliwienie klientom tworzenia wysoce spersonalizowanych zamówień, które korzystają z logiki znajdującej się na serwerze zamiast na kliencie. Mam wiele pytań dotyczących najlepszych praktyk w tego typu projektowaniu. Na przykład, czy powinienem blokować dane wejściowe użytkownika, dopóki nie zostanie odebrane żądanie ajax? Czy powinienem upewnić się, że wyświetlam komunikat o błędzie, jeśli żądanie ajax nie powiedzie się? Czy powinienem automatycznie powtórzyć żądanie ajax, jeśli się nie powiedzie? Czy są jakieś inne względy?


title: Jakie kluczowe czynniki powinna mieć uczelnia dla programu informatycznego?

text: Planuję iść na studia i chciałbym wiedzieć, czego powinienem szukać w szkole, podejmując decyzję o pójściu na studia informatyczne. Jakie są dobre znaki? Czym są czerwone flagi?


title: Czy Windows jest „obywatelem drugiej kategorii” w społeczności Django?

text: Obecnie prowadzę prace badawczo-rozwojowe nad aplikacją internetową, którą planujemy początkowo hostować sami, a następnie umożliwić klientom samodzielne hostowanie. Moim zadaniem była ocena frameworków internetowych, aby zobaczyć, które zapewnią nam początkowo największą produktywność i łatwość utrzymania, a jednocześnie pozwolą nam na łatwe wsparcie wdrażania w środowiskach kontrolowanych przez klientów. Nasz zespół ma doświadczenie z ASP.NET (MVC i Webforms) oraz Ruby on Rails. Z naszego doświadczenia z Railsami wynika, że wdrażanie Windowsa jest tematem tabu, a wszelkie pytania na IRC lub StackOverflow spotykają się z odruchowymi odpowiedziami „dlaczego nie Linux”. Jednak w tym przypadku naszym docelowym rynkiem mogą być serwery z systemem Windows lub Linux. * Czy tak jest również w krainie Django? * Czy jest to możliwe przy wydajności śmieci? * Czy to możliwe z utratą bólu? * Czy jest to postrzegane jako rozsądny i nie traktowany jako kompletnie głupi pomysł na to, że nie chce się uruchamiać Linuksa?


title: Jak mogę zrefaktoryzować funkcjonalność po stronie klienta, aby stworzyć ogólny projekt podobny do linii produktów?

text: Załóżmy następującą sytuację podobną do tej w Stack Overflow: Mam system z front-endem, który może wykonywać różne manipulacje na danych (poprzez wysyłanie wiadomości do back-endu REST): * Wysyłanie * Edytowanie i usuwanie * Dodawanie etykiet i tagów Teraz w pierwszej wersji stworzyliśmy ją dobrze zmodularyzowaną, ale na razie potrzebna jest „rozwoju” systemu podobnego do Stack Overflow. Moje pytanie brzmi, jak najlepiej oddzielić podobieństwa i jak uwzględnić zmienność w odniesieniu do następujących elementów: Powszechność: * Powyższe „funkcje” oraz wysyłanie/odbieranie danych z serwera * Wygląd i zachowanie (również zmienność, jak wyjaśniono poniżej) * Czasowniki HTTP powiązane z powyższymi akcjami Zmienność: * Adresy URL RESTful, na które wysyłane są żądania * Tekst/styl interfejsu użytkownika (wspólność jest analogiczna do Stack Overflow - funkcjonalność upvotes, wysyłania pytań pozostaje taka sama, ale słowa, ikony, wygląd i styl są nadal różne w różnych witrynach) Myślę, że jest to całkowicie kwestia organizacji/refaktoryzacji kodu po stronie klienta. Używam jQuery, javascript i backbone do rozwoju front-end. Moje pytanie brzmi, jak najlepiej wyizolować to samo, aby móc tworzyć wiele takich aspektów w narzędziu, nad którym obecnie pracujemy?


title: Jak wybrać język / framework po stronie serwera?

text: Staram się wymyślić listę / system rankingowy określający, jaki język serwera wybrać dla konkretnej witryny. Załóżmy, że znajomość danego języka nie jest ważna, a implementację można wykonać w dowolnym języku. Oto kilka rzeczy, które mogą być ważne, ale nie jestem pewien, jak je uszeregować: * Łatwość utrzymania. * Biblioteki. Na przykład obsługa Memcached i NoSql od razu po zainstalowaniu byłaby naprawdę miłym dodatkiem do konkretnego frameworka. * Zestawy SDK innych firm. Na przykład, jeśli potrzebuję Paypal na mojej stronie, otwarcie udostępniają SDK dla wszystkich senariów w Javie, PHP i .Net. Jeśli wybiorę Django, będę musiał polegać na bibliotekach innych firm, które nie obsługują wszystkiego i nie są oficjalnie utrzymywane. Czy to byłby przełom dla Django? * Wydajność To jest trudne do umieszczenia na ogólnej liście, ponieważ może to być przełomem, ale dla wielu stron wydajność nie będzie problemem, za który odpowiada język/framework. * Koszt (hosting, open source). edytuj - Czy jest jakiś powód, dla którego głosowanie ma zostać zamknięte? Nie widziałem żadnych duplikatów, a pytanie nie powinno prowadzić do wojny z ogniem.


title: Skąd szybcy i brudni programiści wiedzą, że dobrze to zrobili?

text: Jeśli zapytasz programistów, dlaczego powinni pisać czysty kod, odpowiedzią numer jeden, jaką otrzymasz, jest łatwość utrzymania. Chociaż jest to na mojej liście, mój główny powód jest bardziej bezpośredni i mniej altruistyczny: nie mogę stwierdzić, czy mój nowy kod jest poprawny, jeśli jest zbyt brudny. Uważam, że tak bardzo skupiłem się na poszczególnych funkcjach i liniach kodu, że kiedy kończę pierwszy szkic i cofam się, aby ponownie spojrzeć na ogólny obraz, czasami nie pasują do siebie zbyt ładnie. Spędzanie godziny lub dwóch na refaktoryzacji w celu uzyskania czystości często odkrywa błędy kopiowania/wklejania lub warunki brzegowe, które były bardzo trudne do wykrycia w szkicu wstępnym. Jednak niektórzy ludzie uważają, że czasami celowe sprawdzanie brudnego kodu w interesie dostarczania oprogramowania, z planem „posprzątania go później”. Czy istnieje jakaś praktyczna technika, która daje im pewność co do poprawności ich kodu, gdy czytelność nie jest idealna? Czy warto spróbować rozwijać tę umiejętność? A może brak zaufania do kodu jest dla niektórych łatwiejszy do zaakceptowania?


title: Jaka jest różnica między tymi tytułami starszego inżyniera oprogramowania?

text: Obecnie jestem starszym inżynierem oprogramowania badawczego w dużej firmie i oferuję mi stanowisko „starszego inżyniera personelu” gdzie indziej. Nie jestem pewien, czy tytuł nowej pozycji oznacza ruch w bok, czy awans. Tak więc, wszystkie inne rzeczy są mniej więcej równe (wynagrodzenie, dziedzina wiedzy, itp.), jaka jest zewnętrzna różnica między tymi tytułami inżyniera oprogramowania (ogólnie i niezależnie od konkretnej firmy, jeśli to możliwe): * starszy inżynier * starszy inżynier ds. badań * starszy inżynier personelu * członek personelu technicznego * główny inżynier Edycja: Pozwólcie, że omówię "członek personelu technicznego", ponieważ jest to dość rzadkie. Myślę, że to wysoki tytuł, powszechnie kojarzony z badaniami. Wiem, że Oracle, VMWare i stare Bell Labs mają te tytuły. Patrz: Członek Sztabu Technicznego . Wiem, co to oznacza, ale nie wiem, jak wypada na tle innych tytułów, dlatego zapytałem.


title: Czy testerzy powinni automatyzować swoją pracę?

text: Próbujemy skonfigurować nasz proces testowania. Zastanawiamy się, czy nasi testerzy powinni opracować automatyczne testy regresji, czy też powinni to robić programiści. A co z innymi rodzajami testów automatycznych? Czy testerzy powinni je rozwijać?


title: Anty wzorce - Warto poświęcić czas lub nie

text: Przeczytałem to pytanie i po bardzo długim czasie jasne jest, że nadal nie rozumiem antywzorców. być może podniosło to nowy poziom ciekawości, aby wiedzieć, dlaczego powinienem czytać wzorce projektowe Anti, jeśli w rzeczywistości są one niczym innym jak „Złą praktyką”. Czy jest jakaś szansa, że powinienem zaimplementować te wzorce projektowe w mojej aplikacji? **EDYTUJ** > Kiedy Jeff powiedział: „Podstawową zasadą programowania jest, aby nigdy nie pisać tego, co można > kupić lub dostać za darmo”. Który moim zdaniem jest sposobem na zaimplementowanie programowania kopiuj i wklej, czy powinienem powiedzieć, że SO jest, w taki czy inny sposób, podąża za Anti-Pattern?


title: Jaki jest standard opisu funkcji i obiektów?

text: Jaki jest standard opisu funkcji/metod (nazwa funkcji, liczba argumentów, typ argumentu, typ zwracany itp.) w sposób niezależny od języka? EDYCJA: Dokładniej, jak opisać funkcję bez użycia diagramów? Myślałem, że istnieje czysty standard tekstowy.


title: Konstrukcje języka Java w celu egzekwowania decyzji projektowych

text: Jakie konstrukcje w językach OOP (w szczególności Java) pozwalają wymusić decyzje projektowe i intencje? Myślę, że kilka przykładów to słowo kluczowe „final”, modyfikatory dostępu, metody szablonów, być może interfejsy – ale wyraźnie mam problem z wymyśleniem wyczerpującej listy. Niektóre konstrukty, takie jak dziedziczenie, wydają się pasować do tego kryterium, ale trudno mi dokładnie wyjaśnić, dlaczego. [edytuj] Okazuje się, że zrobiłem jeszcze kilka uwag: typy Enum, konstruktory, stałe i typy ogólne. Chociaż jak we wszystkim, wyjaśnienie dlaczego będzie ważniejsze niż samo wymienienie przykładów.


title: Jaki jest zalecany schemat MongoDB dla tego scenariusza z silnikiem quizu?

text: Pracuję nad silnikiem quizów do nauki języka obcego. Silnik wyświetla użytkownikom cztery obrazy jednocześnie, a następnie odtwarza plik audio. Użytkownik musi dopasować dźwięk do prawidłowego obrazu. Poniżej znajduje się moja struktura dokumentu MongoDB. Każdy dokument składa się z odniesienia do pliku obrazu i tablicy odniesień do plików audio, które pasują do tego obrazu. Aby wygenerować instancję quizu, wybieram losowo cztery dokumenty, pokazuję obrazy, a następnie losowo odtwarzam jeden plik audio z czterech dokumentów. Następnym krokiem w rozwoju mojej aplikacji jest wybór najlepszego schematu dokumentu do przechowywania domysłów użytkowników. Należy wziąć pod uwagę kilka wymagań: 1. Muszę mieć możliwość raportowania statystyk na poziomie użytkownika. Na przykład: całkowita liczba poprawnych odpowiedzi, całkowita liczba domysłów, średnia dokładność itp.) 2. Muszę być w stanie zadawać pytania dotyczące obrazów na podstawie postępów użytkownika w nauce. Na przykład wybierz 4 dokumenty, w których liczba domysłów wynosi >10, a dokładność <=0,50. 3. Schemat musi być zoptymalizowany pod kątem szybkiego generowania quizów. 4. Schemat nie może powodować przyszłych problemów ze skalowaniem względem rozmiaru dokumentu. Załóżmy, że użytkownicy 1 mm wykonują średnio 1000 prób. Biorąc to wszystko jako podstawowe informacje, jaki byłby zalecany schemat? Na przykład, czy przechowujesz każde odgadnięcie w dokumencie obrazu, czy może w dokumencie użytkownika (nie pokazanym) lub w nowej kolekcji dokumentów utworzonej w celu rejestrowania odgadnięć? Czy zaleciłbyś rejestrowanie surowych danych zgadywania, czy może wstępnie obliczyć statystyki, zwiększając liczniki w odpowiednim dokumencie? * * * Schemat zbierania obrazów: _id "505bcc7a45c978be24000005" data 2012-09-21 02:10:02 UTC imageFileName "BD3E134A-C7B3-4405-9004-ED573DF477FE-29879-0000395CF1091601" losowy 0,26997075392864645 użytkownik-13A8761E A759-91432D61B6AF-25982-0000352D853511AF" audioFiles [ 0 { audioFileName "C3669719-9F0A-4EB5-A791-2C00486665ED-30305-000039A3FDA7DCD2" użytkownik "2A8761E4-C13A-470E-A759AF audio-91432982-0000AF6" -09-22 01:15:04 UTC } 1 { nazwa_pliku audio „C3669719-9F0A-4EB5-A791-2C00486665ED-30305-000039A3FDA7DCD2” użytkownik „2A8761E4-C13A-470E-A759-91432D61B6AFL-25982-0000352D853511Af” 2012-09-22 01:17:04 UTC } ]


title: Czy narusza to użycie wyjątków dla „reguły” kontroli przepływu?

text: Planuję wykorzystać ten interfejs w architekturze wtyczek. /// <summary> /// Ogólny interfejs umożliwiający reagowanie na zdarzenie. /// Możesz zablokować wydarzenie lub po prostu użyć go do powiadomienia. /// </summary> /// <typeparam name="T"></typeparam> interfejs publiczny IEventObserver<in T> gdzie T : class { /// <summary> /// Zrzuć tutaj wyjątek, jeśli chcesz zapobiec uruchomieniu zdarzenia. /// </summary> /// <param name="o"></param> void CanFireEvent(T o); /// <summary> /// To jest wywoływane tylko wtedy, gdy żaden program obsługi nie zgłosił zdarzenia w CanFire. /// </summary> /// <param name="o"></param> void OnBeforeEvent(T o); /// <summary> /// To jest wywoływane po wydarzeniu. /// </summary> /// <param name="o"></param> void OnAfterEvent(T o); } Przykładowe użycie: interfejs publiczny ISendMessageObserver : IEventObserver<SendMessageEventArgs> { } Wtyczka może następnie zaimplementować `ISendMessageObserver` i uniemożliwić wysyłanie wiadomości, zgłaszając wyjątek w metodzie `CanFireEvent`. Wiem jednak, że wyjątki nie powinny być używane do normalnej kontroli przepływu programu, ale jest to normalne i oczekiwane, że wtyczki tutaj zatrzymują przepływ. Zdecydowałem się na to, ponieważ chciałbym, aby wtyczka zawierała powód zablokowania zdarzenia, które można zarejestrować lub zaprezentować użytkownikowi. Mogę zmienić `CanFireEvent` na: bool CanFireEvent(T o, ref message); lub: SomeTypeContainingAbortReason CanFireEvent(To); Ale oba te nie pachną idealnie. Więc co ludzie myślą, wyjątki dla kontroli przepływu OK w tym przypadku? **Edytuj** Oddzieliłem `CanFire` do jego własnego interfejsu i zmieniłem jego nazwę na `PreviewEvent`. /// <summary> /// Ogólny interfejs umożliwiający reagowanie i blokowanie zdarzenia. /// </summary> /// <typeparam name="TArgs"></typeparam> /// <typeparam name="TBlock"></typeparam> interfejs publiczny IEventPreviewer<in TArgs, out TBlock> gdzie TArgs : class gdzie TBlock : class, IEventBlock { /// <summary> /// Zwraca IEventBlock, aby zapobiec uruchomieniu zdarzenia. /// </summary> /// <param name="args"></param> TBlock PreviewEvent(TArgs args); } interfejs publiczny IEventBlock { ciąg BlockReason { get; } }


Co jest lepsze: wiele definicji klas w tym samym pliku czy każda definicja klasy w osobnym pliku? **Przykłady:** 1) Wiele klas w tym samym pliku. Powiedz, `myManyClasses.cs`: namespace myPack { class mojaKlasa1() { } class mojaKlasa2() { } class mojaKlasa3() { } . . . } 2) Każda klasa w osobnym pliku: _myClass1.cs_ namespace myPack { class mojaKlasa1() { } } _myClass2.cs_ namespace myPack { class mojaKlasa2() { } } **. . .**


title: Gdzie czytać z pliku?

text: W Javie: Mam klasę Uczniów. Chciałbym przeczytać listę uczniów z pliku. Który jest bardziej elegancki: 1. Czytanie i konstruowanie listy w main() i tworzenie obiektu Student z nową listą przekazaną do konstruktora 2. Przekazywanie FileReadera do konstruktora, kto odczytuje? 3. Coś jeszcze?


title: Python czyta ze standardowego wejścia podczas wykonywania innych zadań

text: Próbuję napisać parser dziennika systemowego. Będzie odbierać komunikaty z demona syslog FreeBsd za pośrednictwem stdin. Użyje tych wiadomości do określenia, czy adres IP powinien zostać zbanowany, czy nie. Problem, jaki mam, polega na tym, że po x sekundach ban powinien zostać usunięty, ale jeśli nie otrzymam żadnych danych wejściowych z stdin, mój program po prostu zablokuje oczekiwanie na to. Więc w międzyczasie nic nie mogę zrobić. Naprawiłem to za pomocą wątków, ale czy nie ma lepszego sposobu na zrobienie tego? Na przykład coś takiego: while true: while <data in stdin>: handleData doSomeStuff() Tak długo, jak nic nie przychodzi z stdin Chcę wykonać doSomeStuff, a jeśli są dane, obsługuj to.


title: Jak mogę zdecydować, jakim typem programisty chcę być?

text: Od jakiegoś czasu pracuję w mojej obecnej pracy i zastanawiam się nad zmianą kariery. Próbuję zdecydować, co dokładnie chcę zrobić i naprawdę nie jestem pewien. Nie chcę rozwiązania dla mojego konkretnego przypadku, ale chciałbym poznać kilka ogólników rzeczy, których mogę szukać. Oto kilka pozycji, które rozważam, i jakie są moje definicje (prawdopodobnie nazywam je czymś innym niż standardowe, ale mam nadzieję, że na razie to wystarczy). Szukam quizów, artykułów, wyjaśnień lub czegokolwiek, co może mi w tym pomóc. * Manager - Zarządzanie programistami w pewnym sensie, głównie w celu upewnienia się, że pracują. * Koder - osoba, której kazano zrobić program, aby zrobiła XYZ i zmusiła go do tego. Nie musi niczego modelować ani wymyślać formuł. * Projektant algorytmów - osoba, która wymyśla sposób, aby oprogramowanie coś robiło, ale niekoniecznie koduje ten program, przynajmniej nie w jego ostatecznej formie. * QA – osoba, która testuje kod pod kątem błędów, najlepiej z kodem w ręku. * Architekt - Ta osoba dowiaduje się, jak wszystkie elementy do siebie pasują, jest swego rodzaju kierownikiem technicznym. * Opiekun — ta osoba przejmuje istniejący kod innej osoby i upewnia się, że został naprawiony, gdy pojawią się problemy. Warto też zastanowić się, w jakiej branży chcę pracować. Możesz dodać dowolną z własnych kategorii.


title: Czego deweloperzy chcą się nauczyć przy kolejnym starcie?

text: Jako programista wiem, jak bardzo lubię uczyć się nowych rzeczy. Teraz, gdy zatrudniam programistów do mojego start-upu, wiem, że nie mogę konkurować z milionowymi bonusami Google i fantazyjnymi kafeteriami, ale jesteśmy bogaci w możliwości uczenia się ciekawych ludzi. Chcę ustawić rzeczy, które to wspierają. Więc jeśli jesteś programistą, który prawdopodobnie dołączy do startupu, czego chcesz się nauczyć? Rzeczy produktowe? Sprawy biznesowe? Badania użytkowników, projektowanie lub operacje techniczne? A jeśli szukasz bardziej technicznej nauki, czy chcesz zagłębić się w to, co już wiesz (np. back-end uczenia back-end) lub cross-train (np. front-end learning back-end)? A może jest coś zupełnie innego?


title: Czy ludzie odnoszą sukcesy z OrientDB?

text: OrientDB wygląda bardzo atrakcyjnie z punktu widzenia funkcjonalności + licencji. Nie byłem w stanie wygooglować zbyt wielu raportów od ludzi, którzy z niego korzystali. Czy ktoś może przytoczyć szczególnie godne uwagi sukcesy lub porażki?


title: Monitorowanie aplikacji C++

text: Wdrażamy nowe rozwiązanie do scentralizowanego monitorowania (Zenoss). Włączenie serwerów, sieci i programów Java jest proste dzięki SNMP i JMX. Pytanie jednak brzmi, jakie są najlepsze praktyki monitorowania i zarządzania niestandardowymi aplikacjami C++ w dużych, heterogenicznych środowiskach (Solaris x86, RHEL Linux, Windows)? Możliwości, które widzę to: 1. Net SNMP * Zalety 1. pojedynczy, centralny demon na każdym serwerze 2. dobrze znany standard 3. łatwa integracja z rozwiązaniami monitorującymi 4. uruchamiamy już demony Net SNMP na naszych serwerach * Wady: 1. złożone implementacja (MIB, biblioteka Net SNMP) 2. nowa technologia do wprowadzenia dla programistów C++ 2. rsyslog * Zalety 1. pojedynczy, centralny demon na każdym serwerze 2. dobrze znany standard 3. nieznana integracja z rozwiązaniami monitorującymi (wiem, że potrafią czy alerty oparte na tekście, ale jak dobrze będzie to działać w przypadku wysyłania danych telemetrycznych, takich jak użycie pamięci, głębokość kolejki, pojemność wątków itp.) 4. prosta implementacja * Wady: 1. możliwe problemy z integracją 2. nieco nowa technologia dla programistów C++ 3. możliwe 4. problemy z przenoszeniem, jeśli zmienimy dostawców monitorowania, prawdopodobnie wiąże się z wymyśleniem protokołu komunikacyjnego ad-hoc (lub wykorzystaniem danych strukturalnych RFC5424; Nie wiem, czy Zenoss obsługuje to bez niestandardowego kodowania Zenpack) 3. Wbudowany JMX (wstaw JVM i używaj JNI) * Zalety 1. spójny interfejs zarządzania zarówno dla Javy, jak i C++ 2. dobrze znany standard 3. łatwa integracja z monitoringiem rozwiązania 4. dość prosta implementacja (już dzisiaj robimy to do innych celów) * Wady: 1. złożoność (JNI, warstwa thunkingowa między natywnym C++ i Javą, w zasadzie dwukrotne pisanie kodu zarządzającego) 2. możliwe problemy ze stabilnością 3. wymaga JVM w każdym procesie, zużywa znacznie więcej pamięci 4. JMX to nowa technologia dla programistów C++ 5. każdy proces ma swój własny port JMX (uruchamiamy wiele procesów na każdej maszynie) 4. Lokalny demon JMX, procesy się z nim łączą * Zalety 1 pojedynczy, centralny demon na każdym serwerze 2. spójny interfejs zarządzania dla Javy i C++ 3. dobrze znany standard 4. łatwa integracja z rozwiązaniami do monitorowania * Wady: 1. złożoność (w zasadzie dwukrotne napisanie kodu zarządzającego) 2. potrzeba znalezienia lub napisania takiego demona 3. potrzeba protokołu pomiędzy demonem JMX a procesem C++ 4. JMX to nowa technologia dla programistów C++ 5. CodeMesh JunC ++ion * Zalety 1. spójny interfejs zarządzania zarówno dla Javy, jak i C++ 2. dobrze znany standard 3. łatwa integracja z rozwiązaniami monitorującymi 4. pojedynczy, centralny demon na każdym serwerze uruchomiony w trybie współdzielonej JVM 5. nieco prosta implementacja (wymaga generowanie kodu) * Wady: 1. złożoność (generowanie kodu, wymaga GUI i kilku rund dostrajania w celu wytworzenia kodu proxy) 2. możliwe problemy ze stabilnością JNI 3. wymaga JVM w każdym procesie, zużywa znacznie więcej pamięci (w trybie wbudowanym ) 4. Nie obsługuje Solaris x86 (przerywacz transakcji) 5. Nawet jeśli obsługuje Solaris x86, możliwe są problemy z kompatybilnością kompilatora (używamy d połączenie STLPort i Forte na Solarisie 6. każdy proces ma swój własny port JMX w trybie wbudowanym (uruchamiamy wiele procesów na każdej maszynie) 7. prawdopodobnie wyklucza współdzielony serwer JMX dla procesów innych niż C++ (?) Czy brakuje mi jakiegoś rozsądnie znormalizowanego, prostego rozwiązania? Biorąc pod uwagę brak innych rozsądnych rozwiązań, które z tych rozwiązań jest zwykle używane w niestandardowych programach C++? Moim przeczuciem jest, że Net SNMP to sposób, w jaki ludzie to robią, ale chciałbym uzyskać informacje i doświadczenia innych, zanim podejmę decyzję.


title: Czy nadal warto myśleć o efektywnym kodzie w skali mikro w C++?

text: Na początku mojej kariery programistycznej zakochałem się w manipulowaniu wskaźnikami, szczupłym kodzie, robieniu wszystkiego z jak najmniejszą ilością abstrakcji i tak dalej. Kod był bardzo C, jak bym powiedział, bliski metalowi i sprytny. Czas minął, mam dużo większe doświadczenie i zauważam, że zmieniło się moje nastawienie do kodu. A po zmianie, to znaczy, nie chcę już zawracać sobie głowy codziennymi sprawami, chyba że jest to bardzo łatwe do zrobienia. Jeśli istnieje konkatenacja ciągów, nigdy celowo nie wybiorę surowych wskaźników. Jeśli potrzebuję połączyć rzeczy, mogę dodać szybką rezerwę na zgadywanie dla kontenera STL, ale nie chcę zawracać sobie głowy wstępnie przydzielonymi buforami, interfejsami API typu C, pamięciami podręcznymi, unikaniem trafienia na dysk lub koszeniem. Wiem, że od czasu do czasu może się zdarzyć realloc, w tym wszystkie blokady sterty, dodatkowe kopiowanie i tak dalej, ale już nawet się tym nie przejmuję. Może dlatego, że spędziłem trochę czasu na początku mojej kariery, gdzie wymyśliłem czyste i piękne schematy z wątkami roboczymi, które przetwarzają duże ilości trywialnych danych, tylko po to, aby dowiedzieć się później, że cała niezoptymalizowana kopia realloc+kopia+realloc+ +realloc+copy+5 warstw opakowań nie jest nawet rejestrowanych w profilerze. Może dlatego, że widziałem, jak kompilatory czasami robią magię. Jednak takie trywialne rzeczy się sumują. Kiedy cały twój kod używa konstrukcji wyższego rzędu, istnieje szansa, że wszędzie będzie jakiś realloc lub zimne trafienia na dysk, które mogą spowodować ogólne wrażenie powolnej aplikacji. Coś jak WTL vs MFC. Albo skąd od razu wiesz, że aplikacja jest napisana w Javie po jej uruchomieniu. Ale czy to naprawdę? Czy są jakieś porównania oprogramowania, które używa tylko bardzo szczupłego i inteligentnego kodu z oprogramowaniem, które używa ogólnych kontenerów w całym miejscu? Czy czułbyś w ogóle różnicę, gdyby alokacja ciągów w całym programie wykorzystywała rezerwy wstępne i inteligentne ruchy, a nie leniwe wywoływanie string.append w każdym miejscu, w którym istnieje potrzeba takiej funkcjonalności? Czy próbujesz wdrażać rozwiązania łagodzące takie proste, dobrze znane rzeczy, które i tak są tanie w wykonaniu? Czy oprogramowanie może zamienić się w bloatware tylko dlatego, że nie stosuje się dodatkowej ostrożności do każdego wiersza kodu?


title: Jak wymówić CRUD?

text: Rozmawiałem ze współpracownikiem i mówiłem o tym, w jaki sposób operacje bazy danych zwykle można podzielić na jeden z elementów CRUD - Utwórz, przeczytaj, zaktualizuj i usuń. Wtedy zdałem sobie sprawę, że nie umiem wymówić CRUD. Czy istnieje więc określony, dobrze akceptowany sposób wymawiania CRUD?


title: Jak mogę zmusić programistów do lepszej współpracy przy współdzielonym kodzie z testami?

text: Ciągle powtarzamy „najpierw musisz ciągnąć” (przy okazji jest to git i github). Potem trochę kodujesz, potem przechodzisz przez testy, zatwierdzasz, potem ściągasz i wciskasz ponownie. Podajemy linki do tutoriali, próbujemy mocno / mocno. Ostatnie zmiany złamały 2 tuziny testów. Dokumentujemy wszystko. Co jeszcze możemy zrobić, aby pomóc ludziom. Wymagamy zaliczenia testów. W tej chwili kusi nas, aby cofnąć wszystkie dzisiejsze zmiany, które nie byłyby popularne. Nie jestem wielkim fanem tak surowego podejścia do zarządzania, ale być może teraz wymagane jest „ostateczne” ostrzeżenie, że zrobimy to następnym razem. Jeśli nie jest jasne, że muszą naprawić zepsute testy, prawda? Naprawiliśmy je ostatnim razem, aby nie 'zajęło'...


title: Jakie są niektóre z wymaganych narzędzi do oceny, jak duży i złożony będzie produkt?

text: Powiedzmy, że chcę rozpocząć tworzenie projektu (dla przykładu użyjmy facebooka, gitary Ultimate i wszystkich przepisów lub AutoCADa, perspektywy, gniewnych ptaków). Wszystkie te aplikacje są udane i różnią się stopniem „głębokości” i złożoności. Jako początkujący programista większość z tych aplikacji, a zwłaszcza aplikacji internetowych, wydaje się być prosta w budowie i projektowaniu, zwłaszcza jeśli używasz dobrego frameworka. Jak mogę ocenić, oszacować i prognozować złożoność projektu?


title: Czy należy unikać manipulacji jQuery DOM na rzecz silników szablonów JavaScript?

text: Z tego, co mogę powiedzieć, większość programistów użyje ciężkich taktyk manipulacji DOM jQuery, aby dostarczyć zaktualizowane widoki AJAX. Gdy sprawy wymkną się spod kontroli, mogą rozważyć refaktoryzację przy użyciu silników szablonów, takich jak Mustache.js. Czy jest to prawidłowa ocena naturalnego postępu w korzystaniu z silnika szablonów? Kiedy rozpoczynam nowy ciężki projekt AJAX, czy najlepszą praktyką jest użycie silnika szablonów, czy manipulacja jQuery DOM jest wystarczająco dobra? Nie znalazłem jeszcze żadnych negatywów związanych z używaniem silnika szablonów. Łatwość konserwacji, wydajność i prostota wydają się być cechami zbawiennymi. Proszę o informację, czy domyślnie powinny być używane silniki szablonów JavaScript.


title: Zamieszanie z licencją gpl

text: Jestem naprawdę zdezorientowany co do licencji oprogramowania, przeczytałem wiele artykułów, ale nie mogę znaleźć odpowiedzi na moje pytanie, które brzmi: Czy mogę tworzyć i sprzedawać aplikacje korzystające z bibliotek na licencji gpl? Na przykład chcę użyć biblioteki agsXMPP w aplikacji na telefony Windows i sprzedać ją na rynku, więc czy jest to legalne?


title: Eksport do Excela - gwintowanie

text: Pracuję nad aplikacją ASP.NET. Jednym z wymagań użytkowników jest to, że mogą eksportować do Excela niektóre interfejsy użytkownika. Pracowałem nad nimi za pomocą biblioteki Infragistics i dostarczałem im eksporty, których chcą. Jednak niektóre interfejsy użytkownika, które widzą, są tak złożone, że ich wykonanie zajmuje dużo czasu (w przypadku aplikacji internetowych). Na przykład eksport może potrwać kilka minut, np. 4-5 minut. Zastanawiałem się, czy byłby sposób, w jaki mógłbym zrobić to zadanie asynchronicznie, używając wątków i skrócić je.


title: Czy mądrze jest dać pomysł firmie?

text: Mam kilka ciekawych pomysłów (pomysłów biznesowych), które można wdrożyć jako dodatkowe funkcje istniejących produktów biznesowych (produktów internetowych, głównie startupów). Opierając się na doświadczeniu, czy ktoś może mi powiedzieć, czy powiedzenie im byłoby dobrym pomysłem, czy nie? Mam nadzieję, że uzyskam informację zwrotną od obu stron (wtajemniczonych firmy i osób z zewnątrz). Plus: mogliby to polubić i pomyśleć o zabraniu mnie na pokład, aby pomóc w budowaniu. Minus: biorą pomysł i go realizują. Wielkość firmy dla jednego to mniej niż 50, a dla innego mniej niż 25.


title: Który z nich wygląda na czystszy?

text: Napisałem małą metodę w programie, aby zrobić jedną rzecz, którą moja metoda wygląda tak: public static void removeExpiredAssignments(Module module){ module.removeExpiredAssignments(); } Tak więc metoda nazywa się tak: removeExpiredAssignments(moduł); Kiedy żądaną operację można wykonać, mówiąc: module.removeExpiredAssignments(); Co jest łatwe do zrozumienia z punktu widzenia kodu?


title: Algorytm wyszukiwania Tineye.com?

text: Zastanawiałem się, jak Tinoye prowadzi poszukiwania. Czy przechowuje wszystkie obrazy, a następnie wyodrębnia dane exif? Które z kolei muszą być przechowywane w bazie danych i odpytywane. Więc prawdopodobnie używa jakiegoś algorytmu dopasowywania słów kluczowych/wzorów...


title: Mój menedżer powiedział: „Nie zajmujemy się sterowaniem budynkami”, ale jestem programistą WPF

text: Nie mogę uwierzyć w to, co się właśnie stało. Jestem drogim programistą z pełnym stosem, chociaż ostatnio skoncentrowałem się na WPF i Silverlight. Przez większość czasu piszę kontrolki, modele widoków, repozytoria i trochę kodu asynchronicznego. Ten kontrakt, nad którym dzisiaj pracuję, to bałagan. Kod to bałagan. Wszystko jest ściśle powiązane, bez MVVM i mnóstwo rzeczy zgranych z CodeProject. Nauczyłem młodszego faceta, jak pracować z modelem części i stanów, budować kontrolki i maszyny wirtualne i być świetnym deweloperem interfejsu użytkownika. Mówi mojemu szefowi, że formalizuje jakąś nową funkcję w kontrolce, a mój szef mówi: „Nie zajmujemy się tworzeniem kontrolek”. Chociaż ich jedynym produktem jest klient WPF, nie mógł się bardziej mylić. Chce tylko, żeby w pośpiechu rozwalili moich juniorów. Co byś zrobił w tej sytuacji? Jak wytłumaczyłbyś to w swoim CV/życiorysie?


title: Dlaczego Java kończy działanie z powodzeniem po nieprzechwyconym wyjątku?

text: Za każdym razem, gdy program Perl, Python, C++ lub Tcl zatrzymuje się z nieobsługiwanym wyjątkiem, te środowiska uruchomieniowe języka dbają o zarejestrowanie niezerowego kodu wyjścia dla procesu. Nawet programy oparte na środowisku Eclipse zwracają 1, jeśli zawiodą podczas uruchamiania. Jednak programy uruchamiane przez standardowy `java.exe` szczęśliwie zwracają zero, bez względu na to, jak nagle się kończą, chyba że program wywoła `System.exit()` z wartością wyjścia. Nawet `AssertionFailedError` lub `UnsatisfiedLinkError` są zgłaszane programowi wywołującemu jako pomyślne zakończenie. Oczywiście nie wszystkie systemy mają kody powrotu programu, ale Unix i Windows były wystarczająco ważne, aby zapewnić `java.lang.Process.exitValue()` dla procesów potomnych; czy nie gwarantują również honorowania konwencji dla procesów nadrzędnych? Czy to wada w projekcie języka, czy tylko w implementacji? Czy istnieje argument, że to dobry pomysł?


title: Czy ta zmodyfikowana licencja BSD jest zgodna z GPL?

text: Pracuję nad projektem open source, który korzysta z kodu źródłowego z projektu FlatAssembler na poniższej licencji, opartej na klauzuli BSD 2 z jedną dodatkową klauzulą dodaną na końcu tekstu. Tak więc pytania są następujące: 1. Co zmienia ta dodatkowa klauzula? 2. Czy używanie tego kodu i licencjonowanie mojego projektu na licencji GNU GPL jest legalne? (Oryginalna 2-klauzula licencji BSD jest zgodna z GPL, ale ta wydaje się nie być.) > flat assembler wersja 1.71 Copyright (c) 1999-2012, Tomasz Grysztar. Wszystkie > prawa zastrzeżone. > > Ten program jest bezpłatny do użytku komercyjnego i niekomercyjnego, o ile spełnione są > poniższe warunki. >> Prawa autorskie pozostają Tomaszem Grysztarem i jako takie nie wolno usuwać żadnych informacji o prawach autorskich w > kodzie. > > Redystrybucja i wykorzystanie w formie źródłowej i binarnej, z > modyfikacją lub bez, jest dozwolone pod warunkiem spełnienia następujących warunków: > > 1. Redystrybucja kodu źródłowego musi zawierać powyższą informację o prawach autorskich, > tę listę warunków i następujące zastrzeżenie. > 2. Redystrybucje w formie binarnej muszą zawierać w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją powyższą informację o prawach autorskich, > tę listę warunków i następujące wyłączenie odpowiedzialności. > > > NINIEJSZE OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ POSIADACZY PRAW AUTORSKICH I WSPÓŁCZYNNIKÓW „TAK JAK JEST” > ORAZ WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU. W ŻADNYM WYPADKU REGENTI ANI WSPÓŁPRACOWNICY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SZCZEGÓLNE, PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM MIĘDZY INNYMI ZAKUP TOWARÓW ZASTĘPCZYCH LUB USŁUG; UTRATY UŻYTKOWANIA, DANYCH LUB ZYSKI LUB PRZERWANIE W DZIAŁALNOŚCI), JEDNAK > SPOWODOWANE I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI UMOWNEJ, ŚCISŁEJ > ODPOWIEDZIALNOŚCI LUB CZYNNEJ (W TYM ZANIEDBANIA LUB INNEGO) WYNIKAJĄCE W JAKIKOLWIEK SPOSÓB > Z KORZYSTANIA Z TEGO OPROGRAMOWANIA, NAWET MOŻLIWOŚĆ TAKICH > USZKODZEŃ. > > Warunki licencji i dystrybucji jakiejkolwiek publicznie dostępnej wersji lub > pochodnej tego kodu nie mogą być zmieniane. tj. tego kodu nie można po prostu > skopiować i umieścić na innej licencji dystrybucyjnej (w tym GNU Public > Licence).


title: Jak opisać problemy z wolnym połączeniem?

text: Pracowałem nad stroną internetową zawierającą mapy 3d, wirtualne wycieczki 3d itp. Cała zawartość jest duża, podobnie jak obrazy i wideo. Problem polega na tym, że witryna działa dobrze przy normalnych połączeniach, ale ładowanie zajmuje więcej czasu, jeśli sieć jest zajęta lub połączenie internetowe jest wolne. Jak mogę to opisać klientowi? Tak, optymalizujemy treści tam, gdzie to możliwe.


title: Pomóż uprościć/modelować złożone procesy decyzyjne (jeśli, to inaczej, scenariusze)

text: Znajduję się w sytuacji, w której muszę zaprogramować usługę, która potrafi określić, czy dwa obiekty w ogromnej bazie danych są takie same. Dla uproszczenia załóżmy, że to używane samochody i chcę ustalić, czy są dokładnie takie same, na podstawie różnych atrybutów, np. marka, nazwa modelu, rok produkcji, przebieg, cena, kolor itp. Problem w tym, że niektóre atrybuty są z drugiej strony bardziej znaczące/krytyczne/ważne niż inne, np. nazwa marki/modelu MUSI być taka sama, podczas gdy sprzedawca mógł błędnie wpisać przebieg nieco inaczej. Dodatkowo czasami informacje takie jak kolor mogły zostać pominięte, dlatego muszę wrócić do mniej „unikalnych informacji identyfikujących”, takich jak na przykład rozmiar silnika. Oprócz bezpośredniej wagi/ważności każdego atrybutu, istnieje inny wymiar złożoności – ważność atrybutów różni się między sobą. Powiedzmy więc np. że samochód, który porównuję z resztą, jest bardzo stary, a potem nagle wzrasta znaczenie jego przebiegu, ponieważ jest bardziej prawdopodobne, że będzie wyjątkowy wśród podobnych samochodów niż w porównaniu z młodszym samochodem. Wynika to oczywiście z faktu, że rozrzut przebiegu na starszych autach jest znacznie szerszy niż na autach młodszych. Jak możesz sobie wyobrazić, modelowanie tego jako wielu zagnieżdżonych terminów „jeśli-to” łatwo kończy się kompletnym bałaganem i całkowicie nieczytelnym później, a nawet trudnym do modelowania. Więc moje pytania brzmią: Jak można nazwać ten problem w programowaniu i jak sobie z tym poradzić? Jakie rozwiązania/algorytmy mogą być dobrymi rozwiązaniami? Referencje, linki? Dobra lektura na ten temat?


title: Macierz czy Malloc?

text: Używam następującego kodu w mojej aplikacji i działa dobrze. Ale zastanawiam się, czy lepiej zrobić to z mallocem, czy zostawić tak, jak jest? function (int len) { char wynik [len] = kilka znaków; wyślij wynik przez sieć }


title: Czy skrypty niezgodne z GPL mogą być połączone w czasie wykonywania z biblioteką GPLv3, przez samą bibliotekę (GPL)?

text: Przede wszystkim wybacz tytuł, bo nie jest zbyt jasny. Mam aplikację, którą piszę, która jest na licencji GPLv3 i jest w Javie, co oznacza, że pliki klas są generowane i połączone do ogólnego działania. Używam również silnika skryptów, który w celu zapewnienia wydajności łączy wszystkie uruchamiane skrypty z bibliotekami skryptów mojego programu (które są plikami klas) w czasie wykonywania. Biorąc pod uwagę, że skrypt musi być połączony w czasie wykonywania, czy w aplikacji można uruchomić skrypt niezgodny z GPLv3? Czy mogę legalnie wymusić interpretację skryptu? Żeby wyjaśnić, próbuję zaangażować GPLv3 w ograniczanie licencji niekompatybilnych z GPL do skryptów. Pytanie brzmi, czy techniczna operacja łączenia funkcjonalnie równoważna (poza wydajnością) z parsowaniem jest faktycznie łączeniem w sensie prawnym. Wyjaśnienie: Skrypty będą przesyłane do oddziałujących instancji aplikacji. Skrypty są ładowane z tekstowej reprezentacji w ECMAScript/JavaScript, tokenizowane i analizowane pod kątem składni, a następnie łączone. To mnie dezorientuje. Biorąc pod uwagę przekaz, czy skrypt jest kompilowany i linkowany? Lub zinterpretowane, a parser faktycznie łączy się ze sobą w czasie wykonywania?


title: Zaprojektuj program i metody jego realizacji

text: Pracuję nad zostaniem programistą samoukiem. Przeczytałem trochę wiele języków i postanowiłem zacząć od Javy i używam jej od kilku miesięcy. Nie miałem większego problemu, ponieważ większość moich programów jest stosunkowo prosta lub gry, które nie wymagają dużo planowania. Tak było do czasu mojego ostatniego projektu, w którym rzuciłem sobie wyzwanie, tworząc aplikacje do czatu klient/serwer z graficznym interfejsem użytkownika. Mając w głowie tylko pomysł na to, jak działają gniazda i moją nowo poznaną składnię, zacząłem od tego. Zanim się zorientowałem, skończyło się na pomieszanym bałaganie programu, z którym BARDZO trudno mi się pracowało i ostatecznie byłem po prostu tak niedorzeczny, że nie mogłem uruchomić prostych rzeczy i musiałem wszystko usunąć, a teraz zaczynam koniec. Uznałem więc, że potrzebuję lepszych praktyk. A teraz pytania. Jako samouk mam kilka złych nawyków i praktycznie nie planuję przed napisaniem programu poza pomysłem w mojej głowie, więc: 1. **Jakie są dobre sposoby, w jakie mogę zacząć rozwijać lepsze nawyki programistyczne?** 2. **Czy są jakieś dobre sposoby na planowanie programu?** 3. **Oprócz doświadczenia, czego jeszcze mogę potrzebować, zanim spróbuję naprawdę -światowy projekt jako programista? Jak jeden do pracy.** _(Ile języków powinienem znać, z jakimi problemami powinienem sobie poradzić, tego typu rzeczy. )_


title: Główne powody używania REST/OData zamiast niestandardowej konwencji

text: Jak myślisz, jakie byłyby główne powody tworzenia interfejsów API z REST lub OData zamiast dostosowywania wszystkiego do własnych potrzeb (na przykład tylko przy użyciu żądań GET, nawet do ustawiania zmiennych). Powody przeciwne również są mile widziane. Jako trochę tła, będzie on używany do żądania wysyłanego raz na kilka minut jako główny aktualizator serwera dla gry (jak również przez klientów do zapytań).


title: Oprogramowanie do mapowania

text: Ok, może to zabrzmieć kiepsko, ale w rzeczywistości jest to trudne pytanie (przynajmniej dla mnie)... Obecnie istnieje wiele programów do mapowania, takich jak Mapy Google, mapy Apple i inne, których istnienie jest poza moją wiedzą. Ale moje pytanie brzmi, jak one działają? Czy używają GPS, aby uzyskać obrazy, czy coś? Nawet jeśli tak, to w jaki sposób dają trójwymiarowy widok miejsc? Nie sądzę, aby GPS mógł tak powiększyć... Nawet jeśli używają GPS, w jaki sposób uzyskują dostęp do satelitów GPS? Wiem, że to rozległe pytanie, ale każda pomoc byłaby mile widziana...


title: Używasz kontroli wersji do zarządzania kopiami zapasowymi witryny?

text: W zeszłym tygodniu zacząłem robić codzienne kopie zapasowe mojej stosunkowo małej (~300mb) witryny. Kopie zapasowe są spakowane, więc zajmuje mniej miejsca, ale szybko się zwiększy, zwłaszcza gdy moja witryna się powiększa. Myślałem o rozpakowaniu najnowszej kopii zapasowej, a od teraz używać mercurial do dodawania/aktualizowania plików z nowszych kopii zapasowych. Czy są w tym jakieś wady? Czy jest na to lepszy sposób?


title: Dlaczego 24 wiersze to powszechna domyślna wysokość terminala?

text: 80x24 znaki wydaje się być bardzo powszechnym domyślnym ustawieniem dla okien terminala. Ta odpowiedź stanowi bardzo dobry historyczny powód, dla którego szerokość wynosi 80 znaków. Ale dlaczego wysokość zwykle wynosi 24 (lub 25) linii?


title: Jak przekonać klienta, że nie ukradniesz jego pomysłu

text: Natknąłem się na wątek zatytułowany Jak powstrzymać programistę przed kradzieżą pomysłu na biznes i nie mogę się powstrzymać od uniesienia brwi. Wydanie mówi o tym, że programista jest w stanie przekazać pomysł drugiemu i czerpać z niego korzyści. Jako programista, jak najlepiej zapewnić klienta, że nie ukradniesz jego pomysłów? Czy istnieją praktyki, prawa lub cokolwiek, co dba o interesy obu stron? edit: link do wątku i nie zrozumiałem wszystkiego, co zostało powiedziane


title: Web Frameworks dbające o trwałość?

text: Zauważyłem, że Play! Framework obejmuje strategię trwałości (jak JPA itp...) Dlaczego framework sieciowy miałby dbać o trwałość?! Rzeczywiście, byłoby to zadanie komponentów po stronie serwera (takich jak EJB itp.), prawda? W przeciwnym razie klient byłby zbyt powiązany z logiką biznesową serwera. **AKTUALIZACJA: Jedna odpowiedź brzmi: jest bardziej prawdopodobne, że jest używana do prostej aplikacji zawierającej całą logikę biznesową. Jednak w przypadku dużych aplikacji z dobrze zaprojektowanymi warstwami (usługi, domeny, DAO itp.) trwałość nie jest zalecana w warstwie klienta internetowego, ponieważ istnieje kilka różnych klientów internetowych (lub nie).**


title: Niskie sprzężenie przetwarzania dużych ilości danych

text: Zwykle osiągam niskie sprzężenie tworząc klasy, które wymieniają między sobą listy, zestawy i mapy. Teraz tworzę aplikację wsadową Java i nie mogę umieścić wszystkich danych w strukturze danych, ponieważ nie ma wystarczającej ilości pamięci. Muszę przeczytać i przetworzyć jedną porcję danych, a następnie przejść do następnej. Tak więc posiadanie niskiego sprzężenia jest znacznie trudniejsze, ponieważ muszę gdzieś sprawdzić, czy są jeszcze dane do odczytania itp. Teraz używam: Source -> Process -> Persist Klasy, które przetwarzają, muszą pytać klasy Source, czy jest więcej wierszy do przeczytania. Jakie są najlepsze praktyki i przydatne wzorce w takich sytuacjach? Mam nadzieję, że się wytłumaczę, jeśli nie powiedz mi.


title: Parametr metody grupowej czy parametr indywidualny?

text: Chciałbym zapytać o rozważenie projektowania parametrów metody. Zwykle decyduję, czy używać poszczególnych zmiennych jako parametrów, a grupować je w klasę lub słownik jako jeden parametr. Czy istnieje taka zasada, kiedy należy używać pojedynczego parametru przeciwko używaniu klasy lub słownika do grupowania parametru? Indywidualny parametr \- Prosty, silnie typizowany Parametr słownika \- Bardzo rozszerzalny, jak żądanie HTTP, ale nie może być jednoznacznie określony. Parametr klasy \- Rozszerzalny przez dodanie elementu członkowskiego do parametru klasy, silnie wpisany. Szukam odniesienia do projektu, kiedy użyć którego? Uwaga: Nie jestem pewien, czy to pytanie dotyczy programistów, ale zdecydowanie uważam, że zostałoby zamknięte w stackoverflow. Jeśli nadal nie jest prawidłowe, wskaż mi odpowiednią stronę.


title: Czy upubliczniłbyś kod źródłowy swojej witryny?

text: _Historia wsteczna:_ Mój najlepszy przyjaciel jest programistą samoukiem dla społecznościowej witryny artystycznej, napisanym w PHP. Jakiś czas temu wspomniał, że chce upublicznić kod źródłowy strony, na co moja odpowiedź była totalnym przerażeniem - na pewno będzie pełna dziur w zabezpieczeniach czekających na znalezienie, co doprowadzi do włamań i błędów na ogromną skalę. Nigdy tego nie zrobił. _Aktualna historia:_ Rozpoczynam prace nad stroną społecznościową zbudowaną w Railsach i dla ułatwienia obsługi zamierzałem użyć Github do kontroli wersji. Potem zdałem sobie sprawę, że było to dokładnie to samo, co mój przyjaciel upubliczniający swój kod źródłowy – co sprawiło, że zatrzymałem się i zacząłem myśleć. **Czy chcesz upublicznić całkowicie niestandardowy kod źródłowy swojej witryny? A może jest to przypadek open source, który posunął się za daleko?** (uwaga: nie sądzę, aby dotyczyło to osób, które prowadzą takie rzeczy jak Wordpress. A może?)


title: jak czytać na liście wartości przechowywać ją w kolejce i zmieniać kolejność wejść?

text: Jak czytać na liście wartości przechowywać ją w kolejce i zmieniać kolejność wejść? Na przykład czytaj w `abc123efgh45678` i wyświetlaj `a1b2c3d4e5f6g7h8` Wiem, że mogę użyć kolejki do odczytania wartości. Ale jak przypisać „a”, aby przejść obok „1”, np. „a1”? kolejka <znak> q ; for (int j=0; j < input.size(); j++) { q.push (input[j]); }


title: Wiele kluczy SSH dla różnych organizacji

text: Widzę, że GitHub umożliwia posiadanie wielu kont pocztowych i kojarzenie każdej _organizacji_, do której należysz, z innym adresem. Czy można to zrobić również dla kluczy SSH? To, co chciałbym zrobić, to mieć dwa różne klucze, jeden do wypchnięcia na moje prywatne repozytorium, drugi do wypchnięcia na repozytorium _organizacji_.


title: Clojure: Dodawanie funkcji do defrecord bez definiowania protokołu

text: Rekord może implementować protokoły. Jednak za każdym razem, gdy myślę o nowej funkcji, którą chciałbym zaimplementować w rekordzie, muszę ją dodać do istniejącego protokołu lub utworzyć nowy protokół. Jak to obejść? Idealnie chciałbym po prostu skojarzyć funkcję z rekordem bez konieczności definiowania protokołu.


title: Lokalizacja komponentów rozwiązania — centralizacja a wiele wystąpień a biblioteki

text: Obecnie jesteśmy na wczesnym etapie budowania solidnego systemu, którego celem jest wykonanie wielu z istniejących systemów w sposób elastyczny, rozszerzalny i konserwowalny. Będzie obsługiwać wiele kompletnych instancji dla różnych klientów. Jedną z rzeczy, które pojawiają się w całym systemie, jest: **Gdzie powinien usiąść [komponent x]?** Moglibyśmy: * **(A)** całkowicie scentralizować go w pojedynczą osobną usługę internetową, współdzieloną przez wszystkich instancje; konfiguracja będzie utrzymywana centralnie, aby każda instancja mogła dać to, czego potrzebuje, i może zawierać wtyczki specyficzne dla instancji * **(B)** mieć to jako oddzielną usługę, ale instalować ją wielokrotnie, konfigurowaną indywidualnie dla każdej głównej instancji rozwiązania; usługa może być wykorzystywana przez kilka współpracujących komponentów w ramach jednej instancji * **(C)** tworzy funkcjonalność jako bibliotekę i włącza ją bezpośrednio do innych komponentów Dla każdego z nich są jasne wady i zalety: **A* * jest zasobooszczędny i łatwo pozwala m.in. monitorowanie aktywności w całym rozwiązaniu. Wystarczająco konfigurowalna/elastyczna pojedyncza usługa stworzy dodatkowe wyzwania rozwojowe. Uaktualnienia kodu mogą mieć wpływ na całe rozwiązanie, zarówno pod względem przestojów, jak i planowania testowania/wdrażania, niezależnie od tego, czy zmiana kodu ma na celu ulepszenie każdego wystąpienia. **B** zużywa więcej zasobów, ale lokalizuje konfigurację, która może być mniej skomplikowana. Zmiany w kodzie można wdrażać w łatwiejszy sposób, ale w więcej niż jednym miejscu wymagany będzie większy wysiłek. **C** całkowicie eliminuje potrzebę oddzielnej usługi i oferuje maksymalną elastyczność, jeśli wywoływanie kodu nie musi być ograniczone do wykonywania wszystkich funkcji za pośrednictwem interfejsu API usługi sieciowej; uaktualnienia kodu wymagałyby ponownego wdrożenia bibliotek DLL wszędzie tam, gdzie były używane, co może znajdować się w każdym komponencie instancji, a nie tylko raz na instancję, jak w B. Konkretnie myślę o tym z funkcji PoV, nie martwiąc się np. gdzie dane są faktycznie przechowywane. Zignorowałem opcję D, "skopiuj i wklej kod wszędzie, lub ponownie zaimplementuj, chcąc nie chcąc". Zastanawiam się, jak odnosi się to do całej gamy komponentów, od konkretnych funkcji biznesowych, do szerszych rzeczy, takich jak logowanie, obsługa błędów, dostęp do danych itp. Zdaję sobie sprawę, że ostateczna odpowiedź zawsze będzie mocno zależeć od każdego przykładu, ale czy istnieją względy, o których nie wspomniałem, które mogą mieć duży wpływ? Czy są przykłady, w których jest to absolutnie oczywiste? Czy istnieje jakiś systematyczny sposób, aby pomóc w podjęciu tej decyzji? Czy całkowicie przegapiłem całą opcję? EDYCJA (trochę więcej szczegółów na wypadek, gdyby miało to znaczenie): Historycznie, z powodu braku przezorności, zaspokoiliśmy potrzeby kilku podobnych, ale także znacznie różnych klientów, zasadniczo rozwidlając całą bazę kodu z wyjątkiem garstki trywialnych biblioteki. Zdecydowanie jesteśmy zaangażowani w jakiś rodzaj podejścia SOA z przepisaniem i na pewno znacznie bardziej współdzieloną bazę kodu, ale nadal mogą istnieć pewne korzyści lub wymagania dotyczące utrzymania pewnego oddzielenia od każdej „instancji”, przez co rozumiem cały zbiór usług zapewnienie wszystkiego, co jest potrzebne jednemu klientowi: klient może wymagać własnej logicznie lub fizycznie lub nawet geograficznie oddzielnej instalacji; jedna instancja klienta może składać się z modułów A i B, inna B i C oraz D i E. Instynktownie czuję, że istnieją dwa sposoby, aby być tutaj „SOA”: jeden, aby mieć dosłownie jedno ze wszystkiego i pozwolić im działać razem na różne sposoby dla różnych klientów lub alternatywnie, aby mieć jeden z każdego z potrzebnych modułów u klienta, ale luźno powiązany charakter usług nadal pozwalałby na łatwe dodanie jeszcze jednego modułu do istniejącego klienta lub przeniesienie zasobu - intensywny moduł na własny sprzęt tylko dla jednego klienta. Nie zrozum mnie źle, doceniam wszystkie przedstawione uwagi, ale myślę, że nie jestem w mentalnym miejscu, w którym sam fakt robienia czegoś w określony sposób, który z pewnością może przynieść pewne korzyści w niektórych sytuacjach, _może_ również prowadzić na problemy, jeśli jest źle zarządzany, jest całkowicie nie do przyjęcia. Więc najlepiej jest po prostu nie dopuścić do takiej możliwości, nawet jeśli prowadzi to do większej złożoności/wysiłku/itd. Trochę jak nie wpuszczanie alkoholu do domu, bo wiesz, że jeśli tam jest, to sam możesz go wypić i wybiec na ulicę w majtkach, nawet jeśli drink na odpoczynek po pracy może być miły. Powinnam chyba przestać waflować...


title: A jeśli globaly mają sens?

text: Mam wartość, której potrzebuje wiele obiektów. Na przykład aplikacja finansowa z różnymi inwestycjami jako obiektami, a większość z nich wymaga aktualnego oprocentowania. Miałem nadzieję, że moje „środowisko finansowe” zamknę jako przedmiot, a stopa procentowa jako własność. Ale obiekty rodzeństwa, które potrzebują tej wartości, nie mogą się do niej dostać. Jak więc dzielić wartości między wieloma obiektami bez nadmiernego sprzęgania mojego projektu? Oczywiście źle o tym myślę.


title: podsystem logiczny i podsystem fizyczny

text: Zrobiłem wyszukiwanie w Google na obu z nich, nie mogę znaleźć zbyt wielu informacji. Zastanawiałem się, co to jest podsystem logiczny i podsystem fizyczny (w systemie obiektowym)? Dlaczego miałoby być przydatne trzymanie tych dwóch rozdzielonych?


title: Czy potrzebne są oddzielne obiekty biznesowe, gdy trwałe dane mogą być przechowywane w użytecznym formacie?

text: Mam system, w którym dane są przechowywane w magazynie trwałym i odczytywane przez aplikację serwerową. Niektóre z tych danych są zawsze widoczne tylko dla serwera, ale niektóre z nich są przekazywane klientom w postaci niezmienionej. Istnieje więc duża pokusa utrwalania danych – czy to całych wierszy/dokumentów, czy pojedynczych pól/dokumentów podrzędnych – w dokładnie takiej formie, jaką klient może użyć (np. JSON), ponieważ usuwa to różne warstwy schematu, czy to w formie proceduralnego SQL, ORM lub dowolnej struktury proxy, która istnieje tylko po to, aby przechowywać wartości przed koniecznością ponownego zakodowania ich w formie odpowiedniej dla klienta. Ta forma może być zwykle używana również na serwerze, chociaż logika biznesowa może istnieć poza obiektem. Z drugiej strony takie podejście kończy się wyciekiem szczegółów implementacji wszędzie. 9 razy na 10 Cieszę się, że po prostu czytam strukturę JSON z bazy danych i wysyłam ją do klienta, ale 1 na 10 razy muszę znać szczegóły tej niejawnej struktury (i być w stanie zrefaktoryzować dostęp do jeśli przechowywane dane kiedykolwiek ulegną zmianie). I to sprawia, że myślę, że może powinienem przeciągnąć te dane do oddzielnych obiektów biznesowych, aby logika biznesowa nie musiała się zmieniać, gdy zmienia się schemat danych. (Chociaż można argumentować, że to po prostu przesuwa problem, a nie go rozwiązuje). Jest to czynnik komplikujący, ponieważ nasz schemat danych stale się zmienia, do tego stopnia, że porzuciliśmy nasz poprzedni system ORM/RDBMS na rzecz MongoDB i niejawnego schemat, który był znacznie łatwiejszy w obsłudze. Do tej pory nie zdecydowałem, czy szybkie zmiany schematu powodują, że życzę sobie oddzielnych obiektów biznesowych (aby obliczenia po stronie serwera wymagały mniejszej refaktoryzacji, ponieważ wszystkie zmiany są ograniczone do warstwy trwałości), czy też nie ma osobnych obiektów biznesowych (ponieważ każda zmiana do schematu wymaga zmiany obiektów biznesowych w celu zachowania synchronizacji, nawet jeśli nowy podobiekt lub pole nigdy nie są używane na serwerze, z wyjątkiem przekazywania dosłownych informacji do klienta). Więc moje pytanie brzmi, czy sensowne jest przechowywanie obiektów w formie, w jakiej będą zwykle używane, czy też lepiej skopiować je do pośrednich obiektów biznesowych, aby izolować obie strony od siebie (nawet jeśli nie jest to bezwzględnie konieczne) ? I chciałbym usłyszeć od kogokolwiek, kto miał doświadczenie w podobnej sytuacji, być może decydując się na utrwalenie XML lub JSON zamiast posiadania jawnego schematu, który musi być za każdym razem składany w format klienta.


title: Nazywanie klas i identyfikatorów CSS

text: _Jestem całkiem początkującym CSS-em. Przeczytałem kilka książek wprowadzających, ale teraz natknąłem się na pytanie, na które nie ma odpowiedzi w żadnej z nich: _ Powiedzmy, że mam prostą witrynę internetową opartą na HTML z samodzielnym plikiem CSS. Teraz tworzę nową klasę CSS lub ID i chcę oczywiście, aby miała sensowną nazwę, ponieważ prawdopodobnie jeszcze kilka razy wrócę do tych wierszy. Istnieją dwie możliwości stworzenia znaczącej nazwy: 1. Mogę nazwać je `hide-upper-space` lub `small-seethrough-border` \- tego rodzaju nazwy są bardzo pomocne podczas czytania pliku HTML, ale w pliku CSS będzie bałagan wszystkich tych klas i identyfikatorów ze wszystkich dokumentów HTML zmieszanych razem. Co więcej, gdy chcę usunąć lub zmodyfikować jeden dokument HTML, nie będę w stanie wyczyścić lub zmodyfikować odpowiednich wierszy w pliku CSS, ponieważ nie będę wiedział, czy wpływają one również na inne dokumenty HTML. 2. Wręcz przeciwnie, mogę je nazwać `blog-footnote` lub `gallerythumbs-upper-left`, a to sprawi, że mój plik CSS będzie dokładnie czytelny, uporządkowany i łatwy do modyfikacji, ale jest to bezużyteczna informacja w dokumentach HTML - kiedy jesteś po przeczytaniu kodu HTML przypisu do Twojego bloga _blog-footnote_ jest po prostu bezużyteczną nazwą klasy. Mam nadzieję, że rozumiesz mój punkt widzenia. Domyślam się, że jedną z tych opcji jest właściwy sposób używania CSS, ale nie wiem, która z nich i dlaczego. Dziękuję za pomoc w używaniu CSS we właściwy i skuteczny sposób.


title: Czy dyplom ukończenia college'u informatyki kiedykolwiek zaszkodzi mojej zdolności do zatrudnienia?

text: Zbyt często widzę, że jest wielu zdolnych do życia programistów bez dyplomów ukończenia studiów z informatyki, informatyki itp. Teraz, gdy czytam więcej artykułów o słabych wynikach edukacji i nieistotności dyplomów wyższych (zwłaszcza jako programista), stopień uniwersytecki kiedykolwiek zaszkodził mojej zdolności do zatrudnienia? (Również za cztery lata od teraz, kiedy skończę studia) _P.S. jadę do UC Irvine; czy sama szkoła miałaby znaczenie w znaczeniu stopnia?_


title: czy dobrą praktyką jest ponowne ładowanie div co sekundę?

text: Pracuję na stronie sieciowej, gdzie muszę przeładować div powiadomień _co sekundę_. Chciałem wiedzieć, czy ładowanie go co sekundę jest dobre czy złe, ponieważ jest kilka innych divów, które _również_ ładują się co 3-4 sekundy. Czy spowoduje to jakiś problem, taki jak zawieszenie, spowolnienie itp.? Przeładowanie odbywa się przez ajax: var auto_refresh = setInterval( function() { $('#notif').load('notiffinder.php #NOOFFNOTIFFC').fadeIn(); $('#jtoloadnot').load('header .php #jtoloadnot').fadeIn();}, 1000);


title: Dlaczego wartość rynkowa programistów PHP sprawia, że są mniej poszukiwani?

text: Zdecydowałem się zredagować moje pytanie, aby miejmy nadzieję, że miałoby więcej sensu: Jeśli chodzi o same stawki wynagrodzeń, dlaczego bardziej _pożądane_ jest, aby firma zatrudniła programistę WWW Java lub C# niż programistę PHP? Ich pensje są zwykle wyższe niż programistów PHP, biorąc pod uwagę równy poziom stażu pracy, a to również oznacza, że programiści PHP są mniej poszukiwani. To prawda, że jest więcej programistów PHP niż w większości innych języków internetowych, ale nie jest tak, że programiści C# i Java też są rzadkością. Mówiąc bardziej konkretnie, PHP nie jest często reklamowany jako język „korporacyjny” i chcę wiedzieć, dlaczego tak jest. Wiele firm korzysta z niego, ale większość ludzi zwykle nie myśli Fortune 100, gdy mówią o rzeczywistych zastosowaniach PHP, tylko mniejsze start-upy i sklepy internetowe.


title: Rozwój oparty na testach - przekonaj mnie!

text: Wiem, że niektórzy ludzie są ogromnymi zwolennikami programowania opartego na testach. W przeszłości używałem testów jednostkowych, ale tylko do testowania operacji, które można łatwo przetestować lub które, jak sądzę, będą prawdopodobnie poprawne. Całkowite lub prawie pełne pokrycie kodu wydaje się, że zajęłoby to dużo czasu. 1. Do jakich projektów używasz programowania opartego na testach? Czy używasz go tylko do projektów powyżej określonego rozmiaru? 2. Czy powinienem go używać, czy nie? Przekonaj mnie!


title: Refaktoryzacja Bittersweet PHP: Jak mogę sprawić, by to było mniej bolesne?

text: Właśnie przydzielono mi duży projekt. Klient miał wielu programistów z różnych firm pracujących nad swoją (zamierzoną) dużą witryną e-commerce opartą na MySQL. Schemat DB jest ... całkiem dobry, nazewnictwo jest trochę zbędne, ale nic złego. Prawdziwym problemem jest to, że kod rozpaczliwie potrzebuje __„OOP-weryfikacji”_. Niestety, chociaż w rzeczywistości jest to całkiem ładny kod proceduralny, jeśli chodzi o prostotę i czytelność, jak dotąd istnieją około 3 funkcje w ... około 50 plikach. :( Na szczęście obsługują one połączenie z bazą danych, ale nigdzie w witrynie nie ma ani jednej funkcji, klasy ani nawet foreach, która zajmuje się renderowaniem stron. Wszystkie statyczne przy użyciu _niejawnie zdefiniowanych_ zmiennych php i niektórych js. Mnóstwo nadmiarowości i niespójne użycie kodu vs. html.Struktura plików/katalogów jest chyba najgorsza ze wszystkich **:/** Klient bardzo potrzebuje niestandardowego CMS, szczególnie do kontroli zapasów.Dynamiczne generowanie stron jest koniecznością, ale wątpię, czy będą chcieli, abym zaczął od nowa. Pytam więc: czy istnieje punkt ataku, który sprawi, że przekształcenie tego kodu w prostsze zadanie?


title: Jaki jest najlepszy sposób na bezpieczne udostępnianie obok siebie wersji otwartego i zamkniętego źródła?

text: Moja firma chce opracować i wydać projekt oprogramowania open source wraz z zastrzeżoną ulepszoną wersją, podobną do VirtualBox sprzed 4.0. Jaki jest najlepszy sposób na utrzymanie dwóch baz kodu, tak aby zmiany w wersji open source można było łatwo wprowadzić do wersji komercyjnej przy minimalnym ryzyku przypadkowego wypchnięcia zastrzeżonego kodu do produktu open source?


title: Jeśli wartość null jest zła, dlaczego implementują ją współczesne języki?

text: Jestem pewien, że projektanci języków takich jak Java czy C# znali problemy związane z istnieniem odwołań zerowych (zobacz Czy referencje zerowe są naprawdę złe?). Również implementacja typu opcji nie jest o wiele bardziej skomplikowana niż odwołania do wartości NULL. Dlaczego mimo to zdecydowali się to uwzględnić? Jestem pewien, że brak pustych referencji zachęciłby (a nawet wymusił) lepszą jakość kodu (szczególnie lepszy projekt biblioteki) zarówno od twórców języka, jak i użytkowników. Czy to po prostu z powodu konserwatyzmu - "inne języki to mają, my też musimy to mieć..."?


title: Czy powinienem pobrać jeden duży zestaw danych do filtrowania, czy mniejsze pojedyncze zestawy danych?

text: Mam firmowy intranet, który wykorzystuje podobny zestaw danych na wielu różnych stronach i na wiele różnych metod. Mówiąc ogólnie, czy jest bliższe „najlepszej praktyki” pobieranie dużego zestawu danych i filtrowanie go dla każdej konkretnej strony lub metody, czy też pobieranie wielu mniejszych, konkretnych zestawów danych do wykorzystania? Naprawdę nie mogę przetestować obu podejść, ponieważ chciałbym wybrać podejście projektowe od samego początku i używać go przez cały czas. To jest do przeprojektowania. Dziękuję.


title: Jaki projekt API do przechowywania ogólnych danych w bardziej specyficznym formacie?

text: W projekcie, nad którym pracuję, wysyłamy wiadomości o widżetach przez kolejki wiadomości, serializując je do kolejek jako XML. Schemat XML zawiera znaczniki właściwości, które są wspólne dla wszystkich typów tych komunikatów widgetów, takie jak typ widgetu, nazwa polecenia i miejsce docelowe. Może również zawierać listę par klucz-wartość o dowolnym rozmiarze, aby umożliwić przechowywanie właściwości, które są istotne tylko dla określonego typu wiadomości widżetu. Klasa `WidgetMessage` hermetyzuje te dane, a klasy `WidgetMessageXmlWriter` i `WidgetMessageXmlReader` zapewniają serializację do iz XML. Stworzyłem kilka klas, które hermetyzują określone komunikaty, na przykład `FooPlaySoundMessage` dla widżetu 'Foo' lub `BarSetLightPatternMessage` dla widżetu 'Bar'. Każdy z nich ma metodę instancji `ToWidgetMessage` oraz metodę statyczną `FromWidgetMessage` do konwersji do iz klasy `WidgetMessage`. Każda rodzina wiadomości dziedziczy po klasie abstrakcyjnej dla tego typu widżetu, np. `FooMessage` i `BarMessage`, które z kolei dziedziczy z klasy `WidgetMessageMapping`; to przechowuje wspólne właściwości wiadomości i chronione metody używane przez podklasy do konwersji. **Żadna z tych klas nie dziedziczy po `WidgetMessage`, ponieważ nie chcę, aby dziedziczyły swoją właściwość kolekcji klucz-wartość i powiązane metody**, stąd potrzeba konwersji, a nie prostego rzutowania. Podoba mi się prostota mojego API (np. `FooPlaySoundMessage msg = FooPlaySoundMessage.fromWidgetMessage(widgetMessage)`), ale zastanawia mnie fakt, że muszę używać chronionych metod w klasie bazowej do udostępniania funkcji i statycznych metod jeśli w tym miejscu powinna być zaangażowana osobna klasa lub dwie (podobne do `WidgetMessageXmlWriter` i `WidgetMessageXmlReader`). Z drugiej strony myślałem, że częścią OOP jest grupowanie danych i metod, aby uniknąć „głupich obiektów danych”. Czy więc mam dobry pomysł, dodając metody konwersji do moich obiektów danych, czy też należy wyodrębnić tę funkcjonalność do innej klasy? **Aktualizacja:** Myślę, że we wszystkich powyższych szczegółach mojej obecnej próby projektu nie wyjaśniłem wystarczająco jasno problemu, który próbuję rozwiązać. Podsumowując, mam „ogólną” klasę DTO, która ma pewne silnie wpisane właściwości i kolekcję par klucz-wartość do przechowywania innych danych niestandardowych. Chcę mieć kilka wyspecjalizowanych klas DTO dla każdego zestawu danych niestandardowych, które przechowują wszystkie te same dane, co ogólna DTO, z wyjątkiem par klucz-wartość zastąpionych przez silnie wpisane właściwości. Jaki jest najlepszy projekt do konwersji między tymi dwoma typami DTO?


title: Testy funkcjonalne i testy akceptacyjne prowadzące do nadmiarowego kodu

text: Co wiem, to: * Test funkcjonalny ma na celu przetestowanie pojedynczego komponentu (takiego jak kontroler WebApp) z **punktu widzenia programisty**. => Czy spełniłem wszystkie wymagania, aby działało dobrze? * Test akceptacyjny ma na celu wspólne przetestowanie grupy komponentów i koncentruje się na biznesowym punkcie widzenia. => Czy mój program spełnia wymagania stawiane przez Klienta/Biznes/Klienta? Dziś pracuję nad osobistym projektem i zacząłem podążać za metodami BDD/testowania i w ten sposób stworzyłem Testy akceptacyjne i Testy funkcjonalne. Zauważyłem, że wiele wymagań stawianych testom funkcjonalnym jest dokładnie takich samych, jakich wymagają testy akceptacyjne. Załóżmy, że kontroler aplikacji internetowej ma na celu dodanie produktu do koszyka mojego sklepu internetowego. Jednym z zainteresowanych testów funkcjonalnych byłoby: > _Kiedy przechodzę na stronę productList.html i wywołuję akcję addProductToBasket >, oczekuję, że mój kontroler pobierze odpowiednią ilość i właściwą > nazwę produktu, i oczekuję, że mój widok ją wyświetli._ (bardzo ogólne) Z pewnością Biznes oczekiwałby, że aplikacja będzie zachowywać się w taki sam sposób, jak programista napisał w niektórych testach funkcjonalnych, więc w tym przypadku test akceptacyjny będzie wyglądał następująco: > _Zważywszy, że Bob wchodzi na stronę z listą produktów po kliknięciu na przycisku > „dodajDoKoszyka” przy produkcie „Koszyk Nike nr 2” koszyk powinien wyświetlać > ilość „1” oraz „Koszyk Nike nr 2”_. (specyfikacja na przykładzie) Oba testy są bardzo podobne, prawda? Więc moje pytanie brzmi: czy ryzykujemy tworzenie wielu duplikatów kodu i nadmiarowych testów podczas równoległego tworzenia testów funkcjonalnych i akceptacyjnych? Jaka jest dobra praktyka? Sprawienie, by testy funkcjonalne dotyczyły tylko pewnych czysto technicznych rzeczy, takich jak wyjątkowe/błędne zachowania, niespójne scenariusze zmiennych itp., a testy akceptacyjne zajmą się całą stroną scenariuszy biznesowych? Powiedziałbym nawet: **Czy testy funkcjonalne są naprawdę potrzebne, gdy przywiązujemy ogromną wagę do testów akceptacyjnych?**


title: Czy zdalny zwinny jest zrównoważony?

text: Jest to trochę związane z innym pytaniem, które właśnie zadałem, ale pracuję jako freelancer **solo i zdalnie** dla wykonawcy, który zajmuje się zarządzaniem projektami, co to za wielka kula błota do kodowania, że tak powiem. Dużo myślałem o pracy nad propozycją radzenia sobie z jego projektami w naprawdę zwinny sposób. Jak widzę, wymagałoby to kilku przyjaznych dla klienta i opartych na sieci aplikacji: * basecamp do komunikacji * github jako repozytorium * kluczowy tracker dla historii użytkowników i wyświetlania prac w toku * narzędzie do zbierania testów akceptacyjnych ( zagłosuje za sugestiami !) Sporo poczytałem na temat zwinności i wszystkie dobre zasoby kładą duży nacisk na znaczenie komunikacji w zespole, do tego stopnia, że _zniechęcają do zwinności dla zespołów, które nie znajdują się w kolokacji_. Będąc jedynym programistą wydawało mi się to mniejszym problemem, ale ponieważ rzadko spotykam się z klientem (jeśli w ogóle), **Obawiam się, że komunikacja może nie być wystarczająco skuteczna, aby umożliwić takie zarządzanie**. Edycja : Inne osoby w zespole obejmowałyby: \- klientów (osoby biznesowe) \- menedżer produktu (klient mojego klienta) \- kierownik projektu (mój klient) \- projektant interfejsu użytkownika


title: Używanie podklas dla DataContracts używanych z JSON

text: Mam wywołanie RESTful, które może modyfikować stan wystąpienia. Mój problem polega na tym, że JSON różni się w zależności od typu akcji wykonywanej przez użytkownika, może to być akcja `SetProperty` lub akcja `SetState` (między innymi). Na przykład, `POST /api/sample/` _wysłałby następujący JSON { instanceId: 12312, actionId: 12345, // Mapuje do akcji SetState requiredState: 'CURATION' } Ale podczas wywoływania tego samego adresu URL dla _SetProperty_ , JSON wyglądałby tak: { instanceId: 12312, actionId: 25354, // Maps to action SetProperty propName: "PropA", propValue: "user-input" } Używam następującego kontraktu danych [DataContract] class PostInstanceRequest { [DataMember] int identyfikator instancji; [DataMember] int id akcji; [DataMember] ciąg znaków requiredState; // Używany tylko dla SetState [DataMember] string propName; // Używane tylko dla SetProperty [DataMember] string propValue; // Używane tylko dla SetProperty // Dużo więcej właściwości specyficznych dla akcji... } Nie podoba mi się to, ponieważ wydaje mi się, że powinienem mieć klasę bazową dla wspólnych właściwości, a następnie powinienem zdefiniować więcej klas bazowych za pomocą specyficzne właściwości. * `SetStatePostInstanceRequest`, który dodaje `desiredState` * `SetPropertyPostInstanceRequest`, który dodaje `propName` i `propValue` Jednak jeśli to zrobię, nie wiem do jakiej klasy zdeserializować. Musiałbym najpierw zdeserializować jako `PostInstanceRequest`, sprawdzić właściwość `actionId`, a następnie zdeserializować ją do właściwej podklasy. Możliwym kompromisem jest użycie kompozycji [DataContract] class SetStateAction { [DataMember] string requiredState; } [Kontrakt Danych] class SetPropAction { [DataMember] string nazwaWłaściwości; [DataMember] string propValue; } [DataContract] class PostInstanceRequest { [DataMember] int instanceId; [DataMember] int id akcji; [DataMember] SetPropAction setPropParams; [DataMember] SetStateAction setActionParams; // Więcej odniesień do klas specyficznych dla akcji tutaj } Która z opcji sprawi mi mniej kłopotów? A może jest jeszcze lepszy sposób, o którym nie pomyślałem?


title: Czy Twoja wiedza programistyczna spada, jeśli nie ćwiczysz?

text: Jestem początkującym programistą. Studiuję języki takie jak C, C++, Python i Java (głównie skupiając się na C++). Jestem „młodą i niedoświadczoną” i przyznaję, bo nie mogę twierdzić, że jest inaczej. Jako student mam wiele innych problemów poza programowaniem. Ćwiczę programowanie tak często, jak tylko mogę, a zwłaszcza dlatego, że mój nauczyciel daje mi dużo więcej ćwiczeń niż reszta klasy (to bardzo niski poziom), więc często spędzam tygodnie robiąc coś innego, na przykład szkolne projekty lub sport, lub podróże, wszystko poza programowaniem. Nie zrozum mnie źle, uwielbiam programować. Uwielbiam tworzyć kod funkcjonalny, patrzeć, jak program ożywa po naciśnięciu przycisku i uczyć się jak najwięcej. Chodzi o to, że po prostu nie mam na to zbyt wiele czasu. Prosto do pytania, teraz: czy twoja wiedza programistyczna maleje wraz z upływem czasu, a ty nie ćwiczysz? Możesz zapytać "ile czasu masz na myśli?". Nie mam na myśli konkretnej ilości czasu, ale dla odniesienia możesz wziąć jako przykład miesiąc-dwa lub nawet rok. Przez wiedzę rozumiem wszystko, od składni po funkcjonalność języka.


title: Określ typ pliku, a następnie zdekompiluj, aby edytować źródło

text: Jestem nowy w tego typu programowaniu, ale jestem biegły w tworzeniu stron internetowych... chcę trochę poszerzyć swoją paletę. Mam ten plik. W systemie Windows 7 okno właściwości pliku twierdzi, że jest to „plik systemowy”, zakładam, że jest to ogólny opis i nie jest szczególnie przydatny, bez rozszerzenia pliku. Ten plik znajduje się na dysku USB, z którego komputery z systemem Windows mogą się uruchamiać, aby uruchamiać różne skrypty i aplikacje. Jak mogę określić, jaki to jest typ pliku i czy można go zdekompilować, aby wyświetlić jego kod, a nawet jeśli jest to możliwe? Przepraszamy za dwa oddzielne pytania, punkt we właściwym kierunku byłby bardzo pomocny! Dziękuję!


title: Jak zapobiegać piractwu na oprogramowaniu sprzedawanym online?

text: W przypadku sprzedaży oprogramowania przez Internet, jaki jest najbardziej odpowiedni/bezpieczny sposób zapewnienia aktywacji w celu pozbycia się pirackich kopii oprogramowania? Czy jest jakieś znane oprogramowanie do tego celu?


title: Przechowywanie danych do użytku w aplikacjach na Androida i Windows

text: Opublikowałem to zeszłej nocy na StackOverflow i poradzono mi, aby przenieść go do StackExchange, dziękuję za poświęcenie chwili na przyjrzenie się mojemu pytaniu. Opracowuję propozycję projektu dla mojego ostatniego roku na uniwersytecie, a ponieważ zamierzam używać języków programowania, których obecnie nie znam, szukam wskazówek - nie mogę podać szczegółów mojego projektu, ale mam nadzieję, że to zrobisz zrozumieć, po co mi. Zamierzam stworzyć aplikację na Androida (w Javie) i aplikację Windows (w C#), które będą idealnie uzyskiwać dostęp, wysyłać zapytania i aktualizować zdalnie hostowaną bazę danych lub zestaw plików XML (najprawdopodobniej będzie to przez Internet). Rozglądałem się trochę po Internecie i SQLite wydaje się być bezpiecznym zakładem do manipulacji bazą danych między platformami; jednak chciałbym, aby system był jak najlżejszy i zastanawiam się, czy pliki XML mogą stanowić lepszą alternatywę? Ktoś, kto ma doświadczenie w korzystaniu z SQLite i/lub zdalnie hostowanego XML-a do celów rozwoju Androida i/lub C#, które może wskazać mi właściwy kierunek? Jeśli istnieje alternatywne rozwiązanie inne niż te, o których wspomniałem, również chciałbym o nich usłyszeć. Dziękuję za poświęcenie czasu na przeczytanie mojego pytania. Edycja: Celem tej aplikacji jest dla małej firmy, źródło danych nie musi być aktualizowane przez więcej niż jedno źródło, ale może być przeglądane z wielu źródeł (tj. za pośrednictwem wielu telefonów i komputera stacjonarnego). Baza danych nie aktualizowałaby masy danych na raz (najprawdopodobniej pojedyncze wiersze co najwyżej kilku tabel).


title: Czy niespójne formatowanie jest oznaką niechlujnego programisty?

text: Rozumiem, że każdy ma swój własny styl programowania i że powinieneś umieć czytać style innych ludzi i akceptować go takim, jakim jest. Czy jednak można by uznać za niechlujnego programistę, gdyby czyjś styl kodowania był niespójny w jakimkolwiek standardzie, przeciwko któremu pracowali? Niektóre przykłady niespójności mogą być następujące: 1. Czasami nazywanie zmiennych prywatnych za pomocą _, a czasami nie 2. Czasami posiadanie różnych wcięć w blokach kodu 3. Niewyrównywanie nawiasów klamrowych w górę, tj. tej samej kolumny, jeśli używasz rozpoczęcia używania nowego stylu linii 4. Odstępy nie zawsze spójne wokół operatorów tj. p=>p+1, p+=1 vs innym razem p=>p+1 lub p=>p+1 itd. Czy jest to w ogóle coś, czym jako programista powinienem się zajmować adresowaniem? A może jest to tak drobna drobiazg, że pod koniec dnia nie powinienem się tym martwić i martwić o to, co widzi końcowy użytkownik i czy kod działa, a nie jak wygląda podczas pracy? Czy to niechlujne programowanie, czy tylko obsesyjne czepianie się wszystkiego? **EDYTUJ** : Po kilku doskonałych komentarzach zdałem sobie sprawę, że mogłem pominąć niektóre informacje w moim pytaniu. To pytanie pojawiło się po przejrzeniu zameldowania kodu innego współpracownika i zauważeniu niektórych z tych rzeczy, a następnie uświadomieniu sobie, że widziałem tego rodzaju niespójności w poprzednich zameldowaniach. Potem zastanowiłem się nad swoim kodem i czy robię te same rzeczy i zauważyłem, że zazwyczaj nie robię tego itp. Nie sugeruję, że jego technika jest albo zła, albo dobra w tym pytaniu, ani czy jego sposób robienia rzeczy jest dobry czy zły . **EDYTUJ** : Aby odpowiedzieć na niektóre pytania, aby uzyskać więcej dobrych informacji zwrotnych. Konkretny przypadek, w którym wystąpił ten przegląd, używał Visual Studio 2010 i programowania w c#, więc nie sądzę, aby edytor powodował jakiekolwiek problemy. W rzeczywistości powinno to tylko pomóc, mam nadzieję. Przepraszam, jeśli pominąłem tę informację i ma to wpływ na bieżące odpowiedzi. Próbowałem być nieco bardziej ogólny w zrozumieniu, czy byłoby to uważane za niechlujne itp. I dodać jeszcze bardziej konkretny przykład fragmentu kodu, który widziałem podczas czytania odprawy: foreach(var block in Blocks) { / / .. inny kod tutaj foreach(var ruch w ruchach) { ruch.Moved.Zero(); } // niesformatowany nawias klamrowy } Taka drobna rzecz, którą wiem, ale wiele drobiazgów się sumuje (???) i musiałem dwukrotnie zerknąć na kod, aby zobaczyć, gdzie wszystko się układa. Należy pamiętać, że ten kod został odpowiednio sformatowany przed tym zameldowaniem. **EDYTUJ** : Po przeczytaniu kilku świetnych odpowiedzi i różnych przemyśleń, podsumowanie, które z tego wziąłem, było takie. 1. Niekoniecznie jest to oznaką niechlujnego programisty, jednak jako programiści mamy obowiązek (w stosunku do siebie i innych programistów) uczynić kod tak czytelnym, jak to możliwe, aby pomóc w dalszym ciągłym rozwoju. Może jednak wskazywać na niedociągnięcia, które można sprawdzić tylko indywidualnie (osoba po osobie). 2. Istnieje wiele powodów, dla których może się to zdarzyć. Powinny być rozpatrywane w kontekście i przepracowane z osobą/osobami zaangażowanymi, jeśli jest to uzasadnione. Naszym obowiązkiem jest pomóc wszystkim programistom stać się lepszymi programistami! 3. W dawnych dobrych czasach, kiedy tworzenie oprogramowania odbywało się przy użyciu starego dobrego notatnika (lub innego prostego narzędzia do edycji tekstu), zdarzało się to znacznie częściej. Jednak teraz mamy pomoc nowoczesnych IDE, więc chociaż niekoniecznie powinniśmy być OTT w tym temacie, nadal prawdopodobnie powinno to być do pewnego stopnia zaadresowane. 4. My jako programiści różnimy się standardami, stylami i podejściem do rozwiązań. Wydaje się jednak, że generalnie wszyscy bierzemy **PRIDE** w naszej pracy i jako cecha jest to coś, co może wyróżnić programistów. Robienie czegoś najlepiej jak potrafimy, zarówno wewnętrznego (kod), jak i zewnętrznego (wynik użytkownika końcowego), prowadzi do tego, że daje nam to duże grube klepnięcie po plecach, którego możemy nie szukać, ale puchnie nasze serce dumą. 5. I na koniec zacytuję CrazyEddiego z jego postu poniżej. _Nie przejmuj się drobiazgami_


title: Jakaś praktyczna alternatywa dla modelu Signals + Slots do programowania GUI?

text: Większość zestawów narzędzi GUI używa obecnie modelu Signals + Slots. To Qt i GTK+, jeśli się nie mylę, pionierem tego. Wiesz, widżety lub obiekty graficzne (czasem nawet te, które nie są wyświetlane) wysyłają **sygnały** do obsługi pętli głównej. Procedura obsługi pętli głównej następnie wywołuje **events** , **callbacks** lub **slots** przypisane do tego widżetu/obiektu graficznego. Istnieją zwykle domyślne (i w większości przypadków "wirtualne") programy obsługi zdarzeń, które są już dostarczane przez zestaw narzędzi do obsługi wszystkich predefiniowanych sygnałów, dlatego w przeciwieństwie do poprzednich projektów, w których programista musiał napisać całą główną pętlę i procedurę obsługi dla każdego i każdą wiadomość sam (pomyśl o WINAPI), programista musi się tylko martwić o sygnały, na których potrzebuje, aby zaimplementować nową funkcjonalność. Teraz ten projekt jest używany w większości nowoczesnych zestawów narzędzi, o ile wiem. Są Qt, GTK+, FLTK itp. Jest Java Swing. C# ma nawet funkcję językową ( wydarzenia i delegatów ), a Windows Forms został opracowany na podstawie tego projektu. W rzeczywistości w ciągu ostatniej dekady ten projekt programowania GUI stał się rodzajem niepisanego standardu. Ponieważ zwiększa produktywność i zapewnia większą abstrakcję. Jednak moje pytanie brzmi: **Czy jest jakiś alternatywny projekt, który jest równoległy lub praktyczny dla nowoczesnego programowania GUI?** Czy projekt Signals + Slots jest jedynym praktycznym w mieście? Czy możliwe jest programowanie GUI z dowolnym _innym_ projektem? Czy są jakieś nowoczesne (najlepiej udane i popularne) zestawy narzędzi GUI oparte na alternatywnym projekcie?


title: Używasz PHP w wersji 5.2 lub 5.3 dla produktów komercyjnych?

text: Prowadzę badania nad tym, jakiej wersji PHP użyć podczas tworzenia komercyjnych skryptów, które będą sprzedawane publicznie. Chociaż dostępne statystyki nie są świetne, PHP 5.3 pokazuje 18,5% współczynnika adopcji. Chciałbym użyć Symfony do tworzenia tych skryptów i wymaga to wersji 5.3.2, która pokazuje jeszcze niższy wskaźnik adaptacji (około 13% z tych 18,5% używa mniej niż 5.3.2). Czy zaryzykowałbym dużo skacząc od razu do PHP 5.3.2+, czy powinienem zignorować statystyki i ruszyć naprzód?


title: Jaki jest termin opisujący ten system do generowania interfejsów użytkownika?

text: Oto pomysł, który już znasz: Zdefiniuj układ interfejsu użytkownika, tworząc drzewo paneli. Węzły liści na drzewie są tym, co kiedyś nazywaliśmy „kontrolkami” -- rzeczami, z którymi użytkownik wchodzi w interakcję, przyciskami opcji, polami list i tak dalej. Węzły wewnętrzne są głównie związane z układem; ten rodzaj panelu układa swoje panele potomne pionowo, ten rodzaj umieszcza swoje panele potomne w siatce, itd. TO JEST WSPÓLNE. Większość systemów generujących interfejs użytkownika, które widziałem w ciągu ostatnich dwudziestu lat, to implementacje tego i te, które nie są z niego zapożyczone. Jakie jest słowo na ten pomysł? EDYCJA: Szukam słowa lub frazy dla _wzoru_, który opisuję. To duży, wysokopoziomowy wzór, który stał się niemal uniwersalny. AWT, formularze HTML z kontrolkami w komórkach tabeli, Swing, XAML, Android i ASP.NET używają go lub pożyczają z niego. Pojawia się tutaj pomysł, na tym samym poziomie, co pojęcia takie jak „system okienny” czy „sieć siatkowa”. Jak to nazywamy? Podejrzewam, że prawdziwa odpowiedź brzmi: „jeszcze nie ma zgody co do nazwy”. Co samo w sobie byłoby naprawdę interesujące.


title: Jakie są bezwzględne, minimalne wymagania, aby zawierać kody azjatyckie w regionie SE dla projektu systemu wbudowanego?

text: Pracuję dla firmy, która rozpoczęła integrację wbudowanych systemów komputerowych z produkowanymi przez nas produktami. Posiadamy dość szeroką gamę produktów i są one dystrybuowane na całym świecie. Dodatkowo zaprojektowaliśmy kilka zintegrowanych kart, które mogą służyć wielu celom w zależności od oprogramowania, które zostało sflashowane do systemu. W ten sposób nie musimy przeprojektowywać naszego sprzętu komputerowego pod kątem naszych różnych produktów — wszystko, co musimy zrobić, to przepisać warstwę oprogramowania układowego, aby spełniała potrzeby konkretnego produktu. Ze względu na te ograniczenia sprzętowe, zmiana naszego sprzętu jest czynnością kongresową, ale pisanie nowego oprogramowania dla sprzętu jest znacznie prostsze (relatywnie rzecz biorąc). Jeden z naszych produktów ma nowe wymaganie, którego nie musieliśmy wcześniej wdrażać, a mianowicie potrzeba tekstu wprowadzanego przez użytkownika. Obecnie byliśmy w stanie przechowywać międzynarodowy tekst w zasobach i tylko niezbędne znaki czcionek są kompilowane do obrazów bitmapowych. Oznacza to, że byliśmy w stanie przechowywać bardzo ideograficzne języki, takie jak tekst chiński i japoński, w minimalnej ilości miejsca, ponieważ używamy tylko bardzo małego procentu całego zestawu języków. Ponieważ ten nowy produkt będzie wymagał od naszych użytkowników możliwości wprowadzania tekstu, będziemy musieli wdrożyć rozbudowany zestaw znaków. Jako przede wszystkim programista PC jestem dość zaznajomiony z ASCII, Unicode, UTF-8 itp., jednak zaimplementowanie pełnego zestawu znaków w którymkolwiek z tych języków nie jest możliwe, ponieważ mamy ograniczoną ilość pamięci FRAM na płycie do przechowywania danych czcionek. Moje kierownictwo ma nadzieję, że istnieje minimalny zestaw znaków, który można wykorzystać w przypadku bardzo ideograficznych języków. Uważam, że istnieje alfabet fonetyczny dla języka japońskiego (hiragana?). Czy istnieją podobne alfabety fonetyczne dla języków chińskiego, koreańskiego, wietnamskiego itd., a jeśli tak, to czy użytkownicy tych języków mogą komunikować się z tak wąskim zestawem znaków? Jestem prawie pewien, że odpowiedź na to pytanie brzmi „absolutnie nie”, ale jest to pytanie, które warto zadać. Kierownictwo postawiło „miękki” wymóg, że możemy mieć ograniczony zestaw znaków składający się z około 8000 znaków obejmujących wszystkie powszechnie używane języki. Jeśli nie jest to możliwe, musimy poszukać jakiejś alternatywnej metody zaspokojenia naszych potrzeb w oparciu o nasze ograniczone zasoby sprzętowe. Jestem pewien, że ten problem musiał zostać wcześniej rozwiązany. Czy ktoś ma doświadczenie w pracy z takimi ograniczeniami, gdy potrzebuje rozbudowanego systemu kodowania czcionek i znaków? Jeśli tak, to jakie bryłki mądrości lub wskazówki możesz zaoferować? Z góry dziękuję, deweloperzy! Jesteśmy na etapie opracowywania wykonalności, więc głównie szukamy listy wszystkich naszych realistycznych opcji.


title: Jak dzielić się wiedzą na temat rozwiązywania problemów w grupie wielozespołowej?

text: Pracuję w grupach wielozespołowych odkąd jestem web developerem i z mojego doświadczenia wynika, że zespół może być samotnym żołnierzem lub kilkoma osobami; ogólnie rzecz biorąc, firma będzie miała wiele zespołów pracujących nad różnymi projektami, a gdy projekt wyjdzie na wolność, każdy zespół może go konserwować. To prosty przykład, ponieważ nie mówię tylko o wiedzy związanej z projektami, ale o wiedzy „rzemieślniczej”, ale powinien dać ci wyobrażenie o tym, jak jestem przyzwyczajony do pracy: Ponieważ pracujemy w zespołach modułowych, czasami czuję jak zespoły są zbyt mocno skoncentrowane na swoich projektach. Widziałem przypadki, w których po godzinie dyskusji pytanie zostało zadane na głos i ktoś z zupełnie niezwiązanego projektu zaproponował znacznie prostsze rozwiązanie. Problem jest trudny do rozwiązania, ponieważ ludzie zwykle nie są dostępni przez cały czas, a czasami osoba posiadająca wiedzę nie może sobie pozwolić na czas na rozwiązanie problemu z pytającym, ale może zrobić to sama z łatwością. Myślałem o rozwiązaniach opartych na oprogramowaniu, coś w stylu SE, ale chciałbym poznać opinie innych programistów na ten temat. **EDYTUJ** Nie wiem, czy jest to problem, który może rozwiązać wiki, ponieważ czuję, że wiki nie zachęcają użytkownika do zadawania pytań, ale raczej do pisania artykułów, a czasami nie wiemy wiedzę, której potrzebujemy, zanim będzie nam potrzebna.


Adopcja Agile może zawieść w niektórych organizacjach, pracowałem nawet dla firmy, w której wodospad był jedynym (prawdziwym) sposobem, ale tylko dlatego, że wypróbowali Agile w projekcie i zawiedli. Kiedy zapytałem ludzi, którzy wciąż to pamiętali (byłem juniorem), zostałem mocno zamknięty, jakbym przypominał im zły koszmar, który naprawdę się wydarzył. Nie wiem, dlaczego projekt się nie powiódł. W sieci można znaleźć źródła, dlaczego Agile zawodzi niektóre firmy, ale przyczyny są głównie ekonomiczne. Pomyślałem więc, że proszę tutaj o informację zwrotną. Jakie są przyczyny niepowodzenia adopcji Agile w niektórych organizacjach? Albo inaczej.. Czego potrzebujesz, aby odnieść sukces w Agile?